diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/WipTrackingReportExportVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/WipTrackingReportExportVo.java new file mode 100644 index 00000000..13ee302e --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/WipTrackingReportExportVo.java @@ -0,0 +1,126 @@ +package org.dromara.mes.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 在制品跟踪报表导出VO + * + * @author Yinq + * @date 2025-09-25 + */ +@Data +@ExcelIgnoreUnannotated +public class WipTrackingReportExportVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 生产订单号 + */ + @ExcelProperty(value = "生产订单号", index = 0) + private String orderCode; + + /** + * 物料编号 + */ + @ExcelProperty(value = "物料编号", index = 1) + private String materialCode; + + /** + * 物料名称 + */ + @ExcelProperty(value = "物料名称", index = 2) + private String materialName; + + /** + * 规格型号 + */ + @ExcelProperty(value = "规格型号", index = 3) + private String materialSpec; + + /** + * 计划总数量 + */ + @ExcelProperty(value = "计划总数量", index = 4) + private BigDecimal planAmount; + + /** + * 在制数量 + */ + @ExcelProperty(value = "在制数量", index = 5) + private BigDecimal wipAmount; + + /** + * 已完成数量 + */ + @ExcelProperty(value = "已完成数量", index = 6) + private BigDecimal completeAmount; + + /** + * 计划开工时间 + */ + @ExcelProperty(value = "计划开工时间", index = 7) + private LocalDateTime planBeginTime; + + /** + * 实际开工时间 + */ + @ExcelProperty(value = "实际开工时间", index = 8) + private LocalDateTime realBeginTime; + + /** + * 计划完工时间 + */ + @ExcelProperty(value = "计划完工时间", index = 9) + private LocalDateTime planEndTime; + + /** + * 当前时间 + */ + @ExcelProperty(value = "当前时间", index = 10) + private LocalDateTime currentTime; + + /** + * 总工序数 + */ + @ExcelProperty(value = "总工序数", index = 11) + private String totalProcessCount; + + /** + * 在制工序 + */ + @ExcelProperty(value = "在制工序", index = 12) + private String wipProcesses; + + /** + * 剩余工序 + */ + @ExcelProperty(value = "剩余工序", index = 13) + private String remainingProcesses; + + /** + * 整体进度(%) + */ + @ExcelProperty(value = "整体进度(%)", index = 14) + private String overallProgress; + + /** + * 进度状态 + */ + @ExcelProperty(value = "进度状态", index = 15) + private String progressStatus; + + /** + * 工序进度详情(用于导出时的详细说明) + */ + @ExcelProperty(value = "工序进度详情", index = 16) + private String processProgressDetail; +} \ No newline at end of file diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/report/IqcEfficiencyReportVo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/report/IqcEfficiencyReportVo.java new file mode 100644 index 00000000..8ef97795 --- /dev/null +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/report/IqcEfficiencyReportVo.java @@ -0,0 +1,31 @@ +package org.dromara.qms.domain.vo.report; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class IqcEfficiencyReportVo { + private String inspectionNo; + private String purchaseOrderNo; + private String inspectionDate; // yyyy-MM-dd + private String inspectionStartTime; + private String inspectionEndTime; + private String materialCode; + private String materialName; + private String materialSpec; + private String materialUnit; + private String supplierName; + private BigDecimal inspectionQty; + private BigDecimal qualifiedQty; + private BigDecimal unqualifiedQty; + private String inspectionResult; + private String inspectionTypeName; + private String inspectorName; + private String items; // 聚合的质检项目 + private String methods; // 聚合的检验方法 + private String unqualifiedItems; // 聚合的不合格项(item_name(problem_detail)) + private String returnReason; // 退货原因(当评审为退货时) + private String unqualifiedSummary; // 不合格项与退货原因合并后的展示 + private String remark; +} \ No newline at end of file diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsReportMapper.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsReportMapper.java index 282d3db6..3f3c7558 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsReportMapper.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsReportMapper.java @@ -18,46 +18,54 @@ import java.util.List; @Mapper public interface WmsReportMapper { + /** + * 查询退库原因分析报表 + */ /** * 查询退库原因分析报表 */ @Select("SELECT " + - " ro.tenant_id AS tenantId, " + - " CASE " + - " WHEN ro.return_reason LIKE '%质量%' OR ro.return_reason LIKE '%不合格%' THEN '质量问题' " + - " WHEN ro.return_reason LIKE '%订单%' OR ro.return_reason LIKE '%变更%' THEN '订单变更' " + - " WHEN ro.return_reason LIKE '%损坏%' OR ro.return_reason LIKE '%破损%' THEN '物料损坏' " + - " WHEN ro.return_reason LIKE '%过期%' OR ro.return_reason LIKE '%超期%' THEN '过期物料' " + - " ELSE '其他原因' " + - " END AS returnReasonCategory, " + - " COUNT(*) AS returnOrderCount, " + - " SUM(ro.return_amount) AS totalReturnAmount, " + - " CAST(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM wms_return_order WHERE tenant_id = ro.tenant_id AND order_status = '1') AS DECIMAL(10,2)) AS orderCountRatio, " + - " CAST(SUM(ro.return_amount) * 100.0 / (SELECT SUM(return_amount) FROM wms_return_order WHERE tenant_id = ro.tenant_id AND order_status = '1') AS DECIMAL(10,2)) AS amountRatio, " + - " mi.material_name AS materialName, " + - " mc.material_category_name AS materialCategoryName, " + - " mi.material_code AS materialCode " + - "FROM wms_return_order ro " + - "INNER JOIN base_material_info_copy1 mi ON ro.material_id = mi.material_id " + - "INNER JOIN base_material_category mc ON mi.material_category_id = mc.material_category_id " + - "WHERE ro.order_status = '1' " + - " AND (#{tenantId} IS NULL OR ro.tenant_id = #{tenantId}) " + - " AND (#{materialCategoryId} IS NULL OR mc.material_category_id = #{materialCategoryId}) " + - "GROUP BY ro.tenant_id, " + - " CASE " + - " WHEN ro.return_reason LIKE '%质量%' OR ro.return_reason LIKE '%不合格%' THEN '质量问题' " + - " WHEN ro.return_reason LIKE '%订单%' OR ro.return_reason LIKE '%变更%' THEN '订单变更' " + - " WHEN ro.return_reason LIKE '%损坏%' OR ro.return_reason LIKE '%破损%' THEN '物料损坏' " + - " WHEN ro.return_reason LIKE '%过期%' OR ro.return_reason LIKE '%超期%' THEN '过期物料' " + - " ELSE '其他原因' " + - " END, " + - " mi.material_name, " + - " mc.material_category_name, " + - " mi.material_code " + - "ORDER BY ro.tenant_id, totalReturnAmount DESC") - List selectReturnReasonAnalysis(@Param("tenantId") String tenantId, + " ro.tenant_id AS tenantId, " + + " CASE " + + " WHEN ro.return_reason LIKE '%质量%' OR ro.return_reason LIKE '%不合格%' THEN '质量问题' " + + " WHEN ro.return_reason LIKE '%订单%' OR ro.return_reason LIKE '%变更%' THEN '订单变更' " + + " WHEN ro.return_reason LIKE '%损坏%' OR ro.return_reason LIKE '%破损%' THEN '物料损坏' " + + " WHEN ro.return_reason LIKE '%过期%' OR ro.return_reason LIKE '%超期%' THEN '过期物料' " + + " ELSE ro.return_reason " + + " END AS returnReasonCategory, " + + " COUNT(*) AS returnOrderCount, " + + " SUM(ro.return_amount) AS totalReturnAmount, " + + " CAST(CASE " + + " WHEN (SELECT COUNT(*) FROM wms_return_order WHERE tenant_id = ro.tenant_id AND order_status = '1') = 0 THEN 0 " + + " ELSE COUNT(*) * 100.0 / (SELECT COUNT(*) FROM wms_return_order WHERE tenant_id = ro.tenant_id AND order_status = '1') " + + " END AS DECIMAL(10,2)) AS orderCountRatio, " + + " CAST(CASE " + + " WHEN (SELECT SUM(return_amount) FROM wms_return_order WHERE tenant_id = ro.tenant_id AND order_status = '1') = 0 OR (SELECT SUM(return_amount) FROM wms_return_order WHERE tenant_id = ro.tenant_id AND order_status = '1') IS NULL THEN 0 " + + " ELSE SUM(ro.return_amount) * 100.0 / (SELECT SUM(return_amount) FROM wms_return_order WHERE tenant_id = ro.tenant_id AND order_status = '1') " + + " END AS DECIMAL(10,2)) AS amountRatio, " + + " mi.material_name AS materialName, " + + " mc.material_category_name AS materialCategoryName, " + + " mi.material_code AS materialCode " + + "FROM wms_return_order ro " + + "INNER JOIN base_material_info_copy1 mi ON ro.material_id = mi.material_id " + + "INNER JOIN base_material_category mc ON mi.material_category_id = mc.material_category_id " + + "WHERE ro.order_status = '1' " + + " AND (#{tenantId} IS NULL OR ro.tenant_id = #{tenantId}) " + + " AND (#{materialCategoryId} IS NULL OR mc.material_category_id = #{materialCategoryId}) " + + "GROUP BY ro.tenant_id, " + + " CASE " + + " WHEN ro.return_reason LIKE '%质量%' OR ro.return_reason LIKE '%不合格%' THEN '质量问题' " + + " WHEN ro.return_reason LIKE '%订单%' OR ro.return_reason LIKE '%变更%' THEN '订单变更' " + + " WHEN ro.return_reason LIKE '%损坏%' OR ro.return_reason LIKE '%破损%' THEN '物料损坏' " + + " WHEN ro.return_reason LIKE '%过期%' OR ro.return_reason LIKE '%超期%' THEN '过期物料' " + + " ELSE ro.return_reason " + + " END, " + + " mi.material_name, " + + " mc.material_category_name, " + + " mi.material_code " + + "ORDER BY ro.tenant_id, totalReturnAmount DESC") + List selectReturnReasonAnalysis(@Param("tenantId") String tenantId, @Param("materialCategoryId") Long materialCategoryId); - /** * 查询库存变动趋势分析报表 */ @@ -99,7 +107,7 @@ public interface WmsReportMapper { "GROUP BY inv.tenant_id, inv.material_id, mi.material_code, mi.material_name, mc.material_category_name, " + " instock_data.weekInstockQty, outstock_data.weekOutstockQty " + "ORDER BY inv.tenant_id, currentInventoryQty DESC") - List selectInventoryTrendAnalysis(@Param("tenantId") String tenantId, + List selectInventoryTrendAnalysis(@Param("tenantId") String tenantId, @Param("materialCategoryId") Long materialCategoryId); /** @@ -118,7 +126,6 @@ public interface WmsReportMapper { " CASE " + " WHEN SUM(inv.inventory_qty) < mi.min_stock_amount THEN '短缺预警' " + " WHEN SUM(inv.inventory_qty) > mi.max_stock_amount THEN '积压预警' " + - " WHEN SUM(inv.inventory_qty) < mi.safe_stock_amount THEN '低于安全库存' " + " ELSE '正常' " + " END AS alertStatus, " + " CASE " + @@ -142,7 +149,7 @@ public interface WmsReportMapper { " OR SUM(inv.inventory_qty) < mi.min_stock_amount " + " OR SUM(inv.inventory_qty) > mi.max_stock_amount " + "ORDER BY inv.tenant_id, alertStatus, differenceAmount DESC") - List selectSafetyStockAlert(@Param("tenantId") String tenantId, + List selectSafetyStockAlert(@Param("tenantId") String tenantId, @Param("materialCategoryId") Long materialCategoryId); /** @@ -219,7 +226,7 @@ public interface WmsReportMapper { " w.warehouse_name, " + " first_in.firstInstockTime " + "ORDER BY inv.tenant_id, stagnantDays DESC, stagnantInventoryQty DESC") - List selectStagnantInventory(@Param("tenantId") String tenantId, + List selectStagnantInventory(@Param("tenantId") String tenantId, @Param("materialCategoryId") Long materialCategoryId); /** @@ -270,7 +277,7 @@ public interface WmsReportMapper { " AND (#{tenantId} IS NULL OR ic.tenant_id = #{tenantId}) " + " AND (#{materialCategoryId} IS NULL OR mc.material_category_id = #{materialCategoryId}) " + "ORDER BY ic.tenant_id, ic.check_code, differenceRate DESC") - List selectInventoryDifference(@Param("tenantId") String tenantId, + List selectInventoryDifference(@Param("tenantId") String tenantId, @Param("materialCategoryId") Long materialCategoryId); /** @@ -336,6 +343,6 @@ public interface WmsReportMapper { ") base_data " + "WHERE base_data.beginInventoryQty > 0 OR base_data.endInventoryQty > 0 OR base_data.monthOutstockQty > 0 " + "ORDER BY base_data.tenantId, inventoryTurnoverRate DESC") - List selectInventoryTurnover(@Param("tenantId") String tenantId, + List selectInventoryTurnover(@Param("tenantId") String tenantId, @Param("materialCategoryId") Long materialCategoryId); -} \ No newline at end of file +}