From 6eab0e7a439e2f92d44aa3b162b90f23094d6ca8 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Sun, 24 Apr 2022 16:48:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8C=89=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E4=B8=8B=E6=B5=81=E6=B0=B4=E5=8F=B7=20=E5=92=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=BF=BB=E8=BD=A6=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/base/Snr.dao.go | 2 + dao/base/implments/Snr.dao.impl.go | 331 +++++++++++++++++- models/base/Const.go | 6 + models/pln/pln.go | 2 +- .../pln/implments/CustOrder.service.impl.go | 96 ++--- utils/time.go | 4 +- 6 files changed, 396 insertions(+), 45 deletions(-) diff --git a/dao/base/Snr.dao.go b/dao/base/Snr.dao.go index 58858dc..c4cc117 100644 --- a/dao/base/Snr.dao.go +++ b/dao/base/Snr.dao.go @@ -7,6 +7,7 @@ import ( "LAPP_ACURA_MOM_BACKEND/grmi" model "LAPP_ACURA_MOM_BACKEND/models/base" "github.com/go-xorm/xorm" + "time" ) /****************************************************************************** @@ -232,6 +233,7 @@ type SnrDAO interface { * ******************************************************************************/ GetNextSnr(string) (string, error) + GetNextSnrWithTime(snr string, t time.Time) (returnSnr string, err error) } /****************************************************************************** diff --git a/dao/base/implments/Snr.dao.impl.go b/dao/base/implments/Snr.dao.impl.go index 8c5b3ef..7fa2920 100644 --- a/dao/base/implments/Snr.dao.impl.go +++ b/dao/base/implments/Snr.dao.impl.go @@ -429,7 +429,7 @@ func (impl *SnrDAOImplement) GetNextSnr(snr string) (retsnr string, err error) { } else { if snrtab.DateFormat == "Func:GenerateTimeFormatForAcura" { - dateStr, err := utils.GenerateTimeFormatForAcura() + dateStr, err := utils.GenerateTimeFormatForAcura(time.Now()) if err != nil { return "", err } @@ -661,7 +661,7 @@ func (impl *SnrDAOImplement) GetSessionNextSnr(user *global.User, session *xorm. } else { if snrtab.DateFormat == "Func:GenerateTimeFormatForAcura" { - dateStr, err := utils.GenerateTimeFormatForAcura() + dateStr, err := utils.GenerateTimeFormatForAcura(time.Now()) if err != nil { return "", err } @@ -790,3 +790,330 @@ func (impl *SnrDAOImplement) SelectStd(dataMap string) ([]model.Stdef, error) { } return data, nil } + +// SelectNexSnrFromCache 从缓存获取下一个序列号 +func (impl *SnrDAOImplement) SelectNexSnrFromCache(snrId, date, rule string, startNr, year, month, week int) (int, error) { + var ( + where string // 查询条件 + parameters []interface{} // 查询参数 + ) + switch rule { + case model.RESET_RULE_DAYLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrDate.ColumnName) + parameters = []interface{}{impl.plantNr, snrId, date} + case model.RESET_RULE_WEEKLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrYear.ColumnName, + meta.SnrCache_SnrWeek.ColumnName) + parameters = []interface{}{impl.plantNr, snrId, year, week} + case model.RESET_RULE_MONTHLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrYear.ColumnName, + meta.SnrCache_SnrMonth.ColumnName) + parameters = []interface{}{impl.plantNr, snrId, year, month} + case model.RESET_RULE_YEARLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrYear.ColumnName, + ) + parameters = []interface{}{impl.plantNr, snrId, year} + default: + return 0, grmi.NewBusinessError("不支持的规则类型") + } + + var data model.SnrCache + ok, err := impl.session.Table(meta.SnrCache.TableName).Where(where, parameters...).Get(&data) + if err != nil { + return 0, err + } + if !ok { + return startNr, nil + } + return data.NextNr, nil +} + +// GetMaxItemNr 获取最大的itemNr +func (impl *SnrDAOImplement) GetMaxItemNr(snrId string) (int, error) { + where := fmt.Sprintf("%s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + ) + parameters := []interface{}{impl.plantNr, snrId} + var snrCache model.SnrCache + ok, err := impl.session.Table(meta.SnrCache.TableName).Where(where, parameters...).Desc(meta.SnrCache_ItemNr.SortColumnName).Get(&snrCache) + if err != nil { + return 0, err + } + if !ok { + return 0, nil + } + return snrCache.ItemNr, nil +} + +// UpdateSnrCache 更新snrCache +func (impl *SnrDAOImplement) UpdateSnrCache(snrId, rule string, year, month, week, nextSnr int, date time.Time) error { + var ( + where string // 查询条件 + parameters []interface{} // 查询参数 + ) + switch rule { + case model.RESET_RULE_DAYLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrDate.ColumnName) + parameters = []interface{}{impl.plantNr, snrId, date.Format(grmi.DateOutFormat)} + case model.RESET_RULE_WEEKLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrYear.ColumnName, + meta.SnrCache_SnrWeek.ColumnName) + parameters = []interface{}{impl.plantNr, snrId, year, week} + case model.RESET_RULE_MONTHLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrYear.ColumnName, + meta.SnrCache_SnrMonth.ColumnName) + parameters = []interface{}{impl.plantNr, snrId, year, month} + case model.RESET_RULE_YEARLY: + where = fmt.Sprintf("%s = ? and %s = ? and %s = ?", + meta.SnrCache_PlantNr.ColumnName, + meta.SnrCache_SnrId.ColumnName, + meta.SnrCache_SnrYear.ColumnName, + ) + parameters = []interface{}{impl.plantNr, snrId, year} + default: + return grmi.NewBusinessError("不支持的规则类型") + } + var data model.SnrCache + ok, err := impl.session.Table(meta.SnrCache.TableName).Where(where, parameters...).Get(&data) + if err != nil { + return err + } + if !ok { + maxItemNr, err := impl.GetMaxItemNr(snrId) + if err != nil { + return err + } + snrCache := model.SnrCache{ + PlantNr: impl.plantNr, + SnrId: snrId, + ItemNr: maxItemNr+1, + SnrDate: grmi.Date(date), + SnrYear: year, + SnrMonth: month, + SnrDay: date.Day(), + SnrWeek: week, + NextNr: nextSnr, + } + _, err = impl.session.Table(meta.SnrCache.TableName).Insert(&snrCache) + if err != nil { + return grmi.NewDataBaseError(err) + } + return nil + } else { + data.SnrDate = grmi.Date(date) + data.LastModify = grmi.DateTime(time.Now()) + data.LastUser = impl.userid + data.NextNr = nextSnr + data.SnrYear = year + data.SnrMonth = month + data.SnrDay = date.Day() + data.SnrWeek = week + _, err = impl.session.Table(meta.SnrCache.TableName).Cols(meta.SnrCache.UpdatingMembers...).ID(data.GetKey()).Update(&data) + if err != nil { + return grmi.NewDataBaseError(err) + } + return nil + } +} + +/****************************************************************************** + * + * @Reference LAPP_ACURA_MOM_BACKEND/dao/base/SnrDAO.GetNextSnrWithTime + * + ******************************************************************************/ +func (impl *SnrDAOImplement) GetNextSnrWithTime(snr string, t time.Time) (returnSnr string, err error) { + year, month, _ := t.Date() + _, week := t.ISOWeek() + date := t.Format(grmi.DateOutFormat) + snrData, err := impl.SelectOne(snr) + if err != nil { + return + } + if snrData == nil { + return "", grmi.NewBusinessError("未查询到流水号规则") + } + nextSnr, err := impl.SelectNexSnrFromCache(snr, date, snrData.ResetNrRule, snrData.StartNr, year, int(month), week) + if err != nil { + return "", err + } + // 组合返回值 + layout := []byte(snrData.Identifierlayout) + for i := 0; i < len(layout); i++ { + switch string(layout[i]) { + case "1": //前缀 + //判断是否开通了映射 + if snrData.Data1MappingToggle { + //查询对应的key Map + stdData, err := impl.SelectStd(snrData.Data1Mapper) + if err != nil { + return "", err + } + stdMap := make(map[string]string) + for _, v := range stdData { + val := v.StdefTyp + key := v.Bez + stdMap[key] = val + } + value, ok := stdMap[snrData.Prefix] + if ok { + returnSnr = returnSnr + value + } else { + returnSnr = returnSnr + snrData.Prefix + } + + } else { + returnSnr = returnSnr + snrData.Prefix + } + case "2": //日期变量 + //判断是否开通了映射 + if snrData.Data2MappingToggle { + //查询对应的key Map + stdData, err := impl.SelectStd(snrData.Data2Mapper) + if err != nil { + return "", err + } + stdMap := make(map[string]string) + for _, v := range stdData { + val := v.StdefTyp + key := v.Bez + stdMap[key] = val + } + value, ok := stdMap[utils.Date(t.Unix(), snrData.DateFormat)] + if ok { + returnSnr = returnSnr + value + } else { + returnSnr = returnSnr + utils.Date(t.Unix(), snrData.DateFormat) + } + + } else { + + if snrData.DateFormat == "Func:GenerateTimeFormatForAcura" { + dateStr, err := utils.GenerateTimeFormatForAcura(t) + if err != nil { + return "", err + } + returnSnr = returnSnr + dateStr + } else { + returnSnr = returnSnr + utils.Date(t.Unix(), snrData.DateFormat) + } + } + + case "3": //中缀 + + //判断是否开通了映射 + if snrData.Data3MappingToggle { + //查询对应的key Map + stdData, err := impl.SelectStd(snrData.Data3Mapper) + if err != nil { + return "", err + } + stdMap := make(map[string]string) + for _, v := range stdData { + val := v.StdefTyp + key := v.Bez + stdMap[key] = val + } + value, ok := stdMap[snrData.Infix] + if ok { + returnSnr = returnSnr + value + } else { + returnSnr = returnSnr + snrData.Infix + } + + } else { + returnSnr = returnSnr + snrData.Infix + } + + case "4": //流水号 + + var nextnum string + if snrData.IdentifierFormat == "CHAR" { + nextnum = utils.ConvInt2FormatString(nextSnr, snrData.Length) + } else { + nextnum = strconv.Itoa(nextSnr) + } + + //判断是否开通了映射 + if snrData.Data4MappingToggle { + //查询对应的key Map + stdData, err := impl.SelectStd(snrData.Data4Mapper) + if err != nil { + return "", err + } + stdMap := make(map[string]string) + for _, v := range stdData { + val := v.StdefTyp + key := v.Bez + stdMap[key] = val + } + value, ok := stdMap[nextnum] + if ok { + returnSnr = returnSnr + value + } else { + returnSnr = returnSnr + nextnum + } + + } else { + returnSnr = returnSnr + nextnum + } + case "5": //后缀 + //判断是否开通了映射 + if snrData.Data5MappingToggle { + //查询对应的key Map + stdData, err := impl.SelectStd(snrData.Data5Mapper) + if err != nil { + return "", err + } + stdMap := make(map[string]string) + for _, v := range stdData { + val := v.StdefTyp + key := v.Bez + stdMap[key] = val + } + value, ok := stdMap[snrData.Postfix] + if ok { + returnSnr = returnSnr + value + } else { + returnSnr = returnSnr + snrData.Postfix + } + + } else { + returnSnr = returnSnr + snrData.Postfix + } + + } + } + //更新下一序列值 + updateNextSnr := nextSnr + snrData.Step + if updateNextSnr > snrData.EndNr { + switch strings.ToUpper(snrData.OverflowHandling) { + case "NO": + case "RESET": + updateNextSnr = snrData.StartNr + } + } + err = impl.UpdateSnrCache(snr, snrData.ResetNrRule, year, int(month), week, updateNextSnr, t) + return +} \ No newline at end of file diff --git a/models/base/Const.go b/models/base/Const.go index ad92ef2..eff63c3 100644 --- a/models/base/Const.go +++ b/models/base/Const.go @@ -6,6 +6,12 @@ const ( PROJECT_ACURA = "ACURA" PROJECT_NANSHA = "nansha" + // 流水号重置规则 + RESET_RULE_DAYLY = "DAILY" + RESET_RULE_WEEKLY = "WEEKLY" + RESET_RULE_MONTHLY = "MONTHLY" + RESET_RULE_YEARLY = "YEARLY" + WORKPLACE_CONIFG_WIRTE_SEAT = "SEAT" WORKPLACE_CONFIG_WRITE_SIGN = "SIGN" diff --git a/models/pln/pln.go b/models/pln/pln.go index b376ec1..bbe51e8 100644 --- a/models/pln/pln.go +++ b/models/pln/pln.go @@ -71,7 +71,7 @@ type HourProductData struct { //Dashboard数据展示 type DashboardPic struct { - DashboardDataPic1 *CutLine1 //图例1 + DashboardDataPic1 CutLine1 //图例1 DashboardDataPic2 []DefectItem //图例2 DashboardDataPic3 PerDashboardData //图例3 DashboardDataPic4 TargetItem //目标数据 diff --git a/services/pln/implments/CustOrder.service.impl.go b/services/pln/implments/CustOrder.service.impl.go index 3c02413..99b6ef2 100644 --- a/services/pln/implments/CustOrder.service.impl.go +++ b/services/pln/implments/CustOrder.service.impl.go @@ -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) diff --git a/utils/time.go b/utils/time.go index c545ea4..7805149 100644 --- a/utils/time.go +++ b/utils/time.go @@ -365,8 +365,8 @@ func GetDuration(startTime, endTime time.Time, EffFactor float64) (duration time } // GenerateTimeFormatForAcura 生成讴歌工单流水号中日期的格式 -func GenerateTimeFormatForAcura() (dateStr string, err error) { - year, month, day := time.Now().Date() +func GenerateTimeFormatForAcura(t time.Time) (dateStr string, err error) { + year, month, day := t.Date() YearStr, exist := YEAR_MAP[year] if !exist { err = errors.New("年份映射值不存在")