463 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			463 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Java
		
	
	
	
| package tqq9.lc123.cloud.app.api.controller;
 | |
| 
 | |
| import com.alibaba.fastjson.JSONArray;
 | |
| import com.alibaba.fastjson.JSONObject;
 | |
| import com.drew.lang.annotations.NotNull;
 | |
| import kd.bos.dataentity.OperateOption;
 | |
| import kd.bos.dataentity.entity.DynamicObject;
 | |
| import kd.bos.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.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 = "WMSPurInController", desc = "WMS-入库回传")
 | |
| public class WMSPurInController {
 | |
| 
 | |
|     private static String RECEIPTNOTICE = "pm_receiptnotice";//收货通知单
 | |
|     private static String PURINBILL = "im_purinbill";//采购入库单
 | |
|     private static String BILLENTRY = "billentry";//收货通知单分录,采购退货申请单分录
 | |
|     private static String PM_PURREFUNDAPPLYBILL = "pm_purrefundapplybill";//采购退货申请单
 | |
|     private static String TQQ9_OTHERINAPPLY = "tqq9_otherinapply";//其他入库申请
 | |
|     private static String IM_OTHERINBILL = "im_otherinbill";//其他入库
 | |
| 
 | |
|     @ApiPostMapping(value = "/WMSPushPurIn", desc = "WMS-入库回传")
 | |
|     public CustomApiResult<ApiResultExt> WMS_PurInPush
 | |
|             (
 | |
|                     @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);
 | |
| //        Gson gson = new Gson();
 | |
| //        HashMap<String, Object> data = gson.fromJson(dataString, HashMap.class);
 | |
| //        String VoucherType = (String) data.get("VoucherType");//单据类型
 | |
|         String billno = erpOrderCode;//收货通知单编号
 | |
| //        JSONArray details = (JSONArray) data.get("details");
 | |
|         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);
 | |
| 
 | |
|         //判断回传类型
 | |
|         String entityType = "";
 | |
|         switch (VoucherType) {
 | |
|             case "pm_receiptnotice":
 | |
|                 entityType = "im_purinbill";
 | |
|                 break;
 | |
|             case "pm_purrefundapplybill":
 | |
|                 entityType = "im_purinbill";
 | |
|                 break;
 | |
|             case "tqq9_otherinapply":
 | |
|                 entityType = "im_otherinbill";
 | |
|                 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 (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);
 | |
|             }
 | |
|             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("pm_receiptnotice", VoucherType)) {
 | |
|             //查询单据在金蝶系统中是否存在
 | |
|             DynamicObject receiptnotice = BusinessDataServiceHelper.loadSingle(RECEIPTNOTICE, new QFilter[]{new QFilter("billno", QCP.equals, billno)});
 | |
|             if (receiptnotice == null) {
 | |
|                 errormsg = "根据传入编号:" + billno + "未找到对应收货通知单";
 | |
|                 resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt);
 | |
|                 return CustomApiResult.success(resultExt);
 | |
|             }
 | |
|             //参数值组装
 | |
|             Long id = receiptnotice.getLong("id");
 | |
|             Map<String, Object> param = new HashMap<>();//传入转换规则处理参数
 | |
|             HashMap<Long, Set<Long>> entitypkMap = new HashMap<>();//上下游id映射Map
 | |
|             JSONObject detailObject = new JSONObject();
 | |
|             for (Object detail : details) {
 | |
|                 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.put(entryId, detailObject);
 | |
|             }
 | |
|             //开始下推
 | |
|             String rule = BotpParamUtils.getBotpRuleId(RECEIPTNOTICE, PURINBILL, "收货通知单_采购入库单_转换规则");
 | |
|             PushArgs pushArgs = BotpParamUtils.getPushArgs(RECEIPTNOTICE, PURINBILL, 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(PURINBILL, 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, RECEIPTNOTICE, 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, PURINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     }
 | |
|                 } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) {
 | |
|                     HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), PURINBILL);
 | |
|                     results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                 } else {
 | |
|                     HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), PURINBILL);
 | |
|                     results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                 }
 | |
|             } else {
 | |
|                 //开始审核
 | |
|                 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, RECEIPTNOTICE, 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, PURINBILL);
 | |
|                             results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                         }
 | |
|                     } else if (StringUtils.isNotBlank(auditResult.getMessage())) {
 | |
|                         HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), PURINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     } else {
 | |
|                         HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), PURINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             //采购退货单
 | |
|         } else if (StringUtils.equals("pm_purrefundapplybill", VoucherType)) {
 | |
|             //查询单据在金蝶系统中是否存在
 | |
|             DynamicObject pm_purrefundapplybill = BusinessDataServiceHelper.loadSingle(PM_PURREFUNDAPPLYBILL, new QFilter[]{new QFilter("billno", QCP.equals, billno)});
 | |
|             if (pm_purrefundapplybill == null) {
 | |
|                 errormsg = "根据传入编号:" + billno + "未找到对应采购退货单";
 | |
|                 resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt);
 | |
|                 return CustomApiResult.success(resultExt);
 | |
|             }
 | |
|             //参数值组装
 | |
|             Long id = pm_purrefundapplybill.getLong("id");
 | |
|             Map<String, Object> param = new HashMap<>();//传入转换规则处理参数
 | |
|             HashMap<Long, Set<Long>> entitypkMap = new HashMap<>();//上下游id映射Map
 | |
|             JSONObject detailObject = new JSONObject();
 | |
|             for (Object detail : details) {
 | |
|                 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.put(entryId, detailObject);
 | |
|             }
 | |
|             //开始下推
 | |
|             String rule = BotpParamUtils.getBotpRuleId(PM_PURREFUNDAPPLYBILL, PURINBILL, "采购退货申请_采购入库_转换规则_扩展");
 | |
|             PushArgs pushArgs = BotpParamUtils.getPushArgs(PM_PURREFUNDAPPLYBILL, PURINBILL, 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()];
 | |
|             HashMap<Object, String> reMap = new HashMap<Object, String>();
 | |
|             Iterator<Object> iterator = targetBillIds.iterator();
 | |
|             for (int i = 0; iterator.hasNext(); i++) {
 | |
|                 Object next = iterator.next();
 | |
|                 DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(PURINBILL, new QFilter[]{new QFilter("id", QCP.equals, next)});
 | |
|                 load[i] = dynamicObject;
 | |
|                 reMap.put(dynamicObject.get("id"), dynamicObject.getString("billno"));
 | |
|                 resultBean.setId(next.toString());
 | |
|                 resultBean.setBillStatus(true);
 | |
|             }
 | |
| //            results.add(resultBean);
 | |
|             //开始提交
 | |
|             OperateOption operateOption = OperateOption.create();
 | |
|             OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, PM_PURREFUNDAPPLYBILL, 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, PURINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     }
 | |
|                 } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) {
 | |
|                     HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), PURINBILL);
 | |
|                     results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                 } else {
 | |
|                     HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), PURINBILL);
 | |
|                     results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                 }
 | |
|             } else {
 | |
|                 //开始审核
 | |
|                 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, PM_PURREFUNDAPPLYBILL, 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, PURINBILL);
 | |
|                             results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                         }
 | |
|                     } else if (StringUtils.isNotBlank(auditResult.getMessage())) {
 | |
|                         HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), PURINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     } else {
 | |
|                         HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), PURINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             //其他入库申请单
 | |
|         } else if (StringUtils.equals("tqq9_otherinapply", VoucherType)) {
 | |
|             //查询单据在金蝶系统中是否存在
 | |
|             DynamicObject tqq9_otherinapply = BusinessDataServiceHelper.loadSingle(TQQ9_OTHERINAPPLY, new QFilter[]{new QFilter("billno", QCP.equals, billno)});
 | |
|             if (tqq9_otherinapply == null) {
 | |
|                 errormsg = "根据传入编号:" + billno + "未找到对应其他入库申请单";
 | |
|                 resultExt = ApiResultExt.errorRetrun(entityType, errormsg, error, resultExt);
 | |
|                 return CustomApiResult.success(resultExt);
 | |
|             }
 | |
|             //组装参数值
 | |
|             Long id = tqq9_otherinapply.getLong("id");
 | |
|             Map<String, Object> param = new HashMap<>();//传入转换规则处理参数
 | |
|             HashMap<Long, Set<Long>> entitypkMap = new HashMap<>();//上下游id映射Map
 | |
|             JSONObject detailObject = new JSONObject();
 | |
|             for (Object detail : details) {
 | |
|                 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.put(entryId, detailObject);
 | |
|             }
 | |
|             //开始下推
 | |
|             String rule = BotpParamUtils.getBotpRuleId(TQQ9_OTHERINAPPLY, IM_OTHERINBILL, "其他入库申请_其他入库_转换规则");
 | |
|             PushArgs pushArgs = BotpParamUtils.getPushArgs(TQQ9_OTHERINAPPLY, IM_OTHERINBILL, 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()];
 | |
|             HashMap<Object, String> reMap = new HashMap<Object, String>();
 | |
|             Iterator<Object> iterator = targetBillIds.iterator();
 | |
|             for (int i = 0; iterator.hasNext(); i++) {
 | |
|                 Object next = iterator.next();
 | |
|                 DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(IM_OTHERINBILL, new QFilter[]{new QFilter("id", QCP.equals, next)});
 | |
|                 load[i] = dynamicObject;
 | |
|                 reMap.put(dynamicObject.get("id"), dynamicObject.getString("billno"));
 | |
|                 resultBean.setId(next.toString());
 | |
|                 resultBean.setBillStatus(true);
 | |
|             }
 | |
| //            results.add(resultBean);
 | |
|             //开始提交
 | |
|             OperateOption operateOption = OperateOption.create();
 | |
|             OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, TQQ9_OTHERINAPPLY, 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_OTHERINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     }
 | |
|                 } else if (StringUtils.isNotBlank(sumbitResult.getMessage())) {
 | |
|                     HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getMessage(), IM_OTHERINBILL);
 | |
|                     results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                 } else {
 | |
|                     HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, sumbitResult.getInteractionContext().getSimpleMessage(), IM_OTHERINBILL);
 | |
|                     results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                 }
 | |
| 
 | |
|             } else {
 | |
|                 //开始审核
 | |
|                 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, TQQ9_OTHERINAPPLY, 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_OTHERINBILL);
 | |
|                             results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                         }
 | |
|                     } else if (StringUtils.isNotBlank(auditResult.getMessage())) {
 | |
|                         HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getMessage(), IM_OTHERINBILL);
 | |
|                         results = (List<ApiResultExt.ResultBean>) returnMap.get("ResultBeanList");
 | |
|                     } else {
 | |
|                         HashMap<String, Object> returnMap = resultExt.addOneErrorToResultBeanByNumber(results, auditResult.getInteractionContext().getSimpleMessage(), IM_OTHERINBILL);
 | |
|                         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);
 | |
| 
 | |
| 
 | |
|     }
 | |
| 
 | |
| } |