【WMS跨区移库接口】构建

This commit is contained in:
tanfengling@x-ri.com 2025-10-18 15:49:52 +08:00
parent b1ff0ea6e8
commit 8ef191d605
1 changed files with 252 additions and 0 deletions

View File

@ -0,0 +1,252 @@
package tqq9.lc123.cloud.app.api.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.drew.lang.annotations.NotNull;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.operate.result.IOperateInfo;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.openapi.common.custom.annotation.ApiController;
import kd.bos.openapi.common.custom.annotation.ApiParam;
import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
import kd.bos.openapi.common.result.CustomApiResult;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import org.apache.commons.lang3.StringUtils;
import tqq9.lc123.cloud.app.api.model.WMSXmlReturn;
import tqq9.lc123.cloud.app.api.utils.ApiResultExt;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ApiController(value = "WMSChangeWhDiffAreaController", desc = "WMS跨区移库通知接口自定义插件")
public class WMSChangeWhDiffAreaController {
@ApiPostMapping(value = "/WMS_ChgWhDiffArea_SH", desc = "WMS跨区移库通知接口_SH")
public CustomApiResult<WMSXmlReturn> WMS_ChgWhDiffArea_SH
(@NotNull @ApiParam(value = "入参", required = true) Map<String, Object> dataMap) {
WMSXmlReturn wmsXmlReturn = new WMSXmlReturn();
WMSXmlReturn.Response response = new WMSXmlReturn.Response();
wmsXmlReturn.setResponse(response);
response.setCode("0");
response.setFlag("success");
response.setMessage("成功");
StringBuilder errormsg = new StringBuilder();
JSONObject data = new JSONObject(dataMap);
JSONObject request = data.getJSONObject("request");
JSONObject items = request.getJSONObject("items");
JSONArray itemArr = items.getJSONArray("item");
if (itemArr != null && itemArr.size() == 2){
JSONObject ckObj = null;
JSONObject rkObj = null;
JSONObject item0 = (JSONObject) itemArr.get(0);
JSONObject item1 = (JSONObject) itemArr.get(1);
String orderType = item0.getString("orderType");//单据类型YDCK=移动出库YDRK= 移动入库必填
if (ApiResultExt.validateRequired(orderType, "String")) {
errormsg = errormsg.append("").append("传入参数 warehouseCode 为空");
}else {
if("YDCK".equals(orderType)){
ckObj = item0;
}else{
rkObj = item1;
}
}
//数据校验
String ownerCode = ckObj.getString("ownerCode");//货主编码-默认 LICHI
String warehouseCode = ckObj.getString("warehouseCode");//仓库编码
DynamicObject warehouse = null;
DynamicObject org = null;
if (ApiResultExt.validateRequired(warehouseCode, "String")) {
errormsg = errormsg.append("").append("传入参数 warehouseCode 为空");
}else{
//查询仓库
QFilter f = new QFilter("number", "=", warehouseCode);
DynamicObject[] bd_warehouseArr = BusinessDataServiceHelper.load("bd_warehouse", "id,number,name", new QFilter[]{f});
if(bd_warehouseArr != null && bd_warehouseArr.length > 0){
warehouse = bd_warehouseArr[0];
//TODO 根据仓库获取对应的组织
}else{
errormsg = errormsg.append("").append("根据传入参数 warehouseCode"+warehouseCode+" 没有查询到仓库信息");
}
}
String orderCode = ckObj.getString("orderCode");//单据编码
if (ApiResultExt.validateRequired(orderCode, "String")) {
errormsg = errormsg.append("").append("传入参数 orderCode 为空");
}
String outBizCode = ckObj.getString("outBizCode");//消息ID去重用
String itemCode = ckObj.getString("itemCode");//物料编码
DynamicObject material = null;
DynamicObject materialinv = null;
if (ApiResultExt.validateRequired(itemCode, "String")) {
errormsg = errormsg.append("").append("传入参数 itemCode 为空");
}else{
//物料
QFilter f = new QFilter("number", "=", itemCode);
DynamicObject[] materialArr = BusinessDataServiceHelper.load("bd_material", "id,number,name,baseunit", new QFilter[]{f});
if(materialArr != null && materialArr.length > 0){
material = materialArr[0];
//物料库存信息
f = new QFilter("masterid.id", "=", material.getPkValue());
DynamicObject[] materialinvArr = BusinessDataServiceHelper.load("bd_materialinventoryinfo", "id,number,name", new QFilter[]{f});
if(materialinvArr != null && materialinvArr.length > 0){
materialinv = materialinvArr[0];
materialinv = BusinessDataServiceHelper.loadSingle(materialinv.getPkValue(), "bd_materialinventoryinfo");
}else{
errormsg = errormsg.append("").append("物料编码:"+ itemCode +" 没有生成对应物料库存信息");
}
}else{
errormsg = errormsg.append("").append("根据传入参数 itemCode"+ itemCode +" 没有查询到对应物料信息");
}
}
String itemId = ckObj.getString("itemId");//仓库系统物料ID
String inventoryType = ckObj.getString("inventoryType");//库存类型ZP=正品, CC=残次
int quantity = ckObj.getInteger("quantity");//数量
if (ApiResultExt.validateRequired(quantity, "String")) {
errormsg = errormsg.append("").append("传入参数 quantity 为空");
}
String transferZone = ckObj.getString("transferZone");//移入移出区域
if (ApiResultExt.validateRequired(transferZone, "String")) {
errormsg = errormsg.append("").append("传入参数 transferZone 为空");
}else{
//TODO 处理区域信息
}
String batchCode = ckObj.getString("batchCode");//批次
DynamicObject lot = null;
if (ApiResultExt.validateRequired(batchCode, "String")) {
errormsg = errormsg.append("").append("传入参数 batchCode 为空");
}else{
//查询批号
QFilter f = new QFilter("number", "=", batchCode);
DynamicObject[] bd_lotArr = BusinessDataServiceHelper.load("bd_lot", "id,name,number", new QFilter[]{f});
if(bd_lotArr != null && bd_lotArr.length > 0){
lot = bd_lotArr[0];
}else{
errormsg = errormsg.append("").append("根据传入参数 batchCode"+ batchCode +" 没有查询到对应批次信息");
}
}
Date productDate = ckObj.getDate("productDate");//生产日期
Date expireDate = ckObj.getDate("expireDate");//过期日期
String produceCode = ckObj.getString("produceCode");//生产批号
String changeTimeStr = ckObj.getString("changeTime");//移出时间
Date changeTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (ApiResultExt.validateRequired(changeTime, "String")) {
errormsg = errormsg.append("").append("传入参数 batchCode 为空");
}else{
try {
changeTime = sdf.parse(changeTimeStr);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
String remark = ckObj.getString("remark");//备注
//入库信息
String ownerCode_1 = rkObj.getString("ownerCode");//货主编码-默认 LICHI
String warehouseCode_1 = rkObj.getString("warehouseCode");//仓库编码
DynamicObject warehouse_1 = null;
DynamicObject org_1 = null;
if (ApiResultExt.validateRequired(warehouseCode_1, "String")) {
errormsg = errormsg.append("").append("传入参数 warehouseCode 为空");
}else{
//查询仓库
QFilter f = new QFilter("number", "=", warehouseCode_1);
DynamicObject[] bd_warehouseArr = BusinessDataServiceHelper.load("bd_warehouse", "id,number,name", new QFilter[]{f});
if(bd_warehouseArr != null && bd_warehouseArr.length > 0){
warehouse_1 = bd_warehouseArr[0];
//TODO 根据仓库获取对应的组织
}else{
errormsg = errormsg.append("").append("根据传入参数 warehouseCode"+warehouseCode_1+" 没有查询到仓库信息");
}
}
String orderCode_1 = rkObj.getString("orderCode");//单据编码
String outBizCode_1 = rkObj.getString("outBizCode");//消息ID去重用
String itemCode_1 = rkObj.getString("itemCode");//物料编码
String itemId_1 = rkObj.getString("itemId");//仓库系统物料ID
String inventoryType_1 = rkObj.getString("inventoryType");//库存类型ZP=正品, CC=残次
int quantity_1 = rkObj.getInteger("quantity");//数量
String transferZone_1 = rkObj.getString("transferZone");//移入移出区域
if (ApiResultExt.validateRequired(transferZone_1, "String")) {
errormsg = errormsg.append("").append("传入参数 transferZone 为空");
}else{
//TODO 处理区域信息
}
String batchCode_1 = rkObj.getString("batchCode");//批次
Date productDate_1 = rkObj.getDate("productDate");//生产日期
Date expireDate_1 = rkObj.getDate("expireDate");//过期日期
String produceCode_1 = rkObj.getString("produceCode");//生产批号
Date changeTime_1 = rkObj.getDate("changeTime");//移出时间
String remark_1 = rkObj.getString("remark");//备注
if (errormsg.length() > 0) {
response.setMessage(errormsg.substring(1));
response.setCode("-1");
response.setFlag("failure");
return CustomApiResult.success(wmsXmlReturn);
}else {
DynamicObject outBill = BusinessDataServiceHelper.newDynamicObject("im_otheroutbill");
//保存
OperationResult operationResult = OperationServiceHelper.executeOperate("save", "im_otheroutbill", new DynamicObject[]{outBill}, OperateOption.create());
if (!operationResult.isSuccess()) {
List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
errormsg = errormsg.append("").append(iOperateInfo.getMessage());
}
response.setMessage(errormsg.substring(1));
response.setCode("-1");
response.setFlag("failure");
return CustomApiResult.success(wmsXmlReturn);
} else {
//提交
operationResult = OperationServiceHelper.executeOperate("submit", "im_otheroutbill", new DynamicObject[]{outBill}, OperateOption.create());
if (!operationResult.isSuccess()) {
List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
errormsg = errormsg.append("").append(iOperateInfo.getMessage());
}
response.setMessage(errormsg.substring(1));
response.setCode("-1");
response.setFlag("failure");
return CustomApiResult.success(wmsXmlReturn);
} else {
//审核
operationResult = OperationServiceHelper.executeOperate("audit", "im_otheroutbill", new DynamicObject[]{outBill}, OperateOption.create());
if (!operationResult.isSuccess()) {
List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
errormsg = errormsg.append("").append(iOperateInfo.getMessage());
}
response.setMessage(errormsg.substring(1));
response.setCode("-1");
response.setFlag("failure");
return CustomApiResult.success(wmsXmlReturn);
}
}
}
response.setCode("0");
response.setFlag("success");
response.setMessage("成功");
return CustomApiResult.success(wmsXmlReturn);
}
}else {
response.setMessage("传入参数items为空或者items数量不对 ");
response.setCode("-1");
response.setFlag("failure");
return CustomApiResult.success(wmsXmlReturn);
}
}
}