From a61e0abc4d378999af9dcd96bdb780bdf47fdac1 Mon Sep 17 00:00:00 2001 From: zhangke Date: Tue, 23 Jun 2026 15:39:07 +0800 Subject: [PATCH 1/7] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E5=B7=B2=E6=A3=80=E6=B5=8B=E7=8A=B6=E6=80=81?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/WmsQcReceiveItemMapper.java | 3 +- .../service/IWmsQcReceiveItemService.java | 2 +- .../impl/WmsQcReceiveItemServiceImpl.java | 4 +- .../mapper/WmsQcReceiveItemMapper.xml | 4 +- .../srm/receive/controller/SRMController.java | 37 ++++++++++++++++++- ...SrmMaterialReceiptScanCodesRepository.java | 24 ++++++++++++ 6 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 nflg-wms-srm-receive/src/main/java/repository/SrmMaterialReceiptScanCodesRepository.java diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsQcReceiveItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsQcReceiveItemMapper.java index a6cd214b..c6412c51 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsQcReceiveItemMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsQcReceiveItemMapper.java @@ -19,7 +19,8 @@ public interface WmsQcReceiveItemMapper extends BaseMapper { List getTaskItem(Long taskId); - void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode, String materialDoc); + void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode, String materialDoc, + BigDecimal UnqualifiedQty ,BigDecimal QualifiedQty); void updateInQty(Long id, BigDecimal inQty, BigDecimal unqualifiedQty, BigDecimal qualifiedQty); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQcReceiveItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQcReceiveItemService.java index 8c6b83ed..0a72f318 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQcReceiveItemService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQcReceiveItemService.java @@ -21,7 +21,7 @@ public interface IWmsQcReceiveItemService extends IService { List getTaskItem(@Valid @NotNull Long taskId); - void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode,String materialDoc); + void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode,String materialDoc,BigDecimal UnqualifiedQty ,BigDecimal QualifiedQty); void updateInQty(Long id, BigDecimal inQty,BigDecimal unqualifiedQty,BigDecimal qualifiedQty); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQcReceiveItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQcReceiveItemServiceImpl.java index c1c9449d..a1d71ab2 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQcReceiveItemServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQcReceiveItemServiceImpl.java @@ -27,8 +27,8 @@ public class WmsQcReceiveItemServiceImpl extends ServiceImpl update wms_qc_receive_item - set check_qty=check_qty + #{InspectionQty} + set check_qty=check_qty + #{InspectionQty}, + unqualified_qty= #{ UnqualifiedQty }, + qualified_qty= #{ QualifiedQty } where note_num = #{ noteNum} and line_number = #{ lineNumber} and material_doc = #{materialDoc} diff --git a/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java index 53277af2..0c1ea205 100644 --- a/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java +++ b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/SRMController.java @@ -4,11 +4,14 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.nflg.wms.common.constant.BarCodeProcessStage; +import com.nflg.wms.common.pojo.document.SrmMaterialReceiptScanCodes; import com.nflg.wms.common.pojo.dto.SRMOrderReceiveDTO; import com.nflg.wms.common.pojo.dto.SRMQualityInspectionResultDTO; import com.nflg.wms.common.pojo.qo.SRMOrderReceiveItemQO; import com.nflg.wms.common.pojo.qo.SRMOrderReceiveQO; import com.nflg.wms.common.pojo.qo.SRMQualityInspectionResult; +import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; @@ -19,12 +22,14 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import repository.SrmMaterialReceiptScanCodesRepository; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * SRM相关 @@ -52,6 +57,12 @@ public class SRMController extends BaseController { @Resource private IWmsQcReceiveService qcReceiveService; + @Resource + private SrmMaterialReceiptScanCodesRepository srmMaterialReceiptScanCodesRepository; + + @Resource + private IWmsQrCodeMasterService qrCodeMasterService; + /** * 接收SRM送货单 */ @@ -137,6 +148,8 @@ public class SRMController extends BaseController { .eq(WmsQcReceiveItem::getMaterialDoc, data.getReceiveNum()) .eq(WmsQcReceiveItem::getLineNumber, data.getLineNumber()) .eq(WmsQcReceiveItem::getNoteNum, data.getNoteNum()) + .eq(WmsQcReceiveItem::getPoLineNumber, data.poLineNumber) + .eq(WmsQcReceiveItem::getPoNum, data.getPoNum()) .one(); if (Objects.isNull(receiveItem)) { log.error("接收到无效的质检信息" + data.getInspectionNum()); @@ -175,12 +188,34 @@ public class SRMController extends BaseController { isCheck = 1; inspect.setReceiveQty(inspect.getQualifiedQty()); } + //查找扫码记录 + List scanCodes = srmMaterialReceiptScanCodesRepository.findByOrderItemId (receiveItem.getOrderItemId()); + if(CollectionUtil.isNotEmpty(scanCodes)) + { + List codeIds = scanCodes.stream().map(SrmMaterialReceiptScanCodes::getCodeContent).collect(Collectors.toList()); + List qrCodes = qrCodeMasterService.lambdaQuery() + .in(WmsQrCodeMaster::getBarcodeCode, codeIds) + .list(); + qrCodes.forEach(qrCode -> { + qrCode.setProcessStage(BarCodeProcessStage.Checked.getState()); + qrCode.setLastScanTime(LocalDateTime.now()); + }); + qrCodeMasterService.updateBarCode(qrCodes); + } + srmQualityInspectionService.save(inspect); qcReceiveService.lambdaUpdate() .eq(WmsQcReceive::getOrderNo, inspect.getNoteNum()) .set(WmsQcReceive::getIsCheck, isCheck) .update(); - qcReceiveItemService.updateCheckNum(inspect.getInspectionQty(), inspect.getNoteNum(), inspect.getLineNumber(), inspect.getItemCode(), inspect.getReceiveNum()); + qcReceiveItemService.updateCheckNum(inspect.getInspectionQty(), + inspect.getNoteNum(), + inspect.getLineNumber(), + inspect.getItemCode(), + inspect.getReceiveNum(), + inspect.getUnqualifiedQty(), + inspect.getQualifiedQty()); + log.error("质检单生成上架任务成功"); return 0; } catch (Exception ex) { diff --git a/nflg-wms-srm-receive/src/main/java/repository/SrmMaterialReceiptScanCodesRepository.java b/nflg-wms-srm-receive/src/main/java/repository/SrmMaterialReceiptScanCodesRepository.java new file mode 100644 index 00000000..47aa5778 --- /dev/null +++ b/nflg-wms-srm-receive/src/main/java/repository/SrmMaterialReceiptScanCodesRepository.java @@ -0,0 +1,24 @@ +package repository; + +import com.nflg.wms.common.pojo.document.SrmMaterialReceiptScanCodes; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; +import org.springframework.data.mongodb.repository.Update; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SrmMaterialReceiptScanCodesRepository + extends MongoRepository { + List findByOrderItemId(Long orderItemId); + List findByReceiveItemId(Long receiveItemId); + + List findByCodeIdIn(List attr0); + +@Query("{ 'codeId' : { $in : ?0 } }") +@Update("{ $set : { 'isIntoStorage' : ?1 } }") +void updateIsIntoStorage(List codeIds, boolean isIntoStorage); + + +} From 393a3dc11e99bdf4c6e6f996d8e6eb8af6a1443a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 24 Jun 2026 08:06:11 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix(controller):=20=E4=BF=AE=E5=A4=8DNormal?= =?UTF-8?q?PGIController=E4=B8=AD=E7=9A=84=E5=8F=82=E6=95=B0=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修正了codeBinNoMap构建时的参数引用,从request改为qo - 注释掉了旧的错误代码实现 - 保持了原有的业务逻辑功能不变 --- .../nflg/wms/admin/controller/NormalPGIController.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index e9d99a97..eedb32fc 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -406,10 +406,12 @@ public class NormalPGIController extends BaseController { zwm3A17DTOS.add(zwm3A17DTO); } - Map codeBinNoMap = request.getItems().stream() - .map(PoReceiveTaskItemConfirmQO::getItems) - .flatMap(List::stream) + Map codeBinNoMap = qo.getItems().stream() .collect(Collectors.toMap(InCostCenterBackSubmitItemQRQO::getQrCode, InCostCenterBackSubmitItemQRQO::getBinNo)); +// request.getItems().stream() +// .map(PoReceiveTaskItemConfirmQO::getItems) +// .flatMap(List::stream) +// .collect(Collectors.toMap(InCostCenterBackSubmitItemQRQO::getQrCode, InCostCenterBackSubmitItemQRQO::getBinNo)); List qrCodeMasters = qrCodeMasterService.getByCodes(codeBinNoMap.keySet()); List tmpQrCodes = qrCodeMasters.stream() .filter(qrCodeMaster -> !Objects.equals(qrCodeMaster.getProcessStage(), BarCodeProcessStage.Received.getState())) From 7d673950361782c31a5620cbab448df67f59c475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 24 Jun 2026 11:13:09 +0800 Subject: [PATCH 3/7] =?UTF-8?q?refactor(normalQM):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=B4=A8=E6=A3=80=E4=BB=BB=E5=8A=A1=E7=A1=AE=E8=AE=A4=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 注入SapService依赖以支持后续功能扩展 - 简化入库参数空值检查的条件判断逻辑 - 修正物料入库状态检查的条件,使用正确的集合变量 - 移除废弃的代码注释块,提高代码可读性 - 重新组织QCReceiveDTO对象创建逻辑,确保在正确位置初始化 - 删除重复的数据添加操作,避免数据冗余 --- .../admin/controller/NormalQMController.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java index 982b3ba6..8ad2f3e4 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java @@ -75,6 +75,7 @@ public class NormalQMController extends BaseController { @Resource private IWmsQrCodeMasterService qrCodeMasterService; + @Resource private SapService sapService; /** @@ -137,8 +138,7 @@ public class NormalQMController extends BaseController { @PostMapping("PDA/task/confirm") @ApiMark(moduleName = "质检物料管理", apiName = "质检任务上架确认") public ApiResult confirm(@Valid @RequestBody List request) { - if (CollectionUtil.isEmpty(request)) - VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("入库参数为空"); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("入库参数为空"); //根据详情ID 获取到相应的入库单信息 List uniqueIds = request.stream() @@ -151,7 +151,7 @@ public class NormalQMController extends BaseController { .apply("check_qty>in_qty") .list(); - VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("不存在待入库的物料(或此物料已入库)"); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(wmsQcReceiveItems)).throwMessage("不存在待入库的物料(或此物料已入库)"); List qrCodes = CollectionUtil.unionAll( request.stream() @@ -232,14 +232,14 @@ public class NormalQMController extends BaseController { List qcReceiveDTOS = new ArrayList<>(); for (String poNum : poNums) { - //封装一个数据 - QCReceiveDTO qcReceiveDTO = new QCReceiveDTO() -// .setUnqualifiedInventories(new ArrayList<>()) - .setQcIdList(new ArrayList<>()) - .setReceiveIds(new ArrayList<>()) - .setWaitModifyItems(new ArrayList<>()) - .setStorageLocationDTOS(new ArrayList<>()) - .setQualifiednventories(new ArrayList<>()); +// //封装一个数据 +// QCReceiveDTO qcReceiveDTO = new QCReceiveDTO() +//// .setUnqualifiedInventories(new ArrayList<>()) +// .setQcIdList(new ArrayList<>()) +// .setReceiveIds(new ArrayList<>()) +// .setWaitModifyItems(new ArrayList<>()) +// .setStorageLocationDTOS(new ArrayList<>()) +// .setQualifiednventories(new ArrayList<>()); List qcReceiveTaskConfirmQOS = request.stream() .filter(q -> q.getPoNum().equals(poNum)) .collect(Collectors.toList()); @@ -252,6 +252,15 @@ public class NormalQMController extends BaseController { if (Objects.isNull(wmsQcReceiveItem)) { continue; } + //封装一个数据 + QCReceiveDTO qcReceiveDTO = new QCReceiveDTO() +// .setUnqualifiedInventories(new ArrayList<>()) + .setQcIdList(new ArrayList<>()) + .setReceiveIds(new ArrayList<>()) + .setWaitModifyItems(new ArrayList<>()) + .setStorageLocationDTOS(new ArrayList<>()) + .setQualifiednventories(new ArrayList<>()); + qcReceiveDTOS.add(qcReceiveDTO); if (!qcReceiveDTO.getReceiveIds().stream().anyMatch(id -> id.equals(wmsQcReceiveItem.getReceiveId()))) { qcReceiveDTO.getReceiveIds().add(wmsQcReceiveItem.getReceiveId()); } @@ -366,7 +375,7 @@ public class NormalQMController extends BaseController { } } } - qcReceiveDTOS.add(qcReceiveDTO); +// qcReceiveDTOS.add(qcReceiveDTO); } qrCodeMasterService.updateBarCode(qrCodeMasters); normalQMControllerService.confirmReceive(qcReceiveDTOS); From 54af840fa9166967b49ca49e6a69eec9751ae325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 24 Jun 2026 18:28:10 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat(storage):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=95=B0=E6=8D=AE=E5=AF=BC=E5=85=A5=E5=92=8C?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 StorageImportDTO 数据传输对象用于导入验证 - 重构 updateCheckAndImport 方法提升物料编号和工厂编号验证逻辑 - 实现批量新增和更新库存数据的分离处理 - 优化导入文件时的错误处理和异常捕获机制 - 在数据库查询中添加工厂编号字段关联查询 - 改进代码结构和变量命名规范性 --- .../wms/admin/pojo/dto/StorageImportDTO.java | 26 ++++ .../service/StorageControllerService.java | 137 +++++++++++------- .../resources/mapper/WmsStorageMapper.xml | 8 +- 3 files changed, 114 insertions(+), 57 deletions(-) create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/StorageImportDTO.java diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/StorageImportDTO.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/StorageImportDTO.java new file mode 100644 index 00000000..cd7658e2 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/StorageImportDTO.java @@ -0,0 +1,26 @@ +package com.nflg.wms.admin.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class StorageImportDTO { + + private String factoryNo; + + private String warehouseNo; + + private String binNo; + + /** + * 库存地点ID + */ + private Long warehouseId; + + private Long binId; + + private String error; +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java index d0f24434..568fc392 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.admin.pojo.dto.StorageImportDTO; import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.pojo.ApiResult; @@ -44,9 +45,7 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; @Component @@ -124,14 +123,14 @@ public class StorageControllerService { if (updateCheckAndImport(data)) { return ApiResult.success(); } else { - try(ByteArrayOutputStream osOut = new ByteArrayOutputStream()) { + try (ByteArrayOutputStream osOut = new ByteArrayOutputStream()) { new Workbook() .addSheet(new ListSheet<>(data)) .writeTo(osOut); - try(ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) { + try (ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) { return ApiResult.error(STATE.DataNoCheckPass, "导入文件失败", fileUploadService.upload("temp/" + DateTimeUtil.format(LocalDate.now(), "yyyyMMdd") + "/" + IdUtil.fastUUID() + ".xlsx", isIn, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")); } - }catch (Exception e){ + } catch (Exception e) { return ApiResult.error(STATE.BusinessError, "保存文件出错"); } } @@ -139,18 +138,77 @@ public class StorageControllerService { @Transactional public boolean updateCheckAndImport(List data) { - List storages = new ArrayList<>(); + List storagesForAdd = new ArrayList<>(); + Set materialNos = data.stream().map(StorageExcelExportDTO::getMaterialNo).collect(Collectors.toSet()); + List dtos = bomMaterialService.getList(materialNos); + Set fwbs = new HashSet<>(); + data.forEach(dto -> { + if (dtos.stream().noneMatch(d -> StrUtil.equals(d.getMaterialNo(), dto.getMaterialNo()))) { + dto.setError("物料编号无效;"); + } else { + if (StrUtil.isNotBlank(dto.getBinNo())) { + fwbs.add(dto.getFactoryNo() + "$" + dto.getWarehouseNo() + "$" + dto.getBinNo()); + } + } + }); + List factories = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_FACTORY); + List fwbos = new ArrayList<>(); + fwbs.forEach(fwb -> { + List fwbl = StrUtil.split(fwb, "$"); + if (factories.stream().noneMatch(f -> StrUtil.equals(f.getValue(), fwbl.get(0)))) { + fwbos.add(new StorageImportDTO(fwbl.get(0), fwbl.get(1), fwbl.get(2), null, null, "工厂编号无效")); + } else { + WmsBin bin = wmsBinService.getByCode(fwbl.get(0), fwbl.get(1), fwbl.get(2)); + if (Objects.isNull(bin)) { + fwbos.add(new StorageImportDTO(fwbl.get(0), fwbl.get(1), fwbl.get(2), null, null, "储位编号无效")); + } else { + fwbos.add(new StorageImportDTO(fwbl.get(0), fwbl.get(1), fwbl.get(2), bin.getWarehouseId(), bin.getId(), null)); + } + } + }); + List storagesForUpdate = storageService.lambdaQuery() + .in(WmsStorage::getMaterialNo, materialNos) + .list(); for (StorageExcelExportDTO dto : data) { - WmsStorage storage = new WmsStorage(); + if (StrUtil.isNotBlank(dto.getError())) { + continue; + } + WmsStorage storage = null; StringBuilder sb = new StringBuilder(); if (StrUtil.isBlank(dto.getMaterialNo())) { sb.append("物料编号不能为空;"); + } + String factoryNo = StrUtil.trim(dto.getFactoryNo()); + if (StrUtil.isBlank(factoryNo)) { + sb.append("工厂编号不能为空;"); + } + String warehouseNo = StrUtil.trim(dto.getWarehouseNo()); + if (StrUtil.isBlank(warehouseNo)) { + sb.append("库存地点编号不能为空;"); + } + if (StrUtil.isBlank(dto.getBinNo())) { + sb.append("储位编号不能为空;"); } else { - BomMaterialDTO material = bomMaterialService.getMaterialInfo(dto.getMaterialNo()); - if (Objects.isNull(material)) { - sb.append("物料编号无效;"); + StorageImportDTO fwbo = fwbos.stream() + .filter(f -> StrUtil.equals(f.getFactoryNo(), factoryNo) + && StrUtil.equals(f.getWarehouseNo(), warehouseNo) + && StrUtil.equals(f.getBinNo(), dto.getBinNo()) + ) + .findFirst() + .get(); + if (StrUtil.isNotBlank(fwbo.getError())) { + sb.append(fwbo.getError()).append(";"); } else { - storage = storageService.lambdaQuery().eq(WmsStorage::getMaterialNo, material.getMaterialNo()).one(); + BomMaterialDTO material = dtos.stream() + .filter(d -> StrUtil.equals(d.getMaterialNo(), dto.getMaterialNo())) + .findFirst() + .get(); + storage = storagesForUpdate.stream() + .filter(s -> StrUtil.equals(s.getMaterialNo(), dto.getMaterialNo()) + && s.getWarehouseId().equals(fwbo.getWarehouseId()) + ) + .findFirst() + .orElse(null); if (Objects.isNull(storage)) { storage = new WmsStorage() .setId(IdUtil.getSnowflakeNextId()) @@ -159,56 +217,25 @@ public class StorageControllerService { .setMaterialDesc(material.getMaterialDesc()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()); - }else { + storagesForAdd.add(storage); + } else { storage.setUpdateBy(UserUtil.getUserName()); storage.setUpdateTime(LocalDateTime.now()); } + storage.setWarehouseId(fwbo.getWarehouseId()); + storage.setBinId(fwbo.getBinId()); + storage.setRemark(dto.getRemark()); } } - String factoryNo = StrUtil.trim(dto.getFactoryNo()); - DictionaryItem item = null; - if (StrUtil.isBlank(factoryNo)) { - sb.append("工厂编号不能为空;"); - } else { - item = dictionaryItemService.getByCode(Constant.DICTIONARY_FACTORY, factoryNo); - if (Objects.isNull(item)) { - sb.append("工厂编号无效;"); - } - } - String warehouseNo = StrUtil.trim(dto.getWarehouseNo()); - WmsWarehouse warehouse = null; - if (StrUtil.isBlank(warehouseNo)) { - sb.append("库存地点编号不能为空;"); - } else if (Objects.nonNull(item)) { - warehouse = warehouseService.lambdaQuery().eq(WmsWarehouse::getFactoryId, item.getId()).eq(WmsWarehouse::getNo, warehouseNo).one(); - if (Objects.isNull(warehouse)) { - sb.append("库存地点编号无效;"); - } else { - storage.setWarehouseId(warehouse.getId()); - } - } - if (StrUtil.isBlank(dto.getBinNo())) { - sb.append("储位编号不能为空;"); - } else if (Objects.nonNull(warehouse)) { - WmsBin bin = wmsBinService.lambdaQuery() - .eq(WmsBin::getWarehouseId, warehouse.getId()) - .eq(WmsBin::getNo, dto.getBinNo()) - .one(); - if (Objects.isNull(bin)) { - sb.append("储位编号无效;"); - }else { - storage.setBinId(bin.getId()); - } - } - storage.setRemark(dto.getRemark()); dto.setError(sb.toString()); - storages.add(storage); } if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getError()))) { - storageService.saveOrUpdateBatch(storages); -// storageBinService.remove(new LambdaQueryWrapper() -// .in(WmsStorageBin::getStorageId, storages.stream().map(WmsStorage::getId).toList())); -// storageBinService.saveBatch(storageBinAll); + if (CollectionUtil.isNotEmpty(storagesForAdd)) { + storageService.saveBatch(storagesForAdd); + } + if (CollectionUtil.isNotEmpty(storagesForUpdate)) { + storageService.updateBatchById(storagesForUpdate); + } return true; } return false; @@ -233,7 +260,7 @@ public class StorageControllerService { } public void exportSearch(HttpServletResponse response, @Valid StorageSearchQO request) throws IOException { - List list=storageService.searchNonPage(request); + List list = storageService.searchNonPage(request); List datas = list.stream().map(bin -> Convert.convert(StorageExcelExportDTO.class, bin)).collect(Collectors.toList()); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("物料存储导出.xlsx", StandardCharsets.UTF_8)); diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsStorageMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsStorageMapper.xml index 889c6988..688be53a 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsStorageMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsStorageMapper.xml @@ -10,10 +10,12 @@ wh.id AS "warehouseId", wh.no AS "warehouseNo", s.bin_id, - bin.no as "binNo" + bin.no as "binNo", + di.value as "factoryNo" FROM wms_storage s INNER JOIN wms_bin bin ON s.bin_id = bin.id LEFT JOIN wms_warehouse wh ON s.warehouse_id = wh.id + LEFT JOIN dictionary_item di ON wh.factory_id = di."id" and wh.no ilike concat('%', #{request.warehouseNo}, '%') @@ -56,10 +58,12 @@ wh.id AS "warehouseId", wh.no AS "warehouseNo", s.bin_id, - bin.no as "binNo" + bin.no as "binNo", + di.value as "factoryNo" FROM wms_storage s INNER JOIN wms_bin bin ON s.bin_id = bin.id LEFT JOIN wms_warehouse wh ON s.warehouse_id = wh.id + LEFT JOIN dictionary_item di ON wh.factory_id = di."id" and wh.no like concat('%', #{request.warehouseNo}, '%') From 7529149bc44910575daae675ed9d0a3fb0c6c3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 24 Jun 2026 18:55:23 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat(qc):=20=E6=B7=BB=E5=8A=A0=E8=B4=A8?= =?UTF-8?q?=E6=A3=80=E6=94=B6=E8=B4=A7=E5=AE=8C=E6=88=90=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 UserUtil 工具类用于获取当前用户信息 - 在质检收货完成时更新 updateTime、updateUserId 和 updateUserName 字段 - 添加 inTime 和 inUserName 字段到 QCReceiptVO 中用于记录入库时间和入库人 - 实现完整的收货状态变更记录追踪机制 --- .../wms/admin/service/NormalQMControllerService.java | 7 +++++++ .../java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java index 4e4a77ff..4366e0f8 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalQMControllerService.java @@ -9,6 +9,7 @@ import com.nflg.wms.admin.pojo.dto.ZWM3A27ItemDTO; import com.nflg.wms.common.pojo.dto.OptRecordDTO; import com.nflg.wms.common.pojo.vo.QCTaskItemScanCodesVO; import com.nflg.wms.common.pojo.vo.QCTaskItemVO; +import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.repository.entity.WmsQcReceive; import com.nflg.wms.repository.entity.WmsQcReceiveItem; import com.nflg.wms.repository.entity.WmsSrmQualityInspection; @@ -120,11 +121,17 @@ public class NormalQMControllerService { iWmsQcReceiveService.lambdaUpdate() .eq(WmsQcReceive::getId, receiveId) .set(WmsQcReceive::getIsCompleted, 2) + .set(WmsQcReceive::getUpdateTime, LocalDateTime.now()) + .set(WmsQcReceive::getUpdateUserId, UserUtil.getUserId()) + .set(WmsQcReceive::getUpdateUserName, UserUtil.getUserName()) .update(); } else { iWmsQcReceiveService.lambdaUpdate() .eq(WmsQcReceive::getId, receiveId) .set(WmsQcReceive::getIsCompleted, 1) + .set(WmsQcReceive::getUpdateTime, LocalDateTime.now()) + .set(WmsQcReceive::getUpdateUserId, UserUtil.getUserId()) + .set(WmsQcReceive::getUpdateUserName, UserUtil.getUserName()) .update(); } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java index d22e0f46..4c525c4b 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java @@ -82,4 +82,14 @@ public class QCReceiptVO { * 1 无码收货 */ private Integer sourceType; + + /** + * 入库时间 + */ + private LocalDateTime inTime; + + /** + * 入库人 + */ + private String inUserName; } From f25ecf1c54f3207e4de516de168a3b679632a7a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 25 Jun 2026 16:48:07 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix(package):=20=E4=BF=AE=E5=A4=8D=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=8C=96=E5=8C=85=E8=A3=85=E8=AE=A2=E5=8D=95=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E4=BE=9B=E5=BA=94=E5=95=86ID=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=92=8C=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除订单项中的供应商ID设置避免数据冗余 - 简化交付订单状态更新逻辑移除不必要的条件判断 - 优化二维码主记录的流程阶段更新确保正确标记入库状态 - 统一处理二维码扫描用户的更新逻辑 --- .../StructuralPackageOrderController.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java index 60cae812..52e46cbc 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java @@ -389,7 +389,6 @@ public class StructuralPackageOrderController extends BaseController { .setPackagingType((short) 0) .setQuantity(BigDecimal.valueOf(it.getNum())) .setUnit(it.getUnit()) - .setSupplierId(it.getSupplierId()) .setPoNumber(it.getExternalOrderNo()) .setPoLineNumber(it.getRowNo()) .setExtendId(it.getId()) @@ -1205,15 +1204,14 @@ public class StructuralPackageOrderController extends BaseController { List items = structuralPackageOrderTrayItemService.getList(request.getId()); items.forEach(it -> it.setStoreNum(it.getShipmentNum())); structuralPackageOrderTrayItemService.updateBatchById(items); - if (structuralPackageDeliverOrderService.updateStateByOrderId(request.getId()) == 2) { - qrCodeMasterService.lambdaUpdate() - .set(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) - .set(WmsQrCodeMaster::getLastScanBy, UserUtil.getUserId()) - .set(WmsQrCodeMaster::getLastScanByname, UserUtil.getUserName()) - .set(WmsQrCodeMaster::getLastScanTime, LocalDateTime.now()) - .eq(WmsQrCodeMaster::getExtendId, request.getId()) - .update(); - } + structuralPackageDeliverOrderService.updateStateByOrderId(request.getId()); + qrCodeMasterService.lambdaUpdate() + .set(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) + .set(WmsQrCodeMaster::getLastScanBy, UserUtil.getUserId()) + .set(WmsQrCodeMaster::getLastScanByname, UserUtil.getUserName()) + .set(WmsQrCodeMaster::getLastScanTime, LocalDateTime.now()) + .eq(WmsQrCodeMaster::getExtendId, request.getId()) + .update(); WmsStructuralPackageDeliverOrderMap om = structuralPackageDeliverOrderMapService.lambdaQuery() .eq(WmsStructuralPackageDeliverOrderMap::getOrderId, request.getId()) .one(); From 5fe5e50ac75ce0737b39aad3682eb81a2e17680a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 25 Jun 2026 17:11:45 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat(ldap):=20=E4=B8=BALDAP=E7=94=A8?= =?UTF-8?q?=E6=88=B7DTO=E6=B7=BB=E5=8A=A0ID=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入IdUtil工具类用于生成雪花算法ID - 为LdapUserDTO类添加Long类型的id字段 - 设置默认值为IdUtil.getSnowflakeNextId()自动生成唯一标识 --- .../main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java index 0a196358..f331df1f 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.dto; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import lombok.Data; import lombok.experimental.Accessors; @@ -8,6 +9,8 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class LdapUserDTO { + private Long id = IdUtil.getSnowflakeNextId(); + /** * 用户名 */