123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- package jobs
- import (
- sysModel "cold-delivery/app/admin/model"
- "cold-delivery/common/global"
- "cold-delivery/common/nats/nats_server"
- "cold-delivery/db"
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- log "gogs.baozhida.cn/zoie/OAuth-core/logger"
- "sort"
- "time"
- )
- // 需要将定义的struct 添加到字典中;
- // 字典 key 可以配置到 自动任务 调用目标 中;
- func InitJob() {
- jobList = map[string]JobsExec{
- //"ExamplesOne": ExamplesOne{},
- "CountIceRaftRecordFreezeDuration": CountIceRaftRecordFreezeDuration{},
- "UpdateCoolerBoxMonitorStatus": UpdateCoolerBoxMonitorStatus{},
- "CountIceRaftRecordForColdNow": CountIceRaftRecordForColdNow{},
- "CountCoolerBoxForColdNow": CountCoolerBoxForColdNow{},
- // ...
- }
- }
- // 新添加的job 必须按照以下格式定义,并实现Exec函数
- type ExamplesOne struct {
- }
- func (t ExamplesOne) Exec(arg interface{}) error {
- str := time.Now().Format(timeFormat) + " [INFO] JobCore ExamplesOne exec success"
- // TODO: 这里需要注意 Examples 传入参数是 string 所以 arg.(string);请根据对应的类型进行转化;
- switch arg.(type) {
- case string:
- if arg.(string) != "" {
- fmt.Println("string", arg.(string))
- fmt.Println(str, arg.(string))
- } else {
- fmt.Println("arg is nil")
- fmt.Println(str, "arg is nil")
- }
- break
- }
- return nil
- }
- // CountIceRaftRecordFreezeDuration 统计冰排冷冻时长
- type CountIceRaftRecordFreezeDuration struct {
- }
- // UpdateCoolerBoxMonitorStatus 更新保温箱监控状态
- type UpdateCoolerBoxMonitorStatus struct {
- }
- // CountIceRaftRecordForColdNow 统计冰排释冷时长
- type CountIceRaftRecordForColdNow struct {
- }
- // CountCoolerBoxForColdNow 统计保温箱遇冷时长
- type CountCoolerBoxForColdNow struct {
- }
- // Exec 统计冰排冷冻时长
- func (t CountIceRaftRecordFreezeDuration) Exec(arg interface{}) error {
- iceRaftRecordList := make([]sysModel.IceRaftRecord, 0)
- // GetOrm 获取orm连接
- orm, _ := db.GetOrm(&gin.Context{})
- err := orm.Where("status = ? or status = ? ", sysModel.IceRaftRecordStatusFreezing, sysModel.IceRaftRecordStatusWaitUse).
- Find(&iceRaftRecordList).Error
- if err != nil {
- log.Errorf("db error: %s", err)
- return global.GetFailedErr
- }
- //冰排统计时长
- for _, record := range iceRaftRecordList {
- sort.Slice(record.FreezeClaim, func(i, j int) bool {
- return record.FreezeClaim[i] < record.FreezeClaim[j]
- })
- inTime := record.InStorageTime.Local()
- //if inTime.Add(time.Hour * time.Duration(record.FreezeClaim)).After(time.Now()) {
- if inTime.Add(time.Duration(record.FreezeClaim[0] * float64(time.Hour))).After(time.Now()) {
- // 未达到冷冻时长 不修改状态 只修改时间
- record.FreezeDuration = float64(int(time.Now().Sub(inTime).Minutes()))
- } else {
- record.FreezeDuration = float64(int(time.Now().Sub(inTime).Minutes()))
- record.Status = sysModel.IceRaftRecordStatusWaitUse
- }
- if err := orm.Save(&record).Error; err != nil {
- log.Errorf("db error: %s", err)
- return global.UpdateFailedErr
- }
- }
- return nil
- }
- // Exec 更新保温箱监控状态
- func (t UpdateCoolerBoxMonitorStatus) Exec(arg interface{}) error {
- // GetOrm 获取orm连接
- orm, _ := db.GetOrm(&gin.Context{})
- var coolerBox []sysModel.CoolerBox
- err := orm.Model(&sysModel.CoolerBox{}).Find(&coolerBox).Error
- if err != nil {
- log.Errorf("获取保温箱状态失败: %s", err)
- return global.GetFailedErr
- }
- for i, _ := range coolerBox {
- data, _ := nats_server.Read_Device_ByT_sn(coolerBox[i].Sn)
- if len(data.T_sn) != 0 {
- //只查询设备在线并且处于监控状态下的设备
- if data.T_monitor != coolerBox[i].MonitorStatus {
- err := orm.Model(&sysModel.CoolerBox{}).Where("id = ?", coolerBox[i].Id).Update("monitor_status", data.T_monitor).Error
- if err != nil {
- log.Errorf("更新保温箱监控状态失败: %s", err)
- return global.UpdateFailedErr
- }
- }
- } else {
- if coolerBox[i].MonitorStatus != 4 {
- err := orm.Model(&sysModel.CoolerBox{}).Where("id = ?", coolerBox[i].Id).Update("monitor_status", 4).Error
- if err != nil {
- log.Errorf("更新保温箱监控状态失败: %s", err)
- return global.UpdateFailedErr
- }
- }
- }
- }
- return nil
- }
- // Exec 统计冰排释冷时长
- func (t CountIceRaftRecordForColdNow) Exec(arg interface{}) error {
- // GetOrm 获取orm连接
- orm, _ := db.GetOrm(&gin.Context{})
- var iceRaftRecordList []sysModel.IceRaftRecord
- err := orm.Where("status = ?", sysModel.IceRaftRecordReleasedInTheCold).
- Or("status = ?", sysModel.IceRaftRecordReleasedInTheColdEnd).
- Find(&iceRaftRecordList).Error
- if err != nil {
- log.Errorf("db 查询冰排记录失败: %s", err)
- return errors.New("查询冰排记录失败")
- }
- //冰排释冷时长
- for _, record := range iceRaftRecordList {
- inTime := record.StartIceColdTime.Local()
- var iceRaft sysModel.IceRaft
- err = orm.Where("id = ?", record.IceRaftId).First(&iceRaft).Error
- if err != nil {
- log.Errorf("冰排不存在: %s", err)
- //return errors.New("查询冰排失败")
- }
- if inTime.Add(time.Duration(iceRaft.ForColdTime * float64(time.Hour))).After(time.Now()) {
- // 未达到冷冻时长 不修改状态 只修改时间
- record.ForColdTimeActual = time.Now().Sub(inTime).Minutes()
- } else {
- record.ForColdTimeActual = time.Now().Sub(inTime).Minutes()
- record.Status = sysModel.IceRaftRecordReleasedInTheColdEnd
- }
- if err = orm.Save(&record).Error; err != nil {
- log.Errorf("更新冰排释冷时间失败: %s", err)
- fmt.Println("===================================更新冰排释冷时间失败===================================", err)
- return global.UpdateFailedErr
- }
- }
- return nil
- }
- // Exec 统计保温箱遇冷时长
- func (t CountCoolerBoxForColdNow) Exec(arg interface{}) error {
- CoolerBoxListRecord := make([]sysModel.CoolerBoxRecord, 0)
- // GetOrm 获取orm连接
- orm, _ := db.GetOrm(&gin.Context{})
- err := orm.Where("status = ?", 1).
- Find(&CoolerBoxListRecord).Error
- if err != nil {
- log.Errorf("db error: %s", err)
- return global.GetFailedErr
- }
- //冰排释冷时长
- for _, record := range CoolerBoxListRecord {
- inTime := record.CoolerBoxStarTime.String()
- if len(inTime) != 0 {
- var coolerBox sysModel.CoolerBox
- var sprintf string
- err := orm.Where("id = ?", record.CoolerBoxId).First(&coolerBox).Error
- if err != nil {
- log.Errorf("db error: %s", err)
- return global.GetFailedErr
- }
- if (coolerBox.UseStatus == 1 || coolerBox.UseStatus == 3) && len(record.CoolerUserTime.String()) == 0 {
- sub := time.Now().Sub(record.CoolerBoxStarTime.Local())
- hours := int(sub.Hours())
- minutes := int(sub.Minutes()) % 60
- sprintf = fmt.Sprintf("%dh%dm\n", hours, minutes)
- if record.CoolerBoxStarTime.Local().Add(time.Duration(coolerBox.ForColdCoolerTime * float64(time.Hour))).After(time.Now()) {
- // 未达到冷冻时长 不修改状态 只修改时间
- record.ForColdDuration = sprintf
- } else {
- record.ForColdDuration = sprintf
- coolerBox.UseStatus = 3 //遇冷结束
- }
- err = orm.Save(&coolerBox).Error
- err = orm.Save(&record).Error
- if err := orm.Save(&record).Error; err != nil {
- log.Errorf("db error: %s", err)
- return global.UpdateFailedErr
- }
- }
- }
- }
- return nil
- }
|