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

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 cn.estsh.i3plus.pojo.mes.bean.MesShift;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @Description : - * @Description : -
@ -39,8 +40,9 @@ public interface IMesYfBoardDao {
* @param organizeCode * @param organizeCode
* @param startTime * @param startTime
* @param endTime * @param endTime
* @param workOrderNoSet
* @return * @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.EntityManager;
import javax.persistence.Query; import javax.persistence.Query;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -71,12 +72,14 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
} }
@Override @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(); StringBuffer queryMesProductionRecordSql = new StringBuffer();
queryMesProductionRecordSql.append("select distinct new " + MesWorkCenterBoardResultModel.class.getName() + queryMesProductionRecordSql.append("select new " + MesWorkCenterBoardResultModel.class.getName() +
"(serialNumber, " + "(serialNumber, " +
"createDatetime) " + "createDatetime, " +
"workOrderNo, " +
"partNo) " +
"from MesProductionRecord " + "from MesProductionRecord " +
"where isValid = :isValid " + "where isValid = :isValid " +
"and isDeleted = :isDeleted " + "and isDeleted = :isDeleted " +
@ -85,6 +88,9 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
"and isComplete = :isComplete " + "and isComplete = :isComplete " +
"and createDatetime >= :startTime " + "and createDatetime >= :startTime " +
"and createDatetime <= :endTime "); "and createDatetime <= :endTime ");
if (!CollectionUtils.isEmpty(workOrderNoSet)) {
queryMesProductionRecordSql.append("and workOrderNo in (:workOrderNoSet) ");
}
Query mesProductionRecordQuery = entityManager.createQuery(queryMesProductionRecordSql.toString(), MesWorkCenterBoardResultModel.class); Query mesProductionRecordQuery = entityManager.createQuery(queryMesProductionRecordSql.toString(), MesWorkCenterBoardResultModel.class);
mesProductionRecordQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecordQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.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("isComplete", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("startTime", startTime); mesProductionRecordQuery.setParameter("startTime", startTime);
mesProductionRecordQuery.setParameter("endTime", endTime); mesProductionRecordQuery.setParameter("endTime", endTime);
if (!CollectionUtils.isEmpty(workOrderNoSet)) {
mesProductionRecordQuery.setParameter("workOrderNoSet", workOrderNoSet);
}
List<MesWorkCenterBoardResultModel> productionRecordQueryResultList = mesProductionRecordQuery.getResultList(); List<MesWorkCenterBoardResultModel> productionRecordQueryResultList = mesProductionRecordQuery.getResultList();
if (!CollectionUtils.isEmpty(productionRecordQueryResultList)) { if (!CollectionUtils.isEmpty(productionRecordQueryResultList)) {
//取出所有过程条码 //取出所有过程条码
List<String> serialNumberList = productionRecordQueryResultList. List<String> serialNumberList = productionRecordQueryResultList.
stream().map(MesWorkCenterBoardResultModel::getSerialNumber).collect(Collectors.toList()); stream().map(MesWorkCenterBoardResultModel::getSerialNumber).collect(Collectors.toList());
//查询合格的过程条码与对应的物料号 拼接后的结果
StringBuffer queryMesProduceSnSql = new StringBuffer(); StringBuffer queryMesProduceSnSql = new StringBuffer();
queryMesProduceSnSql.append("select distinct serialNumber " + queryMesProduceSnSql.append("select CONCAT(serial_number,part_no) " +
"from MesProduceSn " + "from MesProduceSn " +
"where isValid = :isValid " + "where isValid = :isValid " +
"and isDeleted = :isDeleted " + "and isDeleted = :isDeleted " +
@ -114,7 +124,7 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
mesProduceSnQuery.setParameter("serialNumberList", serialNumberList); mesProduceSnQuery.setParameter("serialNumberList", serialNumberList);
List<String> resultList = mesProduceSnQuery.getResultList(); List<String> resultList = mesProduceSnQuery.getResultList();
for (MesWorkCenterBoardResultModel resultModel : productionRecordQueryResultList) { 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()); resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
}else { }else {
resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());

@ -127,27 +127,44 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode()); conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
//查询工单 //查询工单
List<MesWorkOrder> mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel); List<MesWorkOrder> mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel);
//封装汇总数据 if (!CollectionUtils.isEmpty(mesWorkOrderList)) {
for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { Set<String> workOrderNoSet = mesWorkOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toSet());
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); //查询当前产线在指定时间段内加工完成的工单条码数据
resultModel.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); List<MesWorkCenterBoardResultModel> mesProductOffLineQueryResultList = mesYfBoardDao.queryCompletedSnInfo(
resultModel.setPartNo(mesWorkOrder.getPartNo()); conditionModel.getWorkCenterCodeList().get(0),
resultModel.setPartDescription(mesWorkOrder.getPartName()); conditionModel.getOrganizeCode(),
resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty()); timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(START_TIME),
resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty()); timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(END_TIME),
double workOrderFirstPassRate; workOrderNoSet);
if (resultModel.getWorkOrderCompletedQuantity() == 0 || resultModel.getWorkOrderPlannedQuantity() == 0) { //查询结果按照工单号分组
workOrderFirstPassRate = 0; Map<String, List<MesWorkCenterBoardResultModel>> workOrderAndSnDataByOrderNoMap =
}else { mesProductOffLineQueryResultList.stream().collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getWorkOrderNo));
workOrderFirstPassRate = resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity(); //封装汇总数据
if (workOrderFirstPassRate > 100) { for (MesWorkOrder mesWorkOrder : mesWorkOrderList) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
resultModel.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
resultModel.setPartNo(mesWorkOrder.getPartNo());
resultModel.setPartDescription(mesWorkOrder.getPartName());
resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty());
resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty());
//计算当前工单的合格率
double workOrderFirstPassRate;
List<MesWorkCenterBoardResultModel> resultModels = workOrderAndSnDataByOrderNoMap.get(mesWorkOrder.getWorkOrderNo());
if (CollectionUtils.isEmpty(resultModels)) {
workOrderFirstPassRate = 100; workOrderFirstPassRate = 100;
}else {
//合格数
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;
}
} }
BigDecimal bd = new BigDecimal(workOrderFirstPassRate);
bd = bd.setScale(2, RoundingMode.HALF_UP);
resultModel.setWorkOrderFirstPassRate(bd);
resultModelList.add(resultModel);
} }
BigDecimal bd = new BigDecimal(workOrderFirstPassRate);
bd = bd.setScale(2, RoundingMode.HALF_UP);
resultModel.setWorkOrderFirstPassRate(bd);
resultModelList.add(resultModel);
} }
return resultModelList; return resultModelList;
} }
@ -208,7 +225,8 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
conditionModel.getWorkCenterCodeList().get(0), conditionModel.getWorkCenterCodeList().get(0),
conditionModel.getOrganizeCode(), conditionModel.getOrganizeCode(),
timeZoneMap.get(START_TIME).get(START_TIME), 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()) { for (String timeZone : timeZoneMap.keySet()) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();

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

Loading…
Cancel
Save