生产日报表优化2

master
杨万里 2 months ago
parent 6bc5a28923
commit 3f40e94671

@ -470,89 +470,92 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService {
BigDecimal useMan = BigDecimal.ZERO;
BigDecimal totalWorkTime = BigDecimal.ZERO;
//单层订单
if ("1".equals(parentMesReport.getCegci())){
sumQua = parentMesReport.getQuantityFeedbackSum();
realQua = parentMesReport.getQuantityFeedbackSum();
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);
totalWorkTime = sonMesReport.getTotalWorkTime().add(parentMesReport.getTotalWorkTime());
}else if ("3".equals(parentMesReport.getCegci())){
sonMesReport =mesReportWorkMapper.getSumQuantity(quantityDto);
quantityDto.setWorkorderCode(sonMesReport.getWorkorderCode());
threeMesReport=mesReportWorkMapper.getSumQuantity(quantityDto);
if (parentMesReport !=null){
if ("1".equals(parentMesReport.getCegci())){
sumQua = parentMesReport.getQuantityFeedbackSum();
realQua = parentMesReport.getQuantityFeedbackSum();
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);
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
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(manAvgStandard,2,BigDecimal.ROUND_HALF_UP);
dto.setManAvgDo(manAvgDo.toString()+"%");
}else{
dto.setManAvgDo("0%");
.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);

@ -878,15 +878,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getRealQuantity" resultType="com.op.mes.domain.dto.QuantityDto">
select
mrw.workorder_code,
mrw.workorder_code workorderCode,
sum(quantity_feedback) quantityFeedbackSum,
ROUND(sum(work_time*use_man)/sum(work_time), 2) useMan,
SUM(work_time) workTime,
SUM ( work_time * use_man ) totalWorkTime,
cegci
cegci 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}
where mrw.workorder_code = #{workorderCode}
and mrw.del_flag = '0'
and mrw.machine_code = #{machineCode}
<if test="board == null">
and mrw.upload_status = '1'
</if>

Loading…
Cancel
Save