lc/lc123/cloud/app/api/controller/WMSSaleOutController.java

1091 lines
67 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<String, String> billTypeMap = new HashMap<String, String>() {{
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<ApiResultExt> 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<ApiResultExt.ResultBean> 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<String> 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<String, Set<JSONObject>> param = new HashMap<>();//传入转换规则处理参数
HashMap<Long, Set<Long>> 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<SourceBillReport> 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<Object> targetBillIds = pushResult.getTargetBillIds();
DynamicObject[] load = new DynamicObject[targetBillIds.size()];
Iterator<Object> 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<IOperateInfo> allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo();
if (allErrorOrValidateInfo.size() != 0) {
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
HashMap<String, Object> returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else if (StringUtils.isNotBlank(sumbitResult.getMessage())) {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
} else {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else {
//开始审核
OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_SALOUTBILL, load, operateOption);
if (!auditResult.isSuccess()) {
List<IOperateInfo> allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo();
if (allErrorOrValidateInfo1.size() != 0) {
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) {
HashMap<String, Object> returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else if (StringUtils.isNotBlank(auditResult.getMessage())) {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
} else {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) 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<String, Set<JSONObject>> param = new HashMap<>();//传入转换规则处理参数
HashMap<Long, Set<Long>> 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<SourceBillReport> 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<Object> targetBillIds = pushResult.getTargetBillIds();
DynamicObject[] load = new DynamicObject[targetBillIds.size()];
Iterator<Object> 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<IOperateInfo> allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo();
if (allErrorOrValidateInfo.size() != 0) {
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
HashMap<String, Object> returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else if (StringUtils.isNotBlank(sumbitResult.getMessage())) {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
} else {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else {
//开始审核
OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_SALOUTBILL, load, operateOption);
if (!auditResult.isSuccess()) {
List<IOperateInfo> allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo();
if (allErrorOrValidateInfo1.size() != 0) {
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) {
HashMap<String, Object> returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else if (StringUtils.isNotBlank(auditResult.getMessage())) {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
} else {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), IM_SALOUTBILL);
results = (List<ApiResultExt.ResultBean>) 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<String, Set<JSONObject>> param = new HashMap<>();//传入转换规则处理参数
HashMap<Long, Set<Long>> 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<SourceBillReport> 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<Object> targetBillIds = pushResult.getTargetBillIds();
DynamicObject[] load = new DynamicObject[targetBillIds.size()];
Iterator<Object> 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<IOperateInfo> allErrorOrValidateInfo = sumbitResult.getAllErrorOrValidateInfo();
if (allErrorOrValidateInfo.size() != 0) {
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo) {
HashMap<String, Object> returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_OTHEROUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else if (StringUtils.isNotBlank(sumbitResult.getMessage())) {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), IM_OTHEROUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
} else {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), IM_OTHEROUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else {
//开始审核
OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_OTHEROUTBILL, load, operateOption);
if (!auditResult.isSuccess()) {
List<IOperateInfo> allErrorOrValidateInfo1 = auditResult.getAllErrorOrValidateInfo();
if (allErrorOrValidateInfo1.size() != 0) {
for (IOperateInfo iOperateInfo : allErrorOrValidateInfo1) {
HashMap<String, Object> returnMap = resultExt.addErrorToResultBeanByNumber(results, iOperateInfo, IM_OTHEROUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
}
} else if (StringUtils.isNotBlank(auditResult.getMessage())) {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), IM_OTHEROUTBILL);
results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
} else {
HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), IM_OTHEROUTBILL);
results = (List<ApiResultExt.ResultBean>) 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<WMSXmlReturn> WMS_SaleOutnPush_SH
(@NotNull @ApiParam(value = "入参", required = true) Map<String, Object> 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<String> 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<String, Set<JSONObject>> param = new HashMap<>();//传入转换规则处理参数
HashMap<Long, Set<Long>> 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<SourceBillReport> 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<Object> targetBillIds = pushResult.getTargetBillIds();
DynamicObject[] load = new DynamicObject[targetBillIds.size()];
Iterator<Object> 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<IOperateInfo> 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<IOperateInfo> 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<String, Set<JSONObject>> param = new HashMap<>();//传入转换规则处理参数
HashMap<Long, Set<Long>> 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<SourceBillReport> 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<Object> targetBillIds = pushResult.getTargetBillIds();
DynamicObject[] load = new DynamicObject[targetBillIds.size()];
Iterator<Object> 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<IOperateInfo> 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<IOperateInfo> 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<String, Set<JSONObject>> param = new HashMap<>();//传入转换规则处理参数
HashMap<Long, Set<Long>> 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<SourceBillReport> 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<Object> targetBillIds = pushResult.getTargetBillIds();
DynamicObject[] load = new DynamicObject[targetBillIds.size()];
Iterator<Object> 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<IOperateInfo> 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<IOperateInfo> 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);
}
}