package task
|
|
|
|
import (
|
|
dal "LAPP_ACURA_MOM_BACKEND/dao/base"
|
|
dal_pm "LAPP_ACURA_MOM_BACKEND/dao/pm"
|
|
"LAPP_ACURA_MOM_BACKEND/db"
|
|
"LAPP_ACURA_MOM_BACKEND/grmi"
|
|
meta "LAPP_ACURA_MOM_BACKEND/meta/pm"
|
|
model "LAPP_ACURA_MOM_BACKEND/models/pm"
|
|
"LAPP_ACURA_MOM_BACKEND/utils"
|
|
"LAPP_ACURA_MOM_BACKEND/web/middleware/glog"
|
|
"context"
|
|
"log"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func CreateTask() {
|
|
tick := time.Tick(60 * time.Second)
|
|
for {
|
|
select {
|
|
case <-tick:
|
|
CreateOrder()
|
|
}
|
|
}
|
|
}
|
|
|
|
//结构体
|
|
type TaskData struct {
|
|
TaskType string
|
|
PmAsset model.Asset
|
|
PmTemplate model.Template
|
|
PmService model.Service
|
|
}
|
|
|
|
var taskChan = make(chan TaskData, 1000) //定义一个调度任务通道
|
|
|
|
/****
|
|
*生成维护工单
|
|
***************/
|
|
func CreateOrder() {
|
|
|
|
//创建继承Baxkground的子节点Context
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
go doSth(ctx)
|
|
|
|
data := make([]model.CreateData, 0)
|
|
//第一步,多表联查出所有的数据
|
|
engine := db.Eloquent.Master()
|
|
query := engine.Table("PM_ASSET")
|
|
query = query.Join("INNER", "PM_AssetTemplateLst", "PM_Asset.PlantNr = PM_AssetTemplateLst.PlantNr and PM_Asset.AssetNr = PM_AssetTemplateLst.AssetNr")
|
|
query = query.Join("INNER", "PM_Template", "PM_Template.PlantNr = PM_AssetTemplateLst.PlantNr and PM_Template.MainTemplateNr = PM_AssetTemplateLst.MainTemplateNr")
|
|
query = query.Join("INNER", "PM_TemplateServiceLst", "PM_Template.PlantNr = PM_TemplateServiceLst.PlantNr and PM_Template.MainTemplateNr = PM_TemplateServiceLst.MainTemplateNr")
|
|
query = query.Join("INNER", "PM_Service", "PM_Service.PlantNr = PM_TemplateServiceLst.PlantNr and PM_Service.MainServiceNr = PM_TemplateServiceLst.MainServiceNr")
|
|
|
|
query = query.Where("PM_Service.SchedType = ?", "AUTO")
|
|
err := query.Find(&data)
|
|
if err != nil {
|
|
return
|
|
}
|
|
//第二步,把所有的服务调度放到channel
|
|
for _, v := range data {
|
|
//判断激活状态
|
|
if utils.ValueIsEmpty(v.Service.EnabledToggle) {
|
|
continue
|
|
}
|
|
dataone := TaskData{}
|
|
dataone.PmService = v.Service
|
|
dataone.PmTemplate = v.Template
|
|
dataone.PmAsset = v.Asset
|
|
//判断taskType
|
|
if v.Service.MaintByDateToggle {
|
|
dataone.TaskType = "A" //A是按照日期维护
|
|
} else if v.Service.MaintByHourToggle {
|
|
dataone.TaskType = "B" //B是按照小时维护
|
|
} else if v.Service.MaintByMileageToggle {
|
|
dataone.TaskType = "C" //C是按照仪表值维护
|
|
} else if v.Service.NeedScheduleToggle {
|
|
dataone.TaskType = "D" //D是按照调度维护
|
|
} else {
|
|
continue
|
|
}
|
|
taskChan <- dataone
|
|
}
|
|
}
|
|
|
|
//生成任务工单
|
|
func doSth(ctx context.Context) {
|
|
engine := db.Eloquent.Master()
|
|
//第三步,启动协程,从channel里读取数据,根据服务维护日期进入不同的方法里
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
case task, ok := <-taskChan:
|
|
if !ok {
|
|
log.Println("调度生成终止")
|
|
return //停机退出
|
|
}
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
dao_workorder := dal_pm.NewWorkOrderDAO(session, task.PmService.PlantNr, "PM_Service")
|
|
snrDao := dal.NewSnrDAO(session, task.PmService.PlantNr, "PM_Service")
|
|
dao_serviceattrlst := dal_pm.NewServiceAttrLstDAO(session, task.PmService.PlantNr, "PM_Service")
|
|
dao_workorderattrlst := dal_pm.NewWorkOrderAttrLstDAO(session, task.PmService.PlantNr, "PM_Service")
|
|
dao_workcalendarlst := dal.NewWorkCalendarLstDAO(session, task.PmAsset.PlantNr, "PM_Service")
|
|
dao_AssetKpi := dal_pm.NewAssetKpiDAO(session, task.PmAsset.PlantNr, "PM_Service")
|
|
|
|
switch task.TaskType {
|
|
case "A":
|
|
//当前零点时间
|
|
today := utils.GetZeroTime(time.Now())
|
|
//逻辑:判断是否到了维护时间,(当前时间戳-起始时间戳)%间隔时间
|
|
t1 := utils.TimeFormat(time.Now(), "yyyyMMdd")
|
|
t2 := task.PmService.DueDateOn
|
|
time1, _ := utils.TimeParseyyyyMMdd(t1)
|
|
time2, _ := utils.TimeParseyyyyMMdd(t2.ToString())
|
|
timelen := int(time1.Unix()) - int(time2.Unix())
|
|
timeunit := task.PmService.DueDateInterval
|
|
glog.InfoExtln("维护工单A", "Mainservicenr:", task.PmService.MainServiceNr)
|
|
glog.InfoExtln("维护工单A", "t1:", t1)
|
|
glog.InfoExtln("维护工单A", "t2:", task.PmService.DueDateOn)
|
|
glog.InfoExtln("维护工单A", "timelen:", timelen)
|
|
glog.InfoExtln("维护工单A", "timeunit:", timeunit)
|
|
glog.InfoExtln("维护工单A", "res:", ((timelen / 86400) % timeunit))
|
|
if res := ((timelen / 86400) % timeunit); res == 0 {
|
|
//判断是否已经生成了维护工单,如果生成了,跳过
|
|
tem, err := dao_workorder.SelectLastOne(task.PmService.PlantNr,task.PmService.MainServiceNr,task.PmAsset.AssetNr)
|
|
if err!=nil {
|
|
glog.InfoExtln("维护工单A", "err:", err)
|
|
continue
|
|
}
|
|
//判断是否添加了服务
|
|
t2now, _ := utils.TimeParse(tem.ActBegTime.ToString())
|
|
endtime := t2now.AddDate(0, 0, timeunit)
|
|
//先把时间字符串格式化成相同的时间类型
|
|
nowtime, _ := utils.TimeParseyyyyMMdd(t1)
|
|
|
|
if nowtime.Before(endtime) {
|
|
//处理逻辑
|
|
glog.InfoExtln("维护工单A", "nowtime:", nowtime)
|
|
glog.InfoExtln("维护工单A", "endtime:", endtime)
|
|
continue
|
|
}
|
|
|
|
glog.InfoExtln("维护工单A", "endtime:", endtime)
|
|
|
|
workOrderId, err := snrDao.GetNextSnr("WorkOrder")
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
//符合逻辑生成维护工单
|
|
pm := new(model.WorkOrder)
|
|
pm.PlantNr = task.PmService.PlantNr
|
|
pm.MaintWorkOrderId = workOrderId
|
|
pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
|
|
pm.Descr = task.PmService.Descr
|
|
pm.Status = 26
|
|
pm.Priority = task.PmService.Priority
|
|
pm.AssetNr = task.PmAsset.AssetNr
|
|
pm.PlBegDat = grmi.Date(time.Now())
|
|
pm.SchedBegTime = grmi.DateTime(time.Now())
|
|
endtime = today.AddDate(0, 0, timeunit)
|
|
pm.SchedEndTime = grmi.DateTime(endtime)
|
|
pm.ActBegTime = grmi.DateTime(today)
|
|
pm.ActEndTime = grmi.DateTime(endtime)
|
|
//查询当天是否是工作日,如果是跳过
|
|
engine := db.Eloquent.Master()
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.PlantNr, "PM_Service")
|
|
ok := dao.IsWorkDate(t1)
|
|
if !ok {
|
|
result, err := dao.SelectNearWorkDate(t1)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
if result == nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
} else {
|
|
Acttime := result.WorkDate.Restore()
|
|
pm.ActBegTime = grmi.DateTime(Acttime)
|
|
Actendtime := Acttime.AddDate(0, 0, timeunit)
|
|
glog.InfoExtln("维护工单A", "Actendtime:", Actendtime)
|
|
pm.ActEndTime = grmi.DateTime(Actendtime)
|
|
}
|
|
}
|
|
|
|
pm.MaintType = task.PmService.MaintType
|
|
err = dao_workorder.InsertOne(pm)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
|
|
data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
//生成属性
|
|
for _, v := range data {
|
|
at := new(model.WorkOrderAttrLst)
|
|
at.PlantNr = v.PlantNr
|
|
at.Descr = v.Descr
|
|
at.MainServiceNr = v.MainServiceNr
|
|
at.MaintWorkOrderId = workOrderId
|
|
at.Pos = v.Pos
|
|
at.Parameter = v.Parameter
|
|
at.ParaValue = v.ParaValue
|
|
at.AttrNr = v.AttrNr
|
|
err := dao_workorderattrlst.InsertOne(at)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
session.Commit()
|
|
case "B":
|
|
today := utils.TimeFormat(time.Now(), "yyyyMMdd")
|
|
//查询当天是否是工作日,如果是跳过
|
|
engine := db.Eloquent.Master()
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
ok := dao_workcalendarlst.IsWorkDate(today)
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
//逻辑:起始时间+间隔时间,
|
|
t1 := utils.TimeFormat(time.Now(), "yyyyMMddHHmmss")
|
|
//判断是否已经生成了维护工单,如果生成了,跳过
|
|
tem, err := dao_workorder.SelectLastOne(task.PmService.PlantNr,task.PmService.MainServiceNr,task.PmAsset.AssetNr)
|
|
if err != nil{
|
|
glog.InfoExtln("维护工单B", "err:", err)
|
|
continue
|
|
}
|
|
|
|
glog.InfoExtln("维护工单B", "tem:", tem)
|
|
|
|
time2, _ := utils.TimeParse(tem.ActBegTime.ToString())
|
|
time1, _ := utils.TimeParse(t1)
|
|
timelen := int(time1.Unix()) - int(time2.Unix())
|
|
timeunit := task.PmService.DueHourInterval
|
|
|
|
glog.InfoExtln("维护工单B", "Mainservicenr:", task.PmService.MainServiceNr)
|
|
glog.InfoExtln("维护工单B", "tem.Actbegtime:", tem.ActBegTime)
|
|
glog.InfoExtln("维护工单B", "timelen:", timelen)
|
|
glog.InfoExtln("维护工单B", "timeunit:", timeunit)
|
|
if (timelen - timeunit*3600) > 0 {
|
|
workOrderId, err := snrDao.GetNextSnr("WorkOrder")
|
|
if err != nil {
|
|
glog.InfoExtln("维护工单B", "err:", err)
|
|
continue
|
|
}
|
|
|
|
//查询当天是否是工作日,如果是跳过
|
|
engine := db.Eloquent.Master()
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
res := dao_workcalendarlst.IsWorkDate(today)
|
|
if !res {
|
|
continue
|
|
}
|
|
|
|
//符合逻辑生成维护工单
|
|
pm := new(model.WorkOrder)
|
|
pm.PlantNr = task.PmService.PlantNr
|
|
pm.MaintWorkOrderId = workOrderId
|
|
pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
|
|
pm.Descr = task.PmService.Descr
|
|
pm.Status = 26
|
|
pm.Priority = task.PmService.Priority
|
|
pm.AssetNr = task.PmAsset.AssetNr
|
|
pm.PlBegDat = grmi.Date(time.Now())
|
|
timeNow := time.Now()
|
|
pm.SchedBegTime = grmi.DateTime(timeNow)
|
|
//计算结束时间
|
|
endtime := timeNow.Add(time.Duration(timeunit) * time.Hour)
|
|
glog.InfoExtln("维护工单B", "timeunit:", timeunit)
|
|
pm.SchedEndTime = grmi.DateTime(endtime)
|
|
pm.ActBegTime = grmi.DateTime(timeNow)
|
|
pm.ActEndTime = grmi.DateTime(endtime)
|
|
pm.MaintType = task.PmService.MaintType
|
|
err = dao_workorder.InsertOne(pm)
|
|
if err != nil {
|
|
glog.InfoExtln("维护工单B", "err:", err)
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
|
|
data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
|
|
if err != nil {
|
|
glog.InfoExtln("维护工单B", "err:", err)
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
//生成属性
|
|
for _, v := range data {
|
|
at := new(model.WorkOrderAttrLst)
|
|
at.PlantNr = v.PlantNr
|
|
at.Descr = v.Descr
|
|
at.MainServiceNr = v.MainServiceNr
|
|
at.MaintWorkOrderId = workOrderId
|
|
at.Pos = v.Pos
|
|
at.Parameter = v.Parameter
|
|
at.ParaValue = v.ParaValue
|
|
at.AttrNr = v.AttrNr
|
|
err := dao_workorderattrlst.InsertOne(at)
|
|
if err != nil {
|
|
glog.InfoExtln("维护工单B", "err:", err)
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
session.Commit()
|
|
case "C":
|
|
today := utils.TimeFormat(time.Now(), "yyyyMMdd")
|
|
//查询当天是否是工作日,如果是跳过
|
|
engine := db.Eloquent.Master()
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.PlantNr, "PM_Service")
|
|
ok := dao.IsWorkDate(today)
|
|
if !ok {
|
|
continue
|
|
}
|
|
//逻辑:仪表值
|
|
//第一步:查询资产阈值表,判断是否是触发状态
|
|
info, err := dao_AssetKpi.Select([]grmi.Predicate{meta.AssetKpi_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.AssetKpi_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
for _, pmaInfo := range info {
|
|
switch pmaInfo.KpiType {
|
|
case 1:
|
|
if pmaInfo.TriggerStatus == 1 {
|
|
continue
|
|
}
|
|
if pmaInfo.ThresholdVal < pmaInfo.ActualVal {
|
|
continue
|
|
}
|
|
|
|
//第二步:生成维护工单,
|
|
//逻辑:根据调度时间维护
|
|
workOrderId, err := snrDao.GetNextSnr("WorkOrder")
|
|
if err != nil {
|
|
continue
|
|
}
|
|
log.Printf("流水号id:%v", workOrderId)
|
|
if err != nil {
|
|
return
|
|
}
|
|
//符合逻辑生成维护工单
|
|
pm := new(model.WorkOrder)
|
|
pm.PlantNr = task.PmService.PlantNr
|
|
pm.MaintWorkOrderId = workOrderId
|
|
pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
|
|
pm.Descr = task.PmService.Descr
|
|
pm.Status = 26
|
|
pm.Priority = task.PmService.Priority
|
|
pm.AssetNr = task.PmAsset.AssetNr
|
|
pm.PlBegDat = grmi.Date(time.Now())
|
|
pm.SchedBegTime = grmi.DateTime(time.Now())
|
|
timenow := utils.ValueToString(task.PmService.MainTimeLen, "")
|
|
m, _ := time.ParseDuration(timenow + "h")
|
|
pm.SchedEndTime = grmi.DateTime(time.Now().Add(m))
|
|
pm.ActBegTime = pm.SchedBegTime
|
|
pm.ActEndTime = pm.SchedEndTime
|
|
pm.MaintType = task.PmService.MaintType
|
|
err = dao_workorder.InsertOne(pm)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
//生成属性
|
|
for _, v := range data {
|
|
at := new(model.WorkOrderAttrLst)
|
|
at.PlantNr = v.PlantNr
|
|
at.Descr = v.Descr
|
|
at.MainServiceNr = v.MainServiceNr
|
|
at.MaintWorkOrderId = workOrderId
|
|
at.Pos = v.Pos
|
|
at.Parameter = v.Parameter
|
|
at.ParaValue = v.ParaValue
|
|
at.AttrNr = v.AttrNr
|
|
err := dao_workorderattrlst.InsertOne(at)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
}
|
|
//第三步:锁定触发器状态
|
|
pmaInfo.TriggerStatus = 1
|
|
err = dao_AssetKpi.UpdateOne(&pmaInfo)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
|
|
case 2:
|
|
if pmaInfo.CounterVal < pmaInfo.CounterCycleVal {
|
|
continue
|
|
}
|
|
//第二步:生成维护工单,
|
|
//逻辑:根据调度时间维护
|
|
workOrderId, err := snrDao.GetNextSnr("WorkOrder")
|
|
if err != nil {
|
|
continue
|
|
}
|
|
log.Printf("流水号id:%v", workOrderId)
|
|
if err != nil {
|
|
return
|
|
}
|
|
//符合逻辑生成维护工单
|
|
pm := new(model.WorkOrder)
|
|
pm.PlantNr = task.PmService.PlantNr
|
|
pm.MaintWorkOrderId = workOrderId
|
|
pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
|
|
pm.Descr = task.PmService.Descr
|
|
pm.Status = 26
|
|
pm.Priority = task.PmService.Priority
|
|
pm.AssetNr = task.PmAsset.AssetNr
|
|
pm.PlBegDat = grmi.Date(time.Now())
|
|
pm.SchedBegTime = grmi.DateTime(time.Now())
|
|
timenow := utils.ValueToString(task.PmService.MainTimeLen, "")
|
|
m, _ := time.ParseDuration(timenow + "h")
|
|
pm.SchedEndTime = grmi.DateTime(time.Now().Add(m))
|
|
pm.ActBegTime = pm.SchedBegTime
|
|
pm.ActEndTime = pm.SchedEndTime
|
|
pm.MaintType = task.PmService.MaintType
|
|
|
|
dao_workorder.InsertOne(pm)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
//生成属性
|
|
for _, v := range data {
|
|
at := new(model.WorkOrderAttrLst)
|
|
at.PlantNr = v.PlantNr
|
|
at.Descr = v.Descr
|
|
at.MainServiceNr = v.MainServiceNr
|
|
at.MaintWorkOrderId = workOrderId
|
|
at.Pos = v.Pos
|
|
at.Parameter = v.Parameter
|
|
at.ParaValue = v.ParaValue
|
|
at.AttrNr = v.AttrNr
|
|
err := dao_workorderattrlst.InsertOne(at)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
}
|
|
//第三步:计数清零
|
|
pmaInfo.CounterCycleVal = 1
|
|
err = dao_AssetKpi.UpdateOne(&pmaInfo)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
session.Commit()
|
|
case "D":
|
|
today := utils.TimeFormat(time.Now(), "yyyyMMdd")
|
|
//查询当天是否是工作日,如果是跳过
|
|
engine := db.Eloquent.Master()
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
ok := dao_workcalendarlst.IsWorkDate(today)
|
|
if !ok {
|
|
continue
|
|
}
|
|
//逻辑:起始时间+间隔时间,
|
|
//判断是否已经生成了维护工单,如果生成了,跳过
|
|
tem, err := dao_workorder.SelectLastOne(task.PmService.PlantNr,task.PmService.MainServiceNr,task.PmAsset.AssetNr)
|
|
if err != nil {
|
|
glog.InfoExtln("维护工单D", "err:", err)
|
|
continue
|
|
}
|
|
time2, _ := utils.TimeParse(tem.ActBegTime.ToString())
|
|
time1, _ := utils.TimeParseyyyyMMdd(today)
|
|
timelen := int(time1.Unix()) - int(time2.Unix())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if timelen >= 0 {
|
|
//逻辑:根据调度时间维护
|
|
workOrderId, err := snrDao.GetNextSnr("WorkOrder")
|
|
log.Printf("流水号id:%v", workOrderId)
|
|
if err != nil {
|
|
return
|
|
}
|
|
//符合逻辑生成维护工单
|
|
pm := new(model.WorkOrder)
|
|
pm.PlantNr = task.PmService.PlantNr
|
|
pm.MaintWorkOrderId = workOrderId
|
|
pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
|
|
pm.Descr = task.PmService.Descr
|
|
pm.Status = 26
|
|
pm.Priority = task.PmService.Priority
|
|
pm.AssetNr = task.PmAsset.AssetNr
|
|
pm.PlBegDat = grmi.Date(time.Now())
|
|
pm.SchedBegTime = grmi.DateTime(time.Now())
|
|
timenow := utils.ValueToString(task.PmService.MainTimeLen, "")
|
|
m, _ := time.ParseDuration(timenow + "h")
|
|
pm.SchedEndTime = grmi.DateTime(time.Now().Add(m))
|
|
pm.ActBegTime = pm.SchedBegTime
|
|
pm.ActEndTime = pm.SchedEndTime
|
|
pm.MaintType = task.PmService.MaintType
|
|
err = dao_workorder.InsertOne(pm)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
|
|
if err != nil {
|
|
_ = session.Rollback()
|
|
continue
|
|
}
|
|
//生成属性
|
|
for _, v := range data {
|
|
at := new(model.WorkOrderAttrLst)
|
|
at.PlantNr = v.PlantNr
|
|
at.Descr = v.Descr
|
|
at.MainServiceNr = v.MainServiceNr
|
|
at.MaintWorkOrderId = workOrderId
|
|
at.Pos = v.Pos
|
|
at.Parameter = v.Parameter
|
|
at.ParaValue = v.ParaValue
|
|
at.AttrNr = v.AttrNr
|
|
err := dao_workorderattrlst.InsertOne(at)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
default:
|
|
//进行非抢占式任务
|
|
}
|
|
}
|
|
}
|
|
}
|