|
|
@ -31,6 +31,8 @@ import ( |
|
|
|
"strconv" |
|
|
|
"strings" |
|
|
|
"sync" |
|
|
|
|
|
|
|
//"sync"
|
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
@ -871,11 +873,7 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde |
|
|
|
// 创建序列工单和工单状态
|
|
|
|
for i := 0; i < orderData.PlanQty; i++ { |
|
|
|
syncKey = custOrderId + "-" + strconv.Itoa(i) |
|
|
|
serialNumber, err := snrDao.GetNextSnr(project.SerialOrderSnr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
|
|
|
|
for _, product := range productLi { |
|
|
|
// 获取生产使用的产线
|
|
|
|
var resourceId string |
|
|
@ -911,12 +909,19 @@ func (impl *CustOrderServiceImplement) LockCustOrder(user *global.User, custOrde |
|
|
|
} else { |
|
|
|
resourceId = product.DefaultWorkLineId |
|
|
|
} |
|
|
|
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue |
|
|
|
planStartTime := orderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*current) * time.Second) |
|
|
|
planEndTime := orderData.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*(current+1)) * time.Second) |
|
|
|
current++ |
|
|
|
planStartDate := grmi.Date(planStartTime) |
|
|
|
planEndDate := grmi.Date(planEndTime) |
|
|
|
|
|
|
|
serialNumber, err := snrDao.GetNextSnrWithTime(project.SerialOrderSnr, planStartTime) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue |
|
|
|
|
|
|
|
timeInt, err := strconv.Atoi(planStartTime.Format("060102150405")) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
@ -1179,11 +1184,8 @@ func (impl *CustOrderServiceImplement) LockCustOrderForGantt(user *global.User, |
|
|
|
//second := serialNumber % 34
|
|
|
|
//firstStr := baseModel.NUMBER_MAP[first]
|
|
|
|
//secondStr := baseModel.NUMBER_MAP[second]
|
|
|
|
serialNumber, err := snrDao.GetNextSnr(project.SerialOrderSnr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for _, product := range productLi { |
|
|
|
workLine, exist := workLineMap[product.DefaultWorkLineId] |
|
|
|
if !exist { |
|
|
@ -1200,7 +1202,6 @@ func (impl *CustOrderServiceImplement) LockCustOrderForGantt(user *global.User, |
|
|
|
} |
|
|
|
//machineCode := product.MachineCode
|
|
|
|
//serialOrderId := machineCode + yearStr + monthStr + dayStr + firstStr + secondStr + "0" + product.ColorValue
|
|
|
|
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue |
|
|
|
schedKeyStr, err := snrDao.GetNextSnr(workLine.SchedKeySnr) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
@ -1216,6 +1217,13 @@ func (impl *CustOrderServiceImplement) LockCustOrderForGantt(user *global.User, |
|
|
|
planEndTime := orderData.CustOrder.PlanStartTime.Restore().Add(time.Duration(int(perDuration)*(current+1)) * time.Second) |
|
|
|
planStartDate := grmi.Date(planStartTime) |
|
|
|
planEndDate := grmi.Date(planEndTime) |
|
|
|
serialNumber, err := snrDao.GetNextSnrWithTime(project.SerialOrderSnr, planStartTime) |
|
|
|
if err != nil { |
|
|
|
_ = session.Rollback() |
|
|
|
return grmi.NewBusinessError("生成工单流水号失败, error:" + err.Error()) |
|
|
|
} |
|
|
|
serialOrderId := product.MachineCode + serialNumber + product.ProductType + product.ColorValue |
|
|
|
|
|
|
|
if i == 0 { |
|
|
|
isFirstPieceToggle = true |
|
|
|
} |
|
|
@ -2343,6 +2351,7 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s |
|
|
|
var dayModelEndTime int |
|
|
|
nowTime := time.Now() |
|
|
|
var WorkShift int |
|
|
|
_ = WorkShift |
|
|
|
//构建开始时间和结束时间
|
|
|
|
startDayTime := utils.GetZeroTime(time.Now()) |
|
|
|
if dayModel.WorkShiftToggle { |
|
|
@ -2514,39 +2523,39 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s |
|
|
|
var wg sync.WaitGroup |
|
|
|
wg.Add(6) |
|
|
|
//图例001
|
|
|
|
go func() { |
|
|
|
go func(wg *sync.WaitGroup) { |
|
|
|
DashboardData.DashboardDataPic1, err1 = impl.SelectPic1(user, dayModel, workLineId) |
|
|
|
wg.Done() // 操作完成,减少一个计数
|
|
|
|
}() |
|
|
|
}(&wg ) |
|
|
|
|
|
|
|
//图例002
|
|
|
|
go func() { |
|
|
|
go func(wg *sync.WaitGroup) { |
|
|
|
DashboardData.DashboardDataPic2, err2 = impl.SelectDefectNumber(user, days, workLineId) |
|
|
|
wg.Done() // 操作完成,减少一个计数
|
|
|
|
}() |
|
|
|
}(&wg) |
|
|
|
|
|
|
|
//图例003
|
|
|
|
go func() { |
|
|
|
go func(wg *sync.WaitGroup) { |
|
|
|
DashboardData.DashboardDataPic3, err3 = impl.SelectPic3(user, DayModelHours, dayModelStartHour, dayModelEndHour, startDayTime, endDayTime, timeBeat, personNum, workLineId) |
|
|
|
wg.Done() // 操作完成,减少一个计数
|
|
|
|
}() |
|
|
|
}(&wg) |
|
|
|
|
|
|
|
//图例004
|
|
|
|
go func() { |
|
|
|
go func(wg *sync.WaitGroup) { |
|
|
|
DashboardData.DashboardDataPic4, err4 = impl.CountTarget(user, workLineId) |
|
|
|
wg.Done() // 操作完成,减少一个计数
|
|
|
|
}() |
|
|
|
}(&wg) |
|
|
|
|
|
|
|
//计算当前节拍,及其平均
|
|
|
|
go func() { |
|
|
|
go func(wg *sync.WaitGroup) { |
|
|
|
DashboardData.TeamTemPo, DashboardData.PerHourTemPo, err5 = impl.SelectTeamTemPo(user, dayModel, personNum, startDayTime, WorkShift, workLineId) |
|
|
|
wg.Done() // 操作完成,减少一个计数
|
|
|
|
}() |
|
|
|
}(&wg) |
|
|
|
|
|
|
|
go func() { |
|
|
|
go func(wg *sync.WaitGroup) { |
|
|
|
DashboardData.DashboardDataStatus, err6 = impl.SelectAndonInfo(user) |
|
|
|
wg.Done() // 操作完成,减少一个计数
|
|
|
|
}() |
|
|
|
}(&wg) |
|
|
|
wg.Wait() |
|
|
|
if err1 != nil { |
|
|
|
return nil, err1 |
|
|
@ -2557,12 +2566,15 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s |
|
|
|
if err3 != nil { |
|
|
|
return nil, err3 |
|
|
|
} |
|
|
|
|
|
|
|
if err4 != nil { |
|
|
|
return nil, err4 |
|
|
|
} |
|
|
|
|
|
|
|
if err5 != nil { |
|
|
|
return nil, err5 |
|
|
|
} |
|
|
|
|
|
|
|
if err6 != nil { |
|
|
|
return nil, err6 |
|
|
|
} |
|
|
@ -2571,6 +2583,7 @@ func (impl *CustOrderServiceImplement) Dashboard(user *global.User, workLineId s |
|
|
|
//节拍
|
|
|
|
DashboardData.CurrentTempo = timeBeat |
|
|
|
DashboardData.IppmTarge = ippmTarge |
|
|
|
|
|
|
|
DashboardData.DateTimeNow = utils.TimeFormat(time.Now(), "yyyy-MM-dd HH:00") |
|
|
|
return DashboardData, err |
|
|
|
|
|
|
@ -3103,7 +3116,7 @@ func (impl *CustOrderServiceImplement) SelectTeamTemPo(user *global.User, dayMod |
|
|
|
} |
|
|
|
|
|
|
|
//图例1
|
|
|
|
func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *baseModel.DayModel, workLineId string) (result *model.CutLine1, err error) { |
|
|
|
func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *baseModel.DayModel, workLineId string) (result model.CutLine1, err error) { |
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
@ -3133,7 +3146,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b |
|
|
|
custOrderLi, err := custOrderDao.SelectRunningCustOrder(workLineId) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询正在生产的客户订单失败, 错误:" + err.Error()) |
|
|
|
return result, grmi.NewBusinessError("查询正在生产的客户订单失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
|
|
|
|
var currentMeter int |
|
|
@ -3143,23 +3156,23 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b |
|
|
|
custOrder := custOrderLi[0] |
|
|
|
productFamily, err := productFamilyDao.SelectOne(custOrder.ProductFamilyId) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error()) |
|
|
|
return result, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
if productFamily == nil { |
|
|
|
return nil, grmi.NewBusinessError("客户订单派生不存在, 派生ID:" + custOrder.ProductFamilyId) |
|
|
|
return result, grmi.NewBusinessError("客户订单派生不存在, 派生ID:" + custOrder.ProductFamilyId) |
|
|
|
} |
|
|
|
if productFamily.Jph == 0 { |
|
|
|
return nil, grmi.NewBusinessError("派生JPH为0 派生ID:" + custOrder.ProductFamilyId) |
|
|
|
return result, grmi.NewBusinessError("派生JPH为0 派生ID:" + custOrder.ProductFamilyId) |
|
|
|
} |
|
|
|
currentMeter = int(float64(3600) / productFamily.Jph) |
|
|
|
productFamilyMeterMap[custOrder.ProductFamilyId] = float64(3600) / productFamily.Jph |
|
|
|
productFamilyMap[custOrder.ProductFamilyId] = productFamily |
|
|
|
productLi, err := productFamilyRelateDao.SelectProductByFamilyId(custOrder.ProjectId, custOrder.ProductFamilyId) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error()) |
|
|
|
return result, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
if len(productLi) == 0 { |
|
|
|
return nil, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + custOrder.ProductFamilyId) |
|
|
|
return result, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + custOrder.ProductFamilyId) |
|
|
|
} |
|
|
|
productFamilyRelateMap[custOrder.ProductFamilyId] = make(map[string]interface{}, len(productLi)) |
|
|
|
for _, product := range productLi { |
|
|
@ -3172,7 +3185,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b |
|
|
|
// 2. 实际结束时间为空 实际开始时间 < 当前时间 状态 > 26 && != 98
|
|
|
|
custOrderDataLi, err := custOrderDao.SelectProduceOrder(todayStart, endTime, workLineId) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询客户订单失败, 错误:" + err.Error()) |
|
|
|
return result, grmi.NewBusinessError("查询客户订单失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
|
|
|
|
productFamilyAccomplishMap := make(map[int]map[string]model.HourProductData) |
|
|
@ -3182,20 +3195,20 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b |
|
|
|
if !exist { |
|
|
|
productFamily, err = productFamilyDao.SelectOne(productFamilyId) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error()) |
|
|
|
return result, grmi.NewBusinessError("查询派生数据失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
if productFamily == nil { |
|
|
|
return nil, grmi.NewBusinessError("客户订单中派生不存在, 派生Id:" + productFamilyId + ", 客户订单Id:" + custOrderData.CustOrder.CustOrderId) |
|
|
|
return result, grmi.NewBusinessError("客户订单中派生不存在, 派生Id:" + productFamilyId + ", 客户订单Id:" + custOrderData.CustOrder.CustOrderId) |
|
|
|
} |
|
|
|
if productFamily.Jph == 0 { |
|
|
|
return nil, grmi.NewBusinessError("派生JPH为0 派生ID:" + productFamilyId) |
|
|
|
return result, grmi.NewBusinessError("派生JPH为0 派生ID:" + productFamilyId) |
|
|
|
} |
|
|
|
productLi, err := productFamilyRelateDao.SelectProductByFamilyId(custOrderData.CustOrder.ProjectId, productFamilyId) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error()) |
|
|
|
return result, grmi.NewBusinessError("查询派生下总成数据失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
if len(productLi) == 0 { |
|
|
|
return nil, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + productFamilyId) |
|
|
|
return result, grmi.NewBusinessError("派生下未关联需要生产的座椅总成, 派生ID:" + productFamilyId) |
|
|
|
} |
|
|
|
productFamilyRelateMap[productFamilyId] = make(map[string]interface{}, len(productLi)) |
|
|
|
for _, product := range productLi { |
|
|
@ -3207,7 +3220,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b |
|
|
|
// 查询客户订单下的工单
|
|
|
|
serialOrderDataLi, err := serialOrderDao.SelectByCustOrderIdForDashboard(custOrderData.CustOrder.CustOrderId, todayStart, endTime) |
|
|
|
if err != nil { |
|
|
|
return nil, grmi.NewBusinessError("查询客户订单下工单失败, 错误:" + err.Error()) |
|
|
|
return result, grmi.NewBusinessError("查询客户订单下工单失败, 错误:" + err.Error()) |
|
|
|
} |
|
|
|
// 记录生产每个台套下面的工单数量
|
|
|
|
syncKeyMap := make(map[string][]omModel.SerialOrder) |
|
|
@ -3275,7 +3288,7 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b |
|
|
|
for hour, _ := range productFamilyAccomplishMap { |
|
|
|
displayHourLi = append(displayHourLi, strconv.Itoa(hour)+"时") |
|
|
|
} |
|
|
|
result = &model.CutLine1{ |
|
|
|
result = model.CutLine1{ |
|
|
|
TimeLi: displayHourLi, |
|
|
|
Standard: 1.0, |
|
|
|
ProductFamilyMeter: currentMeter, |
|
|
@ -3304,7 +3317,10 @@ func (impl *CustOrderServiceImplement) SelectPic1(user *global.User, dayModel *b |
|
|
|
usedTime := impl.GetUsefulTime(currentTime, productFamilyProductData.LastDoneTime, timeModelList) |
|
|
|
currentTime = productFamilyProductData.LastDoneTime |
|
|
|
meter := productFamilyMeterMap[productFamilyProductData.ProductFamilyId] |
|
|
|
percent := meter / (float64(usedTime) / float64(productFamilyProductData.Qty)) * (float64(usedTime) / float64(hourAllUsedTime)) |
|
|
|
var percent float64 |
|
|
|
if productFamilyProductData.Qty != 0 && usedTime != 0 && hourAllUsedTime != 0 { |
|
|
|
percent = meter / (float64(usedTime) / float64(productFamilyProductData.Qty)) * (float64(usedTime) / float64(hourAllUsedTime)) |
|
|
|
} |
|
|
|
hourPercent += percent |
|
|
|
} |
|
|
|
result.ProduceData = append(result.ProduceData, hourPercent) |
|
|
|