Merge remote-tracking branch '惠信/dev_zhangke' into develop

This commit is contained in:
曹鹏飞 2025-08-15 09:58:15 +08:00
commit a3a59ecb2f
15 changed files with 560 additions and 11 deletions

View File

@ -37,6 +37,7 @@ public class SapService {
/**
* 生产订单查询
*
* @param no 生产订单号
*/
public ZWM00MB007DTO zwm00Mb007(String no) {
@ -55,6 +56,7 @@ public class SapService {
/**
* 生产订单收货
*
* @param no 生产订单号
* @param userName 用户名
* @param materials 入库物料列表
@ -93,6 +95,7 @@ public class SapService {
/**
* 查询采购单退库信息
*
* @param orderNo 采购单号
* @param supplierNo 供应商编号
* @param materialNo 物料编号
@ -140,6 +143,7 @@ public class SapService {
/**
* 扫码质检入库
*
* @param dto 数据
*/
public void zwm3a18(ZWM3A18DTO dto) {
@ -164,6 +168,7 @@ public class SapService {
/**
* 扫码入库
*
* @param dto 数据
*/
public void zwm3a17(ZWM3A17DTO dto) {
@ -186,6 +191,7 @@ public class SapService {
/**
* 保存库存
*
* @param factory 工厂编号
* @param materialNo 物料编号
* @param warehouseNo 仓库编号
@ -212,6 +218,7 @@ public class SapService {
/**
* 获取库存信息
*
* @param factory 工厂编号
* @param warehouseNo 仓库编号
* @param materialNo 物料编号
@ -223,6 +230,7 @@ public class SapService {
/**
* 获取库存信息
*
* @param factory 工厂编号
* @param warehouseNos 仓库编号列表
* @param beginTime 开始时间格式yyyyMMdd
@ -260,6 +268,7 @@ public class SapService {
/**
* 获取订单中物料的信息
*
* @param orderNo 采购单号
* @param supplierNo 供应商编号
* @param materialNo 物料编号
@ -277,6 +286,7 @@ public class SapService {
/**
* 搜索订单
*
* @param supplierNo 供应商编码
*/
public List<SAPOrderDTO> searchOrder(String supplierNo) {
@ -292,6 +302,7 @@ public class SapService {
/**
* 成本中心退库查询
* 根据退库单号查询物料退库信息
*
* @param resebRsNum 退库单号
* @return 预留单号
*/
@ -310,6 +321,7 @@ public class SapService {
* <p>
* 该方法用于调用 SAP RFC 函数 ZWM00_MB112执行成本中心物料退库操作
* 根据传入的请求参数构造输入表和字段并处理返回结果
*
* @param request 请求参数对象包含退库单据号用户信息及物料明细等
* @return C_MaterialReturnDTO 返回结果对象包含生成的物料凭证号MBLNR和年度MJAHR
*/
@ -403,6 +415,7 @@ public class SapService {
* <p>
* 根据预留单号resebRsNum调用SAP的RFC函数ZWM00_MB026查询对应的成本中心领料信息
* 包括领料主记录和明细清单并封装为C_MaterialOutboundQueryDTO对象返回
*
* @param resebRsNum 预留单号不能为空
* @return C_MaterialOutboundQueryDTO 领料查询结果数据传输对象包含主信息和明细列表
*/
@ -454,6 +467,7 @@ public class SapService {
* 该方法首先校验请求参数中的物料明细是否为空然后构造调用SAP所需的输入参数和表结构
* 包括 T_LIST1 T_LIST2根据是否存在扫码信息决定数据填充方式
* 最后调用SAP函数并处理返回结果构造并返回出库凭证信息
*
* @param request 物料出库请求对象包含预留号用户信息及物料明细列表
* @return C_MaterialOutboundDTO 出库操作成功后返回的物料凭证信息包括物料凭证号MBLNR和年度MJAHR
*/
@ -547,6 +561,7 @@ public class SapService {
* 该方法用于调用SAP的RFC函数ZWM3A07根据传入的查询条件获取生产领料单信息
* 查询条件包括工厂代码工序生产订单号和库存地点等
* 返回结果包含主表信息和明细项列表
*
* @param query 查询参数对象包含工厂代码必填工序列表生产订单号列表库存地点列表等
* @return Zwm3a07VO 包含查询结果的VO对象包括主表字段和明细项列表
*/
@ -592,6 +607,7 @@ public class SapService {
* 该方法用于调用 SAP RFC 函数 ZWM3A10执行领料出库操作首先校验输入参数
* 然后构造函数所需的输入参数和表数据调用 SAP 接口并处理返回结果
* </p>
*
* @param query 查询参数对象包含领料出库所需的信息如订单号物料明细等
* 不能为空且至少包含一个物料明细项
* @return Zwm3a10VO 返回结果对象包含生成的物料凭证号MAT_DOC和凭证年度DOC_YEAR
@ -639,22 +655,12 @@ public class SapService {
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包含主信息及明细项列表
*/
@ -695,6 +701,7 @@ public class SapService {
* 该方法用于调用SAP的RFC函数ZWM3A09根据传入的查询条件获取生产退料单信息
* 查询条件包括工厂代码工序列表和订单号列表等
* 返回结果包含主表信息和明细项列表
*
* @param query 查询参数对象包含以下必填字段
* - I_WERKS工厂代码不能为空
* - I_ARBPL工序列表可选
@ -749,6 +756,7 @@ public class SapService {
* 该方法用于调用 SAP RFC 函数 ZWM3A11执行生产退料单的出库操作
* 输入参数包括订单号物料明细等信息并根据 SAP 返回结果构造返回对象
* </p>
*
* @param query 查询参数对象包含订单号AUFNR及物料明细列表INPUT1 INPUT2
* @return Zwm3a11VO 包含物料凭证号MAT_DOC和凭证年度DOC_YEAR的结果对象
*/
@ -792,6 +800,221 @@ public class SapService {
return result;
}
/**
* 委外订单发料查询
*
* @param query 委外订单查询参数对象包含工厂代码和物料明细等查询条件
* @return 委外订单发料查询结果列表
*/
public List<SubcontractedOrderDTO> zwm3a12(SubcontractedOrderQO query) {
// 参数校验检查查询对象和物料明细是否为空
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(query.getIEbeln())).throwMessage("物料明细不能为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put(" I_WERKS", query.getIWerks());
// 将构造好的表数据放入输入参数中
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
tables.put("I_EBELN", JCoUtil.toMapList(query.getIEbeln()));
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A12", parameters, tables);
// 处理返回表 T_RETURN判断执行是否成功
JCoParameterList exportParam = function.getExportParameterList();
VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息");
VUtil.trueThrowBusinessError(!StrUtil.equals(exportParam.getString("TYPE"), "S"))
.throwMessage(exportParam.getString("MESSAGE"));
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
// 将SAP返回的表数据转换为DTO对象列表
List<SubcontractedOrderDTO> result = JCoUtil.toBeanList(tOut, SubcontractedOrderDTO.class);
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 委外订单确认接口调用SAP的RFC函数ZWM3A04处理委外订单确认逻辑
* <p>
* 该方法会校验输入参数是否合法构造SAP所需的输入参数和表数据
* 调用SAP RFC函数执行业务逻辑并解析返回结果
* </p>
*
* @param query 委外订单确认的查询参数对象包含订单号和物料明细等信息
* @return 返回委外订单确认的结果信息包括物料凭证号和凭证年度
*/
public SubcontractedOrderConfirmDTO zwm3a004(SubcontractedOrderConfirmQO query) {
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(query.getIItems())).throwMessage("物料明细不能为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("I_EBELN", query.getIEbeln());
parameters.put("I_TYPE", "A");
// 将构造好的表数据放入输入参数中
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
// 构造 INPUT1 表数据包含物料相关明细信息
tables.put("INPUT1", query.getIItems().stream().map(BeanUtil::toMap).toList());
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A04", parameters, tables);
// 处理返回表 T_RETURN判断执行是否成功
JCoTable returnTable = function.getTableParameterList().getTable("OUTPUT");
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("无法获取到有效的物料凭证信息");
SubcontractedOrderConfirmDTO result = new SubcontractedOrderConfirmDTO()
.setMatDoc(exportParam.getString("MAT_DOC"))
.setDocYear(exportParam.getString("DOC_YEAR"));
log.info("SAP返回物料凭证信息: MBLNR={}, MJAHR={}", result.getMatDoc(), result.getDocYear());
return result;
}
/**
* 转储清单查询
* 通过调用SAP RFC函数ZWM3A15查询转储清单信息
*
* @param query 查询条件对象包含工厂日期范围等查询参数
* @return AllocationOrderDTO对象列表包含查询到的转储清单信息
*/
public List<AllocationOrderDTO> zwm3a15(AllocationOrderQO query) {
// 参数校验检查查询对象和物料明细是否为空
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put(" I_WERKS", query.getIWerks());
parameters.put(" R1", query.getR1());
parameters.put(" R2", query.getR2());
parameters.put(" R3", query.getR3());
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A15", parameters, null);
// 处理返回表 T_RETURN判断执行是否成功
JCoParameterList exportParam = function.getExportParameterList();
VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息");
VUtil.trueThrowBusinessError(!StrUtil.equals(exportParam.getString("TYPE"), "S"))
.throwMessage(exportParam.getString("MESSAGE"));
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
// 将SAP返回的表数据转换为DTO对象列表
List<AllocationOrderDTO> result = JCoUtil.toBeanList(tOut, AllocationOrderDTO.class);
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 场内调拨清单查询
* 通过调用SAP RFC函数ZWM3A16查询场内调拨清单信息
*
* @param query 查询条件对象包含工厂日期范围等查询参数
* @return 调拨订单DTO列表包含查询到的调拨清单信息
*/
public List<TransferOrderDTO> zwm3a16(TransferOrderQO query) {
// 参数校验检查查询对象和物料明细是否为空
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put(" I_WERKS", query.getIWerks());
parameters.put(" R1", query.getR1());
parameters.put(" R2", query.getR2());
parameters.put(" R3", query.getR3());
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A16", parameters, null);
// 处理返回表 T_RETURN判断执行是否成功
JCoParameterList exportParam = function.getExportParameterList();
VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息");
VUtil.trueThrowBusinessError(!StrUtil.equals(exportParam.getString("TYPE"), "S"))
.throwMessage(exportParam.getString("MESSAGE"));
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
// 将SAP返回的表数据转换为DTO对象列表
List<TransferOrderDTO> result = JCoUtil.toBeanList(tOut, TransferOrderDTO.class);
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 成本中心领料清单查询
* 通过调用SAP RFC函数ZWM3A13查询成本中心的物料领用清单信息
*
* @param query 查询参数对象包含工厂代码等查询条件不可为空
* @return 返回成本中心物料领料清单的DTO对象列表
*/
//成本中心领料清单查询
public List<DepartmentMaterialRequisitionDTO> zwm3a13(DepartmentMaterialRequisitionQO query) {
// 参数校验检查查询对象和物料明细是否为空
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put(" I_WERKS", query.getIWerks());
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A13", parameters, null);
// 处理返回表 T_RETURN判断执行是否成功
JCoParameterList exportParam = function.getExportParameterList();
VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息");
VUtil.trueThrowBusinessError(!StrUtil.equals(exportParam.getString("TYPE"), "S"))
.throwMessage(exportParam.getString("MESSAGE"));
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
// 将SAP返回的表数据转换为DTO对象列表
List<DepartmentMaterialRequisitionDTO> result = JCoUtil.toBeanList(tOut, DepartmentMaterialRequisitionDTO.class);
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 成本中心退料清单查询
*
* @param query 查询条件对象包含工厂等查询参数
* @return 部门物料退料单DTO列表
*/
//成本中心退料清单查询
public List<DepartmentMaterialReturnSlipDTO> zwm3a14(DepartmentMaterialReturnSlipQO query) {
// 参数校验检查查询对象和物料明细是否为空
VUtil.trueThrowBusinessError(Objects.isNull(query)).throwMessage("查询内容不可以为空");
// 构造函数调用所需的输入参数
Map<String, Object> parameters = new HashMap<>();
parameters.put(" I_WERKS", query.getIWerks());
// 调用 SAP RFC 函数 ZWM00_MB112
JCoFunction function = exec("ZWM3A14", parameters, null);
// 处理返回表 T_RETURN判断执行是否成功
JCoParameterList exportParam = function.getExportParameterList();
VUtil.trueThrowBusinessError(Objects.isNull(exportParam)).throwMessage("无法获取到有效的物料凭证信息");
VUtil.trueThrowBusinessError(!StrUtil.equals(exportParam.getString("TYPE"), "S"))
.throwMessage(exportParam.getString("MESSAGE"));
JCoTable tOut = function.getTableParameterList().getTable("OUTPUT1");
log.info("SAP返回: {}", tOut);
// 将SAP返回的表数据转换为DTO对象列表
List<DepartmentMaterialReturnSlipDTO> result = JCoUtil.toBeanList(tOut, DepartmentMaterialReturnSlipDTO.class);
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
private JCoTable execReturnTable(String functionName, Map<String, Object> parameters) {
return execReturnTable(functionName, parameters, null, "T_OUT");

View File

@ -118,6 +118,40 @@ public class SapMetaPrintTest {
public void ZWM3A11() throws JCoException {
printMeta("ZWM3A11");
}
@Test
public void ZWM3A12() throws JCoException {
printMeta("ZWM3A12");
}
@Test
public void ZWM3A13() throws JCoException {
printMeta("ZWM3A13");
}
@Test
public void ZWM3A14() throws JCoException {
printMeta("ZWM3A14");
}
@Test
public void ZWM3A15() throws JCoException {
printMeta("ZWM3A15");
}
@Test
public void ZWM3A16() throws JCoException {
printMeta("ZWM3A16");
}
@Test
public void ZWM00_MB113() throws JCoException {
printMeta("ZWM00_MB113");
}
@Test
public void ZWM00_MB116() throws JCoException {
printMeta("ZWM00_MB116");
}
public void printMeta(String functionName) throws JCoException {
functionName = functionName.toUpperCase();

View File

@ -0,0 +1,35 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
//转储单的DTO
public class AllocationOrderDTO{
private String reswk;
private String sqsl;
private String bukrs1;
private String matnr;
private String ebelp;
private String sqsl2;
private String ebeln;
private String menge;
private String text;
private String bukrs;
private String wamng;
private String txz01;
private String werks;
private String lgpro;
private String lgfsb1;
private String labst;
private String lgpbe1;
private String lgort;
private String aedat;
private String lgobe;
private String maktx;
private String lgfsb;
private String meins;
private String lgpbe;
private String ekgrp;
}

View File

@ -0,0 +1,32 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class DepartmentMaterialRequisitionDTO {
private String ktext;
private String bdmng1;
private String matnr;
private String wempf;
private String bdter;
private String matkl;
private String werks;
private String bdmng;
private String zeile;
private String bwart;
private String lgort;
private String mblnr;
private String maktx;
private String rsnum;
private String meins;
private String sgtxt;
private String lgpbe;
private String aufnr;
private String menge;
private String kostl;
private String enmng;
private String mjahr;
private String budat;
}

View File

@ -0,0 +1,24 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class DepartmentMaterialReturnSlipDTO {
private String ktext;
private String matnr;
private String bdter;
private String matkl;
private String werks;
private String bdmng;
private String bwart;
private String lgort;
private String maktx;
private String rsnum;
private String meins;
private String sgtxt;
private String lgpbe;
private String aufnr;
private String kostl;
}

View File

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

View File

@ -0,0 +1,40 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
// 委外订单SAP查询 结果
public class SubcontractedOrderDTO {
/**
* 采购订单日期
*/
private String bedat;
/**
* 发出物料
*/
private String matnr1;
private String matnr;
private String atwrt2;
private String fahsl;
private String lifnr;
private String enmng1;
private String werks;
private String lgort1;
private String ebelp;
private String lgort;
private String aedat;
private String lgobe;
private String erfme;
private String maktx;
private String ebeln;
private String erfmg;
private String meins;
private String lgpbe;
private String menge;
private String name1;
private String ekgrp;
private String maktx1;
private String enmng;
}

View File

@ -0,0 +1,33 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
//场内调拨清单的查询SAP返回的结果
public class TransferOrderDTO {
private String bdmng1;
private String matnr;
private String wempf;
private String bdter;
private String matkl;
private String rspos;
private String werks;
private String bdmng;
private String zeile;
private String bwart;
private String lgort;
private String mblnr;
private String maktx;
private String rsnum;
private String meins;
private String sgtxt;
private String lgpbe;
private String aufnr;
private String menge;
private String umlgo;
private String enmng;
private String mjahr;
private String budat;
}

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 AllocationOrderQO {
//工厂
private String iWerks;
//未过账 选中为X否则为空
private String r1;
//已过账 选中为X否则为空
private String r2;
//全部 选中为X否则为空
private String r3;
}

View File

@ -0,0 +1,12 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
//部门领料单的查询参数
public class DepartmentMaterialRequisitionQO {
//工厂
private String iWerks;
}

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 DepartmentMaterialReturnSlipQO {
//工厂
private String iWerks;
}

View File

@ -0,0 +1,23 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class SubcontractedOrderConfirmItemQO {
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,15 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class SubcontractedOrderConfirmQO {
private String iEbeln;
// 委外信息
private List<SubcontractedOrderConfirmItemQO> iItems;
}

View File

@ -0,0 +1,17 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
//委外订单SAP查询参数
public class SubcontractedOrderQO {
//工厂
private String iWerks;
// 采购订单
private List<String> iEbeln;
}

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 TransferOrderQO {
//工厂
private String iWerks;
//未过账 选中为X否则为空
private String r1;
//已过账 选中为X否则为空
private String r2;
//全部 选中为X否则为空
private String r3;
}