新增无码出库-配件发货功能
This commit is contained in:
parent
bc93e904fe
commit
332f6ec2af
|
|
@ -7,9 +7,13 @@ import cn.hutool.core.lang.Pair;
|
|||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.InventoryForOutRepository;
|
||||
import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository;
|
||||
import com.nflg.wms.admin.service.ComponentOutboundControllerService;
|
||||
import com.nflg.wms.admin.service.NoScanningBaseControllerService;
|
||||
import com.nflg.wms.admin.service.SapService;
|
||||
import com.nflg.wms.common.constant.BarCodeProcessStage;
|
||||
import com.nflg.wms.common.pojo.ApiResult;
|
||||
|
|
@ -37,6 +41,7 @@ import java.time.Instant;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
|
@ -85,6 +90,9 @@ public class ComponentOutboundController extends BaseController {
|
|||
@Resource
|
||||
private IOptRecordService optRecordService;
|
||||
|
||||
@Resource
|
||||
private NoScanningBaseControllerService noScanningBaseControllerService;
|
||||
|
||||
/**
|
||||
* 零部件的出库单列表
|
||||
* @param request 零部件出库单搜索条件参数对象,包含分页信息和搜索条件
|
||||
|
|
@ -394,6 +402,103 @@ public class ComponentOutboundController extends BaseController {
|
|||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 无码确认出库单
|
||||
* @param request 无码确认出库参数
|
||||
*/
|
||||
@Transactional
|
||||
@PostMapping("pda/confirmNoScanning")
|
||||
public ApiResult<Void> confirmPdaNoScanning(@Valid @RequestBody NoScanningRequest request) {
|
||||
WmsComponentPacking packing = wmscomponentPackingService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(packing)).throwMessage("此装箱单不存在");
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getItems())).throwMessage("无发货详情信息");
|
||||
|
||||
List<WmsComponentPackingItem> packingItems = wmsComponentPackingItemService.lambdaQuery()
|
||||
.eq(WmsComponentPackingItem::getPackingId, packing.getId())
|
||||
.list();
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(packingItems)).throwMessage("无法找到有效的装箱单详情");
|
||||
Map<Long, WmsComponentPackingItem> packingItemMap = packingItems.stream()
|
||||
.collect(Collectors.toMap(WmsComponentPackingItem::getId, item -> item));
|
||||
|
||||
WmsComponentOutbound outbound = setWmsComponentOutbound(packing).setFinish(true);
|
||||
List<WmsComponentOutboundItem> outboundItems = new ArrayList<>();
|
||||
List<InventoryOutDTO> inventories = new ArrayList<>();
|
||||
List<OutMaterialScanRecord> records = new ArrayList<>();
|
||||
ZWM3A20DTO zwm3a20DTO = new ZWM3A20DTO()
|
||||
.setItSernrPatch(new ArrayList<>())
|
||||
.setItem(new ArrayList<>())
|
||||
.setItSernr(new ArrayList<>())
|
||||
.setItLipsItem(new ArrayList<>())
|
||||
.setIType("A")
|
||||
.setIvDelivery(packing.getVbelv());
|
||||
|
||||
for (NoScanningItemRequest item : request.getItems()) {
|
||||
WmsComponentPackingItem packingItem = packingItemMap.get(item.getOrderItemId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(packingItem)).throwMessage("无效的装箱单明细");
|
||||
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), packingItem.getIdnrk()))
|
||||
.throwMessage("装箱单明细与物料不匹配:" + item.getMaterialNo());
|
||||
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(packingItem.getIdnrk()))
|
||||
.throwMessage("物料" + packingItem.getIdnrk() + "已生成二维码,不允许无码出库");
|
||||
|
||||
WmsComponentOutboundItem outboundItem = setWmsComponentOutboundItem(packing, packingItem, outbound, request.getWarehouseNo());
|
||||
outboundItems.add(outboundItem);
|
||||
|
||||
BigDecimal totalNum = item.getDatas().stream()
|
||||
.peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0)
|
||||
.throwMessage("物料" + packingItem.getIdnrk() + "的无码出库数量必须大于0"))
|
||||
.map(NoScanningItemDataRequest::getNum)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
VUtil.trueThrowBusinessError(outboundItem.getOutQty().compareTo(totalNum) != 0)
|
||||
.throwMessage("物料[" + outboundItem.getIdnrk() + "]的出库数量[" + totalNum + "]不等于装箱数量[" + outboundItem.getOutQty() + "]");
|
||||
|
||||
List<ScanCodeQO> scanCodesGroup = new ArrayList<>();
|
||||
for (NoScanningItemDataRequest data : item.getDatas()) {
|
||||
String batchNo = StrUtil.blankToDefault(data.getBatchNo(), "");
|
||||
String serialNo = StrUtil.blankToDefault(data.getSerialNo(), "");
|
||||
String binNo = StrUtil.blankToDefault(data.getBinNo(), "");
|
||||
records.add(new OutMaterialScanRecord()
|
||||
.setSource(7)
|
||||
.setSourceId(packing.getId())
|
||||
.setSourceItemId(outboundItem.getPackingItemId())
|
||||
.setTicketId(outbound.getId())
|
||||
.setTicketItemId(outboundItem.getId())
|
||||
.setMaterialNo(outboundItem.getIdnrk())
|
||||
.setContent("")
|
||||
.setBatchNo(batchNo)
|
||||
.setSerialNo(serialNo)
|
||||
.setUniqNo("")
|
||||
.setQiTao(true)
|
||||
.setFactoryNo(packing.getFactoryNo())
|
||||
.setWarehouseNo(outboundItem.getLgort())
|
||||
.setBinNo(binNo)
|
||||
.setNum(data.getNum())
|
||||
.setCreateBy(UserUtil.getUserName())
|
||||
.setCreateTime(Instant.now())
|
||||
);
|
||||
setInventoryOutDTO(inventories, outboundItem.getIdnrk(), packing.getFactoryNo(),
|
||||
outboundItem.getLgort(), binNo, batchNo, serialNo, data.getNum());
|
||||
|
||||
ScanCodeQO codeItem = scanCodesGroup.stream()
|
||||
.filter(code -> StrUtil.equals(code.getBatchNumber(), batchNo)
|
||||
&& StrUtil.equals(code.getSerialNumbers(), serialNo))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (Objects.isNull(codeItem)) {
|
||||
scanCodesGroup.add(new ScanCodeQO()
|
||||
.setBatchNumber(batchNo)
|
||||
.setSerialNumbers(serialNo)
|
||||
.setCodeNum(data.getNum()));
|
||||
} else {
|
||||
codeItem.setCodeNum(codeItem.getCodeNum().add(data.getNum()));
|
||||
}
|
||||
}
|
||||
buildZwm3a20DTO(zwm3a20DTO, scanCodesGroup, outboundItem);
|
||||
}
|
||||
|
||||
componentOutboundControllerService.confirmPda(outbound, outboundItems, records, zwm3a20DTO, inventories);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核出库单
|
||||
*/
|
||||
|
|
@ -642,6 +747,34 @@ public class ComponentOutboundController extends BaseController {
|
|||
return outboundItem;
|
||||
}
|
||||
|
||||
private WmsComponentOutboundItem setWmsComponentOutboundItem(WmsComponentPacking packing,
|
||||
WmsComponentPackingItem packingItem,
|
||||
WmsComponentOutbound outbound,
|
||||
String warehouseNo
|
||||
) {
|
||||
return new WmsComponentOutboundItem()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setPackingItemId(packingItem.getId())
|
||||
.setItemIndex(packingItem.getItemIndex())
|
||||
.setVbeln(packing.getVbeln())
|
||||
.setPosnr(packingItem.getPosnr())
|
||||
.setIdnrk(packingItem.getIdnrk())
|
||||
.setOjtxb(packingItem.getOjtxb())
|
||||
.setMeins(packingItem.getMeins())
|
||||
.setMenge(packingItem.getMenge())
|
||||
.setAtwrt(packingItem.getAtwrt())
|
||||
.setZatwrt(packingItem.getZatwrt())
|
||||
.setZxiah(packingItem.getZxiah())
|
||||
.setZtext(packingItem.getZtext())
|
||||
.setPotx2(packingItem.getPotx2())
|
||||
.setPmenge(packingItem.getPmenge())
|
||||
.setLgpbe(packingItem.getLgpbe())
|
||||
.setLgort(StrUtil.blankToDefault(warehouseNo, packingItem.getLgort()))
|
||||
.setLgobe(packingItem.getLgobe())
|
||||
.setOutQty(packingItem.getMenge())
|
||||
.setOutboundId(outbound.getId());
|
||||
}
|
||||
|
||||
/*
|
||||
组装库存信息
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue