产线看板-工单完成情况-当班一次合格率汇总逻辑变更

tags/yfai-mes-ext-v1.5
logic.fang 9 months ago
parent 2939ac3b69
commit abcbb98767

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import java.util.List;
import java.util.Set;
/**
* @Description : -
@ -39,8 +40,9 @@ public interface IMesYfBoardDao {
* @param organizeCode
* @param startTime
* @param endTime
* @param workOrderNoSet
* @return
*/
List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime);
List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set<String> workOrderNoSet);
}

@ -12,6 +12,7 @@ import org.springframework.util.CollectionUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
@ -71,12 +72,14 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
}
@Override
public List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime) {
//先查询生产加工表中指定时间区间、指定产线已加工完成的数据
public List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set<String> workOrderNoSet) {
//先查询生产加工表中指定时间区间、指定产线(指定工单)已加工完成的数据(过程条码,创建时间、工单号,物料号)
StringBuffer queryMesProductionRecordSql = new StringBuffer();
queryMesProductionRecordSql.append("select distinct new " + MesWorkCenterBoardResultModel.class.getName() +
queryMesProductionRecordSql.append("select new " + MesWorkCenterBoardResultModel.class.getName() +
"(serialNumber, " +
"createDatetime) " +
"createDatetime, " +
"workOrderNo, " +
"partNo) " +
"from MesProductionRecord " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
@ -85,6 +88,9 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
"and isComplete = :isComplete " +
"and createDatetime >= :startTime " +
"and createDatetime <= :endTime ");
if (!CollectionUtils.isEmpty(workOrderNoSet)) {
queryMesProductionRecordSql.append("and workOrderNo in (:workOrderNoSet) ");
}
Query mesProductionRecordQuery = entityManager.createQuery(queryMesProductionRecordSql.toString(), MesWorkCenterBoardResultModel.class);
mesProductionRecordQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
@ -93,13 +99,17 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
mesProductionRecordQuery.setParameter("isComplete", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("startTime", startTime);
mesProductionRecordQuery.setParameter("endTime", endTime);
if (!CollectionUtils.isEmpty(workOrderNoSet)) {
mesProductionRecordQuery.setParameter("workOrderNoSet", workOrderNoSet);
}
List<MesWorkCenterBoardResultModel> productionRecordQueryResultList = mesProductionRecordQuery.getResultList();
if (!CollectionUtils.isEmpty(productionRecordQueryResultList)) {
//取出所有过程条码
List<String> serialNumberList = productionRecordQueryResultList.
stream().map(MesWorkCenterBoardResultModel::getSerialNumber).collect(Collectors.toList());
//查询合格的过程条码与对应的物料号 拼接后的结果
StringBuffer queryMesProduceSnSql = new StringBuffer();
queryMesProduceSnSql.append("select distinct serialNumber " +
queryMesProduceSnSql.append("select CONCAT(serial_number,part_no) " +
"from MesProduceSn " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
@ -114,7 +124,7 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
mesProduceSnQuery.setParameter("serialNumberList", serialNumberList);
List<String> resultList = mesProduceSnQuery.getResultList();
for (MesWorkCenterBoardResultModel resultModel : productionRecordQueryResultList) {
if (resultList.contains(resultModel.getSerialNumber())) {
if (!CollectionUtils.isEmpty(resultList) && resultList.contains(resultModel.getSerialNumber() + resultModel.getPartNo())) {
resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
}else {
resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());

@ -127,6 +127,18 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
//查询工单
List<MesWorkOrder> mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel);
if (!CollectionUtils.isEmpty(mesWorkOrderList)) {
Set<String> workOrderNoSet = mesWorkOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toSet());
//查询当前产线在指定时间段内加工完成的工单条码数据
List<MesWorkCenterBoardResultModel> mesProductOffLineQueryResultList = mesYfBoardDao.queryCompletedSnInfo(
conditionModel.getWorkCenterCodeList().get(0),
conditionModel.getOrganizeCode(),
timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(START_TIME),
timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(END_TIME),
workOrderNoSet);
//查询结果按照工单号分组
Map<String, List<MesWorkCenterBoardResultModel>> workOrderAndSnDataByOrderNoMap =
mesProductOffLineQueryResultList.stream().collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getWorkOrderNo));
//封装汇总数据
for (MesWorkOrder mesWorkOrder : mesWorkOrderList) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
@ -135,11 +147,15 @@ 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) {
workOrderFirstPassRate = 0;
List<MesWorkCenterBoardResultModel> resultModels = workOrderAndSnDataByOrderNoMap.get(mesWorkOrder.getWorkOrderNo());
if (CollectionUtils.isEmpty(resultModels)) {
workOrderFirstPassRate = 100;
}else {
workOrderFirstPassRate = resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity();
//合格数
long count = resultModels.stream().filter(model -> model.getQcStatus() == MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).count();
workOrderFirstPassRate = count * 100 / resultModels.size();
if (workOrderFirstPassRate > 100) {
workOrderFirstPassRate = 100;
}
@ -149,6 +165,7 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
resultModel.setWorkOrderFirstPassRate(bd);
resultModelList.add(resultModel);
}
}
return resultModelList;
}
@ -208,7 +225,8 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
conditionModel.getWorkCenterCodeList().get(0),
conditionModel.getOrganizeCode(),
timeZoneMap.get(START_TIME).get(START_TIME),
timeZoneMap.get(END_TIME).get(END_TIME));
timeZoneMap.get(END_TIME).get(END_TIME),
null);
//依次汇总每个时间段的数据
for (String timeZone : timeZoneMap.keySet()) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();

@ -110,9 +110,11 @@ public class MesWorkCenterBoardResultModel {
public MesWorkCenterBoardResultModel() {
}
public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime) {
public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime, String workOrderNo, String partNo) {
this.serialNumber = serialNumber;
this.createDateTime = createDateTime;
this.workOrderNo = workOrderNo;
this.partNo = partNo;
}
}

Loading…
Cancel
Save