新增无码出库-配件发货功能
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.IdUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
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.InventoryForOutRepository;
|
||||||
import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository;
|
import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository;
|
||||||
import com.nflg.wms.admin.service.ComponentOutboundControllerService;
|
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.admin.service.SapService;
|
||||||
import com.nflg.wms.common.constant.BarCodeProcessStage;
|
import com.nflg.wms.common.constant.BarCodeProcessStage;
|
||||||
import com.nflg.wms.common.pojo.ApiResult;
|
import com.nflg.wms.common.pojo.ApiResult;
|
||||||
|
|
@ -37,6 +41,7 @@ import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -85,6 +90,9 @@ public class ComponentOutboundController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private IOptRecordService optRecordService;
|
private IOptRecordService optRecordService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private NoScanningBaseControllerService noScanningBaseControllerService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 零部件的出库单列表
|
* 零部件的出库单列表
|
||||||
* @param request 零部件出库单搜索条件参数对象,包含分页信息和搜索条件
|
* @param request 零部件出库单搜索条件参数对象,包含分页信息和搜索条件
|
||||||
|
|
@ -394,6 +402,103 @@ public class ComponentOutboundController extends BaseController {
|
||||||
return ApiResult.success();
|
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;
|
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