diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java index bc394721..e34aee83 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java @@ -229,4 +229,5 @@ public class ProdPlanInfoController extends BaseController { public void exportMonitor(ProdPlanInfoBo bo, HttpServletResponse response) { prodPlanInfoService.exportMonitor(bo, response); } + } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdReportController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdReportController.java index 3c2cfa38..831efd34 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdReportController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdReportController.java @@ -123,6 +123,7 @@ public class ProdReportController extends BaseController { return R.ok(vos); } + /** * 报工工时数据报表 */ @@ -174,11 +175,21 @@ public class ProdReportController extends BaseController { public void wipTrackingReportExport(@RequestParam(required = false) Map hashMap, HttpServletResponse response) { // 获取报表数据 List list = prodReportService.wipTrackingReportList(hashMap); - + // 转换为导出专用VO List exportList = prodReportService.convertToExportVo(list); - + // 使用EasyExcel导出,保持与页面相同的样式和数据 ExcelUtil.exportExcel(exportList, "在制品跟踪报表", WipTrackingReportExportVo.class, response); } + + /** + * 小时产量统计(按结束时间小时分桶) + */ + @GetMapping("/hourlyOutputByHour") + public R>> hourlyOutputByHour(@RequestParam(required = false) Map hashMap) { + List> vos = prodReportService.hourlyOutputByHour(hashMap); + return R.ok(vos); + } + } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdReportMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdReportMapper.java index 1461383b..96aa7b25 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdReportMapper.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdReportMapper.java @@ -131,4 +131,9 @@ public interface ProdReportMapper { */ List getOrdersProcessProgressBatch(@Param("productOrderIds") List productOrderIds, @Param("planTableName") String planTableName); + + // 新增:小时产量统计(按结束时间小时分桶) + List> hourlyOutputByHour(@Param("map") Map hashMap, + @Param("detailTableName") String detailTableName, + @Param("planTableName") String planTableName); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdReportService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdReportService.java index 0261d072..133f0e54 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdReportService.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdReportService.java @@ -129,4 +129,11 @@ public interface IProdReportService { */ List convertToExportVo(List reportList); + /** + * 小时产量统计(按结束时间小时分桶) + * @param hashMap 查询条件:beginDate/endDate、processId、machineId、shiftId、classTeamId、materialName + * @return 列表:productionDate、hourSlot、productionQuantity、qualifiedQuantity、unqualifiedQuantity + */ + List> hourlyOutputByHour(Map hashMap); + } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java index 9a48f369..38912238 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java @@ -84,6 +84,7 @@ public class ProdProductPlanDetailServiceImpl implements IProdProductPlanDetailS Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdProductPlanDetail.class) .selectAll(ProdProductPlanDetail.class) + // //工装连表查询名称 // .select(BaseToolingInfo::getToolingName) // .leftJoin(BaseToolingInfo.class, BaseToolingInfo::getToolingId, ProdProductPlanDetail::getToolingId) @@ -99,7 +100,6 @@ public class ProdProductPlanDetailServiceImpl implements IProdProductPlanDetailS /* .select(ProdShiftChange::) .leftJoin(ProdShiftChange.class, ProdShiftChange::getShiftChangeId, ProdProductPlanDetail::getShiftChangeId)*/ - .eq(bo.getPlanDetailId() != null, ProdProductPlanDetail::getPlanDetailId, bo.getPlanDetailId()) .eq(StringUtils.isNotBlank(bo.getPlanDetailCode()), ProdProductPlanDetail::getPlanDetailCode, bo.getPlanDetailCode()) .eq(bo.getPlanId() != null, ProdProductPlanDetail::getPlanId, bo.getPlanId()) diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdReportServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdReportServiceImpl.java index 6432474f..963f234f 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdReportServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdReportServiceImpl.java @@ -553,4 +553,18 @@ public class ProdReportServiceImpl implements IProdReportService { return processIds; } + + /** + * 小时产量统计(按结束时间小时分桶) + * @param hashMap 查询条件 + */ + @Override + public List> hourlyOutputByHour(Map hashMap) { + Long processId = Long.parseLong(String.valueOf(hashMap.get("processId"))); + String detailTable = getPlanDetailTableNameByProcessId(processId); + String planTable = getPlanInfoTableNameByProcessId(processId); + return prodReportMapper.hourlyOutputByHour(hashMap, detailTable, planTable); + } + + } diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdReportMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdReportMapper.xml index 9e4c199e..096411ca 100644 --- a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdReportMapper.xml +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdReportMapper.xml @@ -217,8 +217,8 @@ FORMAT(ppd.create_time, 'yyyy-MM-dd') BETWEEN #{map.beginDate} AND #{map.endDate} + AND ppi.process_id = #{map.processId} + --> AND ppi.release_id = #{map.machineId} @@ -321,7 +321,7 @@ ), ProcessStats AS ( -- 统计每个订单的工序进度信息,仅统计已过滤的订单范围(UNION ALL 提升性能) - SELECT + SELECT ap.product_order_id, ap.tenant_id, COUNT(*) AS totalProcessCount, @@ -336,7 +336,7 @@ SUM(CASE WHEN ap.plan_status = '2' THEN ISNULL(ap.plan_amount - ap.complete_amount, 0) * ap.process_order ELSE 0 END) AS wipWeightedSum FROM ( -- 半制品工序(prod_plan_info_2) - SELECT + SELECT p2.product_order_id, p2.tenant_id, p2.process_id, @@ -349,11 +349,11 @@ LEFT JOIN prod_base_process_info pr2 ON pr2.process_id = p2.process_id INNER JOIN Orders ord ON ord.product_order_id = p2.product_order_id AND ord.tenant_id = p2.tenant_id WHERE p2.product_order_id IS NOT NULL - + UNION ALL - + -- 成型工序(prod_plan_info_3) - SELECT + SELECT p3.product_order_id, p3.tenant_id, p3.process_id, @@ -366,11 +366,11 @@ LEFT JOIN prod_base_process_info pr3 ON pr3.process_id = p3.process_id INNER JOIN Orders ord ON ord.product_order_id = p3.product_order_id AND ord.tenant_id = p3.tenant_id WHERE p3.product_order_id IS NOT NULL - + UNION ALL - + -- 硫化工序(prod_plan_info_4) - SELECT + SELECT p4.product_order_id, p4.tenant_id, p4.process_id, @@ -406,18 +406,18 @@ -- 整体进度计算:已完成数量占比 + 在制品进度占比 CONCAT( CAST( - CASE + CASE WHEN o.plan_amount > 0 AND ps.totalProcessCount > 0 THEN ( -- 已完成数量占比 (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 + -- 在制品进度占比:(在制数量/计划总数量) * (当前工序位置/总工序数) - (CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * + (CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * (CAST(ISNULL(ps.maxCompletedOrder, 0) + 1 AS DECIMAL(18,6)) / CAST(ps.totalProcessCount AS DECIMAL(18,6))) * 100 ) WHEN o.plan_amount > 0 THEN (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 - ELSE 0 + ELSE 0 END AS DECIMAL(10,2)), '%' ) AS overallProgress, @@ -431,18 +431,18 @@ CAST(ISNULL(ps.wipWeightedSum, 0) AS DECIMAL(18,2)) AS wipWeightedSum, -- 数值型整体进度 CAST( - CASE + CASE WHEN o.plan_amount > 0 AND ps.totalProcessCount > 0 THEN ( -- 已完成数量占比 (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 + -- 在制品进度占比 - (CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * + (CAST(ISNULL(o.plan_amount - o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * (CAST(ISNULL(ps.maxCompletedOrder, 0) + 1 AS DECIMAL(18,6)) / CAST(ps.totalProcessCount AS DECIMAL(18,6))) * 100 ) WHEN o.plan_amount > 0 THEN (CAST(ISNULL(o.complete_amount,0) AS DECIMAL(18,6)) / CAST(o.plan_amount AS DECIMAL(18,6))) * 100 - ELSE 0 + ELSE 0 END AS DECIMAL(10,2)) AS overallProgressNum FROM prod_order_info o @@ -547,4 +547,44 @@ + + +