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

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.common.security.utils.SecurityUtils;
import com.mhd.system.api.model.LoginUser; import com.mhd.system.api.model.LoginUser;
import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail; 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.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.entity.OutOrderAbnormal;
import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService; import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService;
import com.mhd.wms.domain.outOrderAbnormal.repository.mapper.OutOrderAbnormalMapper; 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.OutOrderAbnormalBaseDO;
import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalDO; import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalDO;
import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail; 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.mapper.PickingMaterialDetailMapper;
import com.mhd.wms.domain.pickingMaterialDetail.repository.todo.PickingMaterialDetailDO;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
@@ -42,6 +47,10 @@ public class OutOrderAbnormalImpl extends ServiceImpl<OutOrderAbnormalMapper, Ou
private OutMaterialDetailMapper outMaterialDetailMapper; private OutMaterialDetailMapper outMaterialDetailMapper;
@Autowired @Autowired
private PickingMaterialDetailMapper pickingMaterialDetailMapper; private PickingMaterialDetailMapper pickingMaterialDetailMapper;
@Autowired
private IOutMaterialDetailService outMaterialDetailService;
@Autowired
private IPickingMaterialDetailService pickingMaterialDetailService;
/** /**
* 查询出库异常单列表 * 查询出库异常单列表
@@ -92,12 +101,54 @@ public class OutOrderAbnormalImpl extends ServiceImpl<OutOrderAbnormalMapper, Ou
*/ */
@Override @Override
public OutOrderAbnormalPO getInfo(Long outOrderAbnormalId) { public OutOrderAbnormalPO getInfo(Long outOrderAbnormalId) {
OutOrderAbnormal outOrderAbnormal = this.getById(outOrderAbnormalId); OutOrderAbnormalDO query = new OutOrderAbnormalDO();
OutOrderAbnormalPO outOrderAbnormalPO = new OutOrderAbnormalPO(); query.setOutOrderAbnormalId(outOrderAbnormalId);
BeanUtils.copyProperties(outOrderAbnormal,outOrderAbnormalPO); List<OutOrderAbnormalPO> list = queryList(query);
if (CollectionUtils.isEmpty(list)) {
throw new ServiceException("出库异常单不存在");
}
OutOrderAbnormalPO outOrderAbnormalPO = list.get(0);
fillMaterialDetails(outOrderAbnormalPO);
return 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 生成异常记录 * @description 生成异常记录
* @author ZhouGY * @author ZhouGY
@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
@@ -112,6 +113,8 @@ public class OutOrderAbnormalPO extends BaseVOEntity {
@Excel(name = "入库单类型名称") @Excel(name = "入库单类型名称")
private String orderTypeName; private String orderTypeName;
@ApiModelProperty("异常明细(type=1 返回拣货明细,type=2 返回复核明细)")
private List<?> materialDetailList;
} }
@@ -55,6 +55,12 @@ public class PickingMaterialDetailPO extends BaseVOEntity {
@Excel(name = "拣货单号") @Excel(name = "拣货单号")
private String pickingOrderNumber; private String pickingOrderNumber;
@ApiModelProperty("入库单号")
private String inOrderNumber;
@ApiModelProperty("LOT编码")
private String lotNumber;
@ApiModelProperty("物料基础信息id") @ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id") @Excel(name = "物料基础信息id")
private Long materialBaseInfoId; private Long materialBaseInfoId;
@@ -15,6 +15,8 @@ import com.mhd.wms.domain.taskShelfMaterialDetail.repository.todo.TaskShelfMater
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List; import java.util.List;
@@ -78,12 +80,35 @@ public class StockInTaskOrderDomainService {
public StockInTaskOrderPO getInfo(Long inTaskOrderId) public StockInTaskOrderPO getInfo(Long inTaskOrderId)
{ {
StockInTaskOrderPO stockInTaskOrderPO = stockInTaskOrderService.getInfo(inTaskOrderId); StockInTaskOrderPO stockInTaskOrderPO = stockInTaskOrderService.getInfo(inTaskOrderId);
if (stockInTaskOrderPO.getType() == 1){ if (stockInTaskOrderPO == null) {
//根据收货单号查询 return null;
stockInTaskOrderPO.setTaskReceiptMaterialDetailList(getReceiptInfo(stockInTaskOrderPO.getTaskNumber())); }
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 { } else {
//根据上架单号查询 // 兼容历史数据:无类型时按两个方向各尝试一次
stockInTaskOrderPO.setTaskShelfMaterialDetailList(getShelfInfo(stockInTaskOrderPO.getTaskNumber())); 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; return stockInTaskOrderPO;
} }
@@ -93,6 +118,9 @@ public class StockInTaskOrderDomainService {
* 获取入库收货作业单详细信息 * 获取入库收货作业单详细信息
*/ */
public List<TaskReceiptMaterialDetailPO> getReceiptInfo(String receiptOrderNumber) { public List<TaskReceiptMaterialDetailPO> getReceiptInfo(String receiptOrderNumber) {
if (!StringUtils.hasText(receiptOrderNumber)) {
return java.util.Collections.emptyList();
}
//根据收货单号查询 //根据收货单号查询
TaskReceiptMaterialDetailDO taskReceiptMaterialDetailDO = new TaskReceiptMaterialDetailDO(); TaskReceiptMaterialDetailDO taskReceiptMaterialDetailDO = new TaskReceiptMaterialDetailDO();
taskReceiptMaterialDetailDO.setTaskNumber(receiptOrderNumber); taskReceiptMaterialDetailDO.setTaskNumber(receiptOrderNumber);
@@ -104,6 +132,9 @@ public class StockInTaskOrderDomainService {
* 获取入库上架作业单详细信息 * 获取入库上架作业单详细信息
*/ */
public List<TaskShelfMaterialDetailPO> getShelfInfo(String shelfOrderNumber) { public List<TaskShelfMaterialDetailPO> getShelfInfo(String shelfOrderNumber) {
if (!StringUtils.hasText(shelfOrderNumber)) {
return java.util.Collections.emptyList();
}
TaskShelfMaterialDetailDO taskShelfMaterialDetailDO = new TaskShelfMaterialDetailDO(); TaskShelfMaterialDetailDO taskShelfMaterialDetailDO = new TaskShelfMaterialDetailDO();
//根据上架单号查询 //根据上架单号查询
taskShelfMaterialDetailDO.setTaskNumber(shelfOrderNumber); 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> 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"> <sql id="selectOutOrderAbnormalPo1">
<if test="outOrderAbnormalId != null ">
and a.out_order_abnormal_id = #{outOrderAbnormalId}
</if>
<if test="organizationId != null "> <if test="organizationId != null ">
and a.organization_id = #{organizationId} and a.organization_id = #{organizationId}
</if> </if>
@@ -11,6 +11,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="topOrganizationId" column="top_organization_id" /> <result property="topOrganizationId" column="top_organization_id" />
<result property="uniqueId" column="unique_id" /> <result property="uniqueId" column="unique_id" />
<result property="pickingOrderNumber" column="picking_order_number" /> <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="materialBaseInfoId" column="material_base_info_id" />
<result property="materialCode" column="material_code" /> <result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" /> <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.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.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.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>
<sql id="selectPickingMaterialDetailPo1"> <sql id="selectPickingMaterialDetailPo1">
@@ -184,6 +187,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select select
<include refid="selectPickingMaterialDetailPo"/> <include refid="selectPickingMaterialDetailPo"/>
from picking_material_detail a 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> <where>
<include refid="selectPickingMaterialDetailPo1"/> <include refid="selectPickingMaterialDetailPo1"/>
</where> </where>
@@ -93,6 +93,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where> <where>
<include refid="selectStockInTaskOrderPo1"/> <include refid="selectStockInTaskOrderPo1"/>
</where> </where>
order by create_time desc order by a.operators_end_time desc, a.create_time desc
</select> </select>
</mapper> </mapper>