| | |
| | | package service |
| | | |
| | | import ( |
| | | "apsClient/conf" |
| | | "apsClient/constvar" |
| | | "apsClient/model" |
| | | "apsClient/model/response" |
| | | "fmt" |
| | | "github.com/jinzhu/gorm" |
| | | "github.com/spf13/cast" |
| | | "sync" |
| | | "time" |
| | |
| | | } |
| | | |
| | | const ( |
| | | PlcCacheKey = "plc:%v:%v" //plc:position:key |
| | | CurrentTaskCacheKey = "current_task" |
| | | CurrentProgressCacheKey = "current_progress:%v" //current_progress:position |
| | | PlcCacheKeyUpdateTime = "finish_number_update_time:%v" //finish_number_update_time:position |
| | | PlcCacheKey = "plc:%v:%v" //plc:channel:key |
| | | CurrentTaskCacheKey = "current_task:%v" //current_task:channel |
| | | CurrentProgressCacheKey = "current_progress:%v" //current_progress:channel |
| | | PlcCacheKeyUpdateTime = "finish_number_update_time:%v" //finish_number_update_time:channel |
| | | TaskStartTimeCache = "task_start_time:%v" //task_start_time:channel |
| | | TaskEndTimeCache = "task_end_time:%v" //task_end_time:channel |
| | | ) |
| | | |
| | | func PlcCacheGet(position int, key string) (interface{}, bool) { |
| | | return defaultCacheStore.Get(fmt.Sprintf(PlcCacheKey, position, key)) |
| | | func PlcCacheGet(channel int32, key string) (interface{}, bool) { |
| | | return defaultCacheStore.Get(fmt.Sprintf(PlcCacheKey, channel, key)) |
| | | } |
| | | |
| | | func PlcCacheSet(position int, key string, value interface{}) { |
| | | func PlcCacheSet(channel int32, key string, value interface{}) { |
| | | if key == constvar.PlcCacheKeyFinishNumber { |
| | | oldFinishNumber, exists := PlcCacheGet(position, key) |
| | | oldFinishNumber, exists := PlcCacheGet(channel, key) |
| | | if !exists || cast.ToInt(oldFinishNumber) != cast.ToInt(value) { //finishNumber有了变化,设置更新时间缓存 |
| | | FinishUpdateTimeSet(position, time.Now().Unix()) |
| | | FinishUpdateTimeSet(channel, time.Now().Unix()) |
| | | } |
| | | } |
| | | defaultCacheStore.Add(fmt.Sprintf(PlcCacheKey, position, key), value) |
| | | defaultCacheStore.Add(fmt.Sprintf(PlcCacheKey, channel, key), value) |
| | | } |
| | | |
| | | func FinishUpdateTimeGet(position int) interface{} { |
| | | val, ok := defaultCacheStore.Get(fmt.Sprintf(PlcCacheKeyUpdateTime, position)) |
| | | func FinishUpdateTimeGet(channel int32) interface{} { |
| | | val, ok := defaultCacheStore.Get(fmt.Sprintf(PlcCacheKeyUpdateTime, channel)) |
| | | if ok { |
| | | return val |
| | | } |
| | | return 0 |
| | | } |
| | | |
| | | func FinishUpdateTimeSet(position int, value interface{}) { |
| | | defaultCacheStore.Add(fmt.Sprintf(PlcCacheKeyUpdateTime, position), value) |
| | | func TaskStartTimeSet(channel int32, ts int64) { |
| | | defaultCacheStore.Add(fmt.Sprintf(TaskStartTimeCache, channel), ts) |
| | | } |
| | | |
| | | func TaskCacheSet(value *response.TaskData) { |
| | | defaultCacheStore.Add(CurrentTaskCacheKey, value) |
| | | } |
| | | |
| | | func TaskCacheUnset() { |
| | | defaultCacheStore.Remove(CurrentTaskCacheKey) |
| | | } |
| | | |
| | | func TaskCacheGet() (*response.TaskData, bool) { |
| | | if v, ok := defaultCacheStore.Get(CurrentTaskCacheKey); ok { |
| | | return v.(*response.TaskData), ok |
| | | func TaskStartTimeGet(channel int32) int64 { |
| | | if v, ok := defaultCacheStore.Get(fmt.Sprintf(TaskStartTimeCache, channel)); ok { |
| | | return v.(int64) |
| | | } |
| | | return nil, false |
| | | procedure, err := model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.CurrentDeviceID).SetStatus(model.ProcedureStatusProcessing).SetChannels([]int32{channel}).First() //进行中任务 |
| | | if err == gorm.ErrRecordNotFound { |
| | | procedure, err = model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.CurrentDeviceID). |
| | | SetStatus(model.ProcedureStatusFinished).SetChannels([]int32{channel}).SetOrder("real_end_time desc").First() //上一个结束的任务 |
| | | if err == gorm.ErrRecordNotFound { //进行中和结束的都没有,开始时间和结束时间都设置0 |
| | | TaskStartTimeSet(channel, int64(0)) |
| | | TaskEndTimeSet(channel, int64(0)) |
| | | return 0 |
| | | } else { |
| | | TaskStartTimeSet(channel, procedure.RealStartTime) |
| | | TaskStartTimeSet(channel, procedure.RealEndTime) |
| | | return 0 |
| | | } |
| | | } else { |
| | | TaskStartTimeSet(channel, procedure.RealStartTime) |
| | | TaskStartTimeSet(channel, int64(0)) |
| | | return procedure.RealStartTime |
| | | } |
| | | } |
| | | |
| | | func ProgressCacheGet(position int) (*model.ProductionProgress, bool) { |
| | | if v, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentProgressCacheKey, position)); ok { |
| | | func TaskEndTimeSet(channel int32, ts int64) { |
| | | defaultCacheStore.Add(fmt.Sprintf(TaskEndTimeCache, channel), ts) |
| | | } |
| | | |
| | | func TaskEndTimeGet(channel int32) int64 { |
| | | if v, ok := defaultCacheStore.Get(fmt.Sprintf(TaskEndTimeCache, channel)); ok { |
| | | return v.(int64) |
| | | } |
| | | return 0 |
| | | } |
| | | |
| | | func FinishUpdateTimeSet(channel int32, value interface{}) { |
| | | defaultCacheStore.Add(fmt.Sprintf(PlcCacheKeyUpdateTime, channel), value) |
| | | } |
| | | |
| | | func TaskFlagSet(channel int32, taskId int) { |
| | | defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), taskId) |
| | | } |
| | | |
| | | func TaskFlagUnset(channel int32) { |
| | | defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), 0) |
| | | } |
| | | |
| | | func TaskFlagGet(channel int32) bool { |
| | | if v, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentTaskCacheKey, channel)); ok { |
| | | return v.(int) > 0 |
| | | } |
| | | procedure, err := model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.CurrentDeviceID).SetStatus(model.ProcedureStatusProcessing).SetChannels([]int32{channel}).First() |
| | | if err == gorm.ErrRecordNotFound { |
| | | defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), 0) |
| | | return false |
| | | } else { |
| | | defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), int(procedure.ID)) |
| | | return true |
| | | } |
| | | } |
| | | |
| | | func ProgressCacheGet(channel int32) (*model.ProductionProgress, bool) { |
| | | if v, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentProgressCacheKey, channel)); ok { |
| | | return v.(*model.ProductionProgress), ok |
| | | } |
| | | return nil, false |
| | | } |
| | | |
| | | func ProgressCacheSet(position int, value *model.ProductionProgress) { |
| | | defaultCacheStore.Add(fmt.Sprintf(CurrentProgressCacheKey, position), value) |
| | | func ProgressCacheSet(channel int32, value *model.ProductionProgress) { |
| | | defaultCacheStore.Add(fmt.Sprintf(CurrentProgressCacheKey, channel), value) |
| | | } |
| | | |
| | | func ProgressCacheUnset(position int) { |
| | | defaultCacheStore.Remove(fmt.Sprintf(CurrentProgressCacheKey, position)) |
| | | func ProgressCacheUnset(channel int32) { |
| | | defaultCacheStore.Remove(fmt.Sprintf(CurrentProgressCacheKey, channel)) |
| | | } |