入库异常,入库作业单,出库异常详情查询

This commit is contained in:
秦鸿展
2026-04-10 16:20:01 +08:00
parent 69543777da
commit 6d3eb75f5c
7 changed files with 109 additions and 11 deletions
@@ -8,7 +8,9 @@ import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.system.api.model.LoginUser;
import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail;
import com.mhd.wms.domain.outMaterialDetail.repository.facade.IOutMaterialDetailService;
import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper;
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO;
import com.mhd.wms.domain.outOrderAbnormal.entity.OutOrderAbnormal;
import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService;
import com.mhd.wms.domain.outOrderAbnormal.repository.mapper.OutOrderAbnormalMapper;
@@ -16,12 +18,15 @@ import com.mhd.wms.domain.outOrderAbnormal.repository.po.OutOrderAbnormalPO;
import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalBaseDO;
import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalDO;
import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail;
import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService;
import com.mhd.wms.domain.pickingMaterialDetail.repository.mapper.PickingMaterialDetailMapper;
import com.mhd.wms.domain.pickingMaterialDetail.repository.todo.PickingMaterialDetailDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -42,6 +47,10 @@ public class OutOrderAbnormalImpl extends ServiceImpl<OutOrderAbnormalMapper, Ou
private OutMaterialDetailMapper outMaterialDetailMapper;
@Autowired
private PickingMaterialDetailMapper pickingMaterialDetailMapper;
@Autowired
private IOutMaterialDetailService outMaterialDetailService;
@Autowired
private IPickingMaterialDetailService pickingMaterialDetailService;
/**
* 查询出库异常单列表
@@ -92,12 +101,54 @@ public class OutOrderAbnormalImpl extends ServiceImpl<OutOrderAbnormalMapper, Ou
*/
@Override
public OutOrderAbnormalPO getInfo(Long outOrderAbnormalId) {
OutOrderAbnormal outOrderAbnormal = this.getById(outOrderAbnormalId);
OutOrderAbnormalPO outOrderAbnormalPO = new OutOrderAbnormalPO();
BeanUtils.copyProperties(outOrderAbnormal,outOrderAbnormalPO);
OutOrderAbnormalDO query = new OutOrderAbnormalDO();
query.setOutOrderAbnormalId(outOrderAbnormalId);
List<OutOrderAbnormalPO> list = queryList(query);
if (CollectionUtils.isEmpty(list)) {
throw new ServiceException("出库异常单不存在");
}
OutOrderAbnormalPO outOrderAbnormalPO = list.get(0);
fillMaterialDetails(outOrderAbnormalPO);
return outOrderAbnormalPO;
}
/**
* 按异常类型加载对应明细:
* 1-拣货异常 -> picking_material_detail
* 2-复核异常 -> out_material_detail
*/
private void fillMaterialDetails(OutOrderAbnormalPO po) {
if (po == null) {
return;
}
Integer type = po.getType();
if (Integer.valueOf(1).equals(type)) {
if (StringUtils.hasText(po.getPickingOrderNumber())) {
PickingMaterialDetailDO detailDO = new PickingMaterialDetailDO();
detailDO.setPickingOrderNumber(po.getPickingOrderNumber());
po.setMaterialDetailList(pickingMaterialDetailService.queryList(detailDO));
}
} else if (Integer.valueOf(2).equals(type)) {
if (StringUtils.hasText(po.getOutOrderNumber())) {
OutMaterialDetailDO detailDO = new OutMaterialDetailDO();
detailDO.setOutOrderNumber(po.getOutOrderNumber());
po.setMaterialDetailList(outMaterialDetailService.queryList(detailDO));
}
} else {
// 兼容历史异常数据:两种都尝试
if (StringUtils.hasText(po.getPickingOrderNumber())) {
PickingMaterialDetailDO detailDO = new PickingMaterialDetailDO();
detailDO.setPickingOrderNumber(po.getPickingOrderNumber());
po.setMaterialDetailList(pickingMaterialDetailService.queryList(detailDO));
}
if (po.getMaterialDetailList() == null && StringUtils.hasText(po.getOutOrderNumber())) {
OutMaterialDetailDO detailDO = new OutMaterialDetailDO();
detailDO.setOutOrderNumber(po.getOutOrderNumber());
po.setMaterialDetailList(outMaterialDetailService.queryList(detailDO));
}
}
}
/**
* @description 生成异常记录
* @author ZhouGY
@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -112,6 +113,8 @@ public class OutOrderAbnormalPO extends BaseVOEntity {
@Excel(name = "入库单类型名称")
private String orderTypeName;
@ApiModelProperty("异常明细(type=1 返回拣货明细,type=2 返回复核明细)")
private List<?> materialDetailList;
}
@@ -55,6 +55,12 @@ public class PickingMaterialDetailPO extends BaseVOEntity {
@Excel(name = "拣货单号")
private String pickingOrderNumber;
@ApiModelProperty("入库单号")
private String inOrderNumber;
@ApiModelProperty("LOT编码")
private String lotNumber;
@ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id")
private Long materialBaseInfoId;
@@ -15,6 +15,8 @@ import com.mhd.wms.domain.taskShelfMaterialDetail.repository.todo.TaskShelfMater
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
@@ -78,12 +80,35 @@ public class StockInTaskOrderDomainService {
public StockInTaskOrderPO getInfo(Long inTaskOrderId)
{
StockInTaskOrderPO stockInTaskOrderPO = stockInTaskOrderService.getInfo(inTaskOrderId);
if (stockInTaskOrderPO.getType() == 1){
//根据收货单号查询
stockInTaskOrderPO.setTaskReceiptMaterialDetailList(getReceiptInfo(stockInTaskOrderPO.getTaskNumber()));
}else {
//根据上架单号查询
stockInTaskOrderPO.setTaskShelfMaterialDetailList(getShelfInfo(stockInTaskOrderPO.getTaskNumber()));
if (stockInTaskOrderPO == null) {
return null;
}
if (Integer.valueOf(1).equals(stockInTaskOrderPO.getType())){
// 收货作业:优先按收货单号查询,查不到再回退作业单号
List<TaskReceiptMaterialDetailPO> receiptDetails = getReceiptInfo(stockInTaskOrderPO.getReceiptOrderNumber());
if (CollectionUtils.isEmpty(receiptDetails)) {
receiptDetails = getReceiptInfo(stockInTaskOrderPO.getTaskNumber());
}
stockInTaskOrderPO.setTaskReceiptMaterialDetailList(receiptDetails);
} else if (Integer.valueOf(2).equals(stockInTaskOrderPO.getType())) {
// 上架作业:优先按上架单号查询,查不到再回退作业单号
List<TaskShelfMaterialDetailPO> shelfDetails = getShelfInfo(stockInTaskOrderPO.getShelfOrderNumber());
if (CollectionUtils.isEmpty(shelfDetails)) {
shelfDetails = getShelfInfo(stockInTaskOrderPO.getTaskNumber());
}
stockInTaskOrderPO.setTaskShelfMaterialDetailList(shelfDetails);
} else {
// 兼容历史数据:无类型时按两个方向各尝试一次
List<TaskReceiptMaterialDetailPO> receiptDetails = getReceiptInfo(stockInTaskOrderPO.getReceiptOrderNumber());
if (CollectionUtils.isEmpty(receiptDetails)) {
receiptDetails = getReceiptInfo(stockInTaskOrderPO.getTaskNumber());
}
stockInTaskOrderPO.setTaskReceiptMaterialDetailList(receiptDetails);
List<TaskShelfMaterialDetailPO> shelfDetails = getShelfInfo(stockInTaskOrderPO.getShelfOrderNumber());
if (CollectionUtils.isEmpty(shelfDetails)) {
shelfDetails = getShelfInfo(stockInTaskOrderPO.getTaskNumber());
}
stockInTaskOrderPO.setTaskShelfMaterialDetailList(shelfDetails);
}
return stockInTaskOrderPO;
}
@@ -93,6 +118,9 @@ public class StockInTaskOrderDomainService {
* 获取入库收货作业单详细信息
*/
public List<TaskReceiptMaterialDetailPO> getReceiptInfo(String receiptOrderNumber) {
if (!StringUtils.hasText(receiptOrderNumber)) {
return java.util.Collections.emptyList();
}
//根据收货单号查询
TaskReceiptMaterialDetailDO taskReceiptMaterialDetailDO = new TaskReceiptMaterialDetailDO();
taskReceiptMaterialDetailDO.setTaskNumber(receiptOrderNumber);
@@ -104,6 +132,9 @@ public class StockInTaskOrderDomainService {
* 获取入库上架作业单详细信息
*/
public List<TaskShelfMaterialDetailPO> getShelfInfo(String shelfOrderNumber) {
if (!StringUtils.hasText(shelfOrderNumber)) {
return java.util.Collections.emptyList();
}
TaskShelfMaterialDetailDO taskShelfMaterialDetailDO = new TaskShelfMaterialDetailDO();
//根据上架单号查询
taskShelfMaterialDetailDO.setTaskNumber(shelfOrderNumber);