feat(oms):出库明细查询

This commit is contained in:
zhaoqing
2026-07-24 11:24:10 +08:00
parent 60bc140195
commit 49f6832d3f
10 changed files with 324 additions and 0 deletions
@@ -3,6 +3,7 @@ package com.mhd.oms.domain.executionOutMaterialDetail.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.executionOutMaterialDetail.entity.ExecutionOutMaterialDetail;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailWithOrderPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailBaseDO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailDO;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.todo.QueryOrderOverStockDO;
@@ -62,4 +63,9 @@ public interface IExecutionOutMaterialDetailService extends IService<ExecutionOu
* 查询物料明细
*/
public ExecutionOutMaterialDetailPO getInfo(Long materialDetailId);
/**
* 出库明细查询(关联出库执行单)
*/
public List<ExecutionOutMaterialDetailWithOrderPO> queryOutOrderDetailList(QueryOrderOverStockDO queryOrderOverStockDO);
}
@@ -3,6 +3,7 @@ package com.mhd.oms.domain.executionOutMaterialDetail.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.executionOutMaterialDetail.entity.ExecutionOutMaterialDetail;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailWithOrderPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailDO;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.todo.QueryOrderOverStockDO;
import org.apache.ibatis.annotations.Param;
@@ -67,4 +68,9 @@ public interface ExecutionOutMaterialDetailMapper extends BaseMapper<ExecutionOu
public String getLotByKcId(@Param("id") Long id);
public String getInLotNo(@Param("inOrderNumber") String inOrderNumber, @Param("baseId") Long baseId);
/**
* 出库明细查询(关联出库执行单)
*/
public List<ExecutionOutMaterialDetailWithOrderPO> queryOutOrderDetailList(QueryOrderOverStockDO queryOrderOverStockDO);
}
@@ -12,6 +12,7 @@ import com.mhd.oms.domain.executionOutMaterialDetail.entity.ExecutionOutMaterial
import com.mhd.oms.domain.executionOutMaterialDetail.repository.facade.IExecutionOutMaterialDetailService;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.mapper.ExecutionOutMaterialDetailMapper;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailWithOrderPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailBaseDO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailDO;
import com.mhd.oms.domain.executionStockInOrder.repository.mapper.ExecutionStockInOrderMapper;
@@ -261,4 +262,13 @@ public class ExecutionOutMaterialDetailImpl extends ServiceImpl<ExecutionOutMate
BeanUtils.copyProperties(outMaterialDetail, outMaterialDetailPO);
return outMaterialDetailPO;
}
/**
* 出库明细查询(关联出库执行单)
*/
@Override
public List<ExecutionOutMaterialDetailWithOrderPO> queryOutOrderDetailList(QueryOrderOverStockDO queryOrderOverStockDO) {
return outMaterialDetailMapper.queryOutOrderDetailList(queryOrderOverStockDO);
}
}
@@ -0,0 +1,21 @@
package com.mhd.oms.domain.executionOutMaterialDetail.repository.po;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 出库明细查询结果(关联出库执行单)
*
* @author gen
* @date 2024-07-24
*/
@Data
public class ExecutionOutMaterialDetailWithOrderPO extends ExecutionOutMaterialDetailPO {
private static final long serialVersionUID = 1L;
@ApiModelProperty("出库单状态: 1-已创建 2-已审核 3-部分分配 4-已分配 5-拣货中 6-波次中 7-拣货完成 8-复核中 9-已出库 10-已取消 11-已关闭")
private Integer outOrderStatus;
@ApiModelProperty("出库单审核状态: 1-未审核 2-审核不通过 3-审核通过")
private Integer outOrderAuditStatus;
}
@@ -0,0 +1,69 @@
package com.mhd.oms.domain.executionOutMaterialDetail.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 出库明细查询参数 DTO
*
* @author gen
* @date 2024-07-24
*/
@Data
public class ExecutionOutMaterialDetailQueryDTO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("组织表ID")
private Long organizationId;
@ApiModelProperty("一级组织表ID")
private Long topOrganizationId;
@ApiModelProperty("出库单号")
private String outOrderNumber;
@ApiModelProperty("仓库id")
private Long warehouseId;
@ApiModelProperty("仓库编码")
private String warehouseCode;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("货主id")
private Long shipperId;
@ApiModelProperty("货主名称")
private String shipperName;
@ApiModelProperty("出库单类型编码")
private String outOrderTypeCode;
@ApiModelProperty("出库状态: 1-已创建 2-已审核 3-部分分配 4-已分配 5-拣货中 6-波次中 7-拣货完成 8-复核中 9-已出库 10-已取消 11-已关闭")
private Integer outStatus;
@ApiModelProperty("预计出库时间 开始")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date outOrderExpectStartTime;
@ApiModelProperty("预计出库时间 结束")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date outOrderExpectEndTime;
@ApiModelProperty("物料基础信息id")
private Long materialBaseInfoId;
@ApiModelProperty("物料编码")
private String materialCode;
@ApiModelProperty("物料名称")
private String materialName;
}
@@ -0,0 +1,38 @@
package com.mhd.oms.domain.executionOutMaterialDetail.service;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailWithOrderPO;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.todo.QueryOrderOverStockDO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 出库明细ApplicationService
*
* @author gen
* @date 2024-07-24
*/
@Service
@Slf4j
public class ExecutionOutMaterialDetailApplicationService {
@Autowired
private ExecutionOutMaterialDetailDomainService outMaterialDetailDomainService;
/**
* 出库明细查询(关联出库执行单)
*/
public List<ExecutionOutMaterialDetailWithOrderPO> queryOutOrderDetailList(QueryOrderOverStockDO queryOrderOverStockDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null) {
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1) {
queryOrderOverStockDO.setTopOrganizationId(topOrganizationId);
}
}
return outMaterialDetailDomainService.queryOutOrderDetailList(queryOrderOverStockDO);
}
}
@@ -0,0 +1,26 @@
package com.mhd.oms.domain.executionOutMaterialDetail.service;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailQueryDTO;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.todo.QueryOrderOverStockDO;
import org.springframework.stereotype.Component;
/**
* 出库明细Assembler
*
* @author gen
* @date 2024-07-24
*/
@Component
public class ExecutionOutMaterialDetailAssembler {
/**
* 出库明细查询 DTO → QueryOrderOverStockDO
*/
public QueryOrderOverStockDO toQueryDO(ExecutionOutMaterialDetailQueryDTO queryDTO) {
QueryOrderOverStockDO queryDO = new QueryOrderOverStockDO();
BeanUtils.copyProperties(queryDTO, queryDO, IgnoreNullUtil.getNullPropertyNames(queryDTO));
return queryDO;
}
}
@@ -5,7 +5,9 @@ package com.mhd.oms.domain.executionOutMaterialDetail.service;
//import com.mhd.wms.domain.outMaterialDetail.repository.todo.ExecutionOutMaterialDetailDO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.facade.IExecutionOutMaterialDetailService;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailWithOrderPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailDO;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.todo.QueryOrderOverStockDO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -64,4 +66,11 @@ public class ExecutionOutMaterialDetailDomainService {
return outMaterialDetailService.getInfo(materialDetailId);
}
/**
* 出库明细查询(关联出库执行单)
*/
public List<ExecutionOutMaterialDetailWithOrderPO> queryOutOrderDetailList(QueryOrderOverStockDO queryOrderOverStockDO) {
return outMaterialDetailService.queryOutOrderDetailList(queryOrderOverStockDO);
}
}
@@ -0,0 +1,44 @@
package com.mhd.oms.interfaces.facade.executionOutMaterialDetail;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.page.TableDataInfo;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailWithOrderPO;
import com.mhd.oms.domain.executionOutMaterialDetail.repository.todo.ExecutionOutMaterialDetailQueryDTO;
import com.mhd.oms.domain.executionOutMaterialDetail.service.ExecutionOutMaterialDetailApplicationService;
import com.mhd.oms.domain.executionOutMaterialDetail.service.ExecutionOutMaterialDetailAssembler;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.todo.QueryOrderOverStockDO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* 出库明细Api
*
* @author gen
* @date 2024-07-24
*/
@RestController
@RequestMapping("/executionOutMaterialDetailApi")
public class ExecutionOutMaterialDetailApi extends BaseController {
@Autowired
private ExecutionOutMaterialDetailApplicationService outMaterialDetailApplicationService;
@Resource
private ExecutionOutMaterialDetailAssembler outMaterialDetailAssembler;
/**
* 出库明细查询(关联出库执行单)
*/
@ApiOperation("出库明细查询(关联出库执行单)")
@GetMapping("/listWithOrder")
public TableDataInfo listWithOrder(ExecutionOutMaterialDetailQueryDTO queryDTO) {
QueryOrderOverStockDO queryDO = outMaterialDetailAssembler.toQueryDO(queryDTO);
startPage();
List<ExecutionOutMaterialDetailWithOrderPO> list = outMaterialDetailApplicationService.queryOutOrderDetailList(queryDO);
return getDataTable(list);
}
}
@@ -448,4 +448,99 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getkcIdByUniqueId" parameterType="java.lang.Long" resultType="java.lang.Long">
select MATERIAL_INVENTORY_ID from "NGWL_TEST_WMS".OUT_MATERIAL_DETAIL where UNIQUE_ID = #{uniqueId}
</select>
<!-- ========== 出库明细查询(关联出库执行单) ========== -->
<resultMap type="com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutMaterialDetailWithOrderPO"
id="OutMaterialDetailWithOrderResult" extends="MaterialDetailResult">
<result property="outOrderStatus" column="out_order_status" />
<result property="outOrderAuditStatus" column="out_order_audit_status" />
</resultMap>
<select id="queryOutOrderDetailList"
parameterType="com.mhd.oms.domain.reservationInMaterialDetail.repository.todo.QueryOrderOverStockDO"
resultMap="OutMaterialDetailWithOrderResult">
select
a.material_detail_id, a.organization_id, a.organization_name, a.top_organization_id, a.unique_id,
a.out_order_number, a.material_base_info_id, a.material_code, a.material_name, a.bar_code,
a.weight_limit, a.volume_limit, a.quantity, a.allocation_quantity, a.picking_quantity, a.check_quantity,
a.pack_id, a.pack_code, a.pack_name, a.pack_detail_id, a.unit_code, a.unit_name,
a.material_warehouse_control_id, a.serial_number_manage,
a.material_inventory_id, a.batch_number,
a.warehouse_id, a.warehouse_code, a.warehouse_name,
a.storage_section_id, a.storage_code, a.storage_name,
a.storage_location_id, a.storage_location_code, a.storage_location_name,
a.level, a.parent_unique_id, a.allow_modify,
a.container_id, a.container_code, a.container_type, a.container_type_name,
a.material_status_code, a.material_status_name,
a.remark, a.create_time, a.create_by, a.create_by_name, a.gen_picking_order,
a.update_time, a.update_by, a.update_by_name, a.del_flag,
a.over_stock_id, a.over_stock_status, a.over_stock_type,
a.COMMODITY_NAME, a.COMMODITY_NO, a.MATERIAL_NO,
a.SPECIFICATION_MODEL, a.SKUCODE, a.INVOICE_NO, a.LITER, a.SIZE,
a.DECLARE_UNIT, a.BATCH_REF_NO, a.SHEET_REF_NO,
a.COUNTRY_OF_ORIGIN, a.BOX_PALLET_NO, a.CURRENCY,
a.DECLARE_QUANTITY, a.CASE_COUNT, a.PIECE_COUNT, a.OUTBOUND_QUANTITY,
a.TOTAL_NET_WEIGHT, a.TOTAL_GROSS_WEIGHT, a.TOTAL_VOLUME, a.TOTAL_AREA, a.TOTAL_AMOUNT,
a.UNIT, 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.INVENTORY_QUANTITY,
a.contract_fee, a.monthly_warehouse_fee, a.half_month_wh_fee, a.discount_rate,
a.single_volume, a.single_gross_weight, a.lot_no, a.in_order_number,
a.stock_unit, a.stock_quantity, a.inventory_quantity,
a.line_num_gw, a.spec_gw, a.unit_gw, a.qty_gw,
a.erp_curr_gw, a.erp_price_gw, a.amount_gw, a.in_order_number_gw, a.in_line_num_gw,
b.status as out_order_status,
b.audit_status as out_order_audit_status
from execution_out_material_detail a
left join execution_stock_out_order b on a.out_order_number = b.out_order_number
<where>
<if test="organizationId != null ">
and a.organization_id = #{organizationId}
</if>
<if test="topOrganizationId != null ">
and a.top_organization_id = #{topOrganizationId}
</if>
<if test="materialBaseInfoId != null ">
and a.material_base_info_id = #{materialBaseInfoId}
</if>
<if test="materialCode != null and materialCode != ''">
and a.material_code = #{materialCode}
</if>
<if test="materialName != null and materialName != ''">
and a.material_name like concat('%', #{materialName}, '%')
</if>
<if test="outOrderNumber != null and outOrderNumber != ''">
and b.out_order_number like concat('%', #{outOrderNumber}, '%')
</if>
<if test="warehouseId != null ">
and b.warehouse_id = #{warehouseId}
</if>
<if test="warehouseCode != null and warehouseCode != ''">
and b.warehouse_code = #{warehouseCode}
</if>
<if test="warehouseName != null and warehouseName != ''">
and b.warehouse_name like concat('%', #{warehouseName}, '%')
</if>
<if test="shipperId != null ">
and b.shipper_id = #{shipperId}
</if>
<if test="shipperName != null and shipperName != ''">
and b.shipper_name like concat('%', #{shipperName}, '%')
</if>
<if test="outOrderTypeCode != null and outOrderTypeCode != ''">
and b.order_type_code = #{outOrderTypeCode}
</if>
<if test="outStatus != null ">
and b.status = #{outStatus}
</if>
<if test="outOrderExpectStartTime != null">
and b.expect_time &gt;= #{outOrderExpectStartTime}
</if>
<if test="outOrderExpectEndTime != null">
and b.expect_time &lt;= #{outOrderExpectEndTime}
</if>
and a.del_flag = 1
and b.del_flag = 1
</where>
order by a.create_time desc
</select>
</mapper>