出库单执行生成拣货单及取消执行删除拣货单;

This commit is contained in:
王奎兴
2026-06-29 18:02:40 +08:00
parent 4afe929020
commit 40ff9808b8
11 changed files with 227 additions and 22 deletions
@@ -1123,6 +1123,34 @@ public class StockOutOrderApplicationService {
return b;
}
public Boolean genPickingOrderByOms(StockOutOrderDO stockOutOrderDO){
Boolean b = stockOutOrderDomainService.genPickingOrderByOms(stockOutOrderDO);
// List<Long> outOrderIds = stockOutOrderDO.getOutOrderIds();
// if (outOrderIds != null && !outOrderIds.isEmpty()) {
// StockOutOrder order = stockOutOrderService.getById(outOrderIds.get(0));
// String needDeclareFlag = order.getNeedDeclareFlag();
// Long organizationId = order.getOrganizationId();
// try {
// if (needDeclareFlag != null && "1".equals(needDeclareFlag) && organizationId != null) {
// if (organizationId == 2830) {
// Long outOrderId = order.getOutOrderId();
// List<Long> ids = new ArrayList<>();
// ids.add(outOrderId);
// //batchPush(ids);
// } else {
// String outOrderId = order.getOutOrderNumber();
// List<String> ids = new ArrayList<>();
// ids.add(outOrderId);
// //omsServiceFeign.batchPushByNumber(ids);
// }
// }
// } catch (Exception e) {
// throw new ServiceException("生成报关单失败");
// }
// }
return b;
}
/**
* 获取出库单复核详细信息
*/
@@ -57,9 +57,12 @@ import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailBas
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO;
import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService;
import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalBaseDO;
import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail;
import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService;
import com.mhd.wms.domain.pickingMaterialDetail.repository.po.PickingMaterialDetailPO;
import com.mhd.wms.domain.pickingMaterialDetail.repository.todo.PickingMaterialDetailDO;
import com.mhd.wms.domain.pickingOrder.entity.PickingOrder;
import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService;
import com.mhd.wms.domain.pickingOrder.repository.todo.PickingOrderDO;
import com.mhd.wms.domain.pickingOrder.service.PickingOrderDomainService;
import com.mhd.wms.domain.pushSyncBms.PushSyncBmsDomainService;
@@ -144,7 +147,8 @@ public class StockOutOrderDomainService {
private IInventoryAdjustmentRecordService inventoryAdjustmentRecordService;
@Autowired
private IPickingMaterialDetailService pickingMaterialDetailService;
@Autowired
private IPickingOrderService pickingOrderService;
/**
* 分页查询出库单列表
*/
@@ -763,6 +767,144 @@ public class StockOutOrderDomainService {
return inserted;
}
@Transactional(rollbackFor = Exception.class)
public Boolean genPickingOrderByOms(StockOutOrderDO stockOutOrderDO){
List<StockOutOrder> stockOutOrderList = stockOutOrderService.list(new QueryWrapper<StockOutOrder>().lambda()
.eq(StockOutOrder::getDelFlag, 1)
.in(StockOutOrder::getStatus,3,4)
.eq(StockOutOrder::getOutOrderNumber, stockOutOrderDO.getOutOrderNumber()));
if (CollectionUtils.isEmpty(stockOutOrderList)){
throw new ServiceException("只有已分配过的出库单才能生成拣货单");
}
//修改出库单状态为拣货中
List<Long> stockOutOrderId = stockOutOrderList.stream().map(StockOutOrder::getOutOrderId).collect(Collectors.toList());
StockOutOrder stockOutOrder = new StockOutOrder();
stockOutOrder.setStatus(6);
stockOutOrderService.update(stockOutOrder, new UpdateWrapper<StockOutOrder>().lambda().in(StockOutOrder::getOutOrderId, stockOutOrderId));
List<String> stockOutOrderNumber = stockOutOrderList.stream().map(StockOutOrder::getOutOrderNumber).collect(Collectors.toList());
List<OutMaterialDetail> list = outMaterialDetailService.list(new QueryWrapper<OutMaterialDetail>().lambda().in(OutMaterialDetail::getOutOrderNumber, stockOutOrderNumber).eq(OutMaterialDetail::getGenPickingOrder, 2));
if (CollectionUtils.isEmpty(list)){
throw new ServiceException("不存在已分配且未生成拣货单的物料明细,无法生成拣货单!");
}
List<String> outOrderNumberList = stockOutOrderList.stream().map(StockOutOrder::getOutOrderNumber).collect(Collectors.toList());
OutMaterialDetailDO outMaterialDetailDO = new OutMaterialDetailDO();
outMaterialDetailDO.setOutOrderNumberList(outOrderNumberList);
List<OutMaterialDetailPO> outMaterialDetailPOList = outMaterialDetailService.queryListChildren(outMaterialDetailDO);
Map<String, List<OutMaterialDetailPO>> outMaterialDetailPOListMap = outMaterialDetailPOList.stream().collect(Collectors.groupingBy(OutMaterialDetailPO::getOutOrderNumber));
List<PickingOrderDO> pickingOrderDOList = new ArrayList<>();
stockOutOrderList.forEach(p -> {
PickingOrderDO pickingOrderDO = new PickingOrderDO();
BeanUtils.copyProperties(p, pickingOrderDO);
pickingOrderDO.setOrderNumber(p.getOutOrderNumber());
pickingOrderDO.setPickingOrderNumber(OrderSequence.getOrderCode("JH"));
pickingOrderDO.setQuantity(p.getAllocationQuantity());
if (pickingOrderDO.getWarehouseId() == null && p.getWarehouseId() != null) {
pickingOrderDO.setWarehouseId(p.getWarehouseId());
pickingOrderDO.setWarehouseCode(p.getWarehouseCode());
pickingOrderDO.setWarehouseName(p.getWarehouseName());
}
List<OutMaterialDetailPO> outMaterialDetailPOS = outMaterialDetailPOListMap.get(p.getOutOrderNumber());
// 出库单头 warehouse_code 常为空,用已分配明细(含子行)第一条有仓库编码的行兜底
OutMaterialDetailPO warehouseFromDetail = firstOutDetailWithWarehouse(outMaterialDetailPOS);
if (warehouseFromDetail != null) {
if (StringUtils.isBlank(pickingOrderDO.getWarehouseCode())) {
pickingOrderDO.setWarehouseCode(warehouseFromDetail.getWarehouseCode());
}
if (StringUtils.isBlank(pickingOrderDO.getWarehouseName())
&& StringUtils.isNotBlank(warehouseFromDetail.getWarehouseName())) {
pickingOrderDO.setWarehouseName(warehouseFromDetail.getWarehouseName());
}
if (pickingOrderDO.getWarehouseId() == null && warehouseFromDetail.getWarehouseId() != null) {
pickingOrderDO.setWarehouseId(warehouseFromDetail.getWarehouseId());
}
}
List<PickingMaterialDetailDO> pickingMaterialDetailList = new ArrayList<>();
if (!CollectionUtils.isEmpty(outMaterialDetailPOS)){
outMaterialDetailPOS.forEach(outMaterialDetailPO -> {
BigDecimal allocationQuantity = outMaterialDetailPO.getAllocationQuantity();
if (allocationQuantity != null && allocationQuantity.compareTo(BigDecimal.ZERO) > 0) {
PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO();
BeanUtils.copyProperties(outMaterialDetailPO, pickingMaterialDetailDO);
pickingMaterialDetailDO.setPickingOrderNumber(pickingOrderDO.getPickingOrderNumber());
pickingMaterialDetailDO.setQuantity(outMaterialDetailPO.getAllocationQuantity());
//设置出库明细关联id
pickingMaterialDetailDO.setOutUniqueId(outMaterialDetailPO.getUniqueId());
pickingMaterialDetailDO.setMaterialCode(outMaterialDetailPO.getMaterialNo());
pickingMaterialDetailDO.setMaterialName(outMaterialDetailPO.getCommodityName());
pickingMaterialDetailDO.setBarCode(outMaterialDetailPO.getBarCode());
//设置批次属性字段(从出库单明细中获取)
pickingMaterialDetailDO.setBatchRefNo(outMaterialDetailPO.getBatchRefNo());
pickingMaterialDetailDO.setSheetRefNo(outMaterialDetailPO.getSheetRefNo());
pickingMaterialDetailDO.setBoxPalletNo(outMaterialDetailPO.getBoxPalletNo());
pickingMaterialDetailDO.setExtAttr1(outMaterialDetailPO.getExtAttr1());
pickingMaterialDetailDO.setExtAttr2(outMaterialDetailPO.getExtAttr2());
pickingMaterialDetailDO.setProductionDate(outMaterialDetailPO.getProductionDate());
pickingMaterialDetailDO.setExpiryDate(outMaterialDetailPO.getExpiryDate());
pickingMaterialDetailDO.setInventoryDate(outMaterialDetailPO.getInventoryDate());
pickingMaterialDetailDO.setExtAttr3(outMaterialDetailPO.getExtAttr3());
pickingMaterialDetailDO.setExtAttr4(outMaterialDetailPO.getExtAttr4());
// 毛重、净重、面积、体积从出库单明细自动带出
pickingMaterialDetailDO.setTotalGrossWeight(outMaterialDetailPO.getTotalGrossWeight());
//判断是否是抄码商品净重
if (outMaterialDetailPO.getCopyTotalWeight() != null){
pickingMaterialDetailDO.setTotalNetWeight(outMaterialDetailPO.getCopyTotalWeight());
pickingMaterialDetailDO.setCopyCodeReferenceIds(outMaterialDetailPO.getCopyCodeReferenceIds());
}else {
pickingMaterialDetailDO.setTotalNetWeight(outMaterialDetailPO.getTotalNetWeight());
}
pickingMaterialDetailDO.setTotalArea(outMaterialDetailPO.getTotalArea());
pickingMaterialDetailDO.setTotalVolume(outMaterialDetailPO.getTotalVolume());
pickingMaterialDetailList.add(pickingMaterialDetailDO);
List<OutMaterialDetailPO> outMaterialDetailPOListChildren = outMaterialDetailPO.getChildren();
if (!CollectionUtils.isEmpty(outMaterialDetailPOListChildren)){
outMaterialDetailPOListChildren.forEach(outMaterialDetailPOChildren -> {
PickingMaterialDetailDO pickingMaterialDetailDOChildren = new PickingMaterialDetailDO();
BeanUtils.copyProperties(pickingMaterialDetailDO, pickingMaterialDetailDOChildren);
BeanUtils.copyProperties(outMaterialDetailPOChildren, pickingMaterialDetailDOChildren);
pickingMaterialDetailDOChildren.setPickingOrderNumber(pickingOrderDO.getPickingOrderNumber());
pickingMaterialDetailDOChildren.setQuantity(outMaterialDetailPOChildren.getAllocationQuantity());
//设置出库明细关联id
pickingMaterialDetailDOChildren.setOutUniqueId(outMaterialDetailPOChildren.getUniqueId());
pickingMaterialDetailDOChildren.setMaterialCode(outMaterialDetailPOChildren.getMaterialNo());
pickingMaterialDetailDOChildren.setMaterialName(outMaterialDetailPOChildren.getCommodityName());
pickingMaterialDetailDOChildren.setBarCode(outMaterialDetailPOChildren.getBarCode());
//设置批次属性字段(从出库单明细中获取)
pickingMaterialDetailDOChildren.setBatchRefNo(outMaterialDetailPOChildren.getBatchRefNo());
pickingMaterialDetailDOChildren.setSheetRefNo(outMaterialDetailPOChildren.getSheetRefNo());
pickingMaterialDetailDOChildren.setBoxPalletNo(outMaterialDetailPOChildren.getBoxPalletNo());
pickingMaterialDetailDOChildren.setExtAttr1(outMaterialDetailPOChildren.getExtAttr1());
pickingMaterialDetailDOChildren.setExtAttr2(outMaterialDetailPOChildren.getExtAttr2());
pickingMaterialDetailDOChildren.setProductionDate(outMaterialDetailPOChildren.getProductionDate());
pickingMaterialDetailDOChildren.setExpiryDate(outMaterialDetailPOChildren.getExpiryDate());
pickingMaterialDetailDOChildren.setInventoryDate(outMaterialDetailPOChildren.getInventoryDate());
pickingMaterialDetailDOChildren.setExtAttr3(outMaterialDetailPOChildren.getExtAttr3());
pickingMaterialDetailDOChildren.setExtAttr4(outMaterialDetailPOChildren.getExtAttr4());
// 毛重、净重、面积、体积从出库单明细子行自动带出
pickingMaterialDetailDOChildren.setTotalGrossWeight(outMaterialDetailPOChildren.getTotalGrossWeight());
pickingMaterialDetailDOChildren.setTotalNetWeight(outMaterialDetailPOChildren.getTotalNetWeight());
pickingMaterialDetailDOChildren.setTotalArea(outMaterialDetailPOChildren.getTotalArea());
pickingMaterialDetailDOChildren.setTotalVolume(outMaterialDetailPOChildren.getTotalVolume());
pickingMaterialDetailList.add(pickingMaterialDetailDOChildren);
});
}
}
});
pickingOrderDO.setMaterialDetailList(pickingMaterialDetailList);
}
pickingOrderDOList.add(pickingOrderDO);
});
Boolean inserted = pickingOrderDomainService.batchInsert(pickingOrderDOList);
if (Boolean.TRUE.equals(inserted)) {
List<String> pickingOrderNumbers = pickingOrderDOList.stream()
.map(PickingOrderDO::getPickingOrderNumber)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
pickingOrderDomainService.autoTaskDistributionAfterGenPickingOrders(pickingOrderNumbers);
}
return inserted;
}
/**
* 从出库明细树中取第一条带仓库编码的行(父行优先,再递归子行)
*/
@@ -1788,6 +1930,21 @@ public class StockOutOrderDomainService {
//逻辑删除出库单
stockOutOrder.setDelFlag(2);
stockOutOrderService.updateById(stockOutOrder);
PickingOrder pickingOrder = pickingOrderService.getOne(new LambdaQueryWrapper<PickingOrder>()
.eq(PickingOrder::getDelFlag, 1)
.eq(PickingOrder::getOrderNumber, outOrderNumber));
if (pickingOrder != null) {
String pickingOrderNumber = pickingOrder.getPickingOrderNumber();
List<PickingMaterialDetail> list = pickingMaterialDetailService.list(new LambdaQueryWrapper<PickingMaterialDetail>()
.eq(PickingMaterialDetail::getPickingOrderNumber, pickingOrderNumber)
.eq(PickingMaterialDetail::getDelFlag, 1));
for (PickingMaterialDetail pickingMaterialDetail : list) {
pickingMaterialDetail.setDelFlag(2);
pickingMaterialDetailService.updateById(pickingMaterialDetail);
}
pickingOrderService.updateById(pickingOrder);
}
}
@Transactional(rollbackFor = Exception.class)
@@ -326,6 +326,16 @@ public class StockOutOrderApi extends BaseController {
return toAjax(stockOutOrderApplicationService.genPickingOrder(stockOutOrderDO));
}
/**
* 生成拣货单
*/
@ApiOperation("生成拣货单")
@PostMapping("/genPickingOrderByOms")
public AjaxResult genPickingOrderByOms(@RequestBody com.mhd.system.api.domain.StockOutOrderDTO stockOutOrderDTO) {
StockOutOrderDO stockOutOrderDO = JSONUtil.toBean(JSONUtil.toJsonStr(stockOutOrderDTO), StockOutOrderDO.class);
return toAjax(stockOutOrderApplicationService.genPickingOrderByOms(stockOutOrderDO));
}
/**
* 复核下发
*/