feat(wms): 添加钢卷库区操作记录导出功能以及优化查询速率

- 在服务接口中新增 exportBySecondWarehouseIdAndTimeRange 方法用于导出功能
- 在控制器中新增 exportByWarehouseAndTime 接口支持报表导出
- 在映射器中新增 selectVoListWithJoin 查询方法优化关联查询
- 在 XML 映射文件中新增完整的关联查询 SQL 和结果映射配置
- 在服务实现类中重构查询逻辑使用新的关联查询方法
- 新增 WmsCoilWarehouseOperationLogExportVo 导出数据对象
- 实现导出逻辑将操作记录转换为 Excel 格式并支持多表关联
- 添加状态描述转换方法支持中文显示
- 更新 VO 类继承 BaseEntity 基础实体类
This commit is contained in:
2026-03-24 10:35:57 +08:00
parent 1fc85c990f
commit ad100083ed
7 changed files with 382 additions and 40 deletions

View File

@@ -18,5 +18,115 @@
<result property="updateBy" column="update_by"/>
</resultMap>
<resultMap type="com.klp.domain.vo.WmsCoilWarehouseOperationLogVo" id="WmsCoilWarehouseOperationLogVoResult">
<result property="logId" column="log_id"/>
<result property="coilId" column="coil_id"/>
<result property="actualWarehouseId" column="actual_warehouse_id"/>
<result property="operationType" column="operation_type"/>
<result property="inOutType" column="in_out_type"/>
<result property="remark" column="remark"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
<!-- warehouse -->
<association property="warehouse" javaType="com.klp.domain.vo.WmsActualWarehouseVo">
<result property="actualWarehouseId" column="actual_warehouse_id"/>
<result property="actualWarehouseName" column="actual_warehouse_name"/>
</association>
<!-- coil -->
<association property="coil" javaType="com.klp.domain.vo.WmsMaterialCoilVo">
<result property="coilId" column="coil_id"/>
<result property="itemId" column="item_id"/>
<result property="itemCode" column="item_code"/>
<result property="enterCoilNo" column="enter_coil_no"/>
<result property="currentCoilNo" column="current_coil_no"/>
<result property="supplierCoilNo" column="supplier_coil_no"/>
<result property="itemType" column="item_type"/>
<result property="grossWeight" column="gross_weight"/>
<result property="netWeight" column="net_weight"/>
<result property="status" column="status"/>
<result property="remark" column="coil_remark"/>
<result property="warehouseName" column="warehouse_name"/>
<result property="actualWarehouseName" column="aw_actual_warehouse_name"/>
<result property="itemName" column="item_name"/>
<result property="specification" column="specification"/>
<result property="material" column="material"/>
<result property="manufacturer" column="manufacturer"/>
<result property="surfaceTreatmentDesc" column="surface_treatment_desc"/>
<result property="zincLayer" column="zinc_layer"/>
<result property="businessPurpose" column="business_purpose"/>
<result property="trimmingRequirement" column="trimming_requirement"/>
<result property="packagingRequirement" column="packaging_requirement"/>
<result property="qualityStatus" column="quality_status"/>
<result property="packingStatus" column="packing_status"/>
<result property="length" column="length"/>
<result property="createTime" column="coil_create_time"/>
</association>
</resultMap>
<select id="selectVoListWithJoin" resultMap="WmsCoilWarehouseOperationLogVoResult">
SELECT log.log_id, log.coil_id, log.actual_warehouse_id, log.operation_type, log.in_out_type, log.remark,
log.create_time, log.create_by, log.update_time, log.update_by,
aw.actual_warehouse_name,
mc.item_id,
mc.enter_coil_no, mc.current_coil_no, mc.supplier_coil_no, mc.item_type,
mc.gross_weight, mc.net_weight, mc.status, mc.remark AS coil_remark,
mc.create_time AS coil_create_time,
w.warehouse_name,
aw2.actual_warehouse_name AS aw_actual_warehouse_name,
CASE WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL END AS specification,
CASE WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL END AS material,
CASE WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL END AS manufacturer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL END AS surfaceTreatmentDesc,
CASE WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL END AS zincLayer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL END AS item_name,
CASE WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL END AS item_code,
mc.business_purpose, mc.trimming_requirement, mc.packaging_requirement,
mc.quality_status, mc.packing_status, mc.length
FROM wms_coil_warehouse_operation_log log
LEFT JOIN wms_material_coil mc ON log.coil_id = mc.coil_id AND mc.del_flag = 0
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON log.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_actual_warehouse aw2 ON mc.actual_warehouse_id = aw2.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
<where>
<if test="warehouseIds != null and warehouseIds.size() > 0">
AND log.actual_warehouse_id IN
<foreach collection="warehouseIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="operationType != null">
AND log.operation_type = #{operationType}
</if>
<if test="inOutType != null">
AND log.in_out_type = #{inOutType}
</if>
<if test="startTime != null">
AND log.create_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND log.create_time &lt;= #{endTime}
</if>
AND log.del_flag = 0
</where>
ORDER BY log.create_time DESC
</select>
</mapper>