|
|
@ -1,18 +1,591 @@ |
|
|
|
package task |
|
|
|
|
|
|
|
import ( |
|
|
|
dal "LAPP_GAAS_GFrame_BACKEND/dao/base" |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/db" |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/utils" |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/web/middleware/glog" |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/web/models" |
|
|
|
"log" |
|
|
|
"context" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
func CreateTask() { |
|
|
|
tick := time.Tick(600 * time.Second) |
|
|
|
tick := time.Tick(60 * time.Second) |
|
|
|
for { |
|
|
|
select { |
|
|
|
case <-tick: |
|
|
|
pm := new(models.PmWo) |
|
|
|
pm.Finr = 100 |
|
|
|
pm.CreateOrder() |
|
|
|
CreateOrder() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//结构体
|
|
|
|
type TaskData struct { |
|
|
|
TaskType string |
|
|
|
PmAsset models.PmAsset |
|
|
|
PmTemplate models.PmTemplate |
|
|
|
PmService models.PmService |
|
|
|
} |
|
|
|
|
|
|
|
var taskChan = make(chan TaskData, 1000) //定义一个调度任务通道
|
|
|
|
|
|
|
|
/**** |
|
|
|
*生成维护工单 |
|
|
|
***************/ |
|
|
|
func CreateOrder() { |
|
|
|
|
|
|
|
//创建继承Baxkground的子节点Context
|
|
|
|
ctx, cancel := context.WithCancel(context.Background()) |
|
|
|
defer cancel() |
|
|
|
go doSth(ctx) |
|
|
|
|
|
|
|
data := make([]models.CreateData, 0) |
|
|
|
//第一步,多表联查出所有的数据
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
query := engine.Table("pm_asset") |
|
|
|
query = query.Join("INNER", "pm_asset_templatelst", "pm_asset.finr = pm_asset_templatelst.finr and pm_asset.assetid = pm_asset_templatelst.assetid") |
|
|
|
query = query.Join("INNER", "pm_template", "pm_template.finr = pm_asset_templatelst.finr and pm_template.maintemplatenr = pm_asset_templatelst.maintemplatenr") |
|
|
|
query = query.Join("INNER", "pm_template_servicelst", "pm_template.finr = pm_template_servicelst.finr and pm_template.maintemplatenr = pm_template_servicelst.maintemplatenr") |
|
|
|
query = query.Join("INNER", "pm_service", "pm_service.finr = pm_template_servicelst.finr and pm_service.mainserviceid = pm_template_servicelst.mainservicenr") |
|
|
|
|
|
|
|
query = query.Where("pm_asset.finr = ? and pm_service.schedtype = ?", 100,"AUTO") |
|
|
|
err := query.Find(&data) |
|
|
|
if err != nil { |
|
|
|
return |
|
|
|
} |
|
|
|
//第二步,把所有的服务调度放到channel
|
|
|
|
for _, v := range data { |
|
|
|
//判断激活状态
|
|
|
|
if utils.ValueIsEmpty(v.PmService.Enabled) { |
|
|
|
continue |
|
|
|
} |
|
|
|
dataone := TaskData{} |
|
|
|
dataone.PmService = v.PmService |
|
|
|
dataone.PmTemplate = v.PmTemplate |
|
|
|
dataone.PmAsset = v.PmAsset |
|
|
|
//判断taskType
|
|
|
|
if v.PmService.Maintbydate > 0 { |
|
|
|
dataone.TaskType = "A" //A是按照日期维护
|
|
|
|
} else if v.PmService.Maintbyhour > 0 { |
|
|
|
dataone.TaskType = "B" //B是按照小时维护
|
|
|
|
} else if v.PmService.Maintbymileage > 0 { |
|
|
|
dataone.TaskType = "C" //C是按照仪表值维护
|
|
|
|
} else if v.PmService.Needschedule > 0 { |
|
|
|
dataone.TaskType = "D" //D是按照调度维护
|
|
|
|
} else { |
|
|
|
continue |
|
|
|
} |
|
|
|
taskChan <- dataone |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//生成任务工单
|
|
|
|
func doSth(ctx context.Context) { |
|
|
|
//第三步,启动协程,从channel里读取数据,根据服务维护日期进入不同的方法里
|
|
|
|
for { |
|
|
|
select { |
|
|
|
case <-ctx.Done(): |
|
|
|
return |
|
|
|
case task, ok := <-taskChan: |
|
|
|
|
|
|
|
if !ok { |
|
|
|
log.Println("调度生成终止") |
|
|
|
return //停机退出
|
|
|
|
} |
|
|
|
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) |
|
|
|
timelen := int(time1.Unix()) - int(time2.Unix()) |
|
|
|
timeunit := task.PmService.Duedateinterval |
|
|
|
glog.InfoExtln("维护工单A", "Mainservicenr:", task.PmService.Mainserviceid) |
|
|
|
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 { |
|
|
|
|
|
|
|
//判断是否已经生成了维护工单,如果生成了,跳过
|
|
|
|
pms := new(models.PmWo) |
|
|
|
pms.Finr = task.PmService.Finr |
|
|
|
pms.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pms.Assetid = task.PmAsset.Assetid |
|
|
|
tem, err := pms.SelectPmWoOne() |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("维护工单A", "tem.Mainservicenr:", tem.Mainservicenr) |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
//判断是否添加了服务
|
|
|
|
t2now, _ := utils.TimeParse(tem.Schedbegtime) |
|
|
|
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) |
|
|
|
|
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = 100 |
|
|
|
//生成ID
|
|
|
|
woid, err := snr.GetNextSnr("WOID") |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
//符合逻辑生成维护工单
|
|
|
|
pm := new(models.PmWo) |
|
|
|
pm.Finr = task.PmService.Finr |
|
|
|
pm.Maintwoid = woid |
|
|
|
pm.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pm.Descr = task.PmService.Descr |
|
|
|
pm.Status = 26 |
|
|
|
pm.Priority = task.PmService.Priority |
|
|
|
pm.Assetid = task.PmAsset.Assetid |
|
|
|
pm.Plbegdat = utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
pm.Schedbegtime = utils.TimeFormat(today, "yyyyMMddHHmmss") |
|
|
|
endtime = today.AddDate(0, 0, timeunit) |
|
|
|
pm.Schedendtime = utils.TimeFormat(endtime, "yyyyMMddHHmmss") |
|
|
|
pm.Actbegtime = utils.TimeFormat(today, "yyyyMMddHHmmss") |
|
|
|
pm.Actendtime = utils.TimeFormat(endtime, "yyyyMMddHHmmss") |
|
|
|
//查询当天是否是工作日,如果是跳过
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.Finr, "pm_service") |
|
|
|
ok := dao.IsWorkDate(t1) |
|
|
|
if !ok{ |
|
|
|
result,err :=dao.SelectNearWorkDate(t1) |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
if result == nil{ |
|
|
|
continue |
|
|
|
}else{ |
|
|
|
Acttime := result.WorkDate.Restore() |
|
|
|
pm.Actbegtime = utils.TimeFormat(Acttime, "yyyyMMddHHmmss") |
|
|
|
Actendtime := Acttime.AddDate(0,0,timeunit) |
|
|
|
glog.InfoExtln("维护工单A", "Actendtime:", Actendtime) |
|
|
|
pm.Actendtime = utils.TimeFormat(Actendtime, "yyyyMMddHHmmss") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
pm.Mainttype = task.PmService.Mainttype |
|
|
|
pm.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
pm.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err = pm.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
me := new(models.PmServiceAttrlst) |
|
|
|
me.Finr = task.PmService.Finr |
|
|
|
me.Mainserviceid = task.PmService.Mainserviceid |
|
|
|
data, err := me.SelectAll() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
//生成属性
|
|
|
|
for _, v := range data { |
|
|
|
at := new(models.PmWoAttrlst) |
|
|
|
at.Finr = v.Finr |
|
|
|
at.Descr = v.Descr |
|
|
|
at.Mainservicenr = v.Mainserviceid |
|
|
|
at.Maintwoid = woid |
|
|
|
at.Pos = v.Pos |
|
|
|
at.Parameter = v.Parameter |
|
|
|
at.Paravalue = v.Paravalue |
|
|
|
at.Attrnr = v.Attrnr |
|
|
|
at.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
at.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err := at.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
case "B": |
|
|
|
today := utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
//查询当天是否是工作日,如果是跳过
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.Finr, "pm_service") |
|
|
|
ok := dao.IsWorkDate(today) |
|
|
|
if !ok{ |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
//逻辑:起始时间+间隔时间,
|
|
|
|
t1 := utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
//判断是否已经生成了维护工单,如果生成了,跳过
|
|
|
|
pms := new(models.PmWo) |
|
|
|
pms.Finr = task.PmService.Finr |
|
|
|
pms.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pms.Assetid = task.PmAsset.Assetid |
|
|
|
tem, err := pms.SelectPmWoOne() |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("维护工单B", "err:", err) |
|
|
|
continue |
|
|
|
} |
|
|
|
glog.InfoExtln("维护工单B", "tem:", tem) |
|
|
|
time2, _ := utils.TimeParse(tem.Schedbegtime) |
|
|
|
time1, _ := utils.TimeParse(t1) |
|
|
|
timelen := int(time1.Unix()) - int(time2.Unix()) |
|
|
|
timeunit := task.PmService.Duehourinterval |
|
|
|
|
|
|
|
glog.InfoExtln("维护工单B", "Mainservicenr:", task.PmService.Mainserviceid) |
|
|
|
glog.InfoExtln("维护工单B", "tem.Schedbegtime:", tem.Schedbegtime) |
|
|
|
glog.InfoExtln("维护工单B", "timelen:", timelen) |
|
|
|
glog.InfoExtln("维护工单B", "timeunit:", timeunit) |
|
|
|
if (timelen - timeunit*3600) > 0 { |
|
|
|
|
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = 100 |
|
|
|
//生成ID
|
|
|
|
woid, err := snr.GetNextSnr("WOID") |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("维护工单B", "err:", err) |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
//查询当天是否是工作日,如果是跳过
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.Finr, "pm_service") |
|
|
|
res := dao.IsWorkDate(today) |
|
|
|
if !res{ |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
//符合逻辑生成维护工单
|
|
|
|
pm := new(models.PmWo) |
|
|
|
pm.Finr = task.PmService.Finr |
|
|
|
pm.Maintwoid = woid |
|
|
|
pm.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pm.Descr = task.PmService.Descr |
|
|
|
pm.Status = 26 |
|
|
|
pm.Priority = task.PmService.Priority |
|
|
|
pm.Assetid = task.PmAsset.Assetid |
|
|
|
pm.Plbegdat = utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
timeNow := time.Now() |
|
|
|
pm.Schedbegtime = utils.TimeFormat(timeNow, "yyyyMMddHHmmss") |
|
|
|
//计算结束时间
|
|
|
|
endtime := timeNow.Add(time.Duration(timeunit)*time.Hour) |
|
|
|
glog.InfoExtln("维护工单B", "timeunit:", timeunit) |
|
|
|
pm.Schedendtime = utils.TimeFormat(endtime, "yyyyMMddHHmmss") |
|
|
|
pm.Actbegtime = utils.TimeFormat(timeNow, "yyyyMMddHHmmss") |
|
|
|
pm.Actendtime = utils.TimeFormat(endtime, "yyyyMMddHHmmss") |
|
|
|
pm.Mainttype = task.PmService.Mainttype |
|
|
|
pm.Credatuz = utils.TimeFormat(timeNow, "yyyyMMddHHmmss") |
|
|
|
pm.Lastmodif = utils.TimeFormat(timeNow, "yyyyMMddHHmmss") |
|
|
|
err = pm.Add() |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("维护工单B", "err:", err) |
|
|
|
continue |
|
|
|
} |
|
|
|
me := new(models.PmServiceAttrlst) |
|
|
|
me.Finr = task.PmService.Finr |
|
|
|
me.Mainserviceid = task.PmService.Mainserviceid |
|
|
|
data, err := me.SelectAll() |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("维护工单B", "err:", err) |
|
|
|
continue |
|
|
|
} |
|
|
|
//生成属性
|
|
|
|
for _, v := range data { |
|
|
|
at := new(models.PmWoAttrlst) |
|
|
|
at.Finr = v.Finr |
|
|
|
at.Descr = v.Descr |
|
|
|
at.Mainservicenr = v.Mainserviceid |
|
|
|
at.Maintwoid = woid |
|
|
|
at.Pos = v.Pos |
|
|
|
at.Parameter = v.Parameter |
|
|
|
at.Paravalue = v.Paravalue |
|
|
|
at.Attrnr = v.Attrnr |
|
|
|
at.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
at.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err := at.Add() |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("维护工单B", "err:", err) |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
case "C": |
|
|
|
today := utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
//查询当天是否是工作日,如果是跳过
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.Finr, "pm_service") |
|
|
|
ok := dao.IsWorkDate(today) |
|
|
|
if !ok{ |
|
|
|
continue |
|
|
|
} |
|
|
|
//逻辑:仪表值
|
|
|
|
//第一步:查询资产阈值表,判断是否是触发状态
|
|
|
|
pma := new(models.PmAssetKpi) |
|
|
|
pma.Finr = task.PmAsset.Finr |
|
|
|
pma.Mainserviceid = utils.ValueToString(task.PmService.Mainserviceid, "") |
|
|
|
info, err := pma.SelectAll() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
for _, pmaInfo := range info { |
|
|
|
switch pmaInfo.Kpitype { |
|
|
|
case 1: |
|
|
|
if pmaInfo.Triggerstatus == 1 { |
|
|
|
continue |
|
|
|
} |
|
|
|
if pmaInfo.Thresholdval < pmaInfo.Actualval { |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
//第二步:生成维护工单,
|
|
|
|
//逻辑:根据调度时间维护
|
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = 100 |
|
|
|
//生成ID
|
|
|
|
woid, err := snr.GetNextSnr("WOID") |
|
|
|
log.Printf("流水号id:%v", woid) |
|
|
|
if err != nil { |
|
|
|
return |
|
|
|
} |
|
|
|
//符合逻辑生成维护工单
|
|
|
|
pm := new(models.PmWo) |
|
|
|
pm.Finr = task.PmService.Finr |
|
|
|
pm.Maintwoid = woid |
|
|
|
pm.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pm.Descr = task.PmService.Descr |
|
|
|
pm.Status = 26 |
|
|
|
pm.Priority = task.PmService.Priority |
|
|
|
pm.Assetid = task.PmAsset.Assetid |
|
|
|
pm.Plbegdat = utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
pm.Schedbegtime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
timenow := utils.ValueToString(task.PmService.Maintimelen, "") |
|
|
|
m, _ := time.ParseDuration(timenow + "h") |
|
|
|
pm.Schedendtime = utils.TimeFormat(time.Now().Add(m), "yyyyMMddHHmmss") |
|
|
|
pm.Actbegtime = pm.Schedbegtime |
|
|
|
pm.Actendtime = pm.Schedendtime |
|
|
|
pm.Mainttype = task.PmService.Mainttype |
|
|
|
pm.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
pm.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err = pm.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
me := new(models.PmServiceAttrlst) |
|
|
|
me.Finr = task.PmService.Finr |
|
|
|
me.Mainserviceid = task.PmService.Mainserviceid |
|
|
|
data, err := me.SelectAll() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
//生成属性
|
|
|
|
for _, v := range data { |
|
|
|
at := new(models.PmWoAttrlst) |
|
|
|
at.Finr = v.Finr |
|
|
|
at.Descr = v.Descr |
|
|
|
at.Mainservicenr = v.Mainserviceid |
|
|
|
at.Maintwoid = woid |
|
|
|
at.Pos = v.Pos |
|
|
|
at.Parameter = v.Parameter |
|
|
|
at.Paravalue = v.Paravalue |
|
|
|
at.Attrnr = v.Attrnr |
|
|
|
at.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
at.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err := at.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
//第三步:锁定触发器状态
|
|
|
|
pmu := new(models.PmAssetKpi) |
|
|
|
pmu.Finr = 100 |
|
|
|
pmu.Triggerstatus = 1 |
|
|
|
pmu.Assetid = utils.ValueToString(task.PmAsset.Assetid, "") |
|
|
|
err = pma.Update() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
case 2: |
|
|
|
if pmaInfo.Counterval < pmaInfo.Countercycleval { |
|
|
|
continue |
|
|
|
} |
|
|
|
//第二步:生成维护工单,
|
|
|
|
//逻辑:根据调度时间维护
|
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = 100 |
|
|
|
//生成ID
|
|
|
|
woid, err := snr.GetNextSnr("WOID") |
|
|
|
log.Printf("流水号id:%v", woid) |
|
|
|
if err != nil { |
|
|
|
return |
|
|
|
} |
|
|
|
//符合逻辑生成维护工单
|
|
|
|
pm := new(models.PmWo) |
|
|
|
pm.Finr = task.PmService.Finr |
|
|
|
pm.Maintwoid = woid |
|
|
|
pm.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pm.Descr = task.PmService.Descr |
|
|
|
pm.Status = 26 |
|
|
|
pm.Priority = task.PmService.Priority |
|
|
|
pm.Assetid = task.PmAsset.Assetid |
|
|
|
pm.Plbegdat = utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
pm.Schedbegtime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
timenow := utils.ValueToString(task.PmService.Maintimelen, "") |
|
|
|
m, _ := time.ParseDuration(timenow + "h") |
|
|
|
pm.Schedendtime = utils.TimeFormat(time.Now().Add(m), "yyyyMMddHHmmss") |
|
|
|
pm.Actbegtime = pm.Schedbegtime |
|
|
|
pm.Actendtime = pm.Schedendtime |
|
|
|
pm.Mainttype = task.PmService.Mainttype |
|
|
|
pm.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
pm.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err = pm.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
me := new(models.PmServiceAttrlst) |
|
|
|
me.Finr = task.PmService.Finr |
|
|
|
me.Mainserviceid = task.PmService.Mainserviceid |
|
|
|
data, err := me.SelectAll() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
//生成属性
|
|
|
|
for _, v := range data { |
|
|
|
at := new(models.PmWoAttrlst) |
|
|
|
at.Finr = v.Finr |
|
|
|
at.Descr = v.Descr |
|
|
|
at.Mainservicenr = v.Mainserviceid |
|
|
|
at.Maintwoid = woid |
|
|
|
at.Pos = v.Pos |
|
|
|
at.Parameter = v.Parameter |
|
|
|
at.Paravalue = v.Paravalue |
|
|
|
at.Attrnr = v.Attrnr |
|
|
|
at.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
at.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err := at.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
//第三步:计数清零
|
|
|
|
pmu := new(models.PmAssetKpi) |
|
|
|
pmu.Finr = 100 |
|
|
|
pmu.Countercycleval = 1 |
|
|
|
pmu.Assetid = utils.ValueToString(task.PmAsset.Assetid, "") |
|
|
|
err = pma.Update() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
case "D": |
|
|
|
today := utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
//查询当天是否是工作日,如果是跳过
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.Finr, "pm_service") |
|
|
|
ok := dao.IsWorkDate(today) |
|
|
|
if !ok{ |
|
|
|
continue |
|
|
|
} |
|
|
|
//逻辑:起始时间+间隔时间,
|
|
|
|
//判断是否已经生成了维护工单,如果生成了,跳过
|
|
|
|
pms := new(models.PmWo) |
|
|
|
pms.Finr = task.PmService.Finr |
|
|
|
pms.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pms.Assetid = task.PmAsset.Assetid |
|
|
|
tem, err := pms.SelectPmWoOne() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
time2, _ := utils.TimeParse(tem.Schedbegtime) |
|
|
|
time1, _ := utils.TimeParseyyyyMMdd(today) |
|
|
|
timelen := int(time1.Unix()) - int(time2.Unix()) |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
if timelen >= 0 { |
|
|
|
//逻辑:根据调度时间维护
|
|
|
|
snr := new(models.Snrtab) |
|
|
|
snr.Finr = 100 |
|
|
|
//生成ID
|
|
|
|
woid, err := snr.GetNextSnr("WOID") |
|
|
|
log.Printf("流水号id:%v", woid) |
|
|
|
if err != nil { |
|
|
|
return |
|
|
|
} |
|
|
|
//符合逻辑生成维护工单
|
|
|
|
pm := new(models.PmWo) |
|
|
|
pm.Finr = task.PmService.Finr |
|
|
|
pm.Maintwoid = woid |
|
|
|
pm.Mainservicenr = task.PmService.Mainserviceid |
|
|
|
pm.Descr = task.PmService.Descr |
|
|
|
pm.Status = 26 |
|
|
|
pm.Priority = task.PmService.Priority |
|
|
|
pm.Assetid = task.PmAsset.Assetid |
|
|
|
pm.Plbegdat = utils.TimeFormat(time.Now(), "yyyyMMdd") |
|
|
|
pm.Schedbegtime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
timenow := utils.ValueToString(task.PmService.Maintimelen, "") |
|
|
|
m, _ := time.ParseDuration(timenow + "h") |
|
|
|
pm.Schedendtime = utils.TimeFormat(time.Now().Add(m), "yyyyMMddHHmmss") |
|
|
|
pm.Actbegtime = pm.Schedbegtime |
|
|
|
pm.Actendtime = pm.Schedendtime |
|
|
|
pm.Mainttype = task.PmService.Mainttype |
|
|
|
pm.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
pm.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err = pm.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
me := new(models.PmServiceAttrlst) |
|
|
|
me.Finr = task.PmService.Finr |
|
|
|
me.Mainserviceid = task.PmService.Mainserviceid |
|
|
|
data, err := me.SelectAll() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
//生成属性
|
|
|
|
for _, v := range data { |
|
|
|
at := new(models.PmWoAttrlst) |
|
|
|
at.Finr = v.Finr |
|
|
|
at.Descr = v.Descr |
|
|
|
at.Mainservicenr = v.Mainserviceid |
|
|
|
at.Maintwoid = woid |
|
|
|
at.Pos = v.Pos |
|
|
|
at.Parameter = v.Parameter |
|
|
|
at.Paravalue = v.Paravalue |
|
|
|
at.Attrnr = v.Attrnr |
|
|
|
at.Credatuz = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
at.Lastmodif = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") |
|
|
|
err := at.Add() |
|
|
|
if err != nil { |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
default: |
|
|
|
//进行非抢占式任务
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |