feat(normal-pgi): 新增出库物料扫码记录功能

- 引入 OutMaterialScanRecordRespository 和相关文档类
- 添加 Instant 时间类型支持
- 注入出库物料扫码记录仓库实例
- 修改数据分组逻辑以支持 CrossQO 类型
- 创建出库物料扫码记录列表并初始化
- 在工单项目创建时同步生成扫码记录
- 为每个二维码生成对应的扫码记录详情
- 批量保存出库物料扫码记录到数据库
This commit is contained in:
曹鹏飞 2026-03-30 19:00:29 +08:00
parent 8b087ce00a
commit 194e3c8a75
1 changed files with 41 additions and 7 deletions

View File

@ -11,6 +11,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import com.nflg.wms.admin.pojo.dto.*; import com.nflg.wms.admin.pojo.dto.*;
import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository;
import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository; import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository;
import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository; import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService; import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
@ -22,6 +23,7 @@ import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.OutMaterialScanRecord;
import com.nflg.wms.common.pojo.document.SrmMaterialReceiptNoScanCodes; import com.nflg.wms.common.pojo.document.SrmMaterialReceiptNoScanCodes;
import com.nflg.wms.common.pojo.document.SrmMaterialReceiptScanCodes; import com.nflg.wms.common.pojo.document.SrmMaterialReceiptScanCodes;
import com.nflg.wms.common.pojo.dto.*; import com.nflg.wms.common.pojo.dto.*;
@ -44,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -115,6 +118,9 @@ public class NormalPGIController extends BaseController {
@Resource @Resource
private IWmsWarehouseService wmsWarehouseService; private IWmsWarehouseService wmsWarehouseService;
@Resource
private OutMaterialScanRecordRespository outMaterialScanRecordRespository;
//收货单分页 //收货单分页
/** /**
@ -1299,10 +1305,11 @@ public class NormalPGIController extends BaseController {
// ); // );
// }); // });
// qos.forEach(this::takeDeliveryConfirm); // qos.forEach(this::takeDeliveryConfirm);
Map<String, List<Zwm3a07VO>> maps = datas.stream().collect(Collectors.groupingBy(Zwm3a07VO::getKey2)); Map<String, List<CrossQO>> maps = datas.stream().collect(Collectors.groupingBy(CrossQO::getKey2));
List<WmsOutProduce> pOrders = new ArrayList<>(); List<WmsOutProduce> pOrders = new ArrayList<>();
List<WmsOutProduceTicket> tickets = new ArrayList<>(); List<WmsOutProduceTicket> tickets = new ArrayList<>();
List<WmsOutProduceTicketItem> ticketItems = new ArrayList<>(); List<WmsOutProduceTicketItem> ticketItems = new ArrayList<>();
List<OutMaterialScanRecord> records = new ArrayList<>();
maps.forEach((key, items) -> { maps.forEach((key, items) -> {
WmsOutProduce order = Convert.convert(WmsOutProduce.class, items.get(0)); WmsOutProduce order = Convert.convert(WmsOutProduce.class, items.get(0));
order.setId(IdUtil.getSnowflakeNextId()); order.setId(IdUtil.getSnowflakeNextId());
@ -1336,12 +1343,38 @@ public class NormalPGIController extends BaseController {
} else { } else {
throw new NflgException(STATE.BusinessError, "获取锁失败"); throw new NflgException(STATE.BusinessError, "获取锁失败");
} }
ticketItems.add( WmsOutProduceTicketItem ticketItem=new WmsOutProduceTicketItem()
new WmsOutProduceTicketItem() .setId(IdUtil.getSnowflakeNextId())
.setTicketId(ticket.getId()) .setTicketId(ticket.getId())
.setProduceItemId(itemId) .setProduceItemId(itemId)
.setNum(item.getSqsl()) .setNum(item.getSqsl());
ticketItems.add(ticketItem);
item.getQrCodes().forEach(qr->{
WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream()
.filter(qit -> qit.getBarcodeCode().equals(qr.getCodeId()))
.findFirst()
.get();
records.add(new OutMaterialScanRecord()
.setSource(1)
.setSourceId(order.getId())
.setSourceItemId(itemId)
.setTicketId(ticket.getId())
.setTicketItemId(ticketItem.getId())
.setMaterialNo(item.getMatnr())
.setContent(qr.getCodeId())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setQiTao(false)
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setUnit(qrCodeMaster.getUnit())
.setRspos(item.getRspos())
.setNum(qrCodeMaster.getQuantity())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
); );
});
} catch (Exception e) { } catch (Exception e) {
throw new NflgException(STATE.BusinessError, e.getMessage()); throw new NflgException(STATE.BusinessError, e.getMessage());
} finally { } finally {
@ -1357,6 +1390,7 @@ public class NormalPGIController extends BaseController {
outProduceService.saveBatch(pOrders); outProduceService.saveBatch(pOrders);
outProduceTicketService.saveBatch(tickets); outProduceTicketService.saveBatch(tickets);
outProduceTicketItemService.saveBatch(ticketItems); outProduceTicketItemService.saveBatch(ticketItems);
outMaterialScanRecordRespository.saveAll(records);
return ApiResult.success(); return ApiResult.success();
} }