From 3474134056afe04a4f9fd73e8ad57412a9131a27 Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Mon, 1 Jun 2026 17:50:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E7=A0=81=E6=94=B6=E8=B4=A7-=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E8=AE=A2=E5=8D=95=E5=89=AF=E4=BA=A7=E5=93=81(?= =?UTF-8?q?=E6=8B=86=E8=A7=A3)=E5=8A=9F=E8=83=BD=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InProduceOrderSurplusController.java | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java index 1a8aa048..c32a5caa 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java @@ -7,8 +7,12 @@ import cn.hutool.core.lang.Pair; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.nflg.wms.admin.pojo.dto.PdfPageDTO; +import com.nflg.wms.admin.pojo.request.NoScanningItemDataRequest; +import com.nflg.wms.admin.pojo.request.NoScanningItemRequest; +import com.nflg.wms.admin.pojo.request.NoScanningRequest; import com.nflg.wms.admin.repository.InMaterialScanRecordRespository; import com.nflg.wms.admin.service.BasdeSerialNumberControllerService; +import com.nflg.wms.admin.service.NoScanningBaseControllerService; import com.nflg.wms.admin.service.SapService; import com.nflg.wms.admin.util.*; import com.nflg.wms.common.constant.BarCodeProcessStage; @@ -17,8 +21,11 @@ import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.document.InMaterialScanRecord; import com.nflg.wms.common.pojo.dto.InventoryInDTO; +import com.nflg.wms.common.pojo.dto.OptRecordDTO; import com.nflg.wms.common.pojo.dto.QrCodeMasterPrintDTO; +import com.nflg.wms.common.pojo.dto.Zwm00Mb107DTO; import com.nflg.wms.common.pojo.qo.*; +import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; @@ -31,6 +38,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.ClassPathResource; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -42,8 +50,10 @@ import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.net.URL; import java.time.Instant; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -62,6 +72,15 @@ public class InProduceOrderSurplusController extends BaseController { @Resource private BasdeSerialNumberControllerService serialNumberControllerService; + @Resource + private IWmsInProduceOrderService produceOrderService; + + @Resource + private IWmsInProduceOrderItemService produceOrderItemService; + + @Resource + private IWmsBomService bomService; + @Resource private IWmsInProduceOrderSurplusService inProduceOrderSurplusService; @@ -80,12 +99,21 @@ public class InProduceOrderSurplusController extends BaseController { @Resource private IWmsInventoryService inventoryService; + @Resource + private StringRedisTemplate stringRedisTemplate; + @Resource private IWmsQrCodeMasterService qrCodeMasterService; @Resource private IWmsWarehouseService warehouseService; + @Resource + private IOptRecordService optRecordService; + + @Resource + private NoScanningBaseControllerService noScanningBaseControllerService; + /** * 从SAP查询订单信息 */ @@ -154,6 +182,67 @@ public class InProduceOrderSurplusController extends BaseController { return ApiResult.success(); } + /** + * 无码保存 + * @param request 请求参数 + */ + @Transactional + @PostMapping("saveNoScanning") + public ApiResult saveNoScanning(@Valid @RequestBody InProduceOrderGenerateMaterialsQO request) { + return ApiResult.success(saveNoScanningOrder(request)); + } + + private Long saveNoScanningOrder(InProduceOrderGenerateMaterialsQO request) { + WmsInProduceOrder order = new WmsInProduceOrder() + .setId(IdUtil.getSnowflakeNextId()) + .setDataType(request.getDataType()) + .setNo(serialNumberControllerService.generateSerialNumber(8)) + .setOrderNo(request.getAufnr()) + .setList(request.getList()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()); + produceOrderService.save(order); + String date = DateTimeUtil.format(LocalDate.now(), "yyMMdd"); + stringRedisTemplate.opsForValue().setIfAbsent("index:batchNo:" + date, "0", 24 - LocalDateTime.now().getHour(), TimeUnit.HOURS); + String index = StrUtil.padPre(String.valueOf(stringRedisTemplate.opsForValue().increment("index:batchNo:" + date)), 4, "0"); + WmsInProduceOrderItem parent = new WmsInProduceOrderItem() + .setId(IdUtil.getSnowflakeNextId()) + .setOrderId(order.getId()) + .setParentId(0L) + .setNum(request.getNum()) + .setMaterialNo(request.getMatnr()) + .setMaterialDesc(request.getMaktx()) + .setUnit(request.getMeins()) + .setFactoryNo(request.getPwerk()) + .setWarehouseNo(request.getLgort()) + .setOrderNum(request.getPsmng()) + .setBatchNo(date + index) + .setSernr(request.getSernr()); + produceOrderItemService.save(parent); + if (request.getList()) { + List children = bomService.getChildren(request.getMatnr()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(children)).throwMessage("请先添加齐套物料"); + List items = children.stream() + .map(it -> new WmsInProduceOrderItem() + .setId(IdUtil.getSnowflakeNextId()) + .setOrderId(order.getId()) + .setParentId(parent.getId()) + .setNum(it.getNum()) + .setMaterialNo(it.getNo()) + .setMaterialDesc(it.getDescribe()) + .setUnit(request.getMeins()) + .setFactoryNo(request.getPwerk()) + .setWarehouseNo(request.getLgort()) + .setOrderNum(request.getPsmng()) + .setBatchNo(parent.getBatchNo()) + .setSernr(request.getSernr()) + ) + .toList(); + produceOrderItemService.saveBatch(items); + } + return order.getId(); + } + /** * 搜索订单 */ @@ -387,6 +476,111 @@ public class InProduceOrderSurplusController extends BaseController { return ApiResult.success(); } + /** + * 无码收货和入库 + * @param requests 请求参数 + */ + @Transactional + @PostMapping("receiveNoScanning") + public ApiResult receiveNoScanning(@Valid @RequestBody @NotEmpty List requests) { + List inventories = new ArrayList<>(); + List input1 = new ArrayList<>(); + List sernrs = new ArrayList<>(); + Set orderIds = new HashSet<>(); + + for (NoScanningRequest request : requests) { + WmsInProduceOrder order = produceOrderService.getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + VUtil.trueThrowBusinessError(!Objects.equals(order.getState(), (short) 0)) + .throwMessage("该订单非待收货状态"); + + List orderItems = produceOrderItemService.lambdaQuery() + .eq(WmsInProduceOrderItem::getOrderId, order.getId()) + .list(); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在"); + Map orderItemMap = orderItems.stream() + .collect(Collectors.toMap(WmsInProduceOrderItem::getId, item -> item)); + orderIds.add(order.getId()); + VUtil.trueThrowBusinessError(orderIds.size() != 1).throwMessage("请一次只提交同一个订单的无码收货"); + + for (NoScanningItemRequest item : request.getItems()) { + WmsInProduceOrderItem orderItem = orderItemMap.get(item.getOrderItemId()); + VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在"); + VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMaterialNo())) + .throwMessage("订单项与物料不匹配:" + item.getMaterialNo()); + VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMaterialNo())) + .throwMessage("物料" + orderItem.getMaterialNo() + "已生成二维码,不允许无码收货"); + + BigDecimal totalNum = item.getDatas().stream() + .peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0) + .throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量必须大于0")) + .map(NoScanningItemDataRequest::getNum) + .reduce(BigDecimal.ZERO, BigDecimal::add); + VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getNum()) != 0) + .throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量与订单数量不一致"); + + item.getDatas().forEach(data -> { + inventories.add(new InventoryInDTO() + .setMaterialNo(orderItem.getMaterialNo()) + .setFactoryNo(orderItem.getFactoryNo()) + .setWarehouseNo(orderItem.getWarehouseNo()) + .setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), "")) + .setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), "")) + .setBinLocation(StrUtil.blankToDefault(data.getBinNo(), "")) + .setNum(data.getNum()) + ); + }); + } + + input1.addAll(orderItems.stream() + .filter(it -> Objects.equals(it.getParentId(), 0L)) + .map(it -> new Zwm00Mb107QO() + .setPWERK(it.getFactoryNo()) + .setPSMNG(it.getNum()) + .setAMEIN(it.getUnit()) + .setLGORT(it.getWarehouseNo()) + .setCHARG(it.getBatchNo())) + .toList()); + sernrs.addAll(orderItems.stream() + .filter(it -> Objects.equals(it.getParentId(), 0L)) + .map(WmsInProduceOrderItem::getSernr) + .toList()); + } + + inventoryService.in(mergeInventories(inventories)); + WmsInProduceOrder order = produceOrderService.getById(requests.get(0).getId()); + OptRecordDTO optRecordDTO = new OptRecordDTO(); + optRecordDTO.setOperationType((short) 1) + .setOrderId(order.getNo()); + optRecordService.add(optRecordDTO); + + Zwm00Mb107DTO dto = sapService.zwm00_mb107(order.getOrderNo(), UserUtil.getUserName(), input1, sernrs); + order.setMblnr(dto.getE_MBLNR()); + order.setMjahr(dto.getE_MJAHR()); + order.setState((short) 1); + order.setUpdateBy(UserUtil.getUserName()); + order.setUpdateTime(LocalDateTime.now()); + produceOrderService.updateById(order); + return ApiResult.success(); + } + + private List mergeInventories(List inventories) { + return inventories.stream() + .collect(Collectors.groupingBy(InventoryInDTO::getKey)) + .values() + .stream() + .map(items -> new InventoryInDTO() + .setMaterialNo(items.get(0).getMaterialNo()) + .setFactoryNo(items.get(0).getFactoryNo()) + .setWarehouseNo(items.get(0).getWarehouseNo()) + .setBatchNo(items.get(0).getBatchNo()) + .setSerialNo(items.get(0).getSerialNo()) + .setBinLocation(items.get(0).getBinLocation()) + .setNum(items.stream().map(InventoryInDTO::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) + ) + .toList(); + } + /** * 搜索入库单 */