Commit 960fed33 张少辉

1.结构仓合包功能

1 个父辈 c991b116
...@@ -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) {
......
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;
}
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;
}
...@@ -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());
......
...@@ -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!