feat(wms): 新增多个SAP接口及相关数据结构

- 新增了多个SAP接口方法,包括生产领料单查询、生成领料出库、补料单查询等
- 新增了多个相关的请求和响应对象,如Zwm3a03QO、Zwm3a07VO等
- 优化了部分现有接口的实现
This commit is contained in:
zhangke 2025-08-10 23:02:40 +08:00
parent 39c77df87d
commit 90e4490a07
28 changed files with 1159 additions and 6 deletions

View File

@ -163,7 +163,7 @@ public class CenterOutboundControllerService {
.setCreateTime(LocalDateTime.now())
.setCreateUserName(UserUtil.getUserName())
.setCreateUserId(UserUtil.getUserId())
.setWorkstation(request.getRkpfWempf());
.setWorkstation(request.getWempf());
List<WmsCenterOutboundItem> wmsCenterOutboundItems = new ArrayList<>();
List<WmsCenterOutboundScan> wmsCenterOutboundScans = new ArrayList<>();

View File

@ -3,6 +3,7 @@ package com.nflg.wms.admin.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO;
import com.nflg.wms.admin.pojo.dto.ZIM003105DTO;
import com.nflg.wms.admin.pojo.dto.ZIM003DTO;
@ -11,10 +12,13 @@ import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.dto.*;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.qo.Zwm3a07QO;
import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.sap.conn.jco.*;
import jakarta.annotation.Resource;
import jdk.jshell.execution.Util;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
@ -554,7 +558,7 @@ public class SapService {
return map;
}
/**
/**
* 成本中心领料查询接口
* <p>
* 根据预留单号resebRsNum调用SAP的RFC函数ZWM00_MB026查询对应的成本中心领料信息
@ -563,7 +567,6 @@ public class SapService {
* @param resebRsNum 预留单号不能为空
* @return C_MaterialOutboundQueryDTO 领料查询结果数据传输对象包含主信息和明细列表
*/
//成本中心领料查询
public C_MaterialOutboundQueryDTO zwm00_MB026(String resebRsNum) {
// 参数校验
VUtil.trueThrowBusinessError(resebRsNum == null || resebRsNum.isEmpty()).throwMessage("请求参数不能为空");
@ -605,6 +608,17 @@ public class SapService {
}
/**
* 成本中心预留出库过账接口
* 调用SAP RFC函数 ZWM00_MB115 执行物料出库操作
* <p>
* 该方法首先校验请求参数中的物料明细是否为空然后构造调用SAP所需的输入参数和表结构
* 包括 T_LIST1 T_LIST2根据是否存在扫码信息决定数据填充方式
* 最后调用SAP函数并处理返回结果构造并返回出库凭证信息
*
* @param request 物料出库请求对象包含预留号用户信息及物料明细列表
* @return C_MaterialOutboundDTO 出库操作成功后返回的物料凭证信息包括物料凭证号MBLNR和年度MJAHR
*/
public C_MaterialOutboundDTO ZWM00_MB115(C_MaterialOutboundQO request) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getItems())).throwMessage("物料明细不能为空");
@ -666,6 +680,7 @@ public class SapService {
return result;
}
// 提取构造 T_LIST1 表项的方法
private Map<String, Object> buildMb115TList1Map(C_MaterialOutboundItemQO item, BigDecimal erFmg, String charg) {
Map<String, Object> map = new HashMap<>(8); // 预设容量避免频繁扩容
@ -688,8 +703,455 @@ public class SapService {
return map;
}
/**
* 生产领料单查询接口
* <p>
* 该方法用于调用SAP的RFC函数ZWM3A07根据传入的查询条件获取生产领料单信息
* 查询条件包括工厂代码工序生产订单号和库存地点等
* 返回结果包含主表信息和明细项列表
*
* @param query 查询参数对象包含工厂代码必填工序列表生产订单号列表库存地点列表等
* @return Zwm3a07VO 包含查询结果的VO对象包括主表字段和明细项列表
*/
//生产领料单查询接口
public Zwm3a07VO zwm3a07(Zwm3a07QO query) {
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
VUtil.trueThrowBusinessError(query.getI_werks().isEmpty()).throwMessage("工厂代码不可以为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("I_WERKS", query.getI_werks());
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
// 构造工序参数表 I_ARBPL
if (CollectionUtil.isNotEmpty(query.getArbpl())) {
List<Map<String, Object>> t_list1 = new ArrayList<>();
query.getArbpl().forEach(arbpl -> {
t_list1.add(Map.of("ARBPL", arbpl));
});
tables.put("I_ARBPL", t_list1);
}
// 构造生产订单号参数表 I_AUFNR
if (CollectionUtil.isNotEmpty(query.getAufnr())) {
List<Map<String, Object>> t_list2 = new ArrayList<>();
query.getAufnr().forEach(aufnr -> {
t_list2.add(Map.of("AUFNR", aufnr));
});
tables.put("I_AUFNR", t_list2);
}
// 构造库存地点参数表 I_LGORT
if (CollectionUtil.isNotEmpty(query.getLgort())) {
List<Map<String, Object>> t_list3 = new ArrayList<>();
query.getLgort().forEach(lgort -> {
t_list3.add(Map.of("LGORT", lgort));
});
tables.put("I_LGORT", t_list3);
}
// 调用SAP RFC函数 ZWM3A07
JCoFunction function = exec("ZWM3A07", parameters, tables);
// 获取输出表 OUTPUT1 并解析数据
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
Zwm3a07VO result = new Zwm3a07VO();
if (tOut.getNumRows() > 0) {
for (int i = 0; i < tOut.getNumRows(); i++) {
tOut.setRow(i);
// 设置主表字段仅第一行设置一次
if (i == 0) {
result.setAufnr(tOut.getString("AUFNR"))
.setRsnum(tOut.getString("RSNUM"))
.setPlnbez(tOut.getString("PLNBEZ"))
.setMaktx(tOut.getString("MAKTX"))
.setVornr(tOut.getString("VORNR"))
.setSernr(tOut.getString("SERNR"))
.setJtsn(tOut.getString("JTSN"))
.setCusn(tOut.getString("CUSN"))
.setKtext(tOut.getString("KTEXT"))
.setDwerk(tOut.getString("DWERK"))
.setName(tOut.getString("NAME"));
}
// 构造并填充明细项
Zwm3a07ItemVO item = new Zwm3a07ItemVO();
item.setQlsl(tOut.getString("QLSL"))
.setSqsl(tOut.getString("SQSL"))
.setMatnr(tOut.getString("MATNR"))
.setBdter(tOut.getString("BDTER"))
.setRspos(tOut.getString("RSPOS"))
.setSqsl2(tOut.getString("SQSL2"))
.setSqsl3(tOut.getString("SQSL3"))
.setEnmng(tOut.getString("ENMNG"))
.setBdmng(tOut.getString("BDMNG"))
.setLabst(tOut.getString("LABST"))
.setKcqls(tOut.getString("KCQLS"))
.setLgort2(tOut.getString("LGORT2"))
.setMeins(tOut.getString("MEINS"))
.setLgpbe(tOut.getString("LGPBE"))
.setInsme(tOut.getString("INSME"))
.setRsnum2(tOut.getString("RSNUM2"))
.setMaktx2(tOut.getString("MAKTX2"))
.setEkgrp(tOut.getString("EKGRP"))
.setDispo(tOut.getString("DISPO"));
result.getItems().add(item);
}
}
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 生成领料出库接口
* <p>
* 该方法用于调用 SAP RFC 函数 ZWM3A10执行领料出库操作首先校验输入参数
* 然后构造函数所需的输入参数和表数据调用 SAP 接口并处理返回结果
* </p>
*
* @param query 查询参数对象包含领料出库所需的信息如订单号物料明细等
* 不能为空且至少包含一个物料明细项
* @return Zwm3a10VO 返回结果对象包含生成的物料凭证号MAT_DOC和凭证年度DOC_YEAR
*/
//生成领料出库接口
public Zwm3a10VO zwm3A10(Zwm3a10QO query) {
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(query.getInput1())).throwMessage("物料明细不能为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("AUFNR", query.getAufnr());
// 将构造好的表数据放入输入参数中
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
// 构造 INPUT1 表数据包含物料相关明细信息
if (CollectionUtil.isNotEmpty(query.getInput1())) {
List<Map<String, Object>> t_list1 = new ArrayList<>();
query.getInput1().forEach(input -> {
t_list1.add(Map.of("RSPOS", input.getRspos()));
t_list1.add(Map.of("MATNR", input.getMatnr()));
t_list1.add(Map.of("MAKTX", input.getMaktx()));
t_list1.add(Map.of("WERKS", input.getWerks()));
t_list1.add(Map.of("LGORT", input.getLgort()));
t_list1.add(Map.of("MENGE", input.getMenge()));
t_list1.add(Map.of("MENGE_T", input.getMengeT()));
t_list1.add(Map.of("MEINS", input.getMeins()));
t_list1.add(Map.of("CHARG", input.getCharg()));
});
tables.put("INPUT1", t_list1);
}
// 构造 INPUT2 表数据包含序列号相关信息
if (CollectionUtil.isNotEmpty(query.getInput2())) {
List<Map<String, Object>> t_list2 = new ArrayList<>();
query.getInput2().forEach(input -> {
t_list2.add(Map.of("SERNR", input.getSernr()));
t_list2.add(Map.of("RSPOS", input.getRspos()));
});
tables.put("INPUT2", t_list2);
}
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A10", parameters, tables);
// 处理返回表 T_RETURN判断执行是否成功
JCoTable returnTable = function.getTableParameterList().getTable("OUTPUT2");
VUtil.trueThrowBusinessError(returnTable.getNumRows() <= 0).throwMessage("获取Type信息有误");
returnTable.setRow(0);
VUtil.trueThrowBusinessError(!StrUtil.equals(returnTable.getString("TYPE"), "S"))
.throwMessage(returnTable.getString("MESSAGE"));
log.info("SAP返回: {}", returnTable);
// 获取导出参数构造返回结果对象
JCoParameterList exportParam = function.getExportParameterList();
VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息");
Zwm3a10VO result = new Zwm3a10VO()
.setMat_doc(exportParam.getString("MAT_DOC"))
.setDocYear(exportParam.getString("DOC_YEAR"));
log.info("SAP返回物料凭证信息: MBLNR={}, MJAHR={}", result.getMat_doc(), result.getDocYear());
return result;
}
//委外订单发料查询接口
public Zwm3a03VO zwm3a03(Zwm3a03QO query) {
return null;
}
//委外订单发料出库接口
public List<Zwm3a04VO> zwm3a04(Zwm3a04QO query) {
return null;
}
/**
* 生成补料单接口
* <p>
* 该方法用于调用 SAP RFC 函数 ZWM3A08根据传入的查询条件获取补料单数据
* 查询参数包括工厂代码工序列表和生产订单号列表等
*
* @param query 查询参数对象包含工厂代码I_WERKS工序列表I_ARBPL和订单号列表I_AUFNR等字段
* @return 返回封装后的补料单结果对象 Zwm3a08VO包含主信息及明细项列表
*/
public Zwm3a08VO zwm3a08(Zwm3a08QO query) {
// 校验查询参数是否为空
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
// 校验工厂代码是否为空
VUtil.trueThrowBusinessError(query.getI_werks().isEmpty()).throwMessage("工厂代码不可以为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("I_WERKS", query.getI_werks());
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
// 封装工序列表参数
if (CollectionUtil.isNotEmpty(query.getI_arbpl())) {
List<Map<String, Object>> t_list1 = new ArrayList<>();
query.getI_arbpl().forEach(arbpl -> {
t_list1.add(Map.of("ARBPL", arbpl));
});
tables.put("I_ARBPL", t_list1);
}
// 封装订单号列表参数
if (CollectionUtil.isNotEmpty(query.getI_aufnr())) {
List<Map<String, Object>> t_list2 = new ArrayList<>();
query.getI_aufnr().forEach(aufnr -> {
t_list2.add(Map.of("AUFNR", aufnr));
});
tables.put("I_AUFNR", t_list2);
}
// 调用 SAP RFC 函数
JCoFunction function = exec("ZWM3A08", parameters, tables);
// 获取输出表 OUTPUT1 数据
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
// 构造并填充返回结果对象
Zwm3a08VO result = new Zwm3a08VO();
if (tOut.getNumRows() > 0) {
for (int i = 0; i < tOut.getNumRows(); i++) {
tOut.setRow(i);
if (i == 0) {
result.setAufnr(tOut.getString("AUFNR"))
.setRsnum(tOut.getString("RSNUM"))
.setPlnbez(tOut.getString("PLNBEZ"))
.setMaktx(tOut.getString("MAKTX"))
.setVornr(tOut.getString("VORNR"))
.setSernr(tOut.getString("SERNR"))
.setJtsn(tOut.getString("JTSN"))
.setCusn(tOut.getString("CUSN"))
.setKtext(tOut.getString("KTEXT"))
.setDwerk(tOut.getString("DWERK"))
.setName(tOut.getString("NAME"));
}
Zwm3a08ItemVO item = new Zwm3a08ItemVO();
item.setQlsl(tOut.getString("QLSL"))
.setSqsl(tOut.getString("SQSL"))
.setMatnr(tOut.getString("MATNR"))
.setBdter(tOut.getString("BDTER"))
.setRspos(tOut.getString("RSPOS"))
.setSqsl2(tOut.getString("SQSL2"))
.setSqsl3(tOut.getString("SQSL3"))
.setEnmng(tOut.getString("ENMNG"))
.setBdmng(tOut.getString("BDMNG"))
.setLabst(tOut.getString("LABST"))
.setKcqls(tOut.getString("KCQLS"))
.setLgort2(tOut.getString("LGORT2"))
.setMeins(tOut.getString("MEINS"))
.setLgpbe(tOut.getString("LGPBE"))
.setInsme(tOut.getString("INSME"))
.setRsnum2(tOut.getString("RSNUM2"))
.setMaktx2(tOut.getString("MAKTX2"))
.setEkgrp(tOut.getString("EKGRP"))
.setDispo(tOut.getString("DISPO"));
result.getItems().add(item);
}
}
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 生产退料单查询接口
* <p>
* 该方法用于调用SAP的RFC函数ZWM3A09根据传入的查询条件获取生产退料单信息
* 查询条件包括工厂代码工序列表和订单号列表等
* 返回结果包含主表信息和明细项列表
*
* @param query 查询参数对象包含以下必填字段
* - I_WERKS工厂代码不能为空
* - I_ARBPL工序列表可选
* - I_AUFNR订单号列表可选
* @return Zwm3a09VO 查询结果对象包含主表字段和明细项列表
*/
public Zwm3a09VO zwm3a09(Zwm3a09QO query) {
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
VUtil.trueThrowBusinessError(query.getI_werks().isEmpty()).throwMessage("工厂代码不可以为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("I_WERKS", query.getI_werks());
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
// 构造工序列表参数
if (CollectionUtil.isNotEmpty(query.getI_arbpl())) {
List<Map<String, Object>> t_list1 = new ArrayList<>();
query.getI_arbpl().forEach(arbpl -> {
t_list1.add(Map.of("ARBPL", arbpl));
});
tables.put("I_ARBPL", t_list1);
}
// 构造订单号列表参数
if (CollectionUtil.isNotEmpty(query.getI_aufnr())) {
List<Map<String, Object>> t_list2 = new ArrayList<>();
query.getI_aufnr().forEach(aufnr -> {
t_list2.add(Map.of("AUFNR", aufnr));
});
tables.put("I_AUFNR", t_list2);
}
// 调用SAP RFC函数
JCoFunction function = exec("ZWM3A09", parameters, tables);
// 处理返回的OUTPUT1表数据
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
Zwm3a09VO result = new Zwm3a09VO();
if (tOut.getNumRows() > 0) {
for (int i = 0; i < tOut.getNumRows(); i++) {
tOut.setRow(i);
// 设置主表字段仅第一行设置一次
if (i == 0) {
result.setAufnr(tOut.getString("AUFNR"))
.setRsnum(tOut.getString("RSNUM"))
.setPlnbez(tOut.getString("PLNBEZ"))
.setMaktx(tOut.getString("MAKTX"))
.setVornr(tOut.getString("VORNR"))
.setSernr(tOut.getString("SERNR"))
.setJtsn(tOut.getString("JTSN"))
.setCusn(tOut.getString("CUSN"))
.setKtext(tOut.getString("KTEXT"))
.setDwerk(tOut.getString("DWERK"))
.setName(tOut.getString("NAME"));
}
// 构造并填充明细项
Zwm3a09ItemVO item = new Zwm3a09ItemVO();
item.setQlsl(tOut.getString("QLSL"))
.setSqsl(tOut.getString("SQSL"))
.setMatnr(tOut.getString("MATNR"))
.setBdter(tOut.getString("BDTER"))
.setRspos(tOut.getString("RSPOS"))
.setSqsl2(tOut.getString("SQSL2"))
.setSqsl3(tOut.getString("SQSL3"))
.setEnmng(tOut.getString("ENMNG"))
.setBdmng(tOut.getString("BDMNG"))
.setLabst(tOut.getString("LABST"))
.setKcqls(tOut.getString("KCQLS"))
.setLgort2(tOut.getString("LGORT2"))
.setMeins(tOut.getString("MEINS"))
.setLgpbe(tOut.getString("LGPBE"))
.setInsme(tOut.getString("INSME"))
.setRsnum2(tOut.getString("RSNUM2"))
.setMaktx2(tOut.getString("MAKTX2"))
.setEkgrp(tOut.getString("EKGRP"))
.setDispo(tOut.getString("DISPO"));
result.getItems().add(item);
}
}
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 生产退料单出库接口
* <p>
* 该方法用于调用 SAP RFC 函数 ZWM3A11执行生产退料单的出库操作
* 输入参数包括订单号物料明细等信息并根据 SAP 返回结果构造返回对象
* </p>
*
* @param query 查询参数对象包含订单号AUFNR及物料明细列表INPUT1 INPUT2
* @return Zwm3a11VO 包含物料凭证号MAT_DOC和凭证年度DOC_YEAR的结果对象
*/
//生产退料单出库接口
public Zwm3a11VO zwm3a11(Zwm3a11QO query) {
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(query.getInput1())).throwMessage("物料明细不能为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("AUFNR", query.getAufnr());
// 将构造好的表数据放入输入参数中
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
if (CollectionUtil.isNotEmpty(query.getInput1())) {
List<Map<String, Object>> t_list1 = new ArrayList<>();
query.getInput1().forEach(input -> {
t_list1.add(Map.of("RSPOS", input.getRspos()));
t_list1.add(Map.of("MATNR", input.getMatnr()));
t_list1.add(Map.of("MAKTX", input.getMaktx()));
t_list1.add(Map.of("WERKS", input.getWerks()));
t_list1.add(Map.of("LGORT", input.getLgort()));
t_list1.add(Map.of("MENGE", input.getMenge()));
t_list1.add(Map.of("MENGE_T", input.getMengeT()));
t_list1.add(Map.of("MEINS", input.getMeins()));
t_list1.add(Map.of("CHARG", input.getCharg()));
});
tables.put("INPUT1", t_list1);
}
if (CollectionUtil.isNotEmpty(query.getInput2())) {
List<Map<String, Object>> t_list2 = new ArrayList<>();
query.getInput2().forEach(input -> {
t_list2.add(Map.of("SERNR", input.getSernr()));
t_list2.add(Map.of("RSPOS", input.getRspos()));
});
tables.put("INPUT2", t_list2);
}
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A11", parameters, tables);
// 处理返回表 T_RETURN判断执行是否成功
JCoTable returnTable = function.getTableParameterList().getTable("OUTPUT2");
VUtil.trueThrowBusinessError(returnTable.getNumRows() <= 0).throwMessage("获取Type信息有误");
returnTable.setRow(0);
VUtil.trueThrowBusinessError(!StrUtil.equals(returnTable.getString("TYPE"), "S"))
.throwMessage(returnTable.getString("MESSAGE"));
log.info("SAP返回: {}", returnTable);
// 获取导出参数构造返回结果对象
JCoParameterList exportParam = function.getExportParameterList();
VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息");
Zwm3a11VO result = new Zwm3a11VO()
.setMat_doc(exportParam.getString("MAT_DOC"))
.setDocYear(exportParam.getString("DOC_YEAR"));
log.info("SAP返回物料凭证信息: MBLNR={}, MJAHR={}", result.getMat_doc(), result.getDocYear());
return result;
}
//成本中心领料
private JCoTable execReturnTable(String functionName, Map<String, Object> parameters) {
return execReturnTable(functionName, parameters, null, "T_OUT");
}
@ -758,6 +1220,18 @@ public class SapService {
}
}
public void printMetaJson(String functionName) {
try {
functionName = functionName.toUpperCase();
JCoFunction function = repository.getFunction(functionName);
VUtil.trueThrowBusinessError(Objects.isNull(function)).throwMessage("方法" + functionName + "不存在");
printMeta(function);
} catch (Exception e) {
log.error("打印方法参数信息异常", e);
}
}
private void printMeta(JCoFunction function) {
log.trace("-------------------------------------------------------");
log.trace("SAP {} 方法参数信息", function.getName());
@ -792,10 +1266,14 @@ public class SapService {
private void printJCoTable(JCoTable table) {
log.trace("Table结构");
JCoRecordFieldIterator iterator = table.getRecordFieldIterator();
Map<String, String> map = new HashMap<>();
while (iterator.hasNextField()) {
JCoRecordField field = iterator.nextRecordField();
log.trace("名称:{},类型:{},描述:{}", field.getName(), field.getTypeAsString(), field.getDescription());
map.put(field.getName(), field.getDescription());
}
String json = JSON.toJSONString(map);
log.trace("{}", json);
}
private void printStructure(JCoStructure structure) {

View File

@ -51,6 +51,54 @@ public class SapMetaPrintTest {
{
sapService.printMeta("ZWM00_MB115");
}
@Test
public void ZWM3A03()
{
sapService.printMeta("ZWM3A03");
}
@Test
public void ZWM3A04()
{
sapService.printMeta("ZWM3A04");
}
@Test
public void ZWM3A07()
{
sapService.printMeta("ZWM3A07");
}
@Test
public void ZWM3A10()
{
sapService.printMeta("ZWM3A10");
}
@Test
public void ZWM3A08()
{
sapService.printMeta("ZWM3A08");
}
@Test
public void ZWM3A09()
{
sapService.printMeta("ZWM3A09");
}
@Test
public void ZWM3A11()
{
sapService.printMeta("ZWM3A11");
}
}

View File

@ -16,6 +16,7 @@ public class C_MaterialOutboundDTO {
//物料凭证年度
private String eMJahr;
//中心退库的物料详情信息
// private C_MaterialOutboundQO requestQO;
// private C_MaterialOutboundQO requestQO;
}

View File

@ -10,6 +10,10 @@ import java.util.List;
public class C_MaterialOutboundQO {
//预留号
private String resbRsNum;
// 预留单退料详情信息
//工位信息
private String wempf;
// 领料单详情信息
private List<C_MaterialOutboundItemQO> items;
}

View File

@ -0,0 +1,15 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a03QO {
/**
* 采购凭证号
*/
private String i_ebeln;
}

View File

@ -0,0 +1,37 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a04Input1QO {
//采购订单日期
private String bedat;
//公司代码
private String bukrs;
//:物料号
private String matnr;
//
private String lifnr;
//需求量
private String bdmng;
//工厂
private String werks;
//批号
private String charg;
//库存地点
private String lgort;
//物料描述短文本
private String maktx;
//采购凭证号
private String ebeln;
//基本计量单位
private String meins;
//本次提货
private String menge;
//工厂名称
private String name1;
//已提货数量
private String enmng;
}

View File

@ -0,0 +1,19 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a04QO {
//采购凭证号
private String i_ebeln;
// :A 发料 B 退料
private String i_type;
//物料明细
private List<Zwm3a04Input1QO> input1;
}

View File

@ -0,0 +1,31 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a07QO {
/**
* 工厂
* */
private String i_werks;
/**
* 工作中心表,可多个工作中心
* */
private List<String> arbpl;
/**
* 订单号 多个订单号
* */
private List<String> aufnr;
/**
* 库存地点 多个
* */
private List<String> lgort;
}

View File

@ -0,0 +1,19 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a08QO {
//工厂
private String i_werks;
// {"AUFNR":"订单号"}
private List<String> i_aufnr;
// {"ARBPL":"工作中心"}
private List<String> i_arbpl;
}

View File

@ -0,0 +1,19 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a09QO {
//工厂
private String i_werks;
// {"AUFNR":"订单号"}
private List<String> i_aufnr;
// {"ARBPL":"工作中心"}
private List<String> i_arbpl;
}

View File

@ -0,0 +1,18 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a10Input1QO {
private String werks;
private String charg;
private String lgort;
private String maktx;
private String mengeT;
private String meins;
private String matnr;
private String menge;
private String rspos;
}

View File

@ -0,0 +1,11 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a10Input2QO {
private String sernr;
private String rspos;
}

View File

@ -0,0 +1,26 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a10QO {
/**
* 订单号
*/
private String aufnr;
/**
* 领料的明细
*/
private List<Zwm3a10Input1QO> input1;
/**
* 领料明细的序列号
*/
private List<Zwm3a10Input2QO> input2;
}

View File

@ -0,0 +1,27 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a11Input1QO {
//工厂
private String werks;
//批号
private String charg;
//库存地点
private String lgort;
//物料描述短文本
private String maktx;
//退货数量
private String mengeT;
//基本计量单位
private String meins;
//物料号
private String matnr;
//数量
private String menge;
//预留/相关需求的项目编号
private String rspos;
}

View File

@ -0,0 +1,11 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
@Data
public class Zwm3a11Input2QO {
//序列号
private String sernr;
//预留/相关需求的项目编号
private String rspos;
}

View File

@ -0,0 +1,19 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a11QO {
//订单号
private String aufnr;
//明细物料
private List<Zwm3a11Input1QO> input1;
//序列号
private List<Zwm3a11Input2QO> input2;
}

View File

@ -0,0 +1,31 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a03ItemVO {
//物料号
private String matnr;
//预留/相关需求的项目编号
private String rspos;
//需求量
private String bdmng;
//工厂
private String werks;
//批号
private String charg;
//库存地点
private String lgort;
//物料描述短文本
private String maktx;
//基本计量单位
private String meins;
//预留/相关需求的编号
private String rsnum;
//待提货数量
private String menge;
//已提货数量
private String enmng;
}

View File

@ -0,0 +1,40 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a03VO {
//采购凭证号
private String ebeln;
//公司代码
private String bukrs;
//供应商或债权人的帐号
private String lifnr;
//供应商或债权人的名称
private String name1;
//采购凭证的项目编号
private String ebelp;
//采购订单日期
private String bedat;
//高层次组装的物料号
private String baugr;
//物料凭证编号
private String mat_doc;
//物料凭证年度
private String docYear;
// 领料详情
private List<Zwm3a03ItemVO> items;
}

View File

@ -0,0 +1,21 @@
package com.nflg.wms.common.pojo.vo;
import com.nflg.wms.common.pojo.qo.Zwm3a04QO;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a04VO {
//物料凭证编号
private String mat_doc;
//物料凭证年度
private String docYear;
}

View File

@ -0,0 +1,47 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a07ItemVO {
//缺料数量
private String qlsl;
//申请数量
private String sqsl;
//领料物料号
private String matnr;
//组件的需求日期
private String bdter;
//预留/相关需求的项目编号
private String rspos;
//其它预留
private String sqsl2;
//预留数量
private String sqsl3;
//提货数
private String enmng;
//需求量
private String bdmng;
//非限制使用的估价的库存
private String labst;
//库存缺料量
private String kcqls;
//库存地点
private String lgort2;
// 基本计量单位
private String meins;
//库存仓位
private String lgpbe;
//质量检验中的库存
private String insme;
//预留/相关需求的编号
private String rsnum2;
//物料描述短文本
private String maktx2;
//采购组
private String ekgrp;
//MRP 控制者物料计划人
private String dispo;
}

View File

@ -0,0 +1,36 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a07VO {
//订单号
private String aufnr;
//预留/相关需求的编号
private String rsnum;
//物料号
private String plnbez;
//物料描述短文本
private String maktx;
//操作/活动编号
private String vornr;
//序列号
private String sernr;
//机台
private String jtsn;
//客户
private String cusn;
//领料部门
private String ktext;
//工厂
private String dwerk;
//工厂名称
private String name;
//领料详细
private List<Zwm3a07ItemVO> items;
}

View File

@ -0,0 +1,47 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a08ItemVO {
//缺料数量
private String qlsl;
//申请数量
private String sqsl;
//领料物料号
private String matnr;
//组件的需求日期
private String bdter;
//预留/相关需求的项目编号
private String rspos;
//其它预留
private String sqsl2;
//预留数量
private String sqsl3;
//提货数
private String enmng;
//需求量
private String bdmng;
//非限制使用的估价的库存
private String labst;
//库存缺料量
private String kcqls;
//库存地点
private String lgort2;
// 基本计量单位
private String meins;
//库存仓位
private String lgpbe;
//质量检验中的库存
private String insme;
//预留/相关需求的编号
private String rsnum2;
//物料描述短文本
private String maktx2;
//采购组
private String ekgrp;
//MRP 控制者物料计划人
private String dispo;
}

View File

@ -0,0 +1,36 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a08VO {
//订单号
private String aufnr;
//预留/相关需求的编号
private String rsnum;
//物料号
private String plnbez;
//物料描述短文本
private String maktx;
//操作/活动编号
private String vornr;
//序列号
private String sernr;
//机台
private String jtsn;
//客户
private String cusn;
//领料部门
private String ktext;
//工厂
private String dwerk;
//工厂名称
private String name;
//领料详细
private List<Zwm3a08ItemVO> items;
}

View File

@ -0,0 +1,47 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a09ItemVO {
//缺料数量
private String qlsl;
//申请数量
private String sqsl;
//领料物料号
private String matnr;
//组件的需求日期
private String bdter;
//预留/相关需求的项目编号
private String rspos;
//其它预留
private String sqsl2;
//预留数量
private String sqsl3;
//提货数
private String enmng;
//需求量
private String bdmng;
//非限制使用的估价的库存
private String labst;
//库存缺料量
private String kcqls;
//库存地点
private String lgort2;
// 基本计量单位
private String meins;
//库存仓位
private String lgpbe;
//质量检验中的库存
private String insme;
//预留/相关需求的编号
private String rsnum2;
//物料描述短文本
private String maktx2;
//采购组
private String ekgrp;
//MRP 控制者物料计划人
private String dispo;
}

View File

@ -0,0 +1,36 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class Zwm3a09VO {
//订单号
private String aufnr;
//预留/相关需求的编号
private String rsnum;
//物料号
private String plnbez;
//物料描述短文本
private String maktx;
//操作/活动编号
private String vornr;
//序列号
private String sernr;
//机台
private String jtsn;
//客户
private String cusn;
//领料部门
private String ktext;
//工厂
private String dwerk;
//工厂名称
private String name;
//领料详细
private List<Zwm3a09ItemVO> items;
}

View File

@ -0,0 +1,15 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a10VO {
//物料凭证编号
private String mat_doc;
//物料凭证年度
private String docYear;
}

View File

@ -0,0 +1,14 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Zwm3a11VO {
//物料凭证编号
private String mat_doc;
//物料凭证年度
private String docYear;
}