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())
.setErfmg1(code.getQualifiedQty())
.setErfmg2(code.getUnqualifiedQty())
.setEbelp(Integer.valueOf(code.getPoLineNumber()))
.setEbelp(code.getPoLineNumber())
.setMatnr(code.getItemCode())
.setMeins(code.getUnit())
.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.convert.Convert;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
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.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.nflg.wms.admin.pojo.dto.PdfPageDTO;
import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO;
import com.nflg.wms.admin.pojo.dto.StructuralPackageOrderImportDTO;
import com.nflg.wms.admin.pojo.dto.*;
import com.nflg.wms.admin.repository.PackageMaterialScanRecordRepository;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
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.dto.PackageMaterialDTO;
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.qo.*;
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);
VUtil.trueThrowBusinessError(Objects.isNull(dto)).throwMessage("ZIM_004未查询到数据");
VUtil.trueThrowBusinessError(StrUtil.isBlank(dto.getWarehouseNo())).throwMessage("ZIM_004接口查询到仓库为空");
//创建上架任务
VUtil.trueThrowBusinessError(!inTaskService.generateTask(List.of(new WmsInTaskItem()
.setPoNum(order.getExternalOrderNo())
.setPoLineNumber(order.getRowNo())
.setLineNumber(String.valueOf(order.getId()))
.setNoteNum(structuralPackageDeliverOrderService.getNoByOrderId(request.getId()))
.setItemCode(order.getPackageNo())
.setItemName(order.getPackageDesc())
.setUnit(order.getUnit())
.setIsQuality(false)
.setKzkri(order.getKzkri())
.setUnqualifiedQty(BigDecimal.ZERO)
.setQualifiedQty(BigDecimal.valueOf(order.getNum()))
.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)
BigDecimal num = BigDecimal.valueOf(order.getNum());
Pair<Pair<String, String>, Pair<String, String>> pair = sapService.zwm3a17(new ZWM3A17DTO()
.setEbeln(order.getExternalOrderNo())
.setUsnam(UserUtil.getUserName())
.setItem1(List.of(new ZWM3A17Item1DTO()
.setEBELP(order.getRowNo())
.setCHARG("")
.setERFMG(num)
.setKZKRI(dto.getKzkri())
.setLGORT(request.getWarehouse())
.setMATNR(order.getPackageNo())
.setWERKS(order.getFactoryNo())
.setMEINS(order.getUnit())
)
.throwMessage("创建上架任务失败");
return ApiResult.success();
}
/**
* 搜索上架任务列表PDA使用
* @param no 任务单号或原始单号
*/
@GetMapping("searchIn")
public ApiResult<List<InTaskVO>> searchIn(@Valid @RequestParam(required = false) String no) {
return ApiResult.success(inTaskService.searchForIn(no));
}
/**
* 获取上架任务详情PDA使用
* @param taskNo 上架任务单号
*/
@GetMapping("getInTaskInfo")
public ApiResult<List<InTaskInfoVO>> getInTaskInfo(@Valid @RequestParam @NotBlank String 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()));
)
.setItem2(List.of(
new ZWM3A17Item2DTO()
.setEBELP(order.getRowNo())
.setSERNR("")
.setFLAG("X")
)
)
);
if (StrUtil.equalsIgnoreCase(dto.getKzkri(), "X")) {
sapService.zwm3a18(new ZWM3A18DTO()
.setEbeln(order.getExternalOrderNo())
.setUsnam(UserUtil.getUserName())
.setMblnr(pair.getValue().getKey())
.setMjahr(pair.getValue().getValue())
.setItem1(List.of(
new ZWM3A18Item1DTO()
.setErfmg(num)
.setErfmg1(num)
.setErfmg2(BigDecimal.ZERO)
.setEbelp(order.getRowNo())
.setMatnr(order.getPackageNo())
.setMeins(order.getUnit())
.setCharg("")
.setLgort(request.getWarehouse())
.setSgtxt("")
.setWerks(order.getFactoryNo())
)
)
.setItem2(
List.of(
new ZWM3A17Item2DTO()
.setEBELP(order.getRowNo())
.setSERNR("")
.setFLAG("X")
)
)
);
}
return ApiResult.success();
}
/**
* 搜索上架任务列表
* @param request 请求参数
*/
@PostMapping("searchTicket")
public ApiResult<PageData<InTaskVO>> searchTicket(@Valid @RequestBody @NotNull InTaskSearchQO request) {
return ApiResult.success(inTaskService.search(request));
}
// /**
// * 搜索上架任务列表PDA使用
// * @param no 任务单号或原始单号
// */
// @GetMapping("searchIn")
// public ApiResult<List<InTaskVO>> searchIn(@Valid @RequestParam(required = false) String no) {
// return ApiResult.success(inTaskService.searchForIn(no));
// }
/**
* 获取上架任务明细
* @param taskNo 上架任务单号
*/
@GetMapping("getTicketItems")
public ApiResult<List<WmsInTaskItem>> getTicketItems(@Valid @RequestParam @NotBlank String taskNo) {
return ApiResult.success(inTaskItemService.getByNo(taskNo));
}
// /**
// * 获取上架任务详情PDA使用
// * @param taskNo 上架任务单号
// */
// @GetMapping("getInTaskInfo")
// public ApiResult<List<InTaskInfoVO>> getInTaskInfo(@Valid @RequestParam @NotBlank String 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;
/**
* 是否质检
* 是否质检为X时是质检物料
*/
private String kzkri;

View File

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

View File

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

View File

@ -50,12 +50,13 @@
<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"
,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
LEFT JOIN wms_workbench wb ON o.workbench_id=wb."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_model m on o.model_id=m."id"
left join dictionary_item di on di.id=o.factory_id
where o.id=#{id}
order by id desc
</select>