diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java index bd321eed..5ce90f0d 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java @@ -10,9 +10,7 @@ import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO; import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO; import com.nflg.wms.admin.pojo.dto.ZWM3A18DTO; import com.nflg.wms.admin.util.JCoUtil; -import com.nflg.wms.common.constant.Constant; -import com.nflg.wms.common.constant.STATE; -import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.common.exception.SAPException; import com.nflg.wms.common.pojo.dto.*; import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.*; @@ -22,11 +20,11 @@ import com.nflg.wms.common.util.VUtil; import com.sap.conn.jco.*; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.slf4j.MDC; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; @Slf4j @Component @@ -1016,8 +1014,24 @@ public class SapService { parameters.put("S_DATE", DateTimeUtil.format(query.getStartDate(), "yyyyMMdd")); parameters.put("E_DATE", DateTimeUtil.format(query.getEndDate(), "yyyyMMdd")); + Map>> tables = new HashMap<>(); + if (CollectionUtil.isNotEmpty(query.getKostl())) { + tables.put("S_KOSTL", query.getKostl().stream().map(kostl -> { + Map map = new HashMap<>(); + map.put("KOSTL", kostl); + return map; + }).collect(Collectors.toList())); + } + if (CollectionUtil.isNotEmpty(query.getRsnum())) { + tables.put("S_RSNUM", query.getRsnum().stream().map(rsnum -> { + Map map = new HashMap<>(); + map.put("RSNUM", rsnum); + return map; + }).collect(Collectors.toList())); + } + // 调用 SAP RFC 函数 ZWM00_MB112 - JCoFunction function = exec("ZWM3A13", parameters, null); + JCoFunction function = exec("ZWM3A13", parameters, tables); // 处理返回表 T_RETURN,判断执行是否成功 JCoParameterList exportParam = function.getExportParameterList(); @@ -1050,8 +1064,25 @@ public class SapService { parameters.put("I_WERKS", query.getWerks()); parameters.put("S_DATE", DateTimeUtil.format(query.getStartDate(), "yyyyMMdd")); parameters.put("E_DATE", DateTimeUtil.format(query.getEndDate(), "yyyyMMdd")); + + Map>> tables = new HashMap<>(); + if (CollectionUtil.isNotEmpty(query.getKostl())) { + tables.put("S_KOSTL", query.getKostl().stream().map(kostl -> { + Map map = new HashMap<>(); + map.put("KOSTL", kostl); + return map; + }).collect(Collectors.toList())); + } + if (CollectionUtil.isNotEmpty(query.getRsnum())) { + tables.put("S_RSNUM", query.getRsnum().stream().map(rsnum -> { + Map map = new HashMap<>(); + map.put("RSNUM", rsnum); + return map; + }).collect(Collectors.toList())); + } + // 调用 SAP RFC 函数 ZWM00_MB112 - JCoFunction function = exec("ZWM3A14", parameters, null); + JCoFunction function = exec("ZWM3A14", parameters, tables); // 处理返回表 T_RETURN,判断执行是否成功 JCoParameterList exportParam = function.getExportParameterList(); VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息"); @@ -1110,7 +1141,7 @@ public class SapService { JCoTable returnTable = function.getTableParameterList().getTable("T_RETURN"); log.info("SAP返回: {}", returnTable); returnTable.setRow(0); - throw new NflgException(STATE.BusinessError, "SAP错误:" + returnTable.getString("MESSAGE")); + throw new SAPException(returnTable.getString("MESSAGE")); } } @@ -1322,7 +1353,7 @@ public class SapService { return function; } catch (JCoException e) { log.error("SAP调用异常", e); - throw new NflgException(STATE.BusinessError, "SAP调用异常:" + MDC.get(Constant.TRACE_ID)); + throw new SAPException(e.getMessage()); } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java index ff8efee3..664a7ea1 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java @@ -25,7 +25,8 @@ public enum STATE { BusinessError(115, "业务异常"), RequestMethodError(116, "请求方式错误"), InconsistentDataError(117, "需要用户确认"), - NoOrderData(118, "订单不存在"); + NoOrderData(118, "订单不存在"), + SAPErr(119, "SAP错误"); @Getter private final Integer state; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/exception/SAPException.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/exception/SAPException.java new file mode 100644 index 00000000..e145b326 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/exception/SAPException.java @@ -0,0 +1,17 @@ +package com.nflg.wms.common.exception; + +import com.nflg.wms.common.constant.STATE; +import lombok.Data; + +@Data +public class SAPException extends RuntimeException { + + public final STATE state; + private final String msg; + + public SAPException(String msg) { + super(msg); + this.state = STATE.SAPErr; + this.msg = msg; + } +} \ No newline at end of file diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialRequisitionQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialRequisitionQO.java index 5a2a4634..913a0178 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialRequisitionQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialRequisitionQO.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.experimental.Accessors; import java.time.LocalDate; +import java.util.List; import java.util.Objects; @Data @@ -67,4 +68,14 @@ public class DepartmentMaterialRequisitionQO { } return endDate; } + + /** + * 预留/相关需求的编号 + */ + private List rsnum; + + /** + * 成本中心 + */ + private List kostl; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialReturnSlipQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialReturnSlipQO.java index 4d4c1ba9..4675345a 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialReturnSlipQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/DepartmentMaterialReturnSlipQO.java @@ -5,6 +5,7 @@ import lombok.Data; import lombok.experimental.Accessors; import java.time.LocalDate; +import java.util.List; import java.util.Objects; @Data @@ -34,4 +35,14 @@ public class DepartmentMaterialReturnSlipQO { } return endDate; } + + /** + * 预留/相关需求的编号 + */ + private List rsnum; + + /** + * 成本中心 + */ + private List kostl; } diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java index 6976370c..dc970d73 100644 --- a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.common.exception.SAPException; import com.nflg.wms.common.pojo.ApiResult; import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; @@ -74,4 +75,10 @@ public class GlobalRestControllerAdvice { log.error("请求的地址无效: ", ex); return ApiResult.error(STATE.BusinessError, "请求的地址无效:" + ex.getResourcePath()); } + + @ExceptionHandler(SAPException.class) + public ApiResult handleSAPException(SAPException ex) { + log.error("SAP错误: ", ex); + return ApiResult.error(ex.getState(), "SAP错误:" + ex.getMessage()); + } } \ No newline at end of file