diff --git a/src/main/java/com/gaotao/modules/oa/dto/ProductionOrderItemDto.java b/src/main/java/com/gaotao/modules/oa/dto/ProductionOrderItemDto.java index f603565..dd6484b 100644 --- a/src/main/java/com/gaotao/modules/oa/dto/ProductionOrderItemDto.java +++ b/src/main/java/com/gaotao/modules/oa/dto/ProductionOrderItemDto.java @@ -120,7 +120,7 @@ public class ProductionOrderItemDto { /** * 客户编码 */ - @NotBlank(message = "客户编码不能为空") +// @NotBlank(message = "客户编码不能为空") private String customerId; /** diff --git a/src/main/java/com/gaotao/modules/production/controller/ProductionIssueReturnController.java b/src/main/java/com/gaotao/modules/production/controller/ProductionIssueReturnController.java index 697c475..6753192 100644 --- a/src/main/java/com/gaotao/modules/production/controller/ProductionIssueReturnController.java +++ b/src/main/java/com/gaotao/modules/production/controller/ProductionIssueReturnController.java @@ -272,7 +272,7 @@ public class ProductionIssueReturnController { } catch (Exception e) { logger.error("确认保存失败", e); - return R.error("保存失败: " + e.getMessage()); + return R.error(e.getMessage()); } } diff --git a/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueReturnServiceImpl.java b/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueReturnServiceImpl.java index 7692d12..e783fa4 100644 --- a/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueReturnServiceImpl.java +++ b/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueReturnServiceImpl.java @@ -1,5 +1,6 @@ package com.gaotao.modules.production.service.impl; +import com.gaotao.modules.erp.service.ErpInterfaceService; import com.gaotao.modules.production.dao.ProductionIssueReturnMapper; import com.gaotao.modules.production.service.ProductionIssueReturnService; import com.gaotao.modules.production.vo.IssueReturnVO; @@ -29,6 +30,9 @@ public class ProductionIssueReturnServiceImpl implements ProductionIssueReturnSe @Autowired private ProcedureMapper procedureMapper; + @Autowired + private ErpInterfaceService erpInterfaceService; + @Override public List> searchIssueOrders(String site, String buNo, String searchKey, Integer limit) { logger.info("搜索领料工单,站点: {}, BU: {}, 搜索关键词: {}, 限制数量: {}", site, buNo, searchKey, limit); @@ -155,43 +159,118 @@ public class ProductionIssueReturnServiceImpl implements ProductionIssueReturnSe logger.info("确认保存生产领退料,站点: {}, BU: {}, 退库工单: {}, 领料工单: {}, 工序: {}, 库位: {}, 用户: {}", site, buNo, returnOrderNo, issueOrderNo, operationSeq, locationCode, userName); + // 保存两次存储过程返回的结果,用于异步调用ERP接口 + Map returnResult = null; + Map issueResult = null; + try { - // 调用存储过程 GetSaveLabelVerification - // EXEC GetSaveLabelVerification site, buNo, '', 退库工单, '', 领料工单, 工序号, 库位, '生产领退料', 当前登陆人 - List params = new ArrayList<>(); - params.add(site); // param1: site - params.add(buNo); // param2: buNo - params.add(""); // param3: 空 - params.add(returnOrderNo); // param4: 退库工单 - params.add(""); // param5: 空 - params.add(issueOrderNo != null ? issueOrderNo : ""); // param6: 领料工单 - params.add(operationSeq != null ? operationSeq : ""); // param7: 工序号 - params.add(locationCode != null ? locationCode : ""); // param8: 库位 - params.add("生产领退料"); // param9: 操作类型 - params.add(userName); // param10: 当前登陆人 + // ============================================================ + // 第一步:调用存储过程 GetSaveLabelVerification,传 type = "生产退料" + // ============================================================ + logger.info("开始调用生产退料存储过程..."); + List returnParams = new ArrayList<>(); + returnParams.add(site); // param1: site + returnParams.add(buNo); // param2: buNo + returnParams.add(""); // param3: 空 + returnParams.add(returnOrderNo); // param4: 退库工单 + returnParams.add(""); // param5: 空 + returnParams.add(issueOrderNo != null ? issueOrderNo : ""); // param6: 领料工单 + returnParams.add(operationSeq != null ? operationSeq : ""); // param7: 工序号 + returnParams.add(locationCode != null ? locationCode : ""); // param8: 库位 + returnParams.add("生产领退料-退料"); // param9: 操作类型(生产退料) + returnParams.add(userName); // param10: 当前登陆人 - List> resultList = procedureMapper.getProcedureData("GetSaveLabelVerification", params); + List> returnResultList = procedureMapper.getProcedureData("GetSaveLabelVerification", returnParams); // 取第一条结果 - Map result = new HashMap<>(); - if (resultList != null && !resultList.isEmpty()) { - result = resultList.get(0); + if (returnResultList != null && !returnResultList.isEmpty()) { + returnResult = returnResultList.get(0); + } else { + returnResult = new HashMap<>(); } // 检查返回的code,如果不是200则抛出异常 - Object code = result.get("code"); - if (code == null || !"200".equals(code.toString())) { - String msg = result.get("message") != null ? result.get("message").toString() : "保存失败"; - logger.error("存储过程返回错误: {}", msg); + Object returnCode = returnResult.get("code"); + if (returnCode == null || !"200".equals(returnCode.toString())) { + String msg = returnResult.get("message") != null ? returnResult.get("message").toString() : "生产退料保存失败"; + logger.error("生产退料存储过程返回错误: {}", msg); + throw new RuntimeException(msg); + } + logger.info("生产退料存储过程调用成功"); + + // ============================================================ + // 第二步:调用存储过程 GetSaveLabelVerification,传 type = "生产领料" + // ============================================================ + logger.info("开始调用生产领料存储过程..."); + List issueParams = new ArrayList<>(); + issueParams.add(site); // param1: site + issueParams.add(buNo); // param2: buNo + issueParams.add(""); // param3: 空 + issueParams.add(returnOrderNo); // param4: 退库工单 + issueParams.add(""); // param5: 空 + issueParams.add(issueOrderNo != null ? issueOrderNo : ""); // param6: 领料工单 + issueParams.add(operationSeq != null ? operationSeq : ""); // param7: 工序号 + issueParams.add(locationCode != null ? locationCode : ""); // param8: 库位 + issueParams.add("生产领退料-领料"); // param9: 操作类型(生产领料) + issueParams.add(userName); // param10: 当前登陆人 + + List> issueResultList = procedureMapper.getProcedureData("GetSaveLabelVerification", issueParams); + + // 取第一条结果 + if (issueResultList != null && !issueResultList.isEmpty()) { + issueResult = issueResultList.get(0); + } else { + issueResult = new HashMap<>(); + } + + // 检查返回的code,如果不是200则抛出异常 + Object issueCode = issueResult.get("code"); + if (issueCode == null || !"200".equals(issueCode.toString())) { + String msg = issueResult.get("message") != null ? issueResult.get("message").toString() : "生产领料保存失败"; + logger.error("生产领料存储过程返回错误: {}", msg); throw new RuntimeException(msg); } + logger.info("生产领料存储过程调用成功"); + + // ============================================================ + // 第三步:两次存储过程都成功后,异步调用ERP接口 + // 先调用生产退料接口,再调用生产领料接口 + // ============================================================ + + // 异步调用生产退料ERP接口 + try { + String returnSite = String.valueOf(returnResult.get("Site")); + String returnBuNo = String.valueOf(returnResult.get("buNo")); + String returnTransNo = String.valueOf(returnResult.get("transNo")); + + logger.info("生产退料存储过程执行成功,准备异步调用ERP接口,site={}, buNo={}, transNo={}", + returnSite, returnBuNo, returnTransNo); + + erpInterfaceService.asyncCallErpInterface(returnSite, returnBuNo, returnTransNo); + } catch (Exception e) { + logger.error("异步调用生产退料ERP接口触发失败(不影响主流程),退库工单: {}, 错误: {}", returnOrderNo, e.getMessage(), e); + } + + // 异步调用生产领料ERP接口 + try { + String issueSite = String.valueOf(issueResult.get("Site")); + String issueBuNo = String.valueOf(issueResult.get("buNo")); + String issueTransNo = String.valueOf(issueResult.get("transNo")); + + logger.info("生产领料存储过程执行成功,准备异步调用ERP接口,site={}, buNo={}, transNo={}", + issueSite, issueBuNo, issueTransNo); + + erpInterfaceService.asyncCallErpInterface(issueSite, issueBuNo, issueTransNo); + } catch (Exception e) { + logger.error("异步调用生产领料ERP接口触发失败(不影响主流程),领料工单: {}, 错误: {}", issueOrderNo, e.getMessage(), e); + } - logger.info("确认保存成功"); + logger.info("确认保存生产领退料成功"); return true; } catch (Exception e) { logger.error("确认保存失败,错误信息: {}", e.getMessage(), e); - throw new RuntimeException("确认保存失败: " + e.getMessage(), e); + throw new RuntimeException(e.getMessage(), e); } }