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"