Browse Source

LEO commit

master
leonidxue 3 years ago
parent
commit
091d9bf7ac
3 changed files with 79 additions and 33 deletions
  1. +22
    -16
      schedule/Schedule_test.go
  2. +39
    -16
      schedule/Scheduler.Ctrl.go
  3. +18
    -1
      schedule/WorkLine.Ctrl.go

+ 22
- 16
schedule/Schedule_test.go View File

@ -1,8 +1,6 @@
package schedule
import (
"fmt"
"leit.com/LAPP_GAAS_GFrame/models"
"testing"
"time"
)
@ -14,29 +12,37 @@ func TestScheduler(t *testing.T) {
m1 time.Month
schedeng SchedulerSrv
startDate, endDate time.Time
worklinetype string
)
// 建立数据库连接
// 初始化scheduler,默认从当天起计划5天
y1,m1,d1 = time.Now().Date()
startDate = time.Date(y1, m1, d1, 0, 0, 0, 0, time.UTC)
endDate = startDate.Add(24*5*time.Hour)
schedeng = SchedulerSrv{StartDate: startDate,EndDate: endDate}
// 指定加载的产线类型
worklinetype= ""
// 加载主数据
schedeng.LoadWorklineData()
// 加载激活的项目主数据
schedeng.LoadProjectData()
// 加载时间模型,基于调度引擎指定的时间区间
schedeng.LoadTimemodelData()
// 加载产品换型主数据
schedeng.LoadSetupData()
// 加载工单数据
// 加载产线主数据
schedeng.LoadWorklineData(worklinetype)
// 加载产线班组计划出勤数据
schedeng.LoadWorkLineWorkShiftData()
// 生成产线的时间曲线
schedeng.GenerateWorkLineTimeCurve()
// 加载工单数据(调度任务)
schedeng.LoadSchedTaskData()
// 优先处理生产中、已派工和已计划的工单
// 对调度任务进行排序
schedeng.SortUnplannedTask()
// 依次调度未计划工单
}
func TestLastModify(t *testing.T) {
prodtab := models.OmProdorder{}
SetTableLastModify(&prodtab,prodtab, MODIFY_MODE_CREATE, "leo")
fmt.Println(prodtab.Lastuser, prodtab.Createtime)
schedeng.AutoSchedule()
// 输出排程结果
schedeng.PrintScheduleResult()
}

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

@ -22,6 +22,27 @@ type SchedulerSrv struct {
UnPlannedTaskArray []TaskSrv // 未计划的任务队列
}
// 加载激活的项目
func(schedsrv *SchedulerSrv)LoadProjectData()(err error){
var(
i int
projtab models.MeProject
projtablst []models.MeProject
)
// 初始化
schedsrv.ProjDict = make(map[string]models.MeProject)
// 读取激活的项目数据
projtab = models.MeProject{Plantnr: schedsrv.PlantNr}
if projtablst, err = projtab.SelectActiveProjects(); err != nil{
err = errors.New(fmt.Sprintf("获取工厂%d的激活的项目失败%v !", schedsrv.PlantNr, err))
return
}
// 加载项目
for i = 0; i < len(projtablst); i++ {
schedsrv.ProjDict[projtablst[i].Projectid] = projtablst[i]
}
return
}
// 加载产线及其相关数据
func(schedsrv *SchedulerSrv)LoadWorklineData(wltype string)(err error){
var(
@ -95,25 +116,17 @@ func(schedsrv *SchedulerSrv)LoadSetupData()(err error){
return
}
// 加载激活的项目
func(schedsrv *SchedulerSrv)LoadProjectData()(err error){
// 生成产线的调度曲线
func(schedsrv *SchedulerSrv)GenerateWorkLineTimeCurve()(err error){
var(
i int
projtab models.MeProject
projtablst []models.MeProject
wlsrv *WorklineSrv
)
// 初始化
schedsrv.ProjDict = make(map[string]models.MeProject)
// 读取激活的项目数据
projtab = models.MeProject{Plantnr: schedsrv.PlantNr}
if projtablst, err = projtab.SelectActiveProjects(); err != nil{
err = errors.New(fmt.Sprintf("获取工厂%d的激活的项目失败%v !", schedsrv.PlantNr, err))
return
}
// 加载项目
for i = 0; i < len(projtablst); i++ {
schedsrv.ProjDict[projtablst[i].Projectid] = projtablst[i]
// 遍历产线
for _, wlsrv = range schedsrv.WorklineDict {
// 基于产线的时间模型和排班获取产线在指定时间区间内的时间线集合
}
return
}
// 加载调度任务
@ -770,4 +783,14 @@ func(schedsrv *SchedulerSrv)SortUnplannedTask(){
j := v.FieldByName("Create_time")
return i.String() < j.String()
})
}
// 调度引擎自动排程
func(schedsrv *SchedulerSrv)AutoSchedule()(err error){
return
}
// 打印调度引擎排程结果
func(schedsrv *SchedulerSrv)PrintScheduleResult()(err error){
return
}

+ 18
- 1
schedule/WorkLine.Ctrl.go View File

@ -43,7 +43,7 @@ func(wlsrv *WorklineSrv)Init(wltab models.Workline){
wlsrv.WorkLoadArray = []WorkLoadSrv{}
}
// 加载指定时段内的班次实际出勤数据
// 加载指定时段内的排班表:班次计划出勤数据
func(wlsrv *WorklineSrv)LoadWorkShiftData(startdate, enddate time.Time)(err error){
var(
i int
@ -285,4 +285,21 @@ func(wlsrv *WorklineSrv)CalHourlyWorkload(){
}
}
// 基于产线排班信息获取指定日期和班次的班次效率,如果不存在则返回班次标准效率1.0
func(wlsrv *WorklineSrv)GetWorkShiftEff(day string, wsnr int)(eff float32){
var (
key string
ok bool
perqty int
wlwsefftab models.Worklineworkshiftlst
)
eff = 1.0
key = day + strconv.Itoa(wsnr)
if wlwsefftab, ok = wlsrv.WorkShiftEffDict[key]; ok {
perqty = wlwsefftab.Personqty
}
return
}

Loading…
Cancel
Save