Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 960fed33
由
张少辉
编写于
2026-01-28 14:43:34 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.结构仓合包功能
1 个父辈
c991b116
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
150 行增加
和
2 行删除
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/momo/MomoApi.java
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/momo/bean/request/MergeContainerRequest.java
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/momo/bean/response/MergeContainerResponse.java
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/structuralWarehouse/controller/MaterialUnpackingController.java
src/main/resources/config/application.yml
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/momo/MomoApi.java
查看文件 @
960fed3
...
@@ -10,8 +10,10 @@ import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
...
@@ -10,8 +10,10 @@ import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.GetNewContainerNoRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.GetNewContainerNoRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.MergeContainerRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.SplitContainerRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.SplitContainerRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.GetNewContainerNoResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.GetNewContainerNoResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.MergeContainerResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.SplitContainerResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.SplitContainerResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -36,6 +38,9 @@ public class MomoApi extends BaseSmfApiListener {
...
@@ -36,6 +38,9 @@ public class MomoApi extends BaseSmfApiListener {
@Value
(
"${api.stockReturnUrl}"
)
@Value
(
"${api.stockReturnUrl}"
)
private
String
stockReturnUrl
;
private
String
stockReturnUrl
;
@Value
(
"${api.mergeContainerUrl}"
)
private
String
mergeContainerUrl
;
@Autowired
@Autowired
private
IBarcodeManager
barcodeManager
;
private
IBarcodeManager
barcodeManager
;
...
@@ -203,6 +208,37 @@ public class MomoApi extends BaseSmfApiListener {
...
@@ -203,6 +208,37 @@ public class MomoApi extends BaseSmfApiListener {
}
}
}
}
/**
* 接口12:MOM将合包装信息传给WMS
*
* @param request 合包装请求参数
* @return 合包装响应结果
*/
public
MergeContainerResponse
mergeContainer
(
MergeContainerRequest
request
)
{
// 构建请求参数Map
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"ContainerNo"
,
request
.
getContainerNo
());
paramMap
.
put
(
"MergedContainerNo"
,
request
.
getMergedContainerNo
());
// Creator固定传MOM(若request中已传,可直接取request.getCreator())
paramMap
.
put
(
"Creator"
,
"WMS"
);
log
.
info
(
"接口12:MOM将合包装信息传给WMS,请求参数为:"
+
JSON
.
toJSONString
(
paramMap
));
try
{
String
resultStr
=
HttpHelper
.
postJson
(
mergeContainerUrl
,
paramMap
);
log
.
info
(
"接口12:MOM将合包装信息传给WMS,返回参数为:"
+
resultStr
);
return
JSON
.
parseObject
(
resultStr
,
MergeContainerResponse
.
class
);
/*MergeContainerResponse response = new MergeContainerResponse();
response.setResult("200");
return response;*/
}
catch
(
Exception
e
)
{
// 捕获接口调用异常,返回失败响应
log
.
error
(
"接口12:MOM将合包装信息传给WMS,请求异常:"
,
e
);
MergeContainerResponse
response
=
new
MergeContainerResponse
();
response
.
setResult
(
"403"
);
// 失败结果码
response
.
setMessage
(
e
.
getMessage
());
// 调试信息(可选)
return
response
;
}
}
@Override
@Override
public
boolean
isForThisApi
(
String
apiName
)
{
public
boolean
isForThisApi
(
String
apiName
)
{
...
...
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/momo/bean/request/MergeContainerRequest.java
0 → 100644
查看文件 @
960fed3
package
com
.
neotel
.
smfcore
.
custom
.
aiqingzhiyin1643
.
momo
.
bean
.
request
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
@Data
@AllArgsConstructor
public
class
MergeContainerRequest
{
/**
* 合并后需要保留的包装条码
*/
private
String
ContainerNo
;
/**
* 被合并的条码
*/
private
String
MergedContainerNo
;
/**
* 创建者(固定传MOM)
*/
private
String
Creator
;
}
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/momo/bean/response/MergeContainerResponse.java
0 → 100644
查看文件 @
960fed3
package
com
.
neotel
.
smfcore
.
custom
.
aiqingzhiyin1643
.
momo
.
bean
.
response
;
import
lombok.Data
;
@Data
public
class
MergeContainerResponse
{
private
Object
Data
;
private
String
DebugInfo
;
private
String
ErrorCode
;
private
Boolean
IsSuccess
;
private
String
Message
;
private
String
Result
;
}
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/structuralWarehouse/controller/MaterialUnpackingController.java
查看文件 @
960fed3
...
@@ -20,8 +20,10 @@ import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
...
@@ -20,8 +20,10 @@ import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.MomoApi
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.MomoApi
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.GetNewContainerNoRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.GetNewContainerNoRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.MergeContainerRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.SplitContainerRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.request.SplitContainerRequest
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.GetNewContainerNoResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.GetNewContainerNoResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.MergeContainerResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.SplitContainerResponse
;
import
com.neotel.smfcore.custom.aiqingzhiyin1643.momo.bean.response.SplitContainerResponse
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
...
@@ -32,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestBody;
...
@@ -32,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -208,7 +211,7 @@ public class MaterialUnpackingController {
...
@@ -208,7 +211,7 @@ public class MaterialUnpackingController {
@ApiOperation
(
"5.物料信息放到箱子里"
)
@ApiOperation
(
"5.物料信息放到箱子里"
)
@RequestMapping
(
"/loadMaterialsToBin"
)
@RequestMapping
(
"/loadMaterialsToBin"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
loadMaterialsToBin
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
public
synchronized
ResultBean
loadMaterialsToBin
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
// 1. 记录接口入参,方便定位请求
// 1. 记录接口入参,方便定位请求
String
newBarcode
=
paramMap
.
get
(
"newBarcode"
);
String
newBarcode
=
paramMap
.
get
(
"newBarcode"
);
String
currentBox
=
paramMap
.
get
(
"currentBox"
);
String
currentBox
=
paramMap
.
get
(
"currentBox"
);
...
@@ -346,6 +349,78 @@ public class MaterialUnpackingController {
...
@@ -346,6 +349,78 @@ public class MaterialUnpackingController {
}
}
@ApiOperation
(
"6.合包功能"
)
@RequestMapping
(
"/mergePackages"
)
@AnonymousAccess
public
synchronized
ResultBean
mergePackages
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
code
=
paramMap
.
get
(
"code"
);
String
receiptOrder
=
paramMap
.
get
(
"receiptOrder"
);
String
toMergeCode
=
paramMap
.
get
(
"toMergeCode"
);
// 1. 入参日志(核心参数)
log
.
info
(
"合包操作-入参:receiptOrder={}, code={}, toMergeCode={}"
,
receiptOrder
,
code
,
toMergeCode
);
// 判断是不是有效的条码
Barcode
barcode
=
null
;
try
{
barcode
=
codeResolve
.
resolveOneValideBarcode
(
code
);
log
.
info
(
"合包操作-条码解析成功:code={}"
,
code
);
// 2. 条码解析日志
}
catch
(
ValidateException
e
)
{
log
.
error
(
"合包操作-条码解析失败:code={}, 原因={}"
,
code
,
e
.
getMessage
());
// 异常日志
return
ResultBean
.
newErrorResult
(-
1
,
e
.
getMsgKey
(),
e
.
getMessage
(),
e
.
getMsgParam
());
}
// 判断任务单是否存在
InList
inList
=
inListCache
.
getInList
(
receiptOrder
);
if
(
inList
==
null
)
{
log
.
warn
(
"合包操作-任务单不存在:receiptOrder={}"
,
receiptOrder
);
// 3. 任务单校验日志
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.receiptOrder.notexist"
,
"任务单[{0}]不存在"
,
new
String
[]{
receiptOrder
});
}
// 判断是不是在任务单中
InListItem
inListItem
=
getInListItem
(
inList
.
getInListItems
(),
barcode
.
getBarcode
());
if
(
inListItem
==
null
)
{
log
.
warn
(
"合包操作-条码不在任务单:code={}, receiptOrder={}"
,
barcode
.
getBarcode
(),
receiptOrder
);
// 4. 行项目校验日志
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.barcode.notexist"
,
"条码[{0}]不在任务单[{1}]中"
,
new
String
[]{
barcode
.
getBarcode
(),
receiptOrder
});
}
// 判断是不是有效的条码
Barcode
toMergeBarcode
=
null
;
try
{
toMergeBarcode
=
codeResolve
.
resolveOneValideBarcode
(
toMergeCode
);
log
.
info
(
"合包操作-被合并条码解析成功:toMergeCode={}"
,
toMergeCode
);
// 5. 被合并条码解析日志
}
catch
(
ValidateException
e
)
{
log
.
error
(
"合包操作-被合并条码解析失败:toMergeCode={}, 原因={}"
,
toMergeCode
,
e
.
getMessage
());
// 异常日志
return
ResultBean
.
newErrorResult
(-
1
,
e
.
getMsgKey
(),
e
.
getMessage
(),
e
.
getMsgParam
());
}
// 调用MOM合包接口
MergeContainerResponse
response
=
momoApi
.
mergeContainer
(
new
MergeContainerRequest
(
barcode
.
getBarcode
(),
toMergeBarcode
.
getBarcode
(),
"WMS"
));
if
(!
"200"
.
equals
(
response
.
getResult
()))
{
log
.
error
(
"合包操作-MOM接口调用失败:receiptOrder={}, 响应={}"
,
receiptOrder
,
response
.
getMessage
());
// 6. 接口调用异常日志
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.mergeContainer.error"
,
"合包通知失败[{0}]"
,
new
String
[]{
response
.
getMessage
()});
}
log
.
info
(
"合包操作-MOM接口调用成功:receiptOrder={}"
,
receiptOrder
);
// 6. 接口调用成功日志
// 更新行项目数量
Integer
oldNum
=
inListItem
.
getNum
();
Integer
newNum
=
oldNum
+
toMergeBarcode
.
getAmount
();
inListItem
.
setNum
(
newNum
);
log
.
info
(
"合包操作-数量更新:code={}, 旧值={}, 新值={}"
,
code
,
oldNum
,
newNum
);
// 7. 数量更新日志
// 移除相同ri的行项目
int
removeCount
=
0
;
Iterator
<
InListItem
>
iterator
=
inList
.
getInListItems
().
iterator
();
while
(
iterator
.
hasNext
())
{
InListItem
item
=
iterator
.
next
();
if
(
item
!=
null
&&
barcode
.
getBarcode
().
equals
(
item
.
getRi
()))
{
iterator
.
remove
();
removeCount
++;
}
}
log
.
info
(
"合包操作-移除行项目:receiptOrder={}, 移除数量={}"
,
receiptOrder
,
removeCount
);
// 8. 移除元素日志
// 重新添加行项目并更新列表
inList
.
getInListItems
().
add
(
inListItem
);
inList
.
setInListItems
(
inList
.
getInListItems
());
inList
=
inListManager
.
createWithItems
(
inList
);
inListCache
.
addInListToMap
(
inList
);
log
.
info
(
"合包操作-数据保存完成:receiptOrder={}"
,
receiptOrder
);
// 9. 数据保存日志
return
ResultBean
.
newOkResult
(
""
);
}
private
Barcode
updateBoxBarcode
(
Barcode
boxBarcode
,
Barcode
barcode
){
private
Barcode
updateBoxBarcode
(
Barcode
boxBarcode
,
Barcode
barcode
){
//设置当前料箱的信息
//设置当前料箱的信息
boxBarcode
.
setPidBarcode
(
barcode
.
getBarcode
());
boxBarcode
.
setPidBarcode
(
barcode
.
getBarcode
());
...
...
src/main/resources/config/application.yml
查看文件 @
960fed3
...
@@ -18,11 +18,12 @@ api:
...
@@ -18,11 +18,12 @@ api:
getNewContainerNoUrl
:
http://10.42.49.150/apriso/HttpServices/api/extensions/1/Storage/GetNewContainerNo
getNewContainerNoUrl
:
http://10.42.49.150/apriso/HttpServices/api/extensions/1/Storage/GetNewContainerNo
#接口11:WMS将拆包装信息传给MOM
#接口11:WMS将拆包装信息传给MOM
splitContainerUrl
:
http://10.42.49.150/apriso/HttpServices/api/extensions/1/Storage/SplitContainer
splitContainerUrl
:
http://10.42.49.150/apriso/HttpServices/api/extensions/1/Storage/SplitContainer
#入库单入库
#入库单入库
stockInUrl
:
http://10.42.49.150/Apriso/HttpServices/api/extensions/1/Storage/StockIn
stockInUrl
:
http://10.42.49.150/Apriso/HttpServices/api/extensions/1/Storage/StockIn
#退库上架
#退库上架
stockReturnUrl
:
http://10.42.49.150/Apriso/HttpServices/api/extensions/1/Storage/StockReturn
stockReturnUrl
:
http://10.42.49.150/Apriso/HttpServices/api/extensions/1/Storage/StockReturn
#合并容器
mergeContainerUrl
:
http://10.42.49.150/Apriso/HttpServices/api/extensions/1/Storage/MergeContainer
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论