Browse Source

LEO commit

master
leonidxue 3 years ago
parent
commit
ce5f635329
6 changed files with 497 additions and 11 deletions
  1. +33
    -7
      models/WorkLineWorkShiftLst.go
  2. +33
    -0
      models/WorkShift.go
  3. +16
    -0
      schedule/Scheduler.Ctrl.go
  4. +350
    -0
      schedule/TimeModel.Ctrl.go
  5. +33
    -3
      schedule/WorkLine.Ctrl.go
  6. +32
    -1
      schedule/WorkShift.Ctrl.go

+ 33
- 7
models/WorkLineWorkShiftLst.go View File

@ -8,13 +8,13 @@ import (
"xorm.io/core" "xorm.io/core"
) )
// 产线班次出勤表
type Worklineworkshiftlst struct { type Worklineworkshiftlst struct {
Plantnr int `json:"PlantNr" xorm:"not null pk INT(4)"` Plantnr int `json:"PlantNr" xorm:"not null pk INT(4)"`
Worklineid string `json:"WorkLineId" xorm:"not null pk NVARCHAR(80)"` Worklineid string `json:"WorkLineId" xorm:"not null pk NVARCHAR(80)"`
Workday string `json:"WorkDay" xorm:"not null pk NVARCHAR(16)"` Workday string `json:"WorkDay" xorm:"not null pk NVARCHAR(16)"`
Pos int `json:"Pos" xorm:"not null pk INT(4)"`
Workshiftnr int `json:"WorkShiftNr" xorm:"not null INT(4)"`
Levelid string `json:"LevelId" xorm:"NVARCHAR(40)"`
Workshiftnr int `json:"WorkShiftNr" xorm:"not null pk INT(4)"`
Personqty int `json:"PersonQty" xorm:"INT(4)"`
Lastmodify time.Time `json:"LastModify" xorm:"DATETIME(8)"` Lastmodify time.Time `json:"LastModify" xorm:"DATETIME(8)"`
Lastuser string `json:"LastUser" xorm:"not null NVARCHAR(40)"` Lastuser string `json:"LastUser" xorm:"not null NVARCHAR(40)"`
Createtime time.Time `json:"CreateTime" xorm:"DATETIME(8)"` Createtime time.Time `json:"CreateTime" xorm:"DATETIME(8)"`
@ -44,7 +44,7 @@ func (t *Worklineworkshiftlst) TableName() string {
func (t *Worklineworkshiftlst) Add() error { func (t *Worklineworkshiftlst) Add() error {
e := db.Eloquent.Master() e := db.Eloquent.Master()
count := new(Worklineworkshiftlst) count := new(Worklineworkshiftlst)
affw, err := e.Table(t.TableName()).ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Pos}).Count(count)
affw, err := e.Table(t.TableName()).ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Workshiftnr}).Count(count)
if err != nil { if err != nil {
return err return err
} }
@ -77,7 +77,7 @@ func (t *Worklineworkshiftlst) Add() error {
******************************************************************************/ ******************************************************************************/
func (t *Worklineworkshiftlst) Del() bool { func (t *Worklineworkshiftlst) Del() bool {
e := db.Eloquent.Master() e := db.Eloquent.Master()
_, err := e.ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Pos}).Delete(&Worklineworkshiftlst{})
_, err := e.ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Workshiftnr}).Delete(&Worklineworkshiftlst{})
if err != nil { if err != nil {
return false return false
} }
@ -102,7 +102,7 @@ func (t *Worklineworkshiftlst) Del() bool {
******************************************************************************/ ******************************************************************************/
func (t *Worklineworkshiftlst) Update() error { func (t *Worklineworkshiftlst) Update() error {
e := db.Eloquent.Master() e := db.Eloquent.Master()
_, err := e.ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Pos}).Update(t)
_, err := e.ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Workshiftnr}).Update(t)
if err != nil { if err != nil {
return err return err
} }
@ -128,9 +128,35 @@ func (t *Worklineworkshiftlst) Update() error {
func (t *Worklineworkshiftlst) SelectOne() (Worklineworkshiftlst, error) { func (t *Worklineworkshiftlst) SelectOne() (Worklineworkshiftlst, error) {
e := db.Eloquent.Master() e := db.Eloquent.Master()
var data Worklineworkshiftlst var data Worklineworkshiftlst
_, err := e.ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Pos}).Get(&data)
_, err := e.ID(core.PK{t.Plantnr, t.Worklineid, t.Workday, t.Workshiftnr}).Get(&data)
if err != nil { if err != nil {
return data, err return data, err
} }
return data, nil return data, nil
} }
/******************************************************************************
*
* @Function Name :
*-----------------------------------------------------------------------------
*
* @Description : 数据查找
*
* @Function Parameters:
*
* @Return Value :
*
* @Author : Lou Wenzhi
*
* @Date : 2021/3/6 8:47
*
******************************************************************************/
func (t *Worklineworkshiftlst) GetWorkLineWorkShiftData(lineid, st, et string) (datalst []Worklineworkshiftlst, err error) {
e := db.Eloquent.Master()
if err := e.Table(t.TableName()).Where("PlantNr = ? and WorkLineId = ? and WorkDay >= ? and WorkDay <= ?",t.Plantnr,
lineid, st, et).Asc("WorkDay", "WeekModelNr").Find(&datalst);err != nil {
return
}
return
}

+ 33
- 0
models/WorkShift.go View File

@ -149,3 +149,36 @@ func (t *Workshift) SelectOne() (Workshift, error) {
} }
return data, nil return data, nil
} }
/******************************************************************************
*
* @Function Name :
*-----------------------------------------------------------------------------
*
* @Description : 数据查找
*
* @Function Parameters:
*
* @Return Value :
*
* @Author : Lou Wenzhi
*
* @Date : 2021/3/6 8:47
*
******************************************************************************/
func (t *Workshift) SelectAll() (datalst []Workshift, err error) {
var i int
e := db.Eloquent.Master()
if err := e.Table(t.TableName()).Where("PlantNr = ?",t.Plantnr).OrderBy("WorkShiftNr").Find(&datalst);err != nil {
return
}
for i = 0; i < len(datalst); i++ {
if err = e.Table("Workshiftefflst").Where("PlantNr = ? and WorkShiftNr = ?", datalst[i].Plantnr,
datalst[i].Workshiftnr).OrderBy("LevelId").Find(&datalst[i].Efflst); err != nil {
return
}
}
return
}

+ 16
- 0
schedule/Scheduler.Ctrl.go View File

@ -54,6 +54,22 @@ func(schedsrv *SchedulerSrv)LoadTimemodelData(){
// 加载指定日期范畴内的时间模型相关主数据 // 加载指定日期范畴内的时间模型相关主数据
schedsrv.Tmsrv.LoadBasicData(schedsrv.StartDate, schedsrv.EndDate) schedsrv.Tmsrv.LoadBasicData(schedsrv.StartDate, schedsrv.EndDate)
} }
// 加载产线班次的实际出勤数据,指定时段,没有按班次指定的默认值填充
func(schedsrv *SchedulerSrv)LoadWorkLineWorkShiftData()(err error){
var(
wlsrv *WorklineSrv
)
// 遍历产线
for _, wlsrv = range schedsrv.WorklineDict {
// 加载产线指定时段内的实际出勤数据
if err = wlsrv.LoadWorkShiftData(schedsrv.StartDate, schedsrv.EndDate); err != nil{
err = errors.New(fmt.Sprintf("加载产线%s的排班数据出错%v!",wlsrv.WorklineId, err))
return
}
}
return
}
// 加载产品换型矩阵 // 加载产品换型矩阵
func(schedsrv *SchedulerSrv)LoadSetupData()(err error){ func(schedsrv *SchedulerSrv)LoadSetupData()(err error){
var ( var (


+ 350
- 0
schedule/TimeModel.Ctrl.go View File

@ -14,6 +14,7 @@ type TimeModelSrv struct {
DayModelDict map[int]DayModelSrv // 日模型字典 DayModelDict map[int]DayModelSrv // 日模型字典
WeekModelDict map[int]WeekModelSrv // 周模型字典 WeekModelDict map[int]WeekModelSrv // 周模型字典
CalendarDict map[int]CalendarSrv // 日历字典 CalendarDict map[int]CalendarSrv // 日历字典
WorkShiftDict map[int]WorkShiftSrv // 人员班组字典
} }
// 加载日模型、周模型和工作日历等基础数据 // 加载日模型、周模型和工作日历等基础数据
@ -22,18 +23,22 @@ func(tmsrv *TimeModelSrv)LoadBasicData(startDate, endDate time.Time)(err error){
dmsrv DayModelSrv dmsrv DayModelSrv
wkmsrv WeekModelSrv wkmsrv WeekModelSrv
calsrv CalendarSrv calsrv CalendarSrv
wssrv WorkShiftSrv
dmtab models.Daymodel dmtab models.Daymodel
dmtablst []models.Daymodel dmtablst []models.Daymodel
wkmtab models.Weekmodel wkmtab models.Weekmodel
wkmtablst []models.Weekmodel wkmtablst []models.Weekmodel
caltab models.Workcalendar caltab models.Workcalendar
caltablst []models.Workcalendar caltablst []models.Workcalendar
wstab models.Workshift
wstablst []models.Workshift
i int i int
) )
// 初始化 // 初始化
tmsrv.DayModelDict = make(map[int]DayModelSrv) tmsrv.DayModelDict = make(map[int]DayModelSrv)
tmsrv.WeekModelDict = make(map[int]WeekModelSrv) tmsrv.WeekModelDict = make(map[int]WeekModelSrv)
tmsrv.CalendarDict = make(map[int]CalendarSrv) tmsrv.CalendarDict = make(map[int]CalendarSrv)
tmsrv.WorkShiftDict = make(map[int]WorkShiftSrv)
// 加载日模型 // 加载日模型
dmtab = models.Daymodel{Plantnr: tmsrv.PlantNr} dmtab = models.Daymodel{Plantnr: tmsrv.PlantNr}
@ -71,5 +76,350 @@ func(tmsrv *TimeModelSrv)LoadBasicData(startDate, endDate time.Time)(err error){
tmsrv.CalendarDict[calsrv.CalendarNr] = calsrv tmsrv.CalendarDict[calsrv.CalendarNr] = calsrv
} }
// 加载工作班次模型
wstab = models.Workshift{Plantnr: tmsrv.PlantNr}
if wstablst, err = wstab.SelectAll(); err != nil {
err = errors.New(fmt.Sprintf("加载工厂%d的人员班组失败%v!",wstab.Plantnr, err))
return
}
for i = 0; i < len(wstablst); i++ {
wssrv = WorkShiftSrv{}
wssrv.Init(wstablst[i])
tmsrv.WorkShiftDict[wssrv.WorkShiftNr] = wssrv
}
return
}
// 生成日模型的可用时间线
func(tmsrv *TimeModelSrv)GenDayModelLineArray()(err error){
var(
dms DayModelSrv
wssrv WorkShiftSrv
lssrv LineSegementSrv
nextStartPoint int
ok bool
)
// 遍历日模型
for _, dms = range tmsrv.DayModelDict {
dms.LineArray = []LineSegementSrv{}
// 是否是人员班组
if dms.DayModelTab.Workshifttoggle > 0 {
// 班次1
if dms.DayModelTab.S1toggle > 0 {
if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S1Workshiftnr]; !ok {
err = errors.New(fmt.Sprintf("日模型%d的班次1对应的人员班次%d不存在!",dms.DayModelTab.Daymodelnr, dms.DayModelTab.S1Workshiftnr))
return
}
nextStartPoint = wssrv.Wsstab.SBeg
if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB1Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB1End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB2Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB2End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB3Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB3End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB4Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB4End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB5Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB5End
dms.LineArray = append(dms.LineArray, lssrv)
}
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SEnd
lssrv.GetDuration()
dms.LineArray = append(dms.LineArray, lssrv)
}
// 班次2
if dms.DayModelTab.S2toggle > 0 {
if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S2Workshiftnr]; !ok {
err = errors.New(fmt.Sprintf("日模型%d的班次2对应的人员班次%d不存在!",dms.DayModelTab.Daymodelnr, dms.DayModelTab.S2Workshiftnr))
return
}
nextStartPoint = wssrv.Wsstab.SBeg
if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB1Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB1End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB2Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB2End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB3Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB3End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB4Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB4End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB5Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB5End
dms.LineArray = append(dms.LineArray, lssrv)
}
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SEnd
lssrv.GetDuration()
dms.LineArray = append(dms.LineArray, lssrv)
}
// 班次2
if dms.DayModelTab.S3toggle > 0 {
if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S3Workshiftnr]; !ok {
err = errors.New(fmt.Sprintf("日模型%d的班次3对应的人员班次%d不存在!",dms.DayModelTab.Daymodelnr, dms.DayModelTab.S3Workshiftnr))
return
}
nextStartPoint = wssrv.Wsstab.SBeg
if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB1Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB1End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB2Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB2End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB3Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB3End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB4Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB4End
dms.LineArray = append(dms.LineArray, lssrv)
}
if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SB5Beg
lssrv.GetDuration()
nextStartPoint = wssrv.Wsstab.SB5End
dms.LineArray = append(dms.LineArray, lssrv)
}
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = wssrv.Wsstab.SEnd
lssrv.GetDuration()
dms.LineArray = append(dms.LineArray, lssrv)
}
}else{
// 班次1
if dms.DayModelTab.S1toggle > 0 {
nextStartPoint = dms.DayModelTab.S1Beg
if dms.DayModelTab.S1B1End > 0 && dms.DayModelTab.S1B1End > dms.DayModelTab.S1B1Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S1B1Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S1B1End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S1B2End > 0 && dms.DayModelTab.S1B2End > dms.DayModelTab.S1B2Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S1B2Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S1B2End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S1B3End > 0 && dms.DayModelTab.S1B3End > dms.DayModelTab.S1B3Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S1B3Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S1B3End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S1B4End > 0 && dms.DayModelTab.S1B4End > dms.DayModelTab.S1B4Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S1B4Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S1B4End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S1B5End > 0 && dms.DayModelTab.S1B5End > dms.DayModelTab.S1B5Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S1B5Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S1B5End
dms.LineArray = append(dms.LineArray, lssrv)
}
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S1End
lssrv.GetDuration()
dms.LineArray = append(dms.LineArray, lssrv)
}
// 班次2
if dms.DayModelTab.S2toggle > 0 {
nextStartPoint = dms.DayModelTab.S2Beg
if dms.DayModelTab.S2B1End > 0 && dms.DayModelTab.S2B1End > dms.DayModelTab.S2B1Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S2B1Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S2B1End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S2B2End > 0 && dms.DayModelTab.S2B2End > dms.DayModelTab.S2B2Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S2B2Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S2B2End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S2B3End > 0 && dms.DayModelTab.S2B3End > dms.DayModelTab.S2B3Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S2B3Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S2B3End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S2B4End > 0 && dms.DayModelTab.S2B4End > dms.DayModelTab.S2B4Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S2B4Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S2B4End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S2B5End > 0 && dms.DayModelTab.S2B5End > dms.DayModelTab.S2B5Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S2B5Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S2B5End
dms.LineArray = append(dms.LineArray, lssrv)
}
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S2End
lssrv.GetDuration()
dms.LineArray = append(dms.LineArray, lssrv)
}
// 班次2
if dms.DayModelTab.S3toggle > 0 {
nextStartPoint = dms.DayModelTab.S3Beg
if dms.DayModelTab.S3B1End > 0 && dms.DayModelTab.S3B1End > dms.DayModelTab.S3B1Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S3B1Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S3B1End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S3B2End > 0 && dms.DayModelTab.S3B2End > dms.DayModelTab.S3B2Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S3B2Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S3B2End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S3B3End > 0 && dms.DayModelTab.S3B3End > dms.DayModelTab.S3B3Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S3B3Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S3B3End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S3B4End > 0 && dms.DayModelTab.S3B4End > dms.DayModelTab.S3B4Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S3B4Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S3B4End
dms.LineArray = append(dms.LineArray, lssrv)
}
if dms.DayModelTab.S3B5End > 0 && dms.DayModelTab.S3B5End > dms.DayModelTab.S3B5Beg {
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S3B5Beg
lssrv.GetDuration()
nextStartPoint = dms.DayModelTab.S3B5End
dms.LineArray = append(dms.LineArray, lssrv)
}
lssrv = LineSegementSrv{}
lssrv.StartSecond = nextStartPoint
lssrv.EndSecond = dms.DayModelTab.S3End
lssrv.GetDuration()
dms.LineArray = append(dms.LineArray, lssrv)
}
}
tmsrv.DayModelDict[dms.DayModelNr] = dms
}
return return
} }

+ 33
- 3
schedule/WorkLine.Ctrl.go View File

@ -10,6 +10,7 @@ import (
) )
type WorklineSrv struct { type WorklineSrv struct {
PlantNr int
WorklineId string WorklineId string
WorklineTab models.Workline WorklineTab models.Workline
RelCtrlWay string RelCtrlWay string
@ -21,16 +22,19 @@ type WorklineSrv struct {
SchedTaskArray []TaskSrv // 所有调度到当前产线的生产任务 SchedTaskArray []TaskSrv // 所有调度到当前产线的生产任务
TimeCurve TimeCurveSrv // 加载完时间模型后的时间曲线 TimeCurve TimeCurveSrv // 加载完时间模型后的时间曲线
SchedTimeCurve TimeCurveSrv // 调度过程中动态计算的时间曲线 SchedTimeCurve TimeCurveSrv // 调度过程中动态计算的时间曲线
WorkShiftEffDict map[string]models.Worklineworkshiftlst // 产线排班表
WorkShiftArray []WorkShiftSrv // 产线班次列表 WorkShiftArray []WorkShiftSrv // 产线班次列表
WorkLoadArray []WorkLoadSrv // 产线负载 WorkLoadArray []WorkLoadSrv // 产线负载
} }
// 初始化产线对象 // 初始化产线对象
func(wlsrv *WorklineSrv)Init(wltab models.Workline){ func(wlsrv *WorklineSrv)Init(wltab models.Workline){
wlsrv.PlantNr = wltab.Plantnr
wlsrv.WorklineId = wltab.Worklineid wlsrv.WorklineId = wltab.Worklineid
wlsrv.WorklineTab = wltab wlsrv.WorklineTab = wltab
wlsrv.DayModelArray = []DayModelSrv{} wlsrv.DayModelArray = []DayModelSrv{}
wlsrv.DayModelIdxDict = make(map[string]int) wlsrv.DayModelIdxDict = make(map[string]int)
wlsrv.WorkShiftEffDict = make(map[string]models.Worklineworkshiftlst)
wlsrv.SchedTaskArray = []TaskSrv{} wlsrv.SchedTaskArray = []TaskSrv{}
wlsrv.SchedTaskList = list.New() wlsrv.SchedTaskList = list.New()
wlsrv.TimeCurve = TimeCurveSrv{} wlsrv.TimeCurve = TimeCurveSrv{}
@ -39,8 +43,34 @@ func(wlsrv *WorklineSrv)Init(wltab models.Workline){
wlsrv.WorkLoadArray = []WorkLoadSrv{} wlsrv.WorkLoadArray = []WorkLoadSrv{}
} }
// 加载指定时段内的班次实际出勤数据
func(wlsrv *WorklineSrv)LoadWorkShiftData(startdate, enddate time.Time)(err error){
var(
i int
key, st,et string
wlwstab models.Worklineworkshiftlst
wlwstablst []models.Worklineworkshiftlst
)
st = GetYMDString(startdate)
et = GetYMDString(enddate)
// 初始化
wlsrv.WorkShiftEffDict = make(map[string]models.Worklineworkshiftlst)
// 加载指定日期范围内的产线排班数据
wlwstab = models.Worklineworkshiftlst{Plantnr: wlsrv.PlantNr}
if wlwstablst, err = wlwstab.GetWorkLineWorkShiftData(wlsrv.WorklineId, st, et); err != nil {
err = errors.New(fmt.Sprintf("无法获取产线%s的排班数据%v!",wlsrv.WorklineId, err))
return
}
for i = 0; i < len(wlwstablst); i++ {
key = wlwstablst[i].Workday + strconv.Itoa(wlwstablst[i].Workshiftnr)
wlsrv.WorkShiftEffDict[key] = wlwstablst[i]
}
return
}
// 将任务数组转化成列表 // 将任务数组转化成列表
func(wlsrv *WorklineSrv)GetLineList(){
func(wlsrv *WorklineSrv)GetLineTaskList(){
var( var(
task TaskSrv task TaskSrv
) )
@ -53,7 +83,7 @@ func(wlsrv *WorklineSrv)GetLineList(){
} }
// 将任务列表转化成数组 // 将任务列表转化成数组
func(wlsrv *WorklineSrv)GetLineArray(){
func(wlsrv *WorklineSrv)GetLineTaskArray(){
var( var(
e *list.Element e *list.Element
task *TaskSrv task *TaskSrv
@ -107,7 +137,7 @@ func(wlsrv *WorklineSrv)GetWorkDayList(tmsrv *TimeModelSrv)(err error){
} }
// 将产线工作日历指定的特殊日模型进行替换 // 将产线工作日历指定的特殊日模型进行替换
for i = 0; i < len(calsrv.WorkCalTab.Itemlst); i++ { for i = 0; i < len(calsrv.WorkCalTab.Itemlst); i++ {
if idx, ok = wlsrv.DayModelIdxDict[strconv.Itoa(calsrv.WorkCalTab.Itemlst[i].Workdate)]; ok{
if idx, ok = wlsrv.DayModelIdxDict[calsrv.WorkCalTab.Itemlst[i].Workdate]; ok{
daymodelnr = calsrv.WorkCalTab.Itemlst[i].Daymodelnr daymodelnr = calsrv.WorkCalTab.Itemlst[i].Daymodelnr
if dmsrv, ok = tmsrv.DayModelDict[daymodelnr]; !ok{ if dmsrv, ok = tmsrv.DayModelDict[daymodelnr]; !ok{
err = errors.New(fmt.Sprintf("工作日历%d中在工作日%d指定的日模型%d不存在!",calsrv.CalendarNr,calsrv.WorkCalTab.Itemlst[i].Workdate,daymodelnr)) err = errors.New(fmt.Sprintf("工作日历%d中在工作日%d指定的日模型%d不存在!",calsrv.CalendarNr,calsrv.WorkCalTab.Itemlst[i].Workdate,daymodelnr))


+ 32
- 1
schedule/WorkShift.Ctrl.go View File

@ -1,9 +1,40 @@
package schedule package schedule
import "time"
import (
"leit.com/LAPP_GAAS_GFrame/models"
"time"
)
type WorkShiftSrv struct { type WorkShiftSrv struct {
WorkShiftNr int
ShiftType string ShiftType string
StartTime time.Time StartTime time.Time
EndTime time.Time EndTime time.Time
Wsstab models.Workshift
}
func( wss *WorkShiftSrv)Init(wstab models.Workshift){
wss.WorkShiftNr = wstab.Plantnr
wss.Wsstab = wstab
}
// 基于指定的人数获取效率
func( wss *WorkShiftSrv)GetEff(pesqty int)(eff float32){
var(
i int
found bool
)
found = false
for i = 0; i < len(wss.Wsstab.Efflst); i++ {
if pesqty >= wss.Wsstab.Efflst[i].Planpersonlclqty && pesqty <= wss.Wsstab.Efflst[i].Planpersonuclqty {
found = true
eff = wss.Wsstab.Efflst[i].Planefficiency
break
}
}
if !found {
eff = wss.Wsstab.Planefficiency
}
return
} }

Loading…
Cancel
Save