diff --git a/lc123/cloud/app/api/controller/WMSChangeWhDiffAreaController.java b/lc123/cloud/app/api/controller/WMSChangeWhDiffAreaController.java new file mode 100644 index 0000000..7fb0d4b --- /dev/null +++ b/lc123/cloud/app/api/controller/WMSChangeWhDiffAreaController.java @@ -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 WMS_ChgWhDiffArea_SH + (@NotNull @ApiParam(value = "入参", required = true) Map 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 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 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 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); + } + } +}