生产日报表优化

master
杨万里 2 months ago
parent 82b3cbd5c9
commit 6bc5a28923

@ -10,6 +10,15 @@ public class QuantityDto {
private String machineCode; private String machineCode;
private BigDecimal totalWorkTime; private BigDecimal totalWorkTime;
private String board; private String board;
private String cegci;
public String getCegci() {
return cegci;
}
public void setCegci(String cegci) {
this.cegci = cegci;
}
public String getBoard() { public String getBoard() {
return board; return board;

@ -1,7 +1,6 @@
package com.op.mes.service.impl; package com.op.mes.service.impl;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -11,9 +10,7 @@ import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.alibaba.csp.sentinel.util.StringUtil;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists; import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.op.common.core.domain.R; 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.dto.SysFactoryDto;
import com.op.mes.domain.vo.DynamicColumnVo; import com.op.mes.domain.vo.DynamicColumnVo;
import com.op.mes.domain.vo.MesDailyReportVo; 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.domain.vo.MesMonthReportVo;
import com.op.mes.service.IWCSInterfaceService; import com.op.mes.service.IWCSInterfaceService;
import com.op.system.api.RemoteSapService; import com.op.system.api.RemoteSapService;
@ -460,20 +456,10 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService {
// dto.setUseManRemark(mesDailyReportVos.getUseManRemark().replaceAll(";+", " ")); // dto.setUseManRemark(mesDailyReportVos.getUseManRemark().replaceAll(";+", " "));
// } // }
// } // }
//查询订单报工信息,并查询订单层级
QuantityDto parentMesReport = mesReportWorkMapper.getRealQuantity(quantityDto); QuantityDto parentMesReport = mesReportWorkMapper.getRealQuantity(quantityDto);
QuantityDto sonMesReport = mesReportWorkMapper.getSumQuantity(quantityDto); QuantityDto sonMesReport = new QuantityDto();
if(sonMesReport == null){//单层工单的情况 QuantityDto threeMesReport = new QuantityDto();
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);
}
// 产量 // 产量
Long sumQua = 0L; Long sumQua = 0L;
// 实际产量 // 实际产量
@ -482,99 +468,193 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService {
BigDecimal workTime = BigDecimal.ZERO; BigDecimal workTime = BigDecimal.ZERO;
// 实际用人 // 实际用人
BigDecimal useMan = BigDecimal.ZERO; BigDecimal useMan = BigDecimal.ZERO;
if (sonMesReport != null && sonMesReport != null) { BigDecimal totalWorkTime = BigDecimal.ZERO;
sumQua = sonMesReport.getQuantityFeedbackSum(); //单层订单
if ("1".equals(parentMesReport.getCegci())){
sumQua = parentMesReport.getQuantityFeedbackSum();
realQua = parentMesReport.getQuantityFeedbackSum(); realQua = parentMesReport.getQuantityFeedbackSum();
workTime = sonMesReport.getWorkTime(); workTime = parentMesReport.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());
}
dto.setQuantityAct(String.valueOf(sumQua)); dto.setQuantityAct(String.valueOf(sumQua));
dto.setQuantityFeedback(String.valueOf(realQua)); dto.setQuantityFeedback(String.valueOf(realQua));
dto.setWorkTime(workTime); 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.setUseMan(useMan);
// 计算规格 totalWorkTime = sonMesReport.getTotalWorkTime().add(parentMesReport.getTotalWorkTime());
//dto.setSpec(sumQua / realQua); }else if ("3".equals(parentMesReport.getCegci())){
// 订单完成率 实际产量/计划产量 sonMesReport =mesReportWorkMapper.getSumQuantity(quantityDto);
BigDecimal completeRate = new BigDecimal(realQua) quantityDto.setWorkorderCode(sonMesReport.getWorkorderCode());
.multiply(new BigDecimal("100.00")) threeMesReport=mesReportWorkMapper.getSumQuantity(quantityDto);
.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%");
}
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%");
// }
//
// }
} }

@ -877,15 +877,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="getRealQuantity" resultType="com.op.mes.domain.dto.QuantityDto"> <select id="getRealQuantity" resultType="com.op.mes.domain.dto.QuantityDto">
select sum(quantity_feedback) quantityFeedbackSum, select
ROUND(sum(work_time*use_man)/sum(work_time), 2) useMan, mrw.workorder_code,
-- sum(use_man) useMan, sum(quantity_feedback) quantityFeedbackSum,
SUM ( work_time * use_man ) totalWorkTime ROUND(sum(work_time*use_man)/sum(work_time), 2) useMan,
from mes_report_work SUM(work_time) workTime,
where workorder_code = #{workorderCode} and del_flag = '0' and machine_code = #{machineCode} SUM ( work_time * use_man ) totalWorkTime,
cegci
from mes_report_work mrw
LEFT JOIN pro_order po ON LEFT(mrw.workorder_code, 12) = po.order_code
where mrw.workorder_code = #{workorderCode} and mrw.del_flag = '0' and machine_code = #{machineCode}
<if test="board == null"> <if test="board == null">
and upload_status = '1' and mrw.upload_status = '1'
</if> </if>
GROUP BY
cegci,
mrw.workorder_code
</select> </select>
<select id="getSumQuantity" resultType="com.op.mes.domain.dto.QuantityDto"> <select id="getSumQuantity" resultType="com.op.mes.domain.dto.QuantityDto">

Loading…
Cancel
Save