From c892b88862dc67670e742b6f114061663b530494 Mon Sep 17 00:00:00 2001 From: "DESKTOP-H7A6KL3\\wenzh" Date: Thu, 25 Aug 2022 17:52:41 +0800 Subject: [PATCH] dashboard --- .../pln/implments/CustOrder.Dashborad.impl.go | 161 ++---------------- 1 file changed, 13 insertions(+), 148 deletions(-) diff --git a/services/pln/implments/CustOrder.Dashborad.impl.go b/services/pln/implments/CustOrder.Dashborad.impl.go index 265cb27..02714e3 100644 --- a/services/pln/implments/CustOrder.Dashborad.impl.go +++ b/services/pln/implments/CustOrder.Dashborad.impl.go @@ -277,7 +277,7 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s var err1, err2, err3, err4, err5, err6, err7, err8 error var wg sync.WaitGroup - wg.Add(8) + wg.Add(7) //图例001 go func(wg *sync.WaitGroup) { DashboardData.DashboardDataPic1, err1 = impl.SelectPic1(user, dayModel, workLineId, startTime, endTime, useDayStartTime, jPHPercent) @@ -311,12 +311,9 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s DashboardData.DefectPackOrder, err7 = impl.SelectDefectPackOrder(user, workLineId, startTime, endTime) wg.Done() // 操作完成,减少一个计数 }(&wg) - go func(wg *sync.WaitGroup) { - DashboardData.DashboardOEE, err8 = impl.SelectOee(user, dayModel, workLineId, startTime, endTime, useDayStartTime) - wg.Done() // 操作完成,减少一个计数 - }(&wg) - wg.Wait() + DashboardData.DashboardOEE, err8 = impl.SelectOee(user, dayModel, workLineId, startTime, endTime, useDayStartTime, DashboardData.DashboardDataPic4.Current, DashboardData.DashboardDataPic3.CompleteNumber, DashboardData.DashboardDataPic4.Target) + if err1 != nil { return nil, err1 } @@ -1379,7 +1376,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b } //图例Oee -func (impl *CustOrderServiceImplement) SelectOee(user *global.User, dayModel *baseModel.DayModel, workLineId string, startTime, endTime, dayStartTime time.Time) (result model.DashboardOEE, err error) { +func (impl *CustOrderServiceImplement) SelectOee(user *global.User, dayModel *baseModel.DayModel, workLineId string, startTime, endTime, dayStartTime time.Time, onDutyTo int, onDutyBeatAchieved int, target int) (result model.DashboardOEE, err error) { engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() @@ -1387,14 +1384,14 @@ func (impl *CustOrderServiceImplement) SelectOee(user *global.User, dayModel *ba Slaves := db.Eloquent.Slaves() sessionSlaves := Slaves[1].NewSession() defer sessionSlaves.Close() - custOrderDao := dal.NewCustOrderDAO(session, user.PlantNr, user.UserId) downDao := dal.NewDownTimeRecordDAO(sessionSlaves, user.PlantNr, user.UserId) - packOrderDao := jitDal.NewPackOrderDAO(session, user.PlantNr, user.UserId) - productFamilyDao := meDal.NewProductFamilyDAO(session, user.PlantNr, user.UserId) - packOrderItemDao := jitDal.NewPackOrderItemLstDAO(session, user.PlantNr, user.UserId) - workLineDao := baseDal.NewWorkLineDAO(session, user.PlantNr, user.UserId) - productFamilyMeterMap := make(map[string]float64) + packOrderItemDao := jitDal.NewPackOrderItemLstDAO(session, user.PlantNr, user.UserId) + if onDutyBeatAchieved >= target { + onDutyBeatAchieved = target + } + glog.InfoExtln("dashboard记录", "onDutyTo:", onDutyTo) + glog.InfoExtln("dashboard记录", "onDutyBeatAchieved:", onDutyBeatAchieved) timeModelList := impl.InitDayModelList(dayModel, dayStartTime) downList, err := downDao.Select([]grmi.Predicate{ meta.DownTimeRecord_WorkLineId.NewPredicate(grmi.Equal, workLineId), @@ -1420,145 +1417,13 @@ func (impl *CustOrderServiceImplement) SelectOee(user *global.User, dayModel *ba } //停工工时 result.OccurrenceTimes = stopTimeOnDuty - workLineLi, err := workLineDao.Select([]grmi.Predicate{baseMeta.WorkLine_GroupLineId.NewPredicate(grmi.Equal, workLineId)}, nil) - if err != nil { - return result, grmi.NewBusinessError("查询工厂产线数据失败, error:" + err.Error()) - } - if len(workLineLi) == 0 { - return result, grmi.NewBusinessError("未查询到实体产线") - } - var workLineIds []string - for _, v := range workLineLi { - workLineIds = append(workLineIds, v.WorkLineid) - } - packOrderLi, err := packOrderDao.SelectClosedPackOrder(startTime.Format(grmi.DateTimeOutFormat), endTime.Format(grmi.DateTimeOutFormat), workLineIds) - if err != nil { - return result, grmi.NewBusinessError("查询包装单数据失败") - } - usefulPackOrderLi := make([]jitModel.PackOrder, 0) - for _, packOrder := range packOrderLi { - var custOrderId string - var notOneCustOrder bool - if len(packOrder.PackOrderItemLstLi) == 0 { - continue - } - for index, packOrderItem := range packOrder.PackOrderItemLstLi { - if index == 0 { - custOrderId = packOrderItem.SerialOrder.CustOrderId - continue - } - if custOrderId != packOrderItem.SerialOrder.CustOrderId { - notOneCustOrder = true - break - } - } - if !notOneCustOrder { - usefulPackOrderLi = append(usefulPackOrderLi, packOrder) - } - } - custOrderMap := make(map[string]model.CustOrder) - displayHourMap := make(map[int]interface{}) - displayHourProductMap := make(map[int][]model.HourProductData) - for _, packOrder := range usefulPackOrderLi { - hour := packOrder.CloseTime.Restore().Hour() - _, exist := displayHourMap[hour] - if !exist { - displayHourMap[hour] = nil - displayHourProductMap[hour] = make([]model.HourProductData, 0) - } - producedLi := displayHourProductMap[hour] - if packOrder.PackOrderItemLstLi[0].SerialOrder.CustOrderId == "" { - continue - } - custOrder, exist := custOrderMap[packOrder.PackOrderItemLstLi[0].SerialOrder.CustOrderId] - if !exist { - custOrderP, err := custOrderDao.SelectOne(packOrder.PackOrderItemLstLi[0].SerialOrder.CustOrderId) - if err != nil { - return result, grmi.NewBusinessError("查询客户订单失败, 错误:" + err.Error()) - } - if custOrderP == nil { - return result, grmi.NewBusinessError("客户订单不存在, 客户订单ID:" + packOrder.PackOrderItemLstLi[0].SerialOrder.CustOrderId) - } - custOrderMap[packOrder.PackOrderItemLstLi[0].SerialOrder.CustOrderId] = *custOrderP - custOrder = *custOrderP - productFamily, err := productFamilyDao.SelectOne(custOrder.ProductFamilyId) - if err != nil { - return result, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error()) - } - if productFamily == nil { - return result, grmi.NewBusinessError("客户订单派生不存在, 派生ID:" + custOrder.ProductFamilyId) - } - if productFamily.Jph == 0 { - return result, grmi.NewBusinessError("派生JPH为0 派生ID:" + custOrder.ProductFamilyId) - } - productFamilyMeterMap[custOrder.ProductFamilyId] = float64(3600) / productFamily.Jph - } - productFamilyId := custOrder.ProductFamilyId - if len(producedLi) == 0 { - produceData := model.HourProductData{ - ProductFamilyId: productFamilyId, - Qty: 1, - LastDoneTime: packOrder.CloseTime.Restore(), - } - producedLi = append(producedLi, produceData) - } else { - lastProduceData := producedLi[len(producedLi)-1] - if lastProduceData.ProductFamilyId == productFamilyId { - lastProduceData.Qty += 1 - if lastProduceData.LastDoneTime.Before(packOrder.CloseTime.Restore()) { - lastProduceData.LastDoneTime = packOrder.CloseTime.Restore() - } - producedLi[len(producedLi)-1] = lastProduceData - } else { - produceData := model.HourProductData{ - ProductFamilyId: productFamilyId, - Qty: 1, - LastDoneTime: packOrder.CloseTime.Restore(), - } - producedLi = append(producedLi, produceData) - } - } - displayHourProductMap[hour] = producedLi - } - //当班达成 - var onDutyTo float64 - //当班节拍达成 - var onDutyBeatAchieved float64 //当班不良 var onDutyBad int - for hour := 0; hour < 48; hour++ { - hourData, exist := displayHourProductMap[hour] - if !exist { - continue - } - productDataLi := make([]model.HourProductData, 0, len(hourData)) - for _, data := range hourData { - productDataLi = append(productDataLi, data) - } - //impl.QuickSortProductData(productDataLi) - currentTime := dayStartTime.Add(time.Hour * time.Duration(hour)) - var hourAllUsedTime int - for _, productFamilyProductData := range productDataLi { - usedTime := impl.GetUsefulTime(currentTime, productFamilyProductData.LastDoneTime, timeModelList) - currentTime = productFamilyProductData.LastDoneTime - hourAllUsedTime += usedTime - } - currentTime = dayStartTime.Add(time.Hour * time.Duration(hour)) - for _, productFamilyProductData := range productDataLi { - - usedTime := impl.GetUsefulTime(currentTime, productFamilyProductData.LastDoneTime, timeModelList) - currentTime = productFamilyProductData.LastDoneTime - meter := productFamilyMeterMap[productFamilyProductData.ProductFamilyId] - - onDutyTo += float64(productFamilyProductData.Qty) - onDutyBeatAchieved += meter * float64(usedTime) - } - } //2 节拍达成率=当班达成/当班节拍达成 if onDutyBeatAchieved > 0 { - result.Performance = utils.Decimal(onDutyTo/onDutyBeatAchieved*100, 1) + result.Performance = utils.Decimal(float64(onDutyTo)/float64(onDutyBeatAchieved)*float64(100), 1) } itemLi, err := packOrderItemDao.SelectNGPackOrderItem(workLineId, startTime.Format(grmi.DateTimeOutFormat), endTime.Format(grmi.DateTimeOutFormat)) if err != nil { @@ -1571,9 +1436,9 @@ func (impl *CustOrderServiceImplement) SelectOee(user *global.User, dayModel *ba onDutyBad = len(packOrderMap) //3 良品率=(当班达成-当班不良)/当班达成 if onDutyTo > 0 { - result.Quality = utils.Decimal((onDutyTo-float64(onDutyBad))/onDutyTo*100, 1) + result.Quality = utils.Decimal((float64(onDutyTo)-float64(onDutyBad))/float64(onDutyTo)*float64(100), 1) } - result.Oee = utils.Decimal(result.Availability*result.Performance*result.Quality*100, 1) + result.Oee = utils.Decimal(result.Availability*result.Performance*result.Quality/10000, 1) return result, nil }