feat(wms): 新增退火报表导出功能
- 在IWmsMaterialCoilService中添加queryAnnealExportList方法 - 在WmsMaterialCoilController中新增exportAnneal接口用于导出退火报表 - 在WmsMaterialCoilMapper中添加selectAnnealExportListByCoilIds查询方法 - 在WmsMaterialCoilMapper.xml中实现退火报表SQL查询,关联钢卷、退火计划、炉子等信息 - 在WmsMaterialCoilServiceImpl中实现退火报表数据查询逻辑 - 创建WmsMaterialCoilAnnealExportVo实体类用于退火报表数据导出 - 优化材质异常查询SQL逻辑,改进热轧卷板相关查询条件
This commit is contained in:
@@ -132,6 +132,17 @@ public class WmsMaterialCoilController extends BaseController {
|
|||||||
ExcelUtil.exportExcel(list, "发货报表", WmsMaterialCoilDeliveryExportVo.class, response);
|
ExcelUtil.exportExcel(list, "发货报表", WmsMaterialCoilDeliveryExportVo.class, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出退火报表(按 coilIds,联查退火计划/目标炉/逻辑库区)
|
||||||
|
* 前端仍使用 POST 传参(建议在 body 中传 coilIds,避免 URL 限制)
|
||||||
|
*/
|
||||||
|
@Log(title = "钢卷物料表-退火报表", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/exportAnneal")
|
||||||
|
public void exportAnneal(WmsMaterialCoilBo bo, HttpServletResponse response) {
|
||||||
|
List<WmsMaterialCoilAnnealExportVo> list = iWmsMaterialCoilService.queryAnnealExportList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "退火报表", WmsMaterialCoilAnnealExportVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询钢卷物料表列表(POST请求,支持大量coilIds查询)
|
* 查询钢卷物料表列表(POST请求,支持大量coilIds查询)
|
||||||
* 功能与GET /list相同,但使用POST请求体传递参数,避免URL长度限制
|
* 功能与GET /list相同,但使用POST请求体传递参数,避免URL长度限制
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.klp.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class WmsMaterialCoilAnnealExportVo extends WmsMaterialCoilExportVo {
|
||||||
|
|
||||||
|
private Long coilId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "计划号")
|
||||||
|
private String planNo;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "计划开始时间")
|
||||||
|
private Date planStartTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "实际开始时间")
|
||||||
|
private Date actualStartTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "结束时间")
|
||||||
|
private Date endTime;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "目标炉子ID")
|
||||||
|
private Long targetFurnaceId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "目标炉子名称")
|
||||||
|
private String targetFurnaceName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "计划状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "计划备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
private Long logicWarehouseId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "目标逻辑库区")
|
||||||
|
private String logicWarehouseName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "炉火层级")
|
||||||
|
private Integer furnaceLevel;
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.klp.domain.WmsMaterialCoil;
|
import com.klp.domain.WmsMaterialCoil;
|
||||||
|
import com.klp.domain.vo.WmsMaterialCoilAnnealExportVo;
|
||||||
import com.klp.domain.vo.WmsMaterialCoilDeliveryExportVo;
|
import com.klp.domain.vo.WmsMaterialCoilDeliveryExportVo;
|
||||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
@@ -89,6 +90,14 @@ public interface WmsMaterialCoilMapper extends BaseMapperPlus<WmsMaterialCoilMap
|
|||||||
*/
|
*/
|
||||||
List<WmsMaterialCoilDeliveryExportVo> selectDeliveryExportListByCoilIds(@Param("coilIds") java.util.Collection<Long> coilIds);
|
List<WmsMaterialCoilDeliveryExportVo> selectDeliveryExportListByCoilIds(@Param("coilIds") java.util.Collection<Long> coilIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退火报表导出:按钢卷ID列表联查(钢卷 + 退火计划 + 退火计划钢卷关系)
|
||||||
|
*
|
||||||
|
* @param coilIds 钢卷ID集合
|
||||||
|
* @return 退火报表导出数据
|
||||||
|
*/
|
||||||
|
List<WmsMaterialCoilAnnealExportVo> selectAnnealExportListByCoilIds(@Param("coilIds") java.util.Collection<Long> coilIds);
|
||||||
|
|
||||||
List<CoilTrimRawVo> selectCoilTrimStatistics();
|
List<CoilTrimRawVo> selectCoilTrimStatistics();
|
||||||
|
|
||||||
List<CategoryWidthRawVo> selectCategoryWidthStatistics();
|
List<CategoryWidthRawVo> selectCategoryWidthStatistics();
|
||||||
|
|||||||
@@ -296,5 +296,13 @@ public interface IWmsMaterialCoilService {
|
|||||||
* @return 修复结果
|
* @return 修复结果
|
||||||
*/
|
*/
|
||||||
Boolean fixMaterialMismatchCoils(Long coilId);
|
Boolean fixMaterialMismatchCoils(Long coilId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退火报表导出数据列表(按 coilIds)
|
||||||
|
*
|
||||||
|
* @param bo 查询条件(前端通过 POST 传 coilIds)
|
||||||
|
* @return 退火报表导出数据列表
|
||||||
|
*/
|
||||||
|
List<WmsMaterialCoilAnnealExportVo> queryAnnealExportList(WmsMaterialCoilBo bo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2809,6 +2809,18 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
return wmsMaterialCoilDeliveryExportVos;
|
return wmsMaterialCoilDeliveryExportVos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退火报表导出:按 coilIds 查询钢卷 + 退火计划联查数据
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<WmsMaterialCoilAnnealExportVo> queryAnnealExportList(WmsMaterialCoilBo bo) {
|
||||||
|
List<Long> coilIds = parseCsvLongs(bo == null ? null : bo.getCoilIds());
|
||||||
|
if (coilIds.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return baseMapper.selectAnnealExportListByCoilIds(coilIds);
|
||||||
|
}
|
||||||
|
|
||||||
private List<Long> parseCsvLongs(String csv) {
|
private List<Long> parseCsvLongs(String csv) {
|
||||||
if (StringUtils.isBlank(csv)) {
|
if (StringUtils.isBlank(csv)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|||||||
@@ -710,6 +710,105 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</foreach>
|
</foreach>
|
||||||
ORDER BY mc.create_time DESC
|
ORDER BY mc.create_time DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 退火报表导出:按 coilIds 联查钢卷 + 退火计划 + 退火计划钢卷关系 -->
|
||||||
|
<select id="selectAnnealExportListByCoilIds" resultType="com.klp.domain.vo.WmsMaterialCoilAnnealExportVo">
|
||||||
|
SELECT
|
||||||
|
mc.coil_id AS coilId,
|
||||||
|
CASE
|
||||||
|
WHEN mc.item_type = 'product' THEN '成品'
|
||||||
|
WHEN mc.item_type = 'raw_material' THEN '原料'
|
||||||
|
ELSE mc.item_type
|
||||||
|
END AS itemTypeDesc,
|
||||||
|
mc.item_id AS itemId,
|
||||||
|
mc.data_type AS dataType,
|
||||||
|
w.warehouse_name AS warehouseName,
|
||||||
|
aw.actual_warehouse_name AS actualWarehouseName,
|
||||||
|
mc.enter_coil_no AS enterCoilNo,
|
||||||
|
mc.supplier_coil_no AS supplierCoilNo,
|
||||||
|
mc.current_coil_no AS currentCoilNo,
|
||||||
|
mc.create_time AS createTime,
|
||||||
|
mc.export_time AS exportTime,
|
||||||
|
mc.update_time AS updateTime,
|
||||||
|
mc.net_weight AS netWeight,
|
||||||
|
mc.length AS length,
|
||||||
|
mc.coating_type AS coatingType,
|
||||||
|
mc.temper_grade AS temperGrade,
|
||||||
|
mc.business_purpose AS businessPurpose,
|
||||||
|
mc.is_related_to_order AS isRelatedToOrder,
|
||||||
|
mc.trimming_requirement AS trimmingRequirement,
|
||||||
|
mc.packaging_requirement AS packagingRequirement,
|
||||||
|
mc.quality_status AS qualityStatus,
|
||||||
|
mc.packing_status AS packingStatus,
|
||||||
|
mc.sale_name AS saleName,
|
||||||
|
mc.transfer_type AS transferType,
|
||||||
|
CASE
|
||||||
|
WHEN mc.status = 0 THEN '在库'
|
||||||
|
WHEN mc.status = 1 THEN '已发货'
|
||||||
|
ELSE CAST(mc.status AS CHAR)
|
||||||
|
END AS statusDesc,
|
||||||
|
mc.remark AS remark,
|
||||||
|
CASE
|
||||||
|
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
|
||||||
|
WHEN mc.item_type = 'product' THEN pdt.product_name
|
||||||
|
ELSE NULL
|
||||||
|
END AS itemName,
|
||||||
|
CASE
|
||||||
|
WHEN mc.item_type = 'raw_material' THEN rm.specification
|
||||||
|
WHEN mc.item_type = 'product' THEN pdt.specification
|
||||||
|
ELSE NULL
|
||||||
|
END AS specification,
|
||||||
|
CASE
|
||||||
|
WHEN mc.item_type = 'raw_material' THEN rm.material
|
||||||
|
WHEN mc.item_type = 'product' THEN pdt.material
|
||||||
|
ELSE NULL
|
||||||
|
END AS material,
|
||||||
|
CASE
|
||||||
|
WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
|
||||||
|
WHEN mc.item_type = 'product' THEN pdt.manufacturer
|
||||||
|
ELSE NULL
|
||||||
|
END AS manufacturer,
|
||||||
|
CASE
|
||||||
|
WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
|
||||||
|
WHEN mc.item_type = 'product' THEN pdt.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 pdt.zinc_layer
|
||||||
|
ELSE NULL
|
||||||
|
END AS zincLayer,
|
||||||
|
|
||||||
|
fp.plan_no AS planNo,
|
||||||
|
fp.plan_start_time AS planStartTime,
|
||||||
|
fp.actual_start_time AS actualStartTime,
|
||||||
|
fp.end_time AS endTime,
|
||||||
|
fp.target_furnace_id AS targetFurnaceId,
|
||||||
|
f.furnace_name AS targetFurnaceName,
|
||||||
|
fp.status AS status,
|
||||||
|
fp.remark AS remark,
|
||||||
|
|
||||||
|
fpc.logic_warehouse_id AS logicWarehouseId,
|
||||||
|
lw.warehouse_name AS logicWarehouseName,
|
||||||
|
fpc.furnace_level AS furnaceLevel
|
||||||
|
|
||||||
|
FROM wms_material_coil mc
|
||||||
|
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
|
||||||
|
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.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 pdt ON mc.item_type = 'product' AND mc.item_id = pdt.product_id
|
||||||
|
LEFT JOIN wms_furnace_plan_coil fpc ON fpc.coil_id = mc.coil_id AND fpc.del_flag = 0
|
||||||
|
LEFT JOIN wms_furnace_plan fp ON fp.plan_id = fpc.plan_id AND fp.del_flag = 0
|
||||||
|
LEFT JOIN wms_furnace f ON f.furnace_id = fp.target_furnace_id AND f.del_flag = 0
|
||||||
|
LEFT JOIN wms_warehouse lw ON lw.warehouse_id = fpc.logic_warehouse_id AND lw.del_flag = 0
|
||||||
|
WHERE mc.del_flag = 0
|
||||||
|
AND mc.coil_id IN
|
||||||
|
<foreach collection="coilIds" item="id" open="(" close=")" separator=",">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
ORDER BY mc.create_time DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
<!-- 查询重复入场卷号的钢卷信息 -->
|
<!-- 查询重复入场卷号的钢卷信息 -->
|
||||||
<select id="selectDuplicateEnterCoilNoList" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
|
<select id="selectDuplicateEnterCoilNoList" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
|
||||||
SELECT mc.*,
|
SELECT mc.*,
|
||||||
@@ -936,22 +1035,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
GROUP BY warehouse_id
|
GROUP BY warehouse_id
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 分页查询材质异常的钢卷 -->
|
<!-- 分页查询材质异常的钢卷:查询同一入场钢卷号下,packing_status与热轧卷板的material不一致的钢卷 -->
|
||||||
<select id="selectMaterialMismatchCoilsPage" resultMap="WmsMaterialCoilResult">
|
<select id="selectMaterialMismatchCoilsPage" resultMap="WmsMaterialCoilResult">
|
||||||
SELECT mc.*
|
SELECT mc.*
|
||||||
FROM wms_material_coil mc
|
FROM wms_material_coil mc
|
||||||
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id AND rm.del_flag = 0 AND rm.raw_material_name LIKE '%热轧卷板%'
|
|
||||||
LEFT JOIN wms_product wp ON mc.item_type = 'product' AND mc.item_id = wp.product_id AND wp.del_flag = 0 AND wp.product_name LIKE '%热轧卷板%'
|
|
||||||
WHERE mc.del_flag = 0
|
WHERE mc.del_flag = 0
|
||||||
AND mc.item_id IS NOT NULL
|
AND mc.enter_coil_no IS NOT NULL
|
||||||
AND mc.item_type IS NOT NULL
|
AND mc.enter_coil_no IN (
|
||||||
AND mc.packing_status IS NOT NULL
|
SELECT DISTINCT mci.enter_coil_no
|
||||||
|
FROM wms_material_coil mci
|
||||||
|
LEFT JOIN wms_raw_material rm ON mci.item_type = 'raw_material' AND mci.item_id = rm.raw_material_id AND rm.del_flag = 0
|
||||||
|
LEFT JOIN wms_product wp ON mci.item_type = 'product' AND mci.item_id = wp.product_id AND wp.del_flag = 0
|
||||||
|
WHERE mci.del_flag = 0
|
||||||
|
AND mci.item_id IS NOT NULL
|
||||||
AND (
|
AND (
|
||||||
(mc.item_type = 'raw_material' AND rm.material IS NOT NULL AND mc.packing_status != rm.material)
|
(mci.item_type = 'raw_material' AND rm.raw_material_name LIKE '%热轧卷板%')
|
||||||
OR
|
OR
|
||||||
(mc.item_type = 'product' AND wp.material IS NOT NULL AND mc.packing_status != wp.material)
|
(mci.item_type = 'product' AND wp.product_name LIKE '%热轧卷板%')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AND (
|
||||||
|
mc.packing_status IS NULL
|
||||||
|
OR
|
||||||
|
EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM wms_material_coil mci2
|
||||||
|
LEFT JOIN wms_raw_material rm2 ON mci2.item_type = 'raw_material' AND mci2.item_id = rm2.raw_material_id AND rm2.del_flag = 0
|
||||||
|
LEFT JOIN wms_product wp2 ON mci2.item_type = 'product' AND mci2.item_id = wp2.product_id AND wp2.del_flag = 0
|
||||||
|
WHERE mci2.del_flag = 0
|
||||||
|
AND mci2.enter_coil_no = mc.enter_coil_no
|
||||||
|
AND (
|
||||||
|
(mci2.item_type = 'raw_material' AND rm2.raw_material_name LIKE '%热轧卷板%' AND (mc.packing_status != rm2.material OR rm2.material IS NULL))
|
||||||
|
OR
|
||||||
|
(mci2.item_type = 'product' AND wp2.product_name LIKE '%热轧卷板%' AND (mc.packing_status != wp2.material OR wp2.material IS NULL))
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
ORDER BY mc.coil_id ASC
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user