package tqq9.lc123.cloud.app.api.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.drew.lang.annotations.NotNull; import com.google.gson.Gson; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.botp.runtime.ConvertOperationResult; import kd.bos.entity.botp.runtime.PushArgs; import kd.bos.entity.botp.runtime.SourceBillReport; 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.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.botp.ConvertServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import tqq9.lc123.cloud.app.api.model.WMSXmlReturn; import tqq9.lc123.cloud.app.api.utils.ApiResultExt; import tqq9.lc123.cloud.app.api.utils.Constants; import tqq9.lc123.cloud.app.plugin.utils.BotpParamUtils; import java.math.BigDecimal; import java.util.*; /** * 出库回传java接口插件 */ @ApiController(value = "WMSSaleOutController", desc = "WMS-出库回传") public class WMSSaleOutController { private static String SM_DELIVERNOTICE = "sm_delivernotice";//发货通知单 private static String IM_SALOUTBILL = "im_saloutbill";//销售出库单 private static String BILLENTRY = "billentry";//分录 private static String SM_RETURNAPPLY = "sm_returnapply";//销售退货申请单 private static String TQQ9_OTHEROUTAPPLY = "tqq9_otheroutapply";//其他出库申请 private static String IM_OTHEROUTBILL = "im_otheroutbill";//其他出库 private final static HashMap billTypeMap = new HashMap() {{ put("采购订单", "pm_receiptnotice"); put("其他入库单", "tqq9_otherinapply"); put("销售退货单", "sm_returnapply"); put("调拨入库单", "tqq9_otherinapply"); put("采购退货单", "pm_purrefundapplybill"); put("销售订单", "sm_delivernotice"); put("其他出库单", "tqq9_otheroutapply"); put("调拨出库单", "tqq9_otheroutapply"); put("PTCK", "sm_delivernotice"); put("CGTH", "pm_purrefundapplybill"); put("DBCK", "tqq9_otheroutapply"); put("PKCK", "tqq9_otheroutapply"); put("TZCK", "tqq9_otheroutapply"); put("YPCK", "tqq9_otheroutapply"); put("BSCK", "tqq9_otheroutapply"); put("GQCK", "tqq9_otheroutapply"); put("CGRK", "pm_receiptnotice"); put("DBRK", "tqq9_otherinapply"); put("THRK", "sm_returnapply"); put("ZPRK", "tqq9_otherinapply"); put("PYRK", "tqq9_otherinapply"); put("TZRK", "tqq9_otherinapply"); }}; @ApiPostMapping(value = "/WMS_SaleOutnPush", desc = "WMS-出库回传") public CustomApiResult WMS_SaleOutnPush ( @NotNull @ApiParam(value = "金蝶源头单据号", required = true) String erpOrderCode, @NotNull @ApiParam(value = "WMS出库单号", required = true) String wmsOrderCode, @NotNull @ApiParam(value = "单据类型", required = true) String VoucherType, @NotNull @ApiParam(value = "库区编号", required = true) String wareCode, @NotNull @ApiParam(value = "归属", required = true) String companyType, @NotNull @ApiParam(value = "明细", required = true) JSONArray details) { //返回值初始化 ApiResultExt resultExt = new ApiResultExt(); List results = new ArrayList<>(); resultExt.setResult(results); String billno = erpOrderCode;//单据编号 ApiResultExt.ResultBean resultBean = new ApiResultExt.ResultBean(); results.add(resultBean); JSONObject key = new JSONObject(); key.put("billno", billno); resultBean.setKeys(key); ApiResultExt.Error error = new ApiResultExt.Error(); resultBean.setErrors(error); ArrayList rowmsg = new ArrayList<>(); error.setRowMsg(rowmsg); String errormsg = null; resultBean.setBillIndex(0); resultBean.setKeys(key); resultBean.setNumber(billno); resultBean.setType(Constants.TYPE_PUSH); //判断回传类型 VoucherType=billTypeMap.get(VoucherType); String entityType = ""; switch (VoucherType) { case "sm_delivernotice": entityType = "im_saloutbill"; break; case "sm_returnapply": entityType = "im_saloutbill"; break; case "tqq9_otheroutapply": entityType = "im_otheroutbill"; break; default: errormsg = "传入参数 VoucherType 为无效值"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); return CustomApiResult.success(resultExt); } //必填项校验 if (ApiResultExt.validateRequired(VoucherType, "String")) { errormsg = "传入参数 VoucherType 为空"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); } if (ApiResultExt.validateRequired(billno, "String")) { errormsg = "传入参数 erpOrderCode 为空"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); } for (int i = 0; i < details.size(); i++) { Object detali = details.get(i); JSONObject detali1 = (JSONObject) detali; BigDecimal quantity = detali1.getBigDecimal("quantity");//出库数量 String entryId = detali1.getString("erpDetailId");//金蝶源头单据细单号 if (detali1.getString("erpDetailId").length() > 19) { errormsg = "Value " + entryId + " is out of range for a Long. Using default value."; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); return CustomApiResult.success(resultExt); } DynamicObject isexsit = BusinessDataServiceHelper.loadSingle(VoucherType, new QFilter[]{new QFilter("billentry.id", QCP.equals, detali1.getLong("erpDetailId"))}); if (isexsit == null) { errormsg = "传入参数 erpDetailId 在金蝶系统中未查询到对应单据"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); return CustomApiResult.success(resultExt); } if (ApiResultExt.validateRequired(quantity, "BigDecimal")) { errormsg = "传入参数 quantity 为空"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); } if (ApiResultExt.validateRequired(entryId, "String")) { errormsg = "传入参数 erpDetailId 为空"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); } } rowmsg = resultExt.getResult().get(0).getErrors().getRowMsg(); if (!rowmsg.isEmpty()) { return CustomApiResult.success(resultExt); } //发货通知单 if (StringUtils.equals("sm_delivernotice", VoucherType)) { //查询单据在金蝶系统中是否存在 DynamicObject sm_delivernotice = BusinessDataServiceHelper.loadSingle(SM_DELIVERNOTICE, new QFilter[]{new QFilter("billno", QCP.equals, billno)}); if (sm_delivernotice == null) { errormsg = "根据传入编号:" + billno + "未找到对应发货通知单"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); return CustomApiResult.success(resultExt); } //参数值组装 Long id = sm_delivernotice.getLong("id"); Map> param = new HashMap<>();//传入转换规则处理参数 HashMap> entitypkMap = new HashMap<>();//上下游id映射Map for (Object detail : details) { JSONObject detailObject = new JSONObject(); JSONObject detail1 = (JSONObject) detail; String entryId = detail1.getString("erpDetailId");//金蝶源头单据细单号 String wmsDetailId = detail1.getString("wmsDetailId");//WMS入库单细单号 BigDecimal quantity = detail1.getBigDecimal("quantity");//出库数量 String uniqueCode = detail1.getString("uniqueCode");//商品编码 Date manufactureDate = detail1.getDate("manufactureDate");//生产日期 Date expirationDate = detail1.getDate("expirationDate");//失效期 String batch = detail1.getString("batch");//批次 String registrationCode = detail1.getString("registrationCode");//注册证号 String licenceCode = detail1.getString("licenceCode");//生产许可证 String producer = detail1.getString("producer");//生产厂商 detailObject.put("entryId", entryId); detailObject.put("wmsDetailId", wmsDetailId); detailObject.put("uniqueCode", uniqueCode); detailObject.put("quantity", quantity); detailObject.put("manufactureDate", manufactureDate); detailObject.put("expirationDate", expirationDate); detailObject.put("batch", batch); detailObject.put("registrationCode", registrationCode); detailObject.put("licenceCode", licenceCode); detailObject.put("producer", producer); detailObject.put("VoucherType", VoucherType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(detail1.getLong("erpDetailId")); param.computeIfAbsent(entryId, k -> new HashSet<>()).add(detailObject); } //开始下推 String rule = BotpParamUtils.getBotpRuleId(SM_DELIVERNOTICE, IM_SALOUTBILL, "发货通知单_销售出库单_转换规则_扩展"); PushArgs pushArgs = BotpParamUtils.getPushArgs(SM_DELIVERNOTICE, IM_SALOUTBILL, BILLENTRY, param, entitypkMap, rule); ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs); List billReports = pushResult.getBillReports(); //下推失败直接返回 if (!pushResult.isSuccess()) { for (SourceBillReport billReport : billReports) { String billMessage = billReport.getFailMessage(); resultExt = ApiResultExt.errorRetrun(entityType, billMessage, error, resultExt); } rowmsg = resultExt.getResult().get(0).getErrors().getRowMsg(); if (!rowmsg.isEmpty()) { return CustomApiResult.success(resultExt); } } //获取下推单据id准备提交审核操作 Set targetBillIds = pushResult.getTargetBillIds(); DynamicObject[] load = new DynamicObject[targetBillIds.size()]; Iterator iterator = targetBillIds.iterator(); for (int i = 0; iterator.hasNext(); i++) { Object next = iterator.next(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(IM_SALOUTBILL, new QFilter[]{new QFilter("id", QCP.equals, next)}); load[i] = dynamicObject; resultBean.setId(next.toString()); resultBean.setBillStatus(true); } // results.add(resultBean); //开始提交 OperateOption operateOption = OperateOption.create(); OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, IM_SALOUTBILL, load, operateOption); if (!sumbitResult.isSuccess()) { List allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) { HashMap returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } else { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else { //开始审核 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_SALOUTBILL, load, operateOption); if (!auditResult.isSuccess()) { List allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo1.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) { HashMap returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else if (StringUtils.isNotBlank(auditResult.getMessage())) { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } else { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } } //销售退货单 } else if (StringUtils.equals("sm_returnapply", VoucherType)) { //查询单据在金蝶系统中是否存在 DynamicObject sm_returnapply = BusinessDataServiceHelper.loadSingle(SM_RETURNAPPLY, new QFilter[]{new QFilter("billno", QCP.equals, billno)}); if (sm_returnapply == null) { errormsg = "根据传入编号:" + billno + "未找到对应销售退货单"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); return CustomApiResult.success(resultExt); } //参数值组装 Long id = sm_returnapply.getLong("id"); Map> param = new HashMap<>();//传入转换规则处理参数 HashMap> entitypkMap = new HashMap<>();//上下游id映射Map for (Object detail : details) { JSONObject detailObject = new JSONObject(); JSONObject detail1 = (JSONObject) detail; String entryId = detail1.getString("erpDetailId");//金蝶源头单据细单号 BigDecimal quantity = detail1.getBigDecimal("quantity");//出库数量 String uniqueCode = detail1.getString("uniqueCode");//商品编码 Date manufactureDate = detail1.getDate("manufactureDate");//生产日期 Date expirationDate = detail1.getDate("expirationDate");//失效期 String batch = detail1.getString("batch");//批次 String registrationCode = detail1.getString("registrationCode");//注册证号 String licenceCode = detail1.getString("licenceCode");//生产许可证 String producer = detail1.getString("producer");//生产厂商 detailObject.put("entryId", entryId); detailObject.put("uniqueCode", uniqueCode); detailObject.put("quantity", quantity); detailObject.put("manufactureDate", manufactureDate); detailObject.put("expirationDate", expirationDate); detailObject.put("batch", batch); detailObject.put("registrationCode", registrationCode); detailObject.put("licenceCode", licenceCode); detailObject.put("producer", producer); detailObject.put("VoucherType", VoucherType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(detail1.getLong("erpDetailId")); param.computeIfAbsent(entryId, k -> new HashSet<>()).add(detailObject); } //开始下推 String rule = BotpParamUtils.getBotpRuleId(SM_RETURNAPPLY, IM_SALOUTBILL, "销售退货申请单_销售出库单_转换规则_扩展"); PushArgs pushArgs = BotpParamUtils.getPushArgs(SM_RETURNAPPLY, IM_SALOUTBILL, BILLENTRY, param, entitypkMap, rule); ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs); List billReports = pushResult.getBillReports(); if (!pushResult.isSuccess()) { for (SourceBillReport billReport : billReports) { String billMessage = billReport.getFailMessage(); resultExt = ApiResultExt.errorRetrun(entityType, billMessage, error, resultExt); } rowmsg = resultExt.getResult().get(0).getErrors().getRowMsg(); if (!rowmsg.isEmpty()) { return CustomApiResult.success(resultExt); } } //获取下推单据id准备提交审核操作 Set targetBillIds = pushResult.getTargetBillIds(); DynamicObject[] load = new DynamicObject[targetBillIds.size()]; Iterator iterator = targetBillIds.iterator(); for (int i = 0; iterator.hasNext(); i++) { Object next = iterator.next(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(IM_SALOUTBILL, new QFilter[]{new QFilter("id", QCP.equals, next)}); load[i] = dynamicObject; resultBean.setId(next.toString()); resultBean.setBillStatus(true); } //开始提交 OperateOption operateOption = OperateOption.create(); OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, IM_SALOUTBILL, load, operateOption); if (!sumbitResult.isSuccess()) { List allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) { HashMap returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } else { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else { //开始审核 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_SALOUTBILL, load, operateOption); if (!auditResult.isSuccess()) { List allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo1.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) { HashMap returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else if (StringUtils.isNotBlank(auditResult.getMessage())) { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } else { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL); results = (List) returnMap.get("ResultBeanList"); } } } //销售退货单 } else if (StringUtils.equals("tqq9_otheroutapply", VoucherType)) { //查询单据在金蝶系统中是否存在 DynamicObject tqq9_otheroutapply = BusinessDataServiceHelper.loadSingle(TQQ9_OTHEROUTAPPLY, new QFilter[]{new QFilter("billno", QCP.equals, billno)}); if (tqq9_otheroutapply == null) { errormsg = "根据传入编号:" + billno + "未找到对应其他出库申请单"; resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt); return CustomApiResult.success(resultExt); } //根据业务类型判断转换规则名称 DynamicObject bd_biztype = tqq9_otheroutapply.getDynamicObject("tqq9_biztype");//业务类型 String rulanema = null; if (!StringUtils.equals("612", bd_biztype.getString("number"))) { rulanema = "除调拨类型"; } else { String tqq9_dblx = tqq9_otheroutapply.getString("tqq9_dblx");//调拨类型 if (StringUtils.equals("A", tqq9_dblx)) { rulanema = "组织内调拨"; } else { rulanema = "跨组织调拨"; } } String rule = BotpParamUtils.getBotpRuleId(TQQ9_OTHEROUTAPPLY, IM_OTHEROUTBILL, rulanema); //组装参数值 Long id = tqq9_otheroutapply.getLong("id"); Map> param = new HashMap<>();//传入转换规则处理参数 HashMap> entitypkMap = new HashMap<>();//上下游id映射Map for (Object detail : details) { JSONObject detailObject = new JSONObject(); JSONObject detail1 = (JSONObject) detail; String entryId = detail1.getString("erpDetailId");//金蝶源头单据细单号 BigDecimal quantity = detail1.getBigDecimal("quantity");//出库数量 String uniqueCode = detail1.getString("uniqueCode");//商品编码 Date manufactureDate = detail1.getDate("manufactureDate");//生产日期 Date expirationDate = detail1.getDate("expirationDate");//失效期 String batch = detail1.getString("batch");//批次 String registrationCode = detail1.getString("registrationCode");//注册证号 String licenceCode = detail1.getString("licenceCode");//生产许可证 String producer = detail1.getString("producer");//生产厂商 detailObject.put("entryId", entryId); detailObject.put("uniqueCode", uniqueCode); detailObject.put("quantity", quantity); detailObject.put("manufactureDate", manufactureDate); detailObject.put("expirationDate", expirationDate); detailObject.put("batch", batch); detailObject.put("registrationCode", registrationCode); detailObject.put("licenceCode", licenceCode); detailObject.put("producer", producer); detailObject.put("VoucherType", VoucherType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(detail1.getLong("erpDetailId")); param.computeIfAbsent(entryId, k -> new HashSet<>()).add(detailObject); } //开始下推 PushArgs pushArgs = BotpParamUtils.getPushArgs(TQQ9_OTHEROUTAPPLY, IM_OTHEROUTBILL, BILLENTRY, param, entitypkMap, rule); ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs); List billReports = pushResult.getBillReports(); if (!pushResult.isSuccess()) { for (SourceBillReport billReport : billReports) { String billMessage = billReport.getFailMessage(); resultExt = ApiResultExt.errorRetrun(entityType, billMessage, error, resultExt); } rowmsg = resultExt.getResult().get(0).getErrors().getRowMsg(); if (!rowmsg.isEmpty()) { return CustomApiResult.success(resultExt); } } //获取下推单据id准备提交审核操作 Set targetBillIds = pushResult.getTargetBillIds(); DynamicObject[] load = new DynamicObject[targetBillIds.size()]; Iterator iterator = targetBillIds.iterator(); for (int i = 0; iterator.hasNext(); i++) { Object next = iterator.next(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(IM_OTHEROUTBILL, new QFilter[]{new QFilter("id", QCP.equals, next)}); load[i] = dynamicObject; resultBean.setId(next.toString()); resultBean.setBillStatus(true); } // results.add(resultBean); //开始提交 OperateOption operateOption = OperateOption.create(); OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, IM_OTHEROUTBILL, load, operateOption); if (!sumbitResult.isSuccess()) { List allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) { HashMap returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_OTHEROUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), IM_OTHEROUTBILL); results = (List) returnMap.get("ResultBeanList"); } else { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), IM_OTHEROUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else { //开始审核 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_OTHEROUTBILL, load, operateOption); if (!auditResult.isSuccess()) { List allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo1.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) { HashMap returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_OTHEROUTBILL); results = (List) returnMap.get("ResultBeanList"); } } else if (StringUtils.isNotBlank(auditResult.getMessage())) { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), IM_OTHEROUTBILL); results = (List) returnMap.get("ResultBeanList"); } else { HashMap returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), IM_OTHEROUTBILL); results = (List) returnMap.get("ResultBeanList"); } } } } //回传成功 int failCount = 0;//失败数量 int successCount = 1;//成功数量 resultExt.setFailCount(failCount); resultExt.setSuccessCount(successCount); resultExt.setResult(results); return CustomApiResult.success(resultExt); } @ApiPostMapping(value = "/WMS_SaleOutnPush_SH", desc = "WMS-出库回传") public CustomApiResult WMS_SaleOutnPush_SH (@NotNull @ApiParam(value = "入参", required = true) Map dataMap) { //返回值初始化 Gson gson = new Gson(); JSONObject data = gson.fromJson(dataMap.toString(), JSONObject.class); JSONObject request = data.getJSONObject("request"); JSONObject deliveryOrder = request.getJSONObject("deliveryOrder"); String billno = deliveryOrder.getString("deliveryOrderCode"); String orderType = deliveryOrder.getString("orderType"); orderType=billTypeMap.get(orderType); JSONObject orderLines = request.getJSONObject("orderLines"); 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(); ArrayList entryOrderTypes = new ArrayList<>(); entryOrderTypes.add(SM_DELIVERNOTICE); entryOrderTypes.add(SM_RETURNAPPLY); entryOrderTypes.add(TQQ9_OTHEROUTAPPLY); if (!entryOrderTypes.contains(orderType)) { errormsg = errormsg.append(";").append("传入参数 orderType 为无效值"); response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } //必填项校验 if (ApiResultExt.validateRequired(orderType, "String")) { errormsg = errormsg.append(";").append("传入参数 orderType 为空"); } if (ApiResultExt.validateRequired(billno, "String")) { errormsg = errormsg.append(";").append("传入参数 deliveryOrderCode 为空"); } if (orderLines.get("orderLine") instanceof Map) { JSONObject orderLine = orderLines.getJSONObject("orderLine"); BigDecimal actualQty = orderLine.getBigDecimal("actualQty");//出库数量 String orderLineNo = orderLine.getString("orderLineNo");//金蝶源头单据细单号 if (orderLine.getString("orderLineNo").length() > 19) { errormsg = errormsg.append(";").append("Value " + orderLineNo + " is out of range for a Long. Using default value"); response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } DynamicObject isexsit = BusinessDataServiceHelper.loadSingle(orderType, new QFilter[]{new QFilter("billentry.id", QCP.equals, orderLine.getLong("orderLineNo"))}); if (isexsit == null) { errormsg = errormsg.append(";").append("传入参数 orderLineNo 在金蝶系统中未查询到对应单据"); } if (ApiResultExt.validateRequired(actualQty, "BigDecimal")) { errormsg = errormsg.append(";").append("传入参数 actualQty 为空"); } if (ApiResultExt.validateRequired(orderLineNo, "String")) { errormsg = errormsg.append(";").append("传入参数 orderLineNo 为空"); } if (errormsg.length() > 0) { response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } } else { JSONArray orderLine = orderLines.getJSONArray("orderLine"); for (Object obj : orderLine) { JSONObject orderLine1 = gson.fromJson(gson.toJson(obj), JSONObject.class); BigDecimal actualQty = orderLine1.getBigDecimal("actualQty");//出库数量 String orderLineNo = orderLine1.getString("orderLineNo");//金蝶源头单据细单号 if (orderLineNo.length() > 19) { errormsg = errormsg.append(";").append("Value " + orderLineNo + " is out of range for a Long. Using default value"); response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } DynamicObject isexsit = BusinessDataServiceHelper.loadSingle(orderType, new QFilter[]{new QFilter("billentry.id", QCP.equals, orderLine1.getLong("orderLineNo"))}); if (isexsit == null) { errormsg = errormsg.append(";").append("传入参数 orderLineNo 在金蝶系统中未查询到对应单据"); } if (ApiResultExt.validateRequired(actualQty, "BigDecimal")) { errormsg = errormsg.append(";").append("传入参数 actualQty 为空"); } if (ApiResultExt.validateRequired(orderLineNo, "String")) { errormsg = errormsg.append(";").append("传入参数 orderLineNo 为空"); } } if (errormsg.length() > 0) { response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } } //发货通知单 if (StringUtils.equals("sm_delivernotice", orderType)) { //查询单据在金蝶系统中是否存在 DynamicObject sm_delivernotice = BusinessDataServiceHelper.loadSingle(SM_DELIVERNOTICE, new QFilter[]{new QFilter("billno", QCP.equals, billno)}); if (sm_delivernotice == null) { errormsg = errormsg.append(";").append("根据传入编号:" + billno + "未找到对应发货通知单"); response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } Map> param = new HashMap<>();//传入转换规则处理参数 HashMap> entitypkMap = new HashMap<>();//上下游id映射Map //参数值组装 if (orderLines.get("orderLine") instanceof Map) { JSONObject orderLine = orderLines.getJSONObject("orderLine"); Long id = sm_delivernotice.getLong("id"); JSONObject detailObject = new JSONObject(); String orderLineNo = orderLine.getString("orderLineNo");//金蝶源头单据细单号 BigDecimal actualQty = orderLine.getBigDecimal("actualQty");//出库数量 String itemCode = orderLine.getString("itemCode");//商品编码 Date productDate = orderLine.getDate("productDate");//生产日期 Date expireDate = orderLine.getDate("expireDate");//失效期 String batchCode = orderLine.getString("batchCode");//批次 String key1 = null;//注册证号 String key3 = null;//生产许可证 String key2 = null;//生产厂商 if (orderLine.get("extendProps") instanceof Map) { JSONObject extendProps = orderLine.getJSONObject("extendProps");//批次信息 key1 = extendProps.getString("key1");//注册证号 key3 = extendProps.getString("key3");//生产许可证 key2 = extendProps.getString("key2");//生产厂商 }else{ JSONArray extendProps = orderLine.getJSONArray("extendProps"); for (Object o : extendProps) { JSONObject extendProp = gson.fromJson(gson.toJson(o), JSONObject.class); if(extendProp.getString("key1")!=null){ key1 = extendProp.getString("key1");//注册证号 key3 = extendProp.getString("key3");//生产许可证 key2 = extendProp.getString("key2");//生产厂商 } } } detailObject.put("entryId", orderLineNo); detailObject.put("uniqueCode", itemCode); detailObject.put("quantity", actualQty); detailObject.put("manufactureDate", productDate); detailObject.put("expirationDate", expireDate); detailObject.put("batch", batchCode); detailObject.put("registrationCode", key1); detailObject.put("licenceCode", key3); detailObject.put("producer", key2); detailObject.put("VoucherType", orderType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(orderLine.getLong("orderLineNo")); param.computeIfAbsent(orderLineNo, k -> new HashSet<>()).add(detailObject); } else { JSONArray orderLine = orderLines.getJSONArray("orderLine"); for (Object obj : orderLine) { JSONObject orderLine1 = gson.fromJson(gson.toJson(obj), JSONObject.class); Long id = sm_delivernotice.getLong("id"); JSONObject detailObject = new JSONObject(); String orderLineNo = orderLine1.getString("orderLineNo");//金蝶源头单据细单号 BigDecimal actualQty = orderLine1.getBigDecimal("actualQty");//出库数量 String itemCode = orderLine1.getString("itemCode");//商品编码 Date productDate = orderLine1.getDate("productDate");//生产日期 Date expireDate = orderLine1.getDate("expireDate");//失效期 String batchCode = orderLine1.getString("batchCode");//批次 String key1 = null;//注册证号 String key3 = null;//生产许可证 String key2 = null;//生产厂商 if (orderLine1.get("extendProps") instanceof Map) { JSONObject extendProps = orderLine1.getJSONObject("extendProps");//批次信息 key1 = extendProps.getString("key1");//注册证号 key3 = extendProps.getString("key3");//生产许可证 key2 = extendProps.getString("key2");//生产厂商 }else{ JSONArray extendProps = orderLine1.getJSONArray("extendProps"); for (Object o : extendProps) { JSONObject extendProp = gson.fromJson(gson.toJson(o), JSONObject.class); if(extendProp.getString("key1")!=null){ key1 = extendProp.getString("key1");//注册证号 key3 = extendProp.getString("key3");//生产许可证 key2 = extendProp.getString("key2");//生产厂商 } } } detailObject.put("entryId", orderLineNo); detailObject.put("uniqueCode", itemCode); detailObject.put("quantity", actualQty); detailObject.put("manufactureDate", productDate); detailObject.put("expirationDate", expireDate); detailObject.put("batch", batchCode); detailObject.put("registrationCode", key1); detailObject.put("licenceCode", key3); detailObject.put("producer", key2); detailObject.put("VoucherType", orderType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(orderLine1.getLong("orderLineNo")); param.computeIfAbsent(orderLineNo, k -> new HashSet<>()).add(detailObject); } } //开始下推 String rule = BotpParamUtils.getBotpRuleId(SM_DELIVERNOTICE, IM_SALOUTBILL, "发货通知单_销售出库单_转换规则_扩展"); PushArgs pushArgs = BotpParamUtils.getPushArgs(SM_DELIVERNOTICE, IM_SALOUTBILL, BILLENTRY, param, entitypkMap, rule); ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs); List billReports = pushResult.getBillReports(); //下推失败直接返回 if (!pushResult.isSuccess()) { for (SourceBillReport billReport : billReports) { String billMessage = billReport.getFailMessage(); errormsg = errormsg.append(";").append(billMessage); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } //获取下推单据id准备提交审核操作 Set targetBillIds = pushResult.getTargetBillIds(); DynamicObject[] load = new DynamicObject[targetBillIds.size()]; Iterator iterator = targetBillIds.iterator(); for (int i = 0; iterator.hasNext(); i++) { Object next = iterator.next(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(IM_SALOUTBILL, new QFilter[]{new QFilter("id", QCP.equals, next)}); load[i] = dynamicObject; } //开始提交 OperateOption operateOption = OperateOption.create(); OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, IM_SALOUTBILL, load, operateOption); if (!sumbitResult.isSuccess()) { List allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) { String message = iOperateInfo.getMessage(); errormsg = errormsg.append(";").append(message); } } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) { errormsg = errormsg.append(";").append(sumbitResult.getMessage()); } else { errormsg = errormsg.append(";").append(sumbitResult.getInteractionContext().getSimpleMessage()); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } else { //开始审核 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_SALOUTBILL, load, operateOption); if (!auditResult.isSuccess()) { List allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo1.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) { String message = iOperateInfo.getMessage(); errormsg = errormsg.append(";").append(message); } } else if (StringUtils.isNotBlank(auditResult.getMessage())) { errormsg = errormsg.append(";").append(auditResult.getMessage()); } else { errormsg = errormsg.append(";").append(auditResult.getInteractionContext().getSimpleMessage()); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } } //销售退货单 } else if (StringUtils.equals("sm_returnapply", orderType)) { //查询单据在金蝶系统中是否存在 DynamicObject sm_returnapply = BusinessDataServiceHelper.loadSingle(SM_RETURNAPPLY, new QFilter[]{new QFilter("billno", QCP.equals, billno)}); if (sm_returnapply == null) { errormsg = errormsg.append(";").append("根据传入编号:" + billno + "未找到对应销售退货单"); response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } //参数值组装 Map> param = new HashMap<>();//传入转换规则处理参数 HashMap> entitypkMap = new HashMap<>();//上下游id映射Map if (orderLines.get("orderLine") instanceof Map) { JSONObject orderLine = orderLines.getJSONObject("orderLine"); Long id = sm_returnapply.getLong("id"); JSONObject detailObject = new JSONObject(); String orderLineNo = orderLine.getString("orderLineNo");//金蝶源头单据细单号 BigDecimal actualQty = orderLine.getBigDecimal("actualQty");//出库数量 String itemCode = orderLine.getString("itemCode");//商品编码 Date productDate = orderLine.getDate("productDate");//生产日期 Date expireDate = orderLine.getDate("expireDate");//失效期 String batchCode = orderLine.getString("batchCode");//批次 String key1 = null;//注册证号 String key3 = null;//生产许可证 String key2 = null;//生产厂商 if (orderLine.get("extendProps") instanceof Map) { JSONObject extendProps = orderLine.getJSONObject("extendProps");//批次信息 key1 = extendProps.getString("key1");//注册证号 key3 = extendProps.getString("key3");//生产许可证 key2 = extendProps.getString("key2");//生产厂商 }else{ JSONArray extendProps = orderLine.getJSONArray("extendProps"); for (Object o : extendProps) { JSONObject extendProp = gson.fromJson(gson.toJson(o), JSONObject.class); if(extendProp.getString("key1")!=null){ key1 = extendProp.getString("key1");//注册证号 key3 = extendProp.getString("key3");//生产许可证 key2 = extendProp.getString("key2");//生产厂商 } } } detailObject.put("entryId", orderLineNo); detailObject.put("uniqueCode", itemCode); detailObject.put("quantity", actualQty); detailObject.put("manufactureDate", productDate); detailObject.put("expirationDate", expireDate); detailObject.put("batch", batchCode); detailObject.put("registrationCode", key1); detailObject.put("licenceCode", key3); detailObject.put("producer", key2); detailObject.put("VoucherType", orderType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(orderLine.getLong("orderLineNo")); param.computeIfAbsent(orderLineNo, k -> new HashSet<>()).add(detailObject); } else { JSONArray orderLine = orderLines.getJSONArray("orderLine"); for (Object obj : orderLine) { JSONObject orderLine1 = gson.fromJson(gson.toJson(obj), JSONObject.class); Long id = sm_returnapply.getLong("id"); JSONObject detailObject = new JSONObject(); String orderLineNo = orderLine1.getString("orderLineNo");//金蝶源头单据细单号 BigDecimal actualQty = orderLine1.getBigDecimal("actualQty");//出库数量 String itemCode = orderLine1.getString("itemCode");//商品编码 Date productDate = orderLine1.getDate("productDate");//生产日期 Date expireDate = orderLine1.getDate("expireDate");//失效期 String batchCode = orderLine1.getString("batchCode");//批次 String key1 = null;//注册证号 String key3 = null;//生产许可证 String key2 = null;//生产厂商 if (orderLine1.get("extendProps") instanceof Map) { JSONObject extendProps = orderLine1.getJSONObject("extendProps");//批次信息 key1 = extendProps.getString("key1");//注册证号 key3 = extendProps.getString("key3");//生产许可证 key2 = extendProps.getString("key2");//生产厂商 }else{ JSONArray extendProps = orderLine1.getJSONArray("extendProps"); for (Object o : extendProps) { JSONObject extendProp = gson.fromJson(gson.toJson(o), JSONObject.class); if(extendProp.getString("key1")!=null){ key1 = extendProp.getString("key1");//注册证号 key3 = extendProp.getString("key3");//生产许可证 key2 = extendProp.getString("key2");//生产厂商 } } } detailObject.put("entryId", orderLineNo); detailObject.put("uniqueCode", itemCode); detailObject.put("quantity", actualQty); detailObject.put("manufactureDate", productDate); detailObject.put("expirationDate", expireDate); detailObject.put("batch", batchCode); detailObject.put("registrationCode", key1); detailObject.put("licenceCode", key3); detailObject.put("producer", key2); detailObject.put("VoucherType", orderType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(orderLine1.getLong("orderLineNo")); param.computeIfAbsent(orderLineNo, k -> new HashSet<>()).add(detailObject); } } //开始下推 String rule = BotpParamUtils.getBotpRuleId(SM_RETURNAPPLY, IM_SALOUTBILL, "销售退货申请单_销售出库单_转换规则_扩展"); PushArgs pushArgs = BotpParamUtils.getPushArgs(SM_RETURNAPPLY, IM_SALOUTBILL, BILLENTRY, param, entitypkMap, rule); ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs); List billReports = pushResult.getBillReports(); if (!pushResult.isSuccess()) { for (SourceBillReport billReport : billReports) { String billMessage = billReport.getFailMessage(); errormsg = errormsg.append(";").append(billMessage); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } //获取下推单据id准备提交审核操作 Set targetBillIds = pushResult.getTargetBillIds(); DynamicObject[] load = new DynamicObject[targetBillIds.size()]; Iterator iterator = targetBillIds.iterator(); for (int i = 0; iterator.hasNext(); i++) { Object next = iterator.next(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(IM_SALOUTBILL, new QFilter[]{new QFilter("id", QCP.equals, next)}); load[i] = dynamicObject; } //开始提交 OperateOption operateOption = OperateOption.create(); OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, IM_SALOUTBILL, load, operateOption); if (!sumbitResult.isSuccess()) { List allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) { String billMessage = iOperateInfo.getMessage(); errormsg = errormsg.append(";").append(billMessage); } } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) { errormsg = errormsg.append(";").append(sumbitResult.getMessage()); } else { errormsg = errormsg.append(";").append(sumbitResult.getInteractionContext().getSimpleMessage()); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } else { //开始审核 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_SALOUTBILL, load, operateOption); if (!auditResult.isSuccess()) { List allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo1.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) { String billMessage = iOperateInfo.getMessage(); errormsg = errormsg.append(";").append(billMessage); } } else if (StringUtils.isNotBlank(auditResult.getMessage())) { errormsg = errormsg.append(";").append(auditResult.getMessage()); } else { errormsg = errormsg.append(";").append(auditResult.getInteractionContext().getSimpleMessage()); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } } //销售退货单 } else if (StringUtils.equals("tqq9_otheroutapply", orderType)) { //查询单据在金蝶系统中是否存在 DynamicObject tqq9_otheroutapply = BusinessDataServiceHelper.loadSingle(TQQ9_OTHEROUTAPPLY, new QFilter[]{new QFilter("billno", QCP.equals, billno)}); if (tqq9_otheroutapply == null) { errormsg = errormsg.append(";").append("根据传入编号:" + billno + "未找到对应其他出库申请单"); response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } //根据业务类型判断转换规则名称 DynamicObject bd_biztype = tqq9_otheroutapply.getDynamicObject("tqq9_biztype");//业务类型 String rulanema = null; if (!StringUtils.equals("612", bd_biztype.getString("number"))) { rulanema = "除调拨类型"; } else { String tqq9_dblx = tqq9_otheroutapply.getString("tqq9_dblx");//调拨类型 if (StringUtils.equals("A", tqq9_dblx)) { rulanema = "组织内调拨"; } else { rulanema = "跨组织调拨"; } } String rule = BotpParamUtils.getBotpRuleId(TQQ9_OTHEROUTAPPLY, IM_OTHEROUTBILL, rulanema); //组装参数值 Map> param = new HashMap<>();//传入转换规则处理参数 HashMap> entitypkMap = new HashMap<>();//上下游id映射Map if (orderLines.get("orderLine") instanceof Map) { JSONObject orderLine = orderLines.getJSONObject("orderLine"); Long id = tqq9_otheroutapply.getLong("id"); JSONObject detailObject = new JSONObject(); String orderLineNo = orderLine.getString("orderLineNo");//金蝶源头单据细单号 BigDecimal actualQty = orderLine.getBigDecimal("actualQty");//出库数量 String itemCode = orderLine.getString("itemCode");//商品编码 Date productDate = orderLine.getDate("productDate");//生产日期 Date expireDate = orderLine.getDate("expireDate");//失效期 String batchCode = orderLine.getString("batchCode");//批次 String key1 = null;//注册证号 String key3 = null;//生产许可证 String key2 = null;//生产厂商 if (orderLine.get("extendProps") instanceof Map) { JSONObject extendProps = orderLine.getJSONObject("extendProps");//批次信息 key1 = extendProps.getString("key1");//注册证号 key3 = extendProps.getString("key3");//生产许可证 key2 = extendProps.getString("key2");//生产厂商 }else{ JSONArray extendProps = orderLine.getJSONArray("extendProps"); for (Object o : extendProps) { JSONObject extendProp = gson.fromJson(gson.toJson(o), JSONObject.class); if(extendProp.getString("key1")!=null){ key1 = extendProp.getString("key1");//注册证号 key3 = extendProp.getString("key3");//生产许可证 key2 = extendProp.getString("key2");//生产厂商 } } } detailObject.put("entryId", orderLineNo); detailObject.put("uniqueCode", itemCode); detailObject.put("quantity", actualQty); detailObject.put("manufactureDate", productDate); detailObject.put("expirationDate", expireDate); detailObject.put("batch", batchCode); detailObject.put("registrationCode", key1); detailObject.put("licenceCode", key3); detailObject.put("producer", key2); detailObject.put("VoucherType", orderType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(orderLine.getLong("orderLineNo")); param.computeIfAbsent(orderLineNo, k -> new HashSet<>()).add(detailObject); } else { JSONArray orderLine = orderLines.getJSONArray("orderLine"); for (Object obj : orderLine) { JSONObject orderLine1 = gson.fromJson(gson.toJson(obj), JSONObject.class); Long id = tqq9_otheroutapply.getLong("id"); JSONObject detailObject = new JSONObject(); String orderLineNo = orderLine1.getString("orderLineNo");//金蝶源头单据细单号 BigDecimal actualQty = orderLine1.getBigDecimal("actualQty");//出库数量 String itemCode = orderLine1.getString("itemCode");//商品编码 Date productDate = orderLine1.getDate("productDate");//生产日期 Date expireDate = orderLine1.getDate("expireDate");//失效期 String batchCode = orderLine1.getString("batchCode");//批次 String key1 = null;//注册证号 String key3 = null;//生产许可证 String key2 = null;//生产厂商 if (orderLine1.get("extendProps") instanceof Map) { JSONObject extendProps = orderLine1.getJSONObject("extendProps");//批次信息 key1 = extendProps.getString("key1");//注册证号 key3 = extendProps.getString("key3");//生产许可证 key2 = extendProps.getString("key2");//生产厂商 }else{ JSONArray extendProps = orderLine1.getJSONArray("extendProps"); for (Object o : extendProps) { JSONObject extendProp = gson.fromJson(gson.toJson(o), JSONObject.class); if(extendProp.getString("key1")!=null){ key1 = extendProp.getString("key1");//注册证号 key3 = extendProp.getString("key3");//生产许可证 key2 = extendProp.getString("key2");//生产厂商 } } } detailObject.put("entryId", orderLineNo); detailObject.put("uniqueCode", itemCode); detailObject.put("quantity", actualQty); detailObject.put("manufactureDate", productDate); detailObject.put("expirationDate", expireDate); detailObject.put("batch", batchCode); detailObject.put("registrationCode", key1); detailObject.put("licenceCode", key3); detailObject.put("producer", key2); detailObject.put("VoucherType", orderType); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(orderLine1.getLong("orderLineNo")); param.computeIfAbsent(orderLineNo, k -> new HashSet<>()).add(detailObject); } } //开始下推 PushArgs pushArgs = BotpParamUtils.getPushArgs(TQQ9_OTHEROUTAPPLY, IM_OTHEROUTBILL, BILLENTRY, param, entitypkMap, rule); ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs); List billReports = pushResult.getBillReports(); if (!pushResult.isSuccess()) { for (SourceBillReport billReport : billReports) { String billMessage = billReport.getFailMessage(); errormsg = errormsg.append(";").append(billMessage); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } //获取下推单据id准备提交审核操作 Set targetBillIds = pushResult.getTargetBillIds(); DynamicObject[] load = new DynamicObject[targetBillIds.size()]; Iterator iterator = targetBillIds.iterator(); for (int i = 0; iterator.hasNext(); i++) { Object next = iterator.next(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(IM_OTHEROUTBILL, new QFilter[]{new QFilter("id", QCP.equals, next)}); load[i] = dynamicObject; } //开始提交 OperateOption operateOption = OperateOption.create(); OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, IM_OTHEROUTBILL, load, operateOption); if (!sumbitResult.isSuccess()) { List allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) { String billMessage = iOperateInfo.getMessage(); errormsg = errormsg.append(";").append(billMessage); } } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) { errormsg = errormsg.append(";").append(sumbitResult.getMessage()); } else { errormsg = errormsg.append(";").append(sumbitResult.getInteractionContext().getSimpleMessage()); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } else { //开始审核 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_OTHEROUTBILL, load, operateOption); if (!auditResult.isSuccess()) { List allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo(); if (allErrorOrValidateInfo1.size() != 0) { for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) { String billMessage = iOperateInfo.getMessage(); errormsg = errormsg.append(";").append(billMessage); } } else if (StringUtils.isNotBlank(auditResult.getMessage())) { errormsg = errormsg.append(";").append(auditResult.getMessage()); } else { errormsg = errormsg.append(";").append(auditResult.getInteractionContext().getSimpleMessage()); } response.setMessage(errormsg.substring(1)); response.setCode("-1"); response.setFlag("failure"); return CustomApiResult.success(wmsXmlReturn); } } } //回传成功 return CustomApiResult.success(wmsXmlReturn); } }