Browse Source

dashboard

develop
娄文智 2 years ago
parent
commit
c892b88862
1 changed files with 13 additions and 148 deletions
  1. +13
    -148
      services/pln/implments/CustOrder.Dashborad.impl.go

+ 13
- 148
services/pln/implments/CustOrder.Dashborad.impl.go View File

@ -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
}


Loading…
Cancel
Save