feat: bug-953 PDA删除【钢构件上架】菜单,钢构件收货直接过账到SAP

This commit is contained in:
曹鹏飞 2025-12-01 16:40:17 +08:00
parent 9fbbd6188b
commit 8a0074247d
7 changed files with 153 additions and 106 deletions

View File

@ -343,7 +343,7 @@ public class NormalQMController extends BaseController {
.setErfmg(code.getInspectionQty()) .setErfmg(code.getInspectionQty())
.setErfmg1(code.getQualifiedQty()) .setErfmg1(code.getQualifiedQty())
.setErfmg2(code.getUnqualifiedQty()) .setErfmg2(code.getUnqualifiedQty())
.setEbelp(Integer.valueOf(code.getPoLineNumber())) .setEbelp(code.getPoLineNumber())
.setMatnr(code.getItemCode()) .setMatnr(code.getItemCode())
.setMeins(code.getUnit()) .setMeins(code.getUnit())
.setCharg(code.getMaterialBatch()) .setCharg(code.getMaterialBatch())

View File

@ -2,6 +2,7 @@ package com.nflg.wms.admin.controller;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
@ -15,9 +16,7 @@ import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.nflg.wms.admin.pojo.dto.PdfPageDTO; import com.nflg.wms.admin.pojo.dto.*;
import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO;
import com.nflg.wms.admin.pojo.dto.StructuralPackageOrderImportDTO;
import com.nflg.wms.admin.repository.PackageMaterialScanRecordRepository; import com.nflg.wms.admin.repository.PackageMaterialScanRecordRepository;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService; import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
import com.nflg.wms.admin.service.BinService; import com.nflg.wms.admin.service.BinService;
@ -35,7 +34,6 @@ import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.PackageMaterialScanRecord; import com.nflg.wms.common.pojo.document.PackageMaterialScanRecord;
import com.nflg.wms.common.pojo.dto.PackageMaterialDTO; import com.nflg.wms.common.pojo.dto.PackageMaterialDTO;
import com.nflg.wms.common.pojo.dto.SAPOrderDTO; import com.nflg.wms.common.pojo.dto.SAPOrderDTO;
import com.nflg.wms.common.pojo.dto.SAPSyncFromDTO;
import com.nflg.wms.common.pojo.dto.StructuralPackageMaterialQRCodeContentDTO; import com.nflg.wms.common.pojo.dto.StructuralPackageMaterialQRCodeContentDTO;
import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.pojo.vo.*;
@ -821,109 +819,139 @@ public class StructuralPackageOrderController extends BaseController {
SAPMaterialInfoInOrderDTO dto = CollectionUtil.get(sapService.zim004(order.getExternalOrderNo(), order.getSupplierCode(), order.getPackageNo()), 0); SAPMaterialInfoInOrderDTO dto = CollectionUtil.get(sapService.zim004(order.getExternalOrderNo(), order.getSupplierCode(), order.getPackageNo()), 0);
VUtil.trueThrowBusinessError(Objects.isNull(dto)).throwMessage("ZIM_004未查询到数据"); VUtil.trueThrowBusinessError(Objects.isNull(dto)).throwMessage("ZIM_004未查询到数据");
VUtil.trueThrowBusinessError(StrUtil.isBlank(dto.getWarehouseNo())).throwMessage("ZIM_004接口查询到仓库为空"); VUtil.trueThrowBusinessError(StrUtil.isBlank(dto.getWarehouseNo())).throwMessage("ZIM_004接口查询到仓库为空");
//创建上架任务 BigDecimal num = BigDecimal.valueOf(order.getNum());
VUtil.trueThrowBusinessError(!inTaskService.generateTask(List.of(new WmsInTaskItem() Pair<Pair<String, String>, Pair<String, String>> pair = sapService.zwm3a17(new ZWM3A17DTO()
.setPoNum(order.getExternalOrderNo()) .setEbeln(order.getExternalOrderNo())
.setPoLineNumber(order.getRowNo()) .setUsnam(UserUtil.getUserName())
.setLineNumber(String.valueOf(order.getId())) .setItem1(List.of(new ZWM3A17Item1DTO()
.setNoteNum(structuralPackageDeliverOrderService.getNoByOrderId(request.getId())) .setEBELP(order.getRowNo())
.setItemCode(order.getPackageNo()) .setCHARG("")
.setItemName(order.getPackageDesc()) .setERFMG(num)
.setUnit(order.getUnit()) .setKZKRI(dto.getKzkri())
.setIsQuality(false) .setLGORT(request.getWarehouse())
.setKzkri(order.getKzkri()) .setMATNR(order.getPackageNo())
.setUnqualifiedQty(BigDecimal.ZERO) .setWERKS(order.getFactoryNo())
.setQualifiedQty(BigDecimal.valueOf(order.getNum())) .setMEINS(order.getUnit())
.setInspectionQty(BigDecimal.valueOf(order.getNum()))
.setFactory(dto.getWerks())
.setDataStatus((short) 0)
.setReceivedWarehouse(dto.getWarehouseNo())
.setOperationUserId(UserUtil.getUserId())
.setOperationUserName(UserUtil.getUserName())
.setBatchNumber(order.getWorkbenchCode())
.setSupplierNum(order.getSupplierCode())), (short) 1)
) )
.throwMessage("创建上架任务失败"); )
return ApiResult.success(); .setItem2(List.of(
} new ZWM3A17Item2DTO()
.setEBELP(order.getRowNo())
/** .setSERNR("")
* 搜索上架任务列表PDA使用 .setFLAG("X")
* @param no 任务单号或原始单号 )
*/ )
@GetMapping("searchIn") );
public ApiResult<List<InTaskVO>> searchIn(@Valid @RequestParam(required = false) String no) { if (StrUtil.equalsIgnoreCase(dto.getKzkri(), "X")) {
return ApiResult.success(inTaskService.searchForIn(no)); sapService.zwm3a18(new ZWM3A18DTO()
} .setEbeln(order.getExternalOrderNo())
.setUsnam(UserUtil.getUserName())
/** .setMblnr(pair.getValue().getKey())
* 获取上架任务详情PDA使用 .setMjahr(pair.getValue().getValue())
* @param taskNo 上架任务单号 .setItem1(List.of(
*/ new ZWM3A18Item1DTO()
@GetMapping("getInTaskInfo") .setErfmg(num)
public ApiResult<List<InTaskInfoVO>> getInTaskInfo(@Valid @RequestParam @NotBlank String taskNo) { .setErfmg1(num)
WmsInTask task = inTaskService.getByNo(taskNo); .setErfmg2(BigDecimal.ZERO)
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在"); .setEbelp(order.getRowNo())
VUtil.trueThrowBusinessError(!Objects.equals(task.getTaskStatus(), (short) 0)).throwMessage("请勿重复上架"); .setMatnr(order.getPackageNo())
List<WmsInTaskItem> list = inTaskItemService.getListForStorage(taskNo); .setMeins(order.getUnit())
List<InTaskInfoVO> datas = Convert.toList(InTaskInfoVO.class, list); .setCharg("")
for (InTaskInfoVO item : datas) { .setLgort(request.getWarehouse())
SAPSyncFromDTO dto = sapService.zwm3A01(item.getFactory(), item.getReceivedWarehouse(), item.getItemCode()); .setSgtxt("")
if (Objects.nonNull(dto)) { .setWerks(order.getFactoryNo())
item.setBinNos(dto.getBinNos()); )
} )
item.setTrayNos(structuralPackageDeliverOrderService.getTrayNos(task.getOrderNumber(), item.getItemCode())); .setItem2(
} List.of(
return ApiResult.success(datas); new ZWM3A17Item2DTO()
} .setEBELP(order.getRowNo())
.setSERNR("")
/** .setFLAG("X")
* 上架PDA使用 )
* @param request 请求参数 )
*/ );
@Transactional
@PostMapping("materialStorage")
public ApiResult<Void> materialStorage(@Valid @RequestBody @NotNull MaterialStorageQO request) {
WmsInTask task = inTaskService.getByNo(request.getTaskNo());
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
VUtil.trueThrowBusinessError(!Objects.equals(task.getTaskStatus(), (short) 0)).throwMessage("请勿重复上架");
List<WmsInTaskItem> datas = inTaskItemService.getForIn(request);
if (CollectionUtil.isNotEmpty(datas)) {
datas.forEach(it -> {
MaterialStorageItemQO qo = request.getItems().stream().filter(r -> StrUtil.equals(r.getMaterialNo(), it.getItemCode())).findFirst().get();
it.setReceivedQty(it.getInspectionQty().subtract(qo.getNum()));
it.setBins(StrUtil.join(",", qo.getBinNos()));
it.setDataStatus((short) 1);
it.setReceivedWarehouse(qo.getReceivedWarehouse());
});
inTaskItemService.updateBatchById(datas);
inTaskService.updateState(request.getTaskNo());
datas.stream()
.filter(it -> request.getItems().stream().anyMatch(r -> StrUtil.equals(r.getMaterialNo(), it.getItemCode())))
.collect(Collectors.groupingBy(WmsInTaskItem::getPoNum))
.values()
.forEach(it -> structuralPackageControllerService.materialStorage(it, request.getItems()));
} }
return ApiResult.success(); return ApiResult.success();
} }
/** // /**
* 搜索上架任务列表 // * 搜索上架任务列表PDA使用
* @param request 请求参数 // * @param no 任务单号或原始单号
*/ // */
@PostMapping("searchTicket") // @GetMapping("searchIn")
public ApiResult<PageData<InTaskVO>> searchTicket(@Valid @RequestBody @NotNull InTaskSearchQO request) { // public ApiResult<List<InTaskVO>> searchIn(@Valid @RequestParam(required = false) String no) {
return ApiResult.success(inTaskService.search(request)); // return ApiResult.success(inTaskService.searchForIn(no));
} // }
/** // /**
* 获取上架任务明细 // * 获取上架任务详情PDA使用
* @param taskNo 上架任务单号 // * @param taskNo 上架任务单号
*/ // */
@GetMapping("getTicketItems") // @GetMapping("getInTaskInfo")
public ApiResult<List<WmsInTaskItem>> getTicketItems(@Valid @RequestParam @NotBlank String taskNo) { // public ApiResult<List<InTaskInfoVO>> getInTaskInfo(@Valid @RequestParam @NotBlank String taskNo) {
return ApiResult.success(inTaskItemService.getByNo(taskNo)); // WmsInTask task = inTaskService.getByNo(taskNo);
} // VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
// VUtil.trueThrowBusinessError(!Objects.equals(task.getTaskStatus(), (short) 0)).throwMessage("请勿重复上架");
// List<WmsInTaskItem> list = inTaskItemService.getListForStorage(taskNo);
// List<InTaskInfoVO> datas = Convert.toList(InTaskInfoVO.class, list);
// for (InTaskInfoVO item : datas) {
// SAPSyncFromDTO dto = sapService.zwm3A01(item.getFactory(), item.getReceivedWarehouse(), item.getItemCode());
// if (Objects.nonNull(dto)) {
// item.setBinNos(dto.getBinNos());
// }
// item.setTrayNos(structuralPackageDeliverOrderService.getTrayNos(task.getOrderNumber(), item.getItemCode()));
// }
// return ApiResult.success(datas);
// }
// /**
// * 上架PDA使用
// * @param request 请求参数
// */
// @Transactional
// @PostMapping("materialStorage")
// public ApiResult<Void> materialStorage(@Valid @RequestBody @NotNull MaterialStorageQO request) {
// WmsInTask task = inTaskService.getByNo(request.getTaskNo());
// VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
// VUtil.trueThrowBusinessError(!Objects.equals(task.getTaskStatus(), (short) 0)).throwMessage("请勿重复上架");
// List<WmsInTaskItem> datas = inTaskItemService.getForIn(request);
// if (CollectionUtil.isNotEmpty(datas)) {
// datas.forEach(it -> {
// MaterialStorageItemQO qo = request.getItems().stream().filter(r -> StrUtil.equals(r.getMaterialNo(), it.getItemCode())).findFirst().get();
// it.setReceivedQty(it.getInspectionQty().subtract(qo.getNum()));
// it.setBins(StrUtil.join(",", qo.getBinNos()));
// it.setDataStatus((short) 1);
// it.setReceivedWarehouse(qo.getReceivedWarehouse());
// });
// inTaskItemService.updateBatchById(datas);
// inTaskService.updateState(request.getTaskNo());
// datas.stream()
// .filter(it -> request.getItems().stream().anyMatch(r -> StrUtil.equals(r.getMaterialNo(), it.getItemCode())))
// .collect(Collectors.groupingBy(WmsInTaskItem::getPoNum))
// .values()
// .forEach(it -> structuralPackageControllerService.materialStorage(it, request.getItems()));
// }
// return ApiResult.success();
// }
// /**
// * 搜索上架任务列表
// * @param request 请求参数
// */
// @PostMapping("searchTicket")
// public ApiResult<PageData<InTaskVO>> searchTicket(@Valid @RequestBody @NotNull InTaskSearchQO request) {
// return ApiResult.success(inTaskService.search(request));
// }
// /**
// * 获取上架任务明细
// * @param taskNo 上架任务单号
// */
// @GetMapping("getTicketItems")
// public ApiResult<List<WmsInTaskItem>> getTicketItems(@Valid @RequestParam @NotBlank String taskNo) {
// return ApiResult.success(inTaskItemService.getByNo(taskNo));
// }
/** /**
* 导出钢构件订单导入模板 * 导出钢构件订单导入模板

View File

@ -28,7 +28,7 @@ public class ZWM3A18Item1DTO {
/** /**
* 采购凭证的项目编号 * 采购凭证的项目编号
*/ */
private Integer ebelp; private String ebelp;
/** /**
* 物料号 * 物料号

View File

@ -84,7 +84,7 @@ public class SAPSyncParamsDTO {
private String lbprt; private String lbprt;
/** /**
* 是否质检 * 是否质检为X时是质检物料
*/ */
private String kzkri; private String kzkri;

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.qo; package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@ -16,7 +17,19 @@ public class StructuralPackageOrderReceiveQO {
private Long id; private Long id;
/** /**
* 该订单下包含的托盘号 * 上架仓库
*/
@NotBlank
private String warehouse;
/**
* 储位列表
*/
@NotEmpty
private List<String> binNos;
/**
* 包含的托盘号
*/ */
@NotEmpty @NotEmpty
private List<String> trayNos; private List<String> trayNos;

View File

@ -164,4 +164,9 @@ public class DeliverStructuralPackageOrderVO {
* 是否存在缺货零件 * 是否存在缺货零件
*/ */
private Boolean quehuo; private Boolean quehuo;
/**
* 工厂编号
*/
private String factoryNo;
} }

View File

@ -50,12 +50,13 @@
<select id="getInfo" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderVO"> <select id="getInfo" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderVO">
SELECT o.*,m.no||wb."no" AS "workbench_code",us.supplier_code,us.supplier_name,sp.order_no AS "package_order_no" SELECT o.*,m.no||wb."no" AS "workbench_code",us.supplier_code,us.supplier_name,sp.order_no AS "package_order_no"
,sp."no" AS "package_no",sp."name" AS "package_desc",m."no" AS "model_no" ,sp."no" AS "package_no",sp."name" AS "package_desc",m."no" AS "model_no",di.code AS "factory_code"
FROM wms_structural_package_order o FROM wms_structural_package_order o
LEFT JOIN wms_workbench wb ON o.workbench_id=wb."id" LEFT JOIN wms_workbench wb ON o.workbench_id=wb."id"
LEFT JOIN user_supplier us ON o.supplier_id=us.id LEFT JOIN user_supplier us ON o.supplier_id=us.id
LEFT JOIN wms_structural_package sp ON o.package_id=sp."id" LEFT JOIN wms_structural_package sp ON o.package_id=sp."id"
LEFT JOIN wms_model m on o.model_id=m."id" LEFT JOIN wms_model m on o.model_id=m."id"
left join dictionary_item di on di.id=o.factory_id
where o.id=#{id} where o.id=#{id}
order by id desc order by id desc
</select> </select>