From 6bc5a2892375768f3355e0c487c3c7381c768518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E4=B8=87=E9=87=8C?= <1726150332@qq.com> Date: Wed, 15 Oct 2025 17:16:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E6=97=A5=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/op/mes/domain/dto/QuantityDto.java | 9 + .../impl/MesReportWorkServiceImpl.java | 284 +++++++++++------- .../mapper/mes/MesReportWorkMapper.xml | 21 +- 3 files changed, 205 insertions(+), 109 deletions(-) diff --git a/op-modules/op-mes/src/main/java/com/op/mes/domain/dto/QuantityDto.java b/op-modules/op-mes/src/main/java/com/op/mes/domain/dto/QuantityDto.java index 948fc7262..47ef97dfb 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/domain/dto/QuantityDto.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/domain/dto/QuantityDto.java @@ -10,6 +10,15 @@ public class QuantityDto { private String machineCode; private BigDecimal totalWorkTime; private String board; + private String cegci; + + public String getCegci() { + return cegci; + } + + public void setCegci(String cegci) { + this.cegci = cegci; + } public String getBoard() { return board; diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java index a4221a760..8272eb845 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java @@ -1,7 +1,6 @@ package com.op.mes.service.impl; import java.math.BigDecimal; -import java.math.RoundingMode; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -11,9 +10,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; -import com.alibaba.csp.sentinel.util.StringUtil; import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; import com.alibaba.nacos.shaded.com.google.common.collect.Lists; import com.baomidou.dynamic.datasource.annotation.DS; import com.op.common.core.domain.R; @@ -28,7 +25,6 @@ import com.op.mes.domain.dto.QuantityDto; import com.op.mes.domain.dto.SysFactoryDto; import com.op.mes.domain.vo.DynamicColumnVo; import com.op.mes.domain.vo.MesDailyReportVo; -import com.op.mes.domain.vo.MesDailyReportVos; import com.op.mes.domain.vo.MesMonthReportVo; import com.op.mes.service.IWCSInterfaceService; import com.op.system.api.RemoteSapService; @@ -460,20 +456,10 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService { // dto.setUseManRemark(mesDailyReportVos.getUseManRemark().replaceAll(";+", " ")); // } // } + //查询订单报工信息,并查询订单层级 QuantityDto parentMesReport = mesReportWorkMapper.getRealQuantity(quantityDto); - QuantityDto sonMesReport = mesReportWorkMapper.getSumQuantity(quantityDto); - if(sonMesReport == null){//单层工单的情况 - sonMesReport = mesReportWorkMapper.getSumQuantityOne(quantityDto); - } - //三层订单 - QuantityDto threeMesReport =new QuantityDto(); - if (sonMesReport != null ){ - QuantityDto quantityDtothree = new QuantityDto(); - quantityDtothree.setWorkorderCode(sonMesReport.getWorkorderCode()); - quantityDtothree.setMachineCode(machineCode); - threeMesReport = mesReportWorkMapper.getSumQuantity(quantityDtothree); - } - + QuantityDto sonMesReport = new QuantityDto(); + QuantityDto threeMesReport = new QuantityDto(); // 产量 Long sumQua = 0L; // 实际产量 @@ -482,99 +468,193 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService { BigDecimal workTime = BigDecimal.ZERO; // 实际用人 BigDecimal useMan = BigDecimal.ZERO; - if (sonMesReport != null && sonMesReport != null) { - sumQua = sonMesReport.getQuantityFeedbackSum(); + BigDecimal totalWorkTime = BigDecimal.ZERO; + //单层订单 + if ("1".equals(parentMesReport.getCegci())){ + sumQua = parentMesReport.getQuantityFeedbackSum(); realQua = parentMesReport.getQuantityFeedbackSum(); - workTime = sonMesReport.getWorkTime(); - useMan = BigDecimal.ZERO; - if (parentMesReport.getUseMan() != null ){ - useMan = sonMesReport.getUseMan().add(parentMesReport.getUseMan()); - } - if (sonMesReport.getUseMan() != null ){ - useMan = sonMesReport.getUseMan().add(parentMesReport.getUseMan()); - } -// if(sonMesReport.getUseMan().compareTo(parentMesReport.getUseMan()) == 0){ -// useMan=sonMesReport.getUseMan(); -// } - // 若 threeMesReport 不为空,则叠加其 useMan 值 - if (threeMesReport != null && threeMesReport.getUseMan() != null) { - useMan = useMan.add(threeMesReport.getUseMan()); - } + workTime = parentMesReport.getWorkTime(); + //计算 dto.setQuantityAct(String.valueOf(sumQua)); dto.setQuantityFeedback(String.valueOf(realQua)); dto.setWorkTime(workTime); //实际用人 + dto.setUseMan(parentMesReport.getUseMan()); + totalWorkTime=parentMesReport.getTotalWorkTime(); + }else if ("2".equals(parentMesReport.getCegci())){ + sonMesReport =mesReportWorkMapper.getSumQuantity(quantityDto); + realQua = parentMesReport.getQuantityFeedbackSum(); + workTime = parentMesReport.getWorkTime(); + dto.setQuantityAct(String.valueOf(sonMesReport.getQuantityFeedbackSum())); + dto.setQuantityFeedback(String.valueOf(realQua)); + dto.setWorkTime(workTime); + //实际用人 + useMan = sonMesReport.getUseMan().add(parentMesReport.getUseMan()); dto.setUseMan(useMan); - // 计算规格 - //dto.setSpec(sumQua / realQua); - // 订单完成率 实际产量/计划产量 - BigDecimal completeRate = new BigDecimal(realQua) - .multiply(new BigDecimal("100.00")) - .divide(new BigDecimal(dto.getQuantitySplit()),2,BigDecimal.ROUND_HALF_UP); - dto.setCompleteRate(completeRate.toString()+"%"); - //标准工时=母单数量*规格/产线标准效率 - BigDecimal workTimeStandard = BigDecimal.ZERO; - if(dto.getEfficiency() != null&&dto.getEfficiency().compareTo(BigDecimal.ZERO)!=0){ - workTimeStandard = new BigDecimal(realQua) - .multiply(new BigDecimal(dto.getSpec())) - .divide(dto.getEfficiency(),2,BigDecimal.ROUND_HALF_UP); - dto.setWorkTimeStandard(workTimeStandard.toString()); - }else{ - dto.setWorkTimeStandard("-"); - } - - - // 产线效率 标准工时/实际工时 - BigDecimal productivity = workTimeStandard - .multiply(new BigDecimal("100.00")) - .divide(workTime,2,BigDecimal.ROUND_HALF_UP); - dto.setProductivity(productivity.toString()+"%"); - // 总工时 实际用人*实际工时 - - BigDecimal totalWorkTime = BigDecimal.ZERO; - //人数*工时 - - if (parentMesReport.getTotalWorkTime() != null){ - totalWorkTime = totalWorkTime.add(parentMesReport.getTotalWorkTime()); - } - - if (sonMesReport.getTotalWorkTime() != null){ - totalWorkTime = totalWorkTime.add(sonMesReport.getTotalWorkTime()); - } - - if (threeMesReport != null && threeMesReport.getTotalWorkTime() != null ){ - totalWorkTime = totalWorkTime.add(threeMesReport.getTotalWorkTime()); - } - - dto.setTotalWorkTime(totalWorkTime.toString()); - - - // 标准人均效率 实际产量/标准用人/标准工时 - BigDecimal manAvgStandard = null; - if(StringUtils.isNotBlank(dto.getManStandard())){ - manAvgStandard = new BigDecimal(realQua) - .divide(new BigDecimal(dto.getManStandard()),4,BigDecimal.ROUND_HALF_UP) - .divide(workTimeStandard,2,BigDecimal.ROUND_HALF_UP); - dto.setManAvgStandard(manAvgStandard.toString()); - }else{ - dto.setManAvgStandard("0"); - } - - // 实际人均效率 实际产量/总工时 - BigDecimal manAvgActual = new BigDecimal(realQua) - .divide(totalWorkTime,2,BigDecimal.ROUND_HALF_UP); - dto.setManAvgActual(manAvgActual.toString()); - // 人均效率达成率 实际人均效率/标准人均效率 - if(manAvgStandard!=null){ - BigDecimal manAvgDo = manAvgActual - .multiply(new BigDecimal("100.00")) - .divide(manAvgStandard,2,BigDecimal.ROUND_HALF_UP); - dto.setManAvgDo(manAvgDo.toString()+"%"); - }else{ - dto.setManAvgDo("0%"); - } + totalWorkTime = sonMesReport.getTotalWorkTime().add(parentMesReport.getTotalWorkTime()); + }else if ("3".equals(parentMesReport.getCegci())){ + sonMesReport =mesReportWorkMapper.getSumQuantity(quantityDto); + quantityDto.setWorkorderCode(sonMesReport.getWorkorderCode()); + threeMesReport=mesReportWorkMapper.getSumQuantity(quantityDto); + realQua = parentMesReport.getQuantityFeedbackSum(); + workTime = parentMesReport.getWorkTime(); + dto.setQuantityAct(String.valueOf(sonMesReport.getQuantityFeedbackSum())); + dto.setQuantityFeedback(String.valueOf(realQua)); + dto.setWorkTime(workTime); + //实际用人 + useMan = sonMesReport.getUseMan().add(parentMesReport.getUseMan()).add(threeMesReport.getUseMan()); + dto.setUseMan(useMan); + totalWorkTime = sonMesReport.getTotalWorkTime().add(parentMesReport.getTotalWorkTime()).add(threeMesReport.getTotalWorkTime()); } + dto.setTotalWorkTime(totalWorkTime.toString()); + // 订单完成率 实际产量/计划产量 + BigDecimal completeRate = new BigDecimal(realQua) + .multiply(new BigDecimal("100.00")) + .divide(new BigDecimal(dto.getQuantitySplit()),2,BigDecimal.ROUND_HALF_UP); + dto.setCompleteRate(completeRate.toString()+"%"); + + //标准工时=母单数量*规格/产线标准效率 + BigDecimal workTimeStandard = BigDecimal.ZERO; + if(dto.getEfficiency() != null&&dto.getEfficiency().compareTo(BigDecimal.ZERO)!=0){ + workTimeStandard = new BigDecimal(realQua) + .multiply(new BigDecimal(dto.getSpec())) + .divide(dto.getEfficiency(),2,BigDecimal.ROUND_HALF_UP); + dto.setWorkTimeStandard(workTimeStandard.toString()); + }else{ + dto.setWorkTimeStandard("-"); + } + // 产线效率 标准工时/实际工时 + BigDecimal productivity = workTimeStandard + .multiply(new BigDecimal("100.00")) + .divide(workTime,2,BigDecimal.ROUND_HALF_UP); + dto.setProductivity(productivity.toString()+"%"); + // 标准人均效率 实际产量/标准用人/标准工时 + BigDecimal manAvgStandard = null; + if(StringUtils.isNotBlank(dto.getManStandard())){ + manAvgStandard = new BigDecimal(realQua) + .divide(new BigDecimal(dto.getManStandard()),4,BigDecimal.ROUND_HALF_UP) + .divide(workTimeStandard,2,BigDecimal.ROUND_HALF_UP); + dto.setManAvgStandard(manAvgStandard.toString()); + }else{ + dto.setManAvgStandard("0"); + } + // 实际人均效率 实际产量/总工时 + BigDecimal manAvgActual = new BigDecimal(realQua) + .divide(totalWorkTime,2,BigDecimal.ROUND_HALF_UP); + dto.setManAvgActual(manAvgActual.toString()); + // 人均效率达成率 实际人均效率/标准人均效率 + if(manAvgStandard!=null){ + BigDecimal manAvgDo = manAvgActual + .multiply(new BigDecimal("100.00")) + .divide(manAvgStandard,2,BigDecimal.ROUND_HALF_UP); + dto.setManAvgDo(manAvgDo.toString()+"%"); + }else{ + dto.setManAvgDo("0%"); + } + +// QuantityDto sonMesReport = mesReportWorkMapper.getSumQuantity(quantityDto); +// if(sonMesReport == null){//单层工单的情况 +// sonMesReport = mesReportWorkMapper.getSumQuantityOne(quantityDto); +// } + //三层订单 +// QuantityDto threeMesReport =new QuantityDto(); +// if (sonMesReport != null ){ +// QuantityDto quantityDtothree = new QuantityDto(); +// quantityDtothree.setWorkorderCode(sonMesReport.getWorkorderCode()); +// quantityDtothree.setMachineCode(machineCode); +// threeMesReport = mesReportWorkMapper.getSumQuantity(quantityDtothree); +// } +// +// +// if (sonMesReport != null) { +// sumQua = sonMesReport.getQuantityFeedbackSum(); +// realQua = parentMesReport.getQuantityFeedbackSum(); +// workTime = sonMesReport.getWorkTime(); +// useMan = BigDecimal.ZERO; +// if (parentMesReport.getUseMan() != null ){ +// useMan = sonMesReport.getUseMan().add(parentMesReport.getUseMan()); +// } +// if (sonMesReport.getUseMan() != null ){ +// useMan = sonMesReport.getUseMan().add(parentMesReport.getUseMan()); +// } +// // 若 threeMesReport 不为空,则叠加其 useMan 值 +// if (threeMesReport != null && threeMesReport.getUseMan() != null) { +// useMan = useMan.add(threeMesReport.getUseMan()); +// } +// dto.setQuantityAct(String.valueOf(sumQua)); +// dto.setQuantityFeedback(String.valueOf(realQua)); +// dto.setWorkTime(workTime); +// //实际用人 +// dto.setUseMan(useMan); +// // 计算规格 +// //dto.setSpec(sumQua / realQua); +// // 订单完成率 实际产量/计划产量 +// BigDecimal completeRate = new BigDecimal(realQua) +// .multiply(new BigDecimal("100.00")) +// .divide(new BigDecimal(dto.getQuantitySplit()),2,BigDecimal.ROUND_HALF_UP); +// dto.setCompleteRate(completeRate.toString()+"%"); +// //标准工时=母单数量*规格/产线标准效率 +// BigDecimal workTimeStandard = BigDecimal.ZERO; +// if(dto.getEfficiency() != null&&dto.getEfficiency().compareTo(BigDecimal.ZERO)!=0){ +// workTimeStandard = new BigDecimal(realQua) +// .multiply(new BigDecimal(dto.getSpec())) +// .divide(dto.getEfficiency(),2,BigDecimal.ROUND_HALF_UP); +// dto.setWorkTimeStandard(workTimeStandard.toString()); +// }else{ +// dto.setWorkTimeStandard("-"); +// } +// +// // 产线效率 标准工时/实际工时 +// BigDecimal productivity = workTimeStandard +// .multiply(new BigDecimal("100.00")) +// .divide(workTime,2,BigDecimal.ROUND_HALF_UP); +// dto.setProductivity(productivity.toString()+"%"); +// // 总工时 实际用人*实际工时 +// +// BigDecimal totalWorkTime = BigDecimal.ZERO; +// //人数*工时 +// +// if (parentMesReport.getTotalWorkTime() != null){ +// totalWorkTime = totalWorkTime.add(parentMesReport.getTotalWorkTime()); +// } +// +// if (sonMesReport.getTotalWorkTime() != null){ +// totalWorkTime = totalWorkTime.add(sonMesReport.getTotalWorkTime()); +// } +// +// if (threeMesReport != null && threeMesReport.getTotalWorkTime() != null ){ +// totalWorkTime = totalWorkTime.add(threeMesReport.getTotalWorkTime()); +// } +// +// dto.setTotalWorkTime(totalWorkTime.toString()); +// +// // 标准人均效率 实际产量/标准用人/标准工时 +// BigDecimal manAvgStandard = null; +// if(StringUtils.isNotBlank(dto.getManStandard())){ +// manAvgStandard = new BigDecimal(realQua) +// .divide(new BigDecimal(dto.getManStandard()),4,BigDecimal.ROUND_HALF_UP) +// .divide(workTimeStandard,2,BigDecimal.ROUND_HALF_UP); +// dto.setManAvgStandard(manAvgStandard.toString()); +// }else{ +// dto.setManAvgStandard("0"); +// } +// +// // 实际人均效率 实际产量/总工时 +// BigDecimal manAvgActual = new BigDecimal(realQua) +// .divide(totalWorkTime,2,BigDecimal.ROUND_HALF_UP); +// dto.setManAvgActual(manAvgActual.toString()); +// // 人均效率达成率 实际人均效率/标准人均效率 +// if(manAvgStandard!=null){ +// BigDecimal manAvgDo = manAvgActual +// .multiply(new BigDecimal("100.00")) +// .divide(manAvgStandard,2,BigDecimal.ROUND_HALF_UP); +// dto.setManAvgDo(manAvgDo.toString()+"%"); +// }else{ +// dto.setManAvgDo("0%"); +// } +// +// } } diff --git a/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml b/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml index fcbc64652..6a37113a8 100644 --- a/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml +++ b/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml @@ -877,15 +877,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"