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

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);
@@ -37,6 +37,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.out_order_abnormal_id, a.organization_id, a.organization_name, a.top_organization_id, a.abnormal_number, a.picking_order_number, a.out_task_order_number, a.type, a.actual_quantity, a.quantity, a.abnormal_actual_quantity, a.abnormal_type, a.abnormal_reason, a.remark, a.create_time, a.create_by, a.create_by_name, a.update_time, a.update_by, a.update_by_name, a.del_flag </sql>
<sql id="selectOutOrderAbnormalPo1">
<if test="outOrderAbnormalId != null ">
and a.out_order_abnormal_id = #{outOrderAbnormalId}
</if>
<if test="organizationId != null ">
and a.organization_id = #{organizationId}
</if>
@@ -11,6 +11,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="topOrganizationId" column="top_organization_id" />
<result property="uniqueId" column="unique_id" />
<result property="pickingOrderNumber" column="picking_order_number" />
<result property="inOrderNumber" column="in_order_number" />
<result property="lotNumber" column="lot_number" />
<result property="materialBaseInfoId" column="material_base_info_id" />
<result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" />
@@ -74,7 +76,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.BATCH_REF_NO, a.SHEET_REF_NO, a.BOX_PALLET_NO, a.EXT_ATTR_1, a.EXT_ATTR_2,
a.PRODUCTION_DATE, a.EXPIRY_DATE, a.INVENTORY_DATE, a.EXT_ATTR_3, a.EXT_ATTR_4,
a.create_time, a.create_by, a.create_by_name, a.update_time, a.update_by, a.update_by_name, a.del_flag,
a.total_area, a.total_gross_weight, a.total_net_weight, a.total_volume, a.out_unique_id
a.total_area, a.total_gross_weight, a.total_net_weight, a.total_volume, a.out_unique_id,
omd.in_order_number, omd.lot_no as lot_number
</sql>
<sql id="selectPickingMaterialDetailPo1">
@@ -184,6 +187,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select
<include refid="selectPickingMaterialDetailPo"/>
from picking_material_detail a
left join out_material_detail omd on a.out_unique_id = omd.unique_id and omd.del_flag = 1
<where>
<include refid="selectPickingMaterialDetailPo1"/>
</where>
@@ -93,6 +93,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
<include refid="selectStockInTaskOrderPo1"/>
</where>
order by create_time desc
order by a.operators_end_time desc, a.create_time desc
</select>
</mapper>