|
|
|
@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.util.*;
|
|
|
|
@ -105,11 +107,15 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
|
|
|
|
|
}
|
|
|
|
|
resultModel.setWorkCenterCompletedQuantity(workCenterCompletedQuantity);
|
|
|
|
|
resultModel.setWorkCenterPlannedQuantity(workCenterPlannedQuantity);
|
|
|
|
|
double workCenterCompletionRate;
|
|
|
|
|
if (workCenterCompletedQuantity == 0 || workCenterPlannedQuantity == 0) {
|
|
|
|
|
resultModel.setWorkCenterCompletionRate(0D);
|
|
|
|
|
workCenterCompletionRate = 0;
|
|
|
|
|
}else {
|
|
|
|
|
resultModel.setWorkCenterCompletionRate(workCenterCompletedQuantity * 100 / workCenterPlannedQuantity);
|
|
|
|
|
workCenterCompletionRate = workCenterCompletedQuantity * 100 / workCenterPlannedQuantity;
|
|
|
|
|
}
|
|
|
|
|
BigDecimal bd = new BigDecimal(workCenterCompletionRate);
|
|
|
|
|
bd = bd.setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
resultModel.setWorkCenterCompletionRate(bd);
|
|
|
|
|
return resultModel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -129,11 +135,18 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
|
|
|
|
|
resultModel.setPartDescription(mesWorkOrder.getPartName());
|
|
|
|
|
resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty());
|
|
|
|
|
resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty());
|
|
|
|
|
double workOrderFirstPassRate;
|
|
|
|
|
if (resultModel.getWorkOrderCompletedQuantity() == 0 || resultModel.getWorkOrderPlannedQuantity() == 0) {
|
|
|
|
|
resultModel.setWorkOrderFirstPassRate(0D);
|
|
|
|
|
workOrderFirstPassRate = 0;
|
|
|
|
|
}else {
|
|
|
|
|
resultModel.setWorkOrderFirstPassRate(resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity());
|
|
|
|
|
workOrderFirstPassRate = resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity();
|
|
|
|
|
if (workOrderFirstPassRate > 100) {
|
|
|
|
|
workOrderFirstPassRate = 100;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BigDecimal bd = new BigDecimal(workOrderFirstPassRate);
|
|
|
|
|
bd = bd.setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
resultModel.setWorkOrderFirstPassRate(bd);
|
|
|
|
|
resultModelList.add(resultModel);
|
|
|
|
|
}
|
|
|
|
|
return resultModelList;
|
|
|
|
@ -146,12 +159,11 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCodeList().get(0), "workCenterCode", ddlPackBean);
|
|
|
|
|
MesWorkCenter mesWorkCenter = mesWorkCenterRepository.getByProperty(ddlPackBean);
|
|
|
|
|
String jph;
|
|
|
|
|
if (Objects.isNull(mesWorkCenter) || StringUtils.isEmpty(mesWorkCenter.getJph())) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail(conditionModel.getWorkCenterCodeList().get(0) + " 产线未维护有效的产线JPH信息!")
|
|
|
|
|
.build();
|
|
|
|
|
jph = "0";
|
|
|
|
|
}else {
|
|
|
|
|
jph = mesWorkCenter.getJph();
|
|
|
|
|
}
|
|
|
|
|
//获取并汇总当前产线在当前时间前12个小时的每个小时时间段内工单的完成数
|
|
|
|
|
Map<String, Map<String, String>> timeZoneMap = getLastHoursTimeZoneMap(NUM);
|
|
|
|
@ -169,7 +181,7 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
|
|
|
|
|
//横坐标赋值
|
|
|
|
|
resultModel.setUnitHourCompletionRateTimePeriod(timeZone);
|
|
|
|
|
//目标值
|
|
|
|
|
resultModel.setUnitHourCompletionRateTargetValue(Double.valueOf(mesWorkCenter.getJph()));
|
|
|
|
|
resultModel.setUnitHourCompletionRateTargetValue(Double.valueOf(jph));
|
|
|
|
|
if (CollectionUtils.isEmpty(mesProductOffLineQueryResultList)) {
|
|
|
|
|
resultModel.setUnitHourCompletionRate(0);
|
|
|
|
|
}else {
|
|
|
|
@ -214,17 +226,17 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
|
|
|
|
|
collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getQcStatus));
|
|
|
|
|
if (CollectionUtils.isEmpty(nowResultList)
|
|
|
|
|
|| !resultModelByQcStatusMap.containsKey(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue())) {
|
|
|
|
|
//当前时间段没有生产加工记录或者没有合格的生产加工条码
|
|
|
|
|
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(0D);
|
|
|
|
|
//当前时间段没有生产加工记录或者没有合格的生产加工条码时返回值置null(保证数据为0时瀑布图连线的垂直)
|
|
|
|
|
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(null);
|
|
|
|
|
}else {
|
|
|
|
|
double workCenterFirstTimeOfflineQualificationRate = (
|
|
|
|
|
resultModelByQcStatusMap.get(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).size() * 100
|
|
|
|
|
/ nowResultList.size());
|
|
|
|
|
double workCenterFirstTimeOfflineQualificationRate = resultModelByQcStatusMap.get(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).size() * 100 / nowResultList.size();
|
|
|
|
|
//最大值只允许100
|
|
|
|
|
if (workCenterFirstTimeOfflineQualificationRate > 100) {
|
|
|
|
|
workCenterFirstTimeOfflineQualificationRate = 100;
|
|
|
|
|
}
|
|
|
|
|
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(workCenterFirstTimeOfflineQualificationRate);
|
|
|
|
|
BigDecimal bd = new BigDecimal(workCenterFirstTimeOfflineQualificationRate);
|
|
|
|
|
bd = bd.setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(bd);
|
|
|
|
|
}
|
|
|
|
|
resultModelList.add(resultModel);
|
|
|
|
|
}
|
|
|
|
@ -277,6 +289,9 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
|
|
|
|
|
//最新的点检单结果为 NOK
|
|
|
|
|
//结果设置为“异常”
|
|
|
|
|
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue());
|
|
|
|
|
}else {
|
|
|
|
|
//其它结果设置为“异常”
|
|
|
|
|
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue());
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
//不存在该种点检类型的点检单数据
|
|
|
|
@ -296,10 +311,10 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
|
|
|
|
|
@Override
|
|
|
|
|
public MesWorkCenterBoardResultModel queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel) {
|
|
|
|
|
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
|
|
|
|
|
//获取查询时间区间
|
|
|
|
|
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
|
|
|
|
|
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
|
|
|
|
|
resultModel.setAbnormalDowntime("00:45");
|
|
|
|
|
//获取查询时间区间(需求未明确,暂时注释,返回固定值)
|
|
|
|
|
// Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
|
|
|
|
|
// conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
|
|
|
|
|
resultModel.setAbnormalDowntime("00:00");
|
|
|
|
|
return resultModel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|