出库交接详情,物料明细根据复核单生成;
This commit is contained in:
+35
@@ -37,6 +37,7 @@ import com.mhd.wms.domain.outMaterialDetail.repository.po.OutMaterialDetailPO;
|
||||
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO;
|
||||
import com.mhd.wms.domain.outMaterialDetail.service.OutMaterialDetailDomainService;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.po.PickingMaterialDetailPO;
|
||||
import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.po.StockOutOrderPO;
|
||||
@@ -269,9 +270,43 @@ public class StockOutOrderApplicationService {
|
||||
// 4. 为每个物料明细设置分配按钮显示类型,递归处理所有层级
|
||||
setAllocationButtonTypeRecursively(detailList);
|
||||
|
||||
// 5. 出库交接场景(已出库/已复核):过滤 pickingQuantity 为 0 的明细,与交接详情一致
|
||||
if (stockOutOrderPO.getStatus() != null && (stockOutOrderPO.getStatus() == 9 || stockOutOrderPO.getStatus() == 12)) {
|
||||
filterMaterialDetailByPickingQuantity(detailList, stockOutOrderPO.getReview(), stockOutOrderPO.getOutOrderNumber());
|
||||
}
|
||||
|
||||
return stockOutOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库交接场景:递归过滤 pickingQuantity 为 0 的明细(与交接详情一致)
|
||||
* @param detailList 物料明细树
|
||||
* @param review 是否需要复核 1-是 2-否
|
||||
* @param outOrderNumber 出库单号(review=1 时用于 picking_material_detail 查询)
|
||||
*/
|
||||
private void filterMaterialDetailByPickingQuantity(List<OutMaterialDetailPO> detailList, Integer review, String outOrderNumber) {
|
||||
if (CollectionUtils.isEmpty(detailList)) {
|
||||
return;
|
||||
}
|
||||
for (int i = detailList.size() - 1; i >= 0; i--) {
|
||||
OutMaterialDetailPO d = detailList.get(i);
|
||||
List<OutMaterialDetailPO> children = d.getChildren();
|
||||
if (!CollectionUtils.isEmpty(children)) {
|
||||
filterMaterialDetailByPickingQuantity(children, review, outOrderNumber);
|
||||
}
|
||||
BigDecimal pickQty;
|
||||
if (Integer.valueOf(1).equals(review) && d.getUniqueId() != null) {
|
||||
PickingMaterialDetailPO pickingSummary = pickingMaterialDetailService.queryTotalsByOutNumberAndBaseId(d.getUniqueId());
|
||||
pickQty = (pickingSummary != null && pickingSummary.getPickingQuantity() != null) ? pickingSummary.getPickingQuantity() : BigDecimal.ZERO;
|
||||
} else {
|
||||
pickQty = d.getPickingQuantity() != null ? d.getPickingQuantity() : BigDecimal.ZERO;
|
||||
}
|
||||
if (pickQty.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
detailList.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归为出库物料明细设置更多属性
|
||||
* 如果已分配库存(materialInventoryId不为空),则从库存表中获取批次属性值
|
||||
|
||||
+30
-10
@@ -21,6 +21,7 @@ import com.mhd.wms.domain.handoverTaskOrder.entity.HandoverTaskOrder;
|
||||
import com.mhd.wms.domain.handoverTaskOrder.repository.facade.IHandoverTaskOrderService;
|
||||
import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail;
|
||||
import com.mhd.wms.domain.outMaterialDetail.repository.facade.IOutMaterialDetailService;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.mapper.PickingMaterialDetailMapper;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO;
|
||||
import com.mhd.wms.domain.pickingOrder.repository.todo.PickingOrderDO;
|
||||
@@ -42,7 +43,9 @@ import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 下发任务Service业务层处理
|
||||
@@ -79,6 +82,9 @@ public class DeliveTaskImpl extends ServiceImpl<DeliveTaskMapper, DeliveTask> im
|
||||
@Autowired
|
||||
private IOutMaterialDetailService outMaterialDetailService;
|
||||
|
||||
@Autowired
|
||||
private PickingMaterialDetailMapper pickingMaterialDetailMapper;
|
||||
|
||||
/**
|
||||
* 查询下发任务列表
|
||||
*/
|
||||
@@ -128,16 +134,7 @@ public class DeliveTaskImpl extends ServiceImpl<DeliveTaskMapper, DeliveTask> im
|
||||
BigDecimal pickingQuantity = pickingOrderPOS.getPickingQuantity();//已拣货数量
|
||||
deliveTaskPO.setPickingQuantity(pickingQuantity);
|
||||
}
|
||||
// 物料种类数:从出库明细按料号去重统计
|
||||
long materialQuantity = outMaterialDetailService.list(new LambdaQueryWrapper<OutMaterialDetail>()
|
||||
.eq(OutMaterialDetail::getOutOrderNumber, orderNumber))
|
||||
.stream()
|
||||
.map(d -> d.getMaterialCode() != null && !d.getMaterialCode().isEmpty() ? d.getMaterialCode() : d.getMaterialNo())
|
||||
.filter(c -> c != null && !c.isEmpty())
|
||||
.distinct()
|
||||
.count();
|
||||
deliveTaskPO.setMaterialQuantity((int) materialQuantity);
|
||||
// 已复核数量、出库单信息:直接从出库单获取(getCheckInfo仅支持复核中状态会抛异常)
|
||||
// 已复核数量、出库单信息:直接从出库单获取(需在物料统计前获取,用于判断是否需要复核)
|
||||
StockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper<StockOutOrder>()
|
||||
.eq(StockOutOrder::getOutOrderNumber, orderNumber));
|
||||
if (stockOutOrder != null) {
|
||||
@@ -147,6 +144,29 @@ public class DeliveTaskImpl extends ServiceImpl<DeliveTaskMapper, DeliveTask> im
|
||||
deliveTaskPO.setCarrier(stockOutOrder.getCarrier());
|
||||
deliveTaskPO.setCheckQuantity(stockOutOrder.getCheckQuantity());//已复核数量
|
||||
}
|
||||
// 物料种类数:从出库明细按料号去重统计,pickingQuantity 为 0 的过滤掉(与交接详情一致)
|
||||
List<OutMaterialDetail> omdList = outMaterialDetailService.list(new LambdaQueryWrapper<OutMaterialDetail>()
|
||||
.eq(OutMaterialDetail::getOutOrderNumber, orderNumber)
|
||||
.eq(OutMaterialDetail::getDelFlag, 1));
|
||||
Set<Long> outUniqueIdsWithPicking = null;
|
||||
if (stockOutOrder != null && Integer.valueOf(1).equals(stockOutOrder.getReview())) {
|
||||
List<Long> ids = pickingMaterialDetailMapper.selectOutUniqueIdsWithPickingByOutOrderNumber(orderNumber);
|
||||
outUniqueIdsWithPicking = ids != null ? new HashSet<>(ids) : new HashSet<>();
|
||||
}
|
||||
final Set<Long> pickingIds = outUniqueIdsWithPicking;
|
||||
long materialQuantity = omdList.stream()
|
||||
.filter(d -> {
|
||||
if (pickingIds != null) {
|
||||
return pickingIds.contains(d.getUniqueId());
|
||||
}
|
||||
BigDecimal pq = d.getPickingQuantity();
|
||||
return pq != null && pq.compareTo(BigDecimal.ZERO) > 0;
|
||||
})
|
||||
.map(d -> d.getMaterialCode() != null && !d.getMaterialCode().isEmpty() ? d.getMaterialCode() : d.getMaterialNo())
|
||||
.filter(c -> c != null && !c.isEmpty())
|
||||
.distinct()
|
||||
.count();
|
||||
deliveTaskPO.setMaterialQuantity((int) materialQuantity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+10
-1
@@ -22,6 +22,7 @@ import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryM
|
||||
import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail;
|
||||
import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.mapper.PickingMaterialDetailMapper;
|
||||
import com.mhd.wms.domain.pickingMaterialDetail.repository.po.PickingMaterialDetailPO;
|
||||
import com.mhd.wms.domain.taskHandoverMaterialDetail.repository.po.TaskHandoverMaterialDetailPO;
|
||||
import com.mhd.wms.domain.shiftManage.repository.po.ShiftManagePO;
|
||||
import com.mhd.wms.domain.shiftManage.repository.todo.ShiftManageDO;
|
||||
@@ -130,6 +131,7 @@ public class HandoverTaskOrderDomainService {
|
||||
List<TaskHandoverMaterialDetailPO> materialDetailList = new ArrayList<>();
|
||||
for (OutMaterialDetail omd : outMaterialDetailList) {
|
||||
BigDecimal handoverQuantity;
|
||||
BigDecimal pickQty;
|
||||
if (Integer.valueOf(1).equals(review)) {
|
||||
// 仅包含复核单上的明细(有拣货)且已复核的
|
||||
if (outUniqueIdsWithPicking != null && !outUniqueIdsWithPicking.contains(omd.getUniqueId())) {
|
||||
@@ -138,12 +140,19 @@ public class HandoverTaskOrderDomainService {
|
||||
if (omd.getCheckQuantity() == null || omd.getCheckQuantity().compareTo(BigDecimal.ZERO) <= 0) {
|
||||
continue;
|
||||
}
|
||||
// pickingQuantity 为 0 的过滤掉:从 picking_material_detail 取拣货数量
|
||||
PickingMaterialDetailPO pickingSummary = pickingMaterialDetailMapper.queryTotalsByOutNumberAndBaseId(omd.getUniqueId());
|
||||
pickQty = (pickingSummary != null && pickingSummary.getPickingQuantity() != null) ? pickingSummary.getPickingQuantity() : BigDecimal.ZERO;
|
||||
if (pickQty.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
continue;
|
||||
}
|
||||
handoverQuantity = omd.getCheckQuantity();
|
||||
} else {
|
||||
BigDecimal qty = omd.getPickingQuantity() != null ? omd.getPickingQuantity() : omd.getQuantity();
|
||||
if (qty == null || qty.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
continue;
|
||||
}
|
||||
pickQty = qty;
|
||||
handoverQuantity = qty;
|
||||
}
|
||||
TaskHandoverMaterialDetailPO detail = new TaskHandoverMaterialDetailPO();
|
||||
@@ -160,7 +169,7 @@ public class HandoverTaskOrderDomainService {
|
||||
detail.setWeightLimit(omd.getWeightLimit());
|
||||
detail.setVolumeLimit(omd.getVolumeLimit());
|
||||
detail.setQuantity(omd.getQuantity());
|
||||
detail.setPickingQuantity(omd.getPickingQuantity());
|
||||
detail.setPickingQuantity(pickQty);
|
||||
detail.setCheckQuantity(handoverQuantity);
|
||||
detail.setPackId(omd.getPackId());
|
||||
detail.setPackCode(omd.getPackCode());
|
||||
|
||||
Reference in New Issue
Block a user