327 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			327 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Java
		
	
	
	
| package tqq9.lc123.cloud.app.api.controller;
 | |
| 
 | |
| import com.alibaba.fastjson.JSON;
 | |
| 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.dataentity.entity.DynamicObjectCollection;
 | |
| 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 kd.bos.util.StringUtils;
 | |
| import tqq9.lc123.cloud.app.api.utils.ApiResultExt;
 | |
| import tqq9.lc123.cloud.app.api.utils.Constants;
 | |
| import tqq9.lc123.cloud.app.plugin.utils.BaseDataMatchUtils;
 | |
| 
 | |
| import java.util.ArrayList;
 | |
| import java.util.Date;
 | |
| import java.util.HashMap;
 | |
| import java.util.List;
 | |
| 
 | |
| /**
 | |
|  * WMS形态转换单接口--库存异动
 | |
|  */
 | |
| @ApiController(value = "WMSAdjustBillController", desc = "WMS-形态转换单接口bg")
 | |
| public class WMSAdjustBillController {
 | |
| 
 | |
|     @ApiPostMapping(value = "/WMSAdjustBill", desc = "WMS库存异动api")
 | |
|     public CustomApiResult<ApiResultExt> wmsAdjustBill
 | |
|             (@NotNull @ApiParam(value = "入参", example = "") String data) {
 | |
|         ApiResultExt resultExt = new ApiResultExt();
 | |
|         List<ApiResultExt.ResultBean> results = new ArrayList<>();
 | |
|         ApiResultExt.ResultBean resultBean = new ApiResultExt.ResultBean();
 | |
|         ApiResultExt.Error error = new ApiResultExt.Error();
 | |
|         ArrayList<String> rowMsg = new ArrayList<>();
 | |
|         JSONObject keys = new JSONObject();
 | |
|         boolean billStatus = true;
 | |
| 
 | |
|         JSONObject obj = JSON.parseObject(data);
 | |
|         String cPACode =  obj.getString("cPACode");//调整单号
 | |
|         String cWhCode =  obj.getString("cWhCode");//仓库编码
 | |
|         String BelongTo =  obj.getString("BelongTo");//归属组织
 | |
| 
 | |
|         if(StringUtils.isBlank(cPACode)){
 | |
|             rowMsg.add("入参调整单号字段cPACode为空");
 | |
|             billStatus = false;
 | |
|         }else {
 | |
|             keys.put("cPACode", cPACode);
 | |
|         }
 | |
|         //仓库
 | |
|         DynamicObject warehouse = null;
 | |
|         if(StringUtils.isBlank(cWhCode)){
 | |
|             rowMsg.add("入参仓库编码字段cWhCode为空");
 | |
|             billStatus = false;
 | |
|         }else{
 | |
|             QFilter f = new QFilter("number", "=", cWhCode);
 | |
|             DynamicObject[] whArr = BusinessDataServiceHelper.load("bos_warehouse", "id,name,number", new QFilter[]{f});
 | |
|             if(whArr == null || whArr.length == 0){
 | |
|                 rowMsg.add("根据仓库编码字段cWhCode【"+cWhCode+"】在金蝶系统中没有查询到对应的仓库信息");
 | |
|                 billStatus = false;
 | |
|             }else {
 | |
|                 warehouse = whArr[0];
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //库存组织
 | |
|         DynamicObject org = null;
 | |
|         if(StringUtils.isBlank(BelongTo)){
 | |
|             rowMsg.add("入参归属字段BelongTo为空");
 | |
|             billStatus = false;
 | |
|         }else{
 | |
|             QFilter f = new QFilter("number", "=", BelongTo);
 | |
|             DynamicObject[] orgArr = BusinessDataServiceHelper.load("bos_org", "id,name,number", new QFilter[]{f});
 | |
|             if(orgArr == null || orgArr.length == 0){
 | |
|                 rowMsg.add("根据归属字段BelongTo【"+BelongTo+"】在金蝶系统中没有查询到对应的组织信息");
 | |
|                 billStatus = false;
 | |
|             }else {
 | |
|                 org = orgArr[0];
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         JSONArray Details = obj.getJSONArray("Details");
 | |
|         if(Details != null && Details.size() > 0){
 | |
|             for (int i = 0; i < Details.size(); i++) {
 | |
|                 JSONObject detail = Details.getJSONObject(i);
 | |
|                 String cInvCode = detail.getString("cInvCode");//产品编码
 | |
|                 String cOBatch = detail.getString("cOBatch");//挑战前批次
 | |
|                 String cIBatch = detail.getString("cIBatch");//调整后批次
 | |
|                 Integer iPAQuantity = detail.getInteger("iPAQuantity");//数量
 | |
| 
 | |
|                 if(StringUtils.isBlank(cInvCode)){
 | |
|                     rowMsg.add("入参产品编码字段cInvCode为空");
 | |
|                     billStatus = false;
 | |
|                 } else {
 | |
|                     QFilter f = new QFilter("number", "=", cInvCode);
 | |
|                     DynamicObject[] materialArr = BusinessDataServiceHelper.load("bd_material", "id,number,name", new QFilter[]{f});
 | |
|                     if(materialArr == null || materialArr.length == 0){
 | |
|                         rowMsg.add("根据产品编码字段cInvCode【"+cInvCode+"】在金蝶系统中没有查询到对应的物料信息");
 | |
|                         billStatus = false;
 | |
|                     }
 | |
|                 }
 | |
|                 if(StringUtils.isBlank(cOBatch)){
 | |
|                     rowMsg.add("入参挑战前批次字段cOBatch为空");
 | |
|                     billStatus = false;
 | |
|                 }else {
 | |
|                     QFilter f = new QFilter("number", "=", cOBatch);
 | |
|                     DynamicObject[] lotArr = BusinessDataServiceHelper.load("bd_lot", "id,number,name", new QFilter[]{f});
 | |
|                     if(lotArr == null || lotArr.length == 0){
 | |
|                         rowMsg.add("根据挑战前批次字段cOBatch【"+cOBatch+"】在金蝶系统中没有查询到对应的批次信息");
 | |
|                         billStatus = false;
 | |
|                     }
 | |
| 
 | |
|                 }
 | |
|                 if(StringUtils.isBlank(cIBatch)){
 | |
|                     rowMsg.add("入参调整后批次字段cIBatch为空");
 | |
|                     billStatus = false;
 | |
|                 }else {
 | |
|                     QFilter f = new QFilter("number", "=", cIBatch);
 | |
|                     DynamicObject[] lotArr = BusinessDataServiceHelper.load("bd_lot", "id,number,name", new QFilter[]{f});
 | |
|                     if(lotArr == null || lotArr.length == 0){
 | |
|                         rowMsg.add("根据调整后批次字段cIBatch【"+cIBatch+"】在金蝶系统中没有查询到对应的批次信息");
 | |
|                         billStatus = false;
 | |
|                     }
 | |
|                 }
 | |
|                 if(iPAQuantity == null || iPAQuantity == 0){
 | |
|                     rowMsg.add("入参数量字段iPAQuantity为空或为零");
 | |
|                     billStatus = false;
 | |
|                 }
 | |
|             }
 | |
|         }else{
 | |
|             rowMsg.add("入参明细字段Details为空");
 | |
|             billStatus = false;
 | |
|         }
 | |
| 
 | |
|         resultBean.setBillIndex(0);
 | |
|         resultBean.setKeys(keys);
 | |
|         resultBean.setNumber(cPACode);
 | |
|         if(billStatus){
 | |
|             //出现错误后返回
 | |
|             error.setKeys(keys);
 | |
|             error.setRowMsg(rowMsg);
 | |
|             error.setEntityKey("im_adjustbill");
 | |
|             resultBean.setId("");
 | |
|             resultBean.setBillStatus(billStatus);
 | |
|             resultBean.setErrors(error);
 | |
|             results.add(resultBean);
 | |
|             resultExt.setFailCount(0);
 | |
|             resultExt.setSuccessCount(1);
 | |
|         }else{
 | |
|             //常量准备-查询单据类型
 | |
|             QFilter f = new QFilter("number", "=", "im_Adjustbill_STD_BT_S");
 | |
|             DynamicObject[] billtypeArr = BusinessDataServiceHelper.load("bos_billtype", "id,name,number", new QFilter[]{f});
 | |
|             DynamicObject billtype = billtypeArr[0];
 | |
|             //业务类型
 | |
|             f = new QFilter("number", "=", "511");
 | |
|             DynamicObject[] biztypeArr = BusinessDataServiceHelper.load("bd_biztype", "id,name,number", new QFilter[]{f});
 | |
|             DynamicObject biztype = biztypeArr[0];
 | |
|             //出库库存类型
 | |
|             f = new QFilter("number", "=", "110");
 | |
|             DynamicObject[] invtypeArr = BusinessDataServiceHelper.load("bd_invtype", "id,number,name", new QFilter[]{f});
 | |
|             DynamicObject invtype = invtypeArr[0];
 | |
|             //出库库存状态
 | |
|             f = new QFilter("number", "=", "110");
 | |
|             DynamicObject[] invstatusArr = BusinessDataServiceHelper.load("bd_invstatus", "id,number,name", new QFilter[]{f});
 | |
|             DynamicObject invstatus = invstatusArr[0];
 | |
| 
 | |
|             //必填校验通过,构建并保存数据
 | |
|             DynamicObject adjustbill = BusinessDataServiceHelper.newDynamicObject("im_adjustbill");
 | |
|             adjustbill.set("billno", cPACode);
 | |
|             adjustbill.set("biztime", new Date());
 | |
|             adjustbill.set("org", org);
 | |
|             adjustbill.set("billtype", billtype);
 | |
|             adjustbill.set("biztype", biztype);
 | |
|             adjustbill.set("billstatus", "A");
 | |
|             adjustbill.set("billcretype", "1");
 | |
|             DynamicObjectCollection beforeEntries = adjustbill.getDynamicObjectCollection("billentry");//调整前明细
 | |
|             for (int i = 0; i < Details.size(); i++) {
 | |
|                 JSONObject detail = Details.getJSONObject(i);
 | |
|                 String cInvCode = detail.getString("cInvCode");//产品编码
 | |
|                 String cOBatch = detail.getString("cOBatch");//挑战前批次
 | |
|                 Date dOMDate = detail.getDate("dOMDate");//挑战前生产日期
 | |
|                 Date dOVDate = detail.getDate("dOVDate");//挑战前有效期至
 | |
|                 String cIBatch = detail.getString("cIBatch");//调整后批次
 | |
|                 Date dIMDate = detail.getDate("dIMDate");//调整入生产日期
 | |
|                 Date dIVDate = detail.getDate("dIVDate");//调整入有效期至
 | |
|                 Integer iPAQuantity = detail.getInteger("iPAQuantity");//数量
 | |
| 
 | |
|                 //物料
 | |
|                 f = new QFilter("number", "=", cInvCode);
 | |
|                 DynamicObject[] materialArr = BusinessDataServiceHelper.load("bd_material", "id,number,name,baseunit", new QFilter[]{f});
 | |
|                 DynamicObject material = materialArr[0];
 | |
|                 //物料库存信息
 | |
|                 f = new QFilter("masterid.id", "=", material.getPkValue());
 | |
|                 DynamicObject[] materialinvArr = BusinessDataServiceHelper.load("bd_materialinventoryinfo", "id,number,name,baseunit", new QFilter[]{f});
 | |
|                 DynamicObject materialinv = materialinvArr[0];
 | |
|                 //调整前商品
 | |
|                 DynamicObject oGoods = null;
 | |
|                 DynamicObject[] oGoodsArr = BaseDataMatchUtils.materialMatchGoods("cInvCode", cOBatch, true);
 | |
|                 if(oGoodsArr != null && oGoodsArr.length > 0){
 | |
|                     oGoods = oGoodsArr[0];
 | |
|                 }
 | |
|                 //调整后商品
 | |
|                 DynamicObject iGoods = null;
 | |
|                 DynamicObject[] iGoodsArr = BaseDataMatchUtils.materialMatchGoods("cInvCode", cIBatch, true);
 | |
|                 if(iGoodsArr != null && iGoodsArr.length > 0){
 | |
|                     iGoods = iGoodsArr[0];
 | |
|                 }
 | |
|                 //调整前批号
 | |
|                 f = new QFilter("number", "=", cOBatch);
 | |
|                 DynamicObject[] olotArr = BusinessDataServiceHelper.load("bd_lot", "id,number,name", new QFilter[]{f});
 | |
|                 DynamicObject olot = olotArr[0];
 | |
|                 //调整后批次
 | |
|                 f = new QFilter("number", "=", cIBatch);
 | |
|                 DynamicObject[] ilotArr = BusinessDataServiceHelper.load("bd_lot", "id,number,name", new QFilter[]{f});
 | |
|                 DynamicObject ilot = ilotArr[0];
 | |
| 
 | |
|                 //调整前明细
 | |
|                 DynamicObject beforeEntry = beforeEntries.addNew();
 | |
|                 beforeEntry.set("materialmasterid", material);
 | |
|                 beforeEntry.set("material", materialinv);
 | |
|                 beforeEntry.set("tqq9_goods", oGoods);
 | |
|                 beforeEntry.set("unit", material.getDynamicObject("baseunit"));
 | |
|                 beforeEntry.set("qty", iPAQuantity);
 | |
|                 beforeEntry.set("baseunit", material.getDynamicObject("baseunit"));
 | |
|                 beforeEntry.set("baseqty", iPAQuantity);
 | |
|                 beforeEntry.set("lot", olot);
 | |
|                 beforeEntry.set("lotnumber", cOBatch);
 | |
|                 beforeEntry.set("producedate", dOMDate);
 | |
|                 beforeEntry.set("expirydate", dOVDate);
 | |
|                 beforeEntry.set("warehouse", warehouse);
 | |
|                 beforeEntry.set("invtype", invtype);
 | |
|                 beforeEntry.set("invstatus", invstatus);
 | |
|                 beforeEntry.set("ownertype", "bos_org");
 | |
|                 beforeEntry.set("owner", org);
 | |
|                 beforeEntry.set("keepertype", "bos_org");
 | |
|                 beforeEntry.set("keeper", org);
 | |
|                 DynamicObjectCollection afterEntries = beforeEntry.getDynamicObjectCollection("afterentity");
 | |
|                 //调整后明细
 | |
|                 DynamicObject afterEntry = afterEntries.addNew();
 | |
|                 afterEntry.set("materialmasterid1", material);
 | |
|                 afterEntry.set("material1", materialinv);
 | |
|                 beforeEntry.set("tqq9_goods1", iGoods);
 | |
|                 afterEntry.set("unit1", material.getDynamicObject("baseunit"));
 | |
|                 afterEntry.set("qty1", iPAQuantity);
 | |
|                 afterEntry.set("baseunit1", material.getDynamicObject("baseunit"));
 | |
|                 afterEntry.set("baseqty1", iPAQuantity);
 | |
|                 afterEntry.set("lot1", ilot);
 | |
|                 afterEntry.set("lotnumber1", cIBatch);
 | |
|                 afterEntry.set("producedate1", dIMDate);
 | |
|                 afterEntry.set("expirydate1", dIVDate);
 | |
|                 afterEntry.set("warehouse1", warehouse);
 | |
|                 afterEntry.set("invtype1", invtype);
 | |
|                 afterEntry.set("invstatus1", invstatus);
 | |
|                 afterEntry.set("ownertype1", "bos_org");
 | |
|                 afterEntry.set("owner1", org);
 | |
|                 afterEntry.set("keepertype1", "bos_org");
 | |
|                 afterEntry.set("keeper1", org);
 | |
|             }
 | |
|             OperationResult operationResult = OperationServiceHelper.executeOperate("save", "im_adjustbill", new DynamicObject[]{adjustbill}, OperateOption.create());
 | |
|             if(!operationResult.isSuccess()){
 | |
|                 List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
 | |
|                 for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
 | |
|                     rowMsg.add(iOperateInfo.getMessage());
 | |
|                 }
 | |
|                 error.setKeys(keys);
 | |
|                 error.setRowMsg(rowMsg);
 | |
|                 error.setEntityKey("im_adjustbill");
 | |
|                 resultBean.setId("");
 | |
|                 resultBean.setBillStatus(false);
 | |
|                 resultBean.setErrors(error);
 | |
|                 results.add(resultBean);
 | |
|                 resultExt.setFailCount(0);
 | |
|                 resultExt.setSuccessCount(1);
 | |
|             }else {
 | |
|                 operationResult = OperationServiceHelper.executeOperate("submit", "im_adjustbill", new DynamicObject[]{adjustbill}, OperateOption.create());
 | |
|                 if(!operationResult.isSuccess()){
 | |
|                     List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
 | |
|                     for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
 | |
|                         rowMsg.add(iOperateInfo.getMessage());
 | |
|                     }
 | |
|                     error.setKeys(keys);
 | |
|                     error.setRowMsg(rowMsg);
 | |
|                     error.setEntityKey("im_adjustbill");
 | |
|                     resultBean.setId("");
 | |
|                     resultBean.setBillStatus(false);
 | |
|                     resultBean.setErrors(error);
 | |
|                     results.add(resultBean);
 | |
|                     resultExt.setFailCount(0);
 | |
|                     resultExt.setSuccessCount(1);
 | |
|                 }else {
 | |
|                     operationResult = OperationServiceHelper.executeOperate("audit", "im_adjustbill", new DynamicObject[]{adjustbill}, OperateOption.create());
 | |
|                     if(!operationResult.isSuccess()){
 | |
|                         List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo();
 | |
|                         for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
 | |
|                             rowMsg.add(iOperateInfo.getMessage());
 | |
|                         }
 | |
|                         error.setKeys(keys);
 | |
|                         error.setRowMsg(rowMsg);
 | |
|                         error.setEntityKey("im_adjustbill");
 | |
|                         resultBean.setId("");
 | |
|                         resultBean.setBillStatus(false);
 | |
|                         resultBean.setErrors(error);
 | |
|                         results.add(resultBean);
 | |
|                         resultExt.setFailCount(0);
 | |
|                         resultExt.setSuccessCount(1);
 | |
|                     }else {
 | |
|                         resultBean.setId(adjustbill.getString("id"));
 | |
|                         resultBean.setBillStatus(true);
 | |
|                         results.add(resultBean);
 | |
|                         resultExt.setFailCount(1);
 | |
|                         resultExt.setSuccessCount(0);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         resultExt.setResult(results);
 | |
|         return CustomApiResult.success(resultExt);
 | |
|     }
 | |
| }
 |