Compare commits

...

4 Commits

Author SHA1 Message Date
曹鹏飞 871aba36e5 Merge branch 'feature/bug-953' into develop 2025-12-02 17:06:06 +08:00
曹鹏飞 3d474f3e7d feat: bug-953 PDA删除【钢构件上架】菜单,钢构件收货直接过账到SAP 2025-12-02 17:04:03 +08:00
曹鹏飞 c9cc53b9cd fix(bin): 调整库存VO字段与SQL映射
- 移除BinInventoryVO中的id和materialNo字段
- 在SQL查询中为sum数量添加别名num以匹配VO字段
- 保持接口与数据库字段的一致性,修正映射错误
2025-12-02 16:17:29 +08:00
曹鹏飞 8a0074247d feat: bug-953 PDA删除【钢构件上架】菜单,钢构件收货直接过账到SAP 2025-12-01 16:40:17 +08:00
12 changed files with 166 additions and 123 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.*;
@ -730,11 +728,15 @@ public class StructuralPackageOrderController extends BaseController {
*/ */
@GetMapping("getInfoByDeliverOrderNo") @GetMapping("getInfoByDeliverOrderNo")
public ApiResult<DeliverStructuralPackageOrderForPackageVO> getInfoByDeliverOrderNo(@Valid @RequestParam @NotBlank String orderNo) { public ApiResult<DeliverStructuralPackageOrderForPackageVO> getInfoByDeliverOrderNo(@Valid @RequestParam @NotBlank String orderNo) {
WmsStructuralPackageDeliverOrder order = structuralPackageDeliverOrderService.lambdaQuery().eq(WmsStructuralPackageDeliverOrder::getNo, orderNo).one();
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
VUtil.trueThrowBusinessError(Objects.equals(order.getState(), (short) 2)).throwMessage("该订单已收货");
List<DeliverStructuralPackageOrderForPackageItemVO> datas = deliverStructuralPackageOrderService.getInfoByDeliverOrderNo(orderNo); List<DeliverStructuralPackageOrderForPackageItemVO> datas = deliverStructuralPackageOrderService.getInfoByDeliverOrderNo(orderNo);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("未找到数据"); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("未找到数据");
datas.forEach(it -> { datas.forEach(it -> {
it.setTrayNos(deliverStructuralPackageOrderTrayService.lambdaQuery() it.setTrayNos(deliverStructuralPackageOrderTrayService.lambdaQuery()
.select(WmsStructuralPackageOrderTray::getNo) .select(WmsStructuralPackageOrderTray::getNo)
.eq(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState())
.eq(WmsStructuralPackageOrderTray::getOrderId, it.getId()) .eq(WmsStructuralPackageOrderTray::getOrderId, it.getId())
.list() .list()
.stream() .stream()
@ -818,109 +820,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

@ -7,18 +7,11 @@ import java.math.BigDecimal;
@Data @Data
public class BinInventoryVO { public class BinInventoryVO {
private Long id;
/** /**
* 储位编码 * 储位编码
*/ */
private String no; private String no;
/**
* 物料编码
*/
private String materialNo;
/** /**
* 数量 * 数量
*/ */

View File

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

View File

@ -27,7 +27,7 @@ public interface WmsStructuralPackageDeliverOrderMapper extends BaseMapper<WmsSt
String getNoByOrderId(Long id); String getNoByOrderId(Long id);
boolean allReceived(Long deliverId); boolean hasNotReceived(Long deliverId);
List<DeliverStructuralPackageOrderVO> getInfo(Long id); List<DeliverStructuralPackageOrderVO> getInfo(Long id);

View File

@ -26,7 +26,6 @@ import java.util.Optional;
* <p> * <p>
* 服务实现类 * 服务实现类
* </p> * </p>
*
* @author 代码生成器生成 * @author 代码生成器生成
* @since 2025 * @since 2025
*/ */
@ -54,7 +53,7 @@ public class WmsStructuralPackageDeliverOrderServiceImpl extends ServiceImpl<Wms
public void updateStateByOrderId(Long orderId) { public void updateStateByOrderId(Long orderId) {
WmsStructuralPackageDeliverOrderMap map = wmsStructuralPackageDeliverOrderMapService.lambdaQuery().eq(WmsStructuralPackageDeliverOrderMap::getOrderId, orderId).one(); WmsStructuralPackageDeliverOrderMap map = wmsStructuralPackageDeliverOrderMapService.lambdaQuery().eq(WmsStructuralPackageDeliverOrderMap::getOrderId, orderId).one();
lambdaUpdate() lambdaUpdate()
.set(WmsStructuralPackageDeliverOrder::getState, baseMapper.allReceived(map.getDeliverId())?2:1) .set(WmsStructuralPackageDeliverOrder::getState, baseMapper.hasNotReceived(map.getDeliverId()) ? 1 : 2)
.set(WmsStructuralPackageDeliverOrder::getUpdateTime, LocalDateTime.now()) .set(WmsStructuralPackageDeliverOrder::getUpdateTime, LocalDateTime.now())
.set(WmsStructuralPackageDeliverOrder::getUpdateBy, UserUtil.getUserName()) .set(WmsStructuralPackageDeliverOrder::getUpdateBy, UserUtil.getUserName())
.eq(WmsStructuralPackageDeliverOrder::getId, map.getDeliverId()) .eq(WmsStructuralPackageDeliverOrder::getId, map.getDeliverId())

View File

@ -38,7 +38,7 @@
</select> </select>
<select id="getInventory" resultType="com.nflg.wms.common.pojo.vo.BinInventoryVO"> <select id="getInventory" resultType="com.nflg.wms.common.pojo.vo.BinInventoryVO">
SELECT b."no",COALESCE(SUM(i.num),0) SELECT b."no",COALESCE(SUM(i.num),0) as num
FROM wms_bin b FROM wms_bin b
LEFT JOIN wms_storage_bin sb ON sb.bin_id=b."id" LEFT JOIN wms_storage_bin sb ON sb.bin_id=b."id"
LEFT JOIN wms_storage s ON s."id"=sb.storage_id LEFT JOIN wms_storage s ON s."id"=sb.storage_id

View File

@ -58,11 +58,11 @@
where pdom.order_id=#{id} where pdom.order_id=#{id}
</select> </select>
<select id="allReceived" resultType="boolean"> <select id="hasNotReceived" resultType="boolean">
SELECT EXISTS SELECT EXISTS
( (
SELECT SELECT
om.* 1
FROM FROM
wms_structural_package_deliver_order_map om wms_structural_package_deliver_order_map om
INNER JOIN wms_structural_package_order_tray ot ON om.order_id = ot.order_id INNER JOIN wms_structural_package_order_tray ot ON om.order_id = ot.order_id

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>