package service import ( "cold-delivery/app/admin/model" "cold-delivery/app/admin/service/dto" "cold-delivery/common/actions" cDto "cold-delivery/common/dto" "cold-delivery/common/global" model2 "cold-delivery/common/model" "errors" "fmt" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm" "sort" "time" ) type IceRaft struct { service.Service } // GetPage 获取IceRaft列表 func (e *IceRaft) GetPage(c *dto.IceRaftGetPageReq, list *[]model.IceRaft, count *int64, p *actions.DataPermission) error { var err error var data model.IceRaft if c.PageSize == 9999 { err = e.Orm.Model(&data). Scopes( actions.Permission(data.TableName(), p), ). Find(list).Limit(-1).Offset(-1). Count(count).Error } else { err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), ). Find(list).Limit(-1).Offset(-1). Count(count).Error } if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } func IceRaftNameRecordStatusScopes(status string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(status) == 0 { return db } if status == "0" { return db.Where("ice_raft_record.status is null") } return db.Where("ice_raft_record.status = ?", status) } } func IceRaftNameRecordIceLockerScopes(status string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(status) == 0 { return db.Where("ice_raft_record.status = 1 or ice_raft_record.status =2") } if status == "0" { return db.Where("ice_raft_record.status is null") } return db.Where("ice_raft_record.status = ?", status) } } func IceRaftNameRecordIceLockerIdScopes(iceLockerId int) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if iceLockerId == 0 { return db } return db.Where("ice_raft_record.ice_locker_id = ? and ice_raft_record.cooler_box_id = 0", iceLockerId) } } func IceRaftNameRecordCoolerBoxIdScopes(coolerBoxId int) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if coolerBoxId == 0 { return db } return db.Where("ice_raft_record.cooler_box_id = ?", coolerBoxId) } } func IceRaftStartTimeAndEndTimeScopes(startTime, endtime string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(startTime) == 0 { return db } return db.Where("ice_raft_record.ice_use_time >= ?", startTime).Where("ice_raft_record.ice_use_time <= ?", endtime) } } func CollerStartTimeAndEndTimeScopes(startTime, endtime string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(startTime) == 0 { return db } return db.Where("cooler_box_record.cooler_box_star_time >= ?", startTime).Where("cooler_box_record.cooler_box_star_time <= ?", endtime) } } func (e *IceRaft) GetRecordPage(c *dto.IceRaftGetNewestRecordPageReq, list *[]model.IceRaft, count *int64, p *actions.DataPermission) error { var err error var data model.IceRaft if c.PageSize == 9999 { err = e.Orm.Model(&data). Scopes( actions.Permission(data.TableName(), p), ). Where("ice_raft.status = '2'"). Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id"). Preload("IceRaftRecord.IceLocker"). Preload("IceRaftRecord.CoolerBox"). Preload("IceRaftRecord"). Order("FIELD(ice_raft_record.status,'2','','1','3','4')"). Find(list).Limit(-1).Offset(-1). Count(count).Error } else { err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), IceRaftNameRecordStatusScopes(c.Status), IceRaftNameRecordIceLockerIdScopes(c.IceLockerId), IceRaftNameRecordCoolerBoxIdScopes(c.CoolerBoxId), ). Where("ice_raft.status = '2'"). Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id"). Preload("IceRaftRecord.IceLocker"). Preload("IceRaftRecord.CoolerBox"). Preload("IceRaftRecord"). Order("FIELD(ice_raft_record.status,'2','','1','3','4')"). Find(list).Limit(-1).Offset(-1). Count(count).Error } if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } // Get 获取IceRaft对象 func (e *IceRaft) Get(d *dto.IceRaftGetReq, iceRaftModel *model.IceRaft, p *actions.DataPermission) error { err := e.Orm. Scopes(actions.Permission(iceRaftModel.TableName(), p)). First(iceRaftModel, d.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.GetNotFoundOrNoPermissionErr } return global.GetFailedErr } return nil } func (e *IceRaft) GetByCode(d *dto.IceRaftGetByCodeReq, iceRaftModel *model.IceRaft, p *actions.DataPermission) error { err := e.Orm. Scopes(actions.Permission(iceRaftModel.TableName(), p)). Where("code = ?", d.Code). First(iceRaftModel).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("冰排编号【%s】不存在!", d.Code)) } return global.GetFailedErr } return nil } // Insert 创建IceRaft对象 func (e *IceRaft) Insert(c *dto.IceRaftInsertReq) error { var err error var data model.IceRaft tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() for _, code := range c.CodeList { var k int64 err = tx.Model(&data).Where("code = ? and dept_id = ?", code, c.DeptId).Count(&k).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } // 冰排编号已存在 if k > 0 { err = errors.New("该编号已存在!") return err } // 添加冰排 data.Id = 0 c.Generate(&data, code) err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } return nil } // Update 修改IceRaft对象 func (e *IceRaft) Update(c *dto.IceRaftUpdateReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var iceRaftModel = model.IceRaft{} // 查询冰排是否存在 err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)). First(&iceRaftModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.UpdateNotFoundOrNoPermissionErr } return global.UpdateFailedErr } if iceRaftModel.Code != c.Code { var k int64 var data = model.IceRaft{} err = tx.Model(&data).Where("code = ? and dept_id = ?", c.Code, iceRaftModel.DeptId).Count(&k).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } if k > 0 { err = errors.New("冰排编号已存在!") e.Log.Errorf("db error: %s", err) return err } } c.Generate(&iceRaftModel) err = tx.Save(&iceRaftModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } // 查询冰排记录是否存在 var iceRaftRecordModel model.IceRaftRecord var count int64 e.Orm.Table(iceRaftRecordModel.TableName()).Where("ice_raft_id = ?", c.Id).Count(&count) if count > 0 { iceRaftRecordModel.Id = iceRaftModel.IceRaftRecordId iceRaftRecordModel.FreezeClaim = iceRaftModel.FreezeClaim iceRaftRecordModel.Label = iceRaftModel.Label err = tx.Updates(&iceRaftRecordModel).Error if err != nil { e.Log.Errorf("db error: %s 该冰排未使用", err) return errors.New("修改冰排记录失败") } } c.Id = iceRaftModel.Id return nil } // Remove 删除IceRaft func (e *IceRaft) Remove(c *dto.IceRaftDeleteReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var iceRaftModel model.IceRaft // 查询冰排是否存在 err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)). First(&iceRaftModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.DeleteNotFoundOrNoPermissionErr } return global.DeleteFailedErr } db := tx.Delete(&iceRaftModel) if err = db.Error; err != nil { e.Log.Errorf("db error: %s", err) return global.DeleteFailedErr } if db.RowsAffected == 0 { return global.DeleteNotFoundOrNoPermissionErr } return nil } func (e *IceRaft) InStorage(c *dto.IceRaftInStorageReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // 查询冷冻柜信息 var iceLockerModel model.IceLocker err = e.Orm.Scopes(actions.Permission(iceLockerModel.TableName(), p)). First(&iceLockerModel, c.IceLockerId).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("获取冷冻柜信息失败") } if iceLockerModel.Status != model.IceLockerStatusNormal { err = errors.New("冷冻柜状态异常") return err } for _, code := range c.Code { // 查询冰排是否存在 var iceRaftModel model.IceRaft err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)). Where("code = ?", code). Preload("IceRaftRecord"). First(&iceRaftModel).Error if err != nil { // 冰排编号不存在,添加 //if errors.Is(err, gorm.ErrRecordNotFound) { // iceRaftModel.Code = code // iceRaftModel.Status = model.IceRaftStatusNormal // iceRaftModel.DeptId = p.DeptId // iceRaftModel.CreateBy = p.UserId // err = tx.Create(&iceRaftModel).Error // if err != nil { // e.Log.Errorf("db error: %s", err) // return errors.New(fmt.Sprintf("添加冰排【%s】信息失败", code)) // } //} else { // e.Log.Errorf("db error: %s", err) // return errors.New(fmt.Sprintf("获取冰排【%s】信息失败",code)) //} e.Log.Errorf("db error: %s", err) return errors.New(fmt.Sprintf("获取冰排【%s】信息失败", code)) } if iceRaftModel.Status != model.IceRaftStatusNormal { err = errors.New(fmt.Sprintf("冰排【%s】状态异常", code)) return err } if iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordStatusFreezing || iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordStatusWaitUse { err = errors.New(fmt.Sprintf("冰排【%s】状态为%s,入库失败!", code, model.GetIceRaftRecordStatus(iceRaftModel.IceRaftRecord.Status))) return err } // 更新冰排记录状态 使用中 -> 已完成 err = tx.Model(&model.IceRaftRecord{}). Where("ice_raft_id = ? and status = ?", iceRaftModel.Id, model.IceRaftRecordStatusUsing). Updates(map[string]interface{}{ "status": model.IceRaftRecordStatusFinish, }).Error // 添加冰排记录 var iceRaftRecordModel = model.IceRaftRecord{ IceLockerId: iceLockerModel.Id, IceRaftId: iceRaftModel.Id, Status: model.IceRaftRecordStatusFreezing, Label: iceRaftModel.Label, Code: code, InStorageTime: model2.Time(time.Now()), //FreezeClaim: iceRaftModel.FreezeClaim, DeptBy: model2.DeptBy{ DeptId: p.DeptId, }, } iceRaftRecordModel.FreezeClaim = append(iceRaftRecordModel.FreezeClaim, iceRaftModel.FreezeClaim...) err = tx.Create(&iceRaftRecordModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("添加冰排记录失败") } // 更新冰排使用记录 err = tx.Model(&iceRaftModel). Where("id = ?", iceRaftModel.Id). Updates(map[string]interface{}{ "ice_raft_record_id": iceRaftRecordModel.Id, }).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("关联冰排记录失败") } } return nil } func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // 查询保温箱信息 var coolerBoxModel model.CoolerBox err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)). First(&coolerBoxModel, c.CoolerBoxId).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("获取保温箱信息失败") } if coolerBoxModel.Status != model.CoolerBoxStatusNormal { err = errors.New("保温箱状态异常") return err } var user model.SysUser first := e.Orm.Model(&model.SysUser{}).Where("id = ?", p.UserId).First(&user) if first.Error != nil { return global.GetFailedErr } for _, code := range c.Code { // 查询冰排是否存在 var iceRaftModel model.IceRaft err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)). Where("code = ?", code). Preload("IceRaftRecord"). First(&iceRaftModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("获取冰排信息失败") } if iceRaftModel.Status != model.IceRaftStatusNormal { err = errors.New(fmt.Sprintf("冰排【%s】状态异常", code)) return err } // 获取冰排记录 var iceRaftRecordModel model.IceRaftRecord err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)). Where("ice_raft_id = ?", iceRaftModel.Id). First(&iceRaftRecordModel, iceRaftModel.IceRaftRecordId).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("获取冰排记录失败,请确认冰排是否入库!") } if len(iceRaftRecordModel.OutStorageTime.String()) > 0 { err = errors.New(fmt.Sprintf("冰排【%s】已出库,禁止出库!", code)) return err } inTime := iceRaftRecordModel.InStorageTime.Local() sort.Slice(iceRaftRecordModel.FreezeClaim, func(i, j int) bool { return iceRaftRecordModel.FreezeClaim[i] < iceRaftRecordModel.FreezeClaim[j] }) err, sysUser := GetUserProfile(e.Orm, p.UserId) if err != nil { err = errors.New("获取用户信息失败") return err } if sysUser.Dept.IsOutStorage { for _, v := range iceRaftRecordModel.FreezeClaim { if inTime.Add(time.Hour * time.Duration(v)).After(time.Now()) { str := fmt.Sprintf("冰排【%s】未达到冷冻时长【%v】,禁止出库", code, v) err = errors.New(str) return err } } } //if inTime.Add(time.Hour * time.Duration(iceRaftRecordModel.FreezeClaim[0])).After(time.Now()) { // err = errors.New(fmt.Sprintf("冰排【%s】未达到冷冻时长,禁止出库", code)) // return err //} iceRaftRecordModel.Status = model.IceRaftRecordStatusUsing iceRaftRecordModel.CoolerBoxId = coolerBoxModel.Id iceRaftRecordModel.OutStorageTime = model2.Time(time.Now()) iceRaftRecordModel.IceUseUsers = user.NickName iceRaftRecordModel.IceUseTime = model2.Time(time.Now()) //data, err := nats_server.Read_DeviceTask_List_By_Condition(coolerBoxModel.Sn) //if data.T_State != 1 { // e.Log.Errorf("该保温箱未启动: %s", err) // return errors.New("该保温箱未启动,请启动保温箱监控") //} //if err != nil { // e.Log.Errorf("获取设备任务列表失败: %s", err) // return errors.New("该保温箱未绑定平台") //} //iceRaftRecordModel.CoolerBoxStarTime = model2.Time(data.T_Ut_start) err = tx.Save(&iceRaftRecordModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("保存冰排记录失败") } } //添加保温箱记录 var cooler model.CoolerBoxRecord cooler.CoolerBoxId = coolerBoxModel.Id cooler.CoolerUserTime = model2.Time(time.Now()) cooler.Sn = coolerBoxModel.Sn cooler.Status = "1" //保温箱使用状态变为使用中 cooler.DeptId = p.DeptId cooler.Name = coolerBoxModel.Name cooler.HistoryCode = append(cooler.HistoryCode, c.Code...) cooler.CoolerUseUsers = user.NickName //查询是否有正在使用中的保温箱记录 var count int64 err = e.Orm.Model(&model.CoolerBoxRecord{}).Where("id = ?", coolerBoxModel.Id).Where("status = ?", "1").Count(&count).Error if err != nil { e.Log.Errorf("获取保温箱信息失败: %s", err) return errors.New("获取保温箱信息失败") } //如果有正在使用中的保温箱记录,就更新 if count > 0 { err = e.Orm.Updates(&cooler).Error if err != nil { e.Log.Errorf("db 更新保温箱记录失败: %s", err) return errors.New("更新保温箱记录失败") } } else { err = e.Orm.Create(&cooler).Error if err != nil { e.Log.Errorf("db 创建保温箱记录失败: %s", err) return errors.New("创建保温箱记录失败") } } return nil } // IsOutStorage 判断冰排是否达到冷冻时长 func (e *IceRaft) IsOutStorage(c *dto.IceOutStorageReq, p *actions.DataPermission) (error, string) { var err error var str string // 获取冰排记录 for _, v := range c.Code { var iceRaftRecordModel model.IceRaftRecord err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)). Where("code = ?", v). Where("status = ?", model.IceRaftRecordStatusFreezing).Or("status = ?", model.IceRaftRecordStatusWaitUse). First(&iceRaftRecordModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("获取冰排记录失败,请确认冰排是否入库!"), "" } if len(iceRaftRecordModel.OutStorageTime.String()) > 0 { err = errors.New(fmt.Sprintf("冰排【%s】已出库,禁止出库!", v)) return err, "" } inTime := iceRaftRecordModel.InStorageTime.Local() sort.Slice(iceRaftRecordModel.FreezeClaim, func(i, j int) bool { return iceRaftRecordModel.FreezeClaim[i] < iceRaftRecordModel.FreezeClaim[j] }) for _, vs := range iceRaftRecordModel.FreezeClaim { if inTime.Add(time.Hour * time.Duration(vs)).After(time.Now()) { str = fmt.Sprintf("冰排编号【%s】未达到冷冻时长【%v】小时,已达到冷冻时长【%v】,是否继续出库", v, vs, time.Now().Sub(inTime)) break } } } return nil, str } // 查询保温箱关联的冰排 func (e *IceRaft) GetPageByCoolerBoxId(coolerBoxId int, list *[]string, p *actions.DataPermission) error { var data model.IceRaft err := e.Orm.Model(&data). Select("ice_raft.code"). Scopes( actions.Permission(data.TableName(), p), IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusUsing), IceRaftNameRecordCoolerBoxIdScopes(coolerBoxId), ). Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id"). Find(list).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } type IceRaftRecord struct { service.Service } // GetPage 获取IceRaft列表 func (e *IceRaftRecord) GetPage(c *dto.IceRaftRecordGetPageReq, list *[]model.IceRaftRecord, count *int64, p *actions.DataPermission) error { var err error var data model.IceRaftRecord if c.PageSize == 9999 { err = e.Orm.Model(&data). Scopes( actions.Permission(data.TableName(), p), ). Preload("IceLocker"). Preload("CoolerBox"). Find(list).Limit(-1).Offset(-1). Count(count).Error } else { err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), ). Preload("IceLocker"). Preload("CoolerBox"). Find(list).Limit(-1).Offset(-1). Count(count).Error } if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } // Update 修改IceRaft对象 func (e *IceRaftRecord) Update(c *dto.IceRaftRecordUpdateReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var iceRaftRecordModel = model.IceRaftRecord{} // 查询冰排是否存在 err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)). First(&iceRaftRecordModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.UpdateNotFoundOrNoPermissionErr } return global.UpdateFailedErr } iceRaftRecordModel.IceLockerId = c.IceLockerId iceRaftRecordModel.FreezeClaim = c.FreezeClaim if len(iceRaftRecordModel.OutStorageTime.String()) > 0 { iceRaftRecordModel.CoolerBoxId = c.CoolerBoxId } err = tx.Save(&iceRaftRecordModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } c.Id = iceRaftRecordModel.Id return nil } // Remove 删除IceRaft func (e *IceRaftRecord) Remove(c *dto.IceRaftRecordDeleteReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var iceRaftRecordModel model.IceRaftRecord // 查询冰排是否存在 err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)). First(&iceRaftRecordModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.DeleteNotFoundOrNoPermissionErr } return global.DeleteFailedErr } db := tx.Delete(&iceRaftRecordModel) if err = db.Error; err != nil { e.Log.Errorf("db error: %s", err) return global.DeleteFailedErr } if db.RowsAffected == 0 { return global.DeleteNotFoundOrNoPermissionErr } // 更改冰排关联状态 var iceRaftModel model.IceRaft var secondIceRaftRecordModel model.IceRaftRecord err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)). First(&iceRaftModel, iceRaftRecordModel.IceRaftId).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.DeleteFailedErr } err = e.Orm.Scopes(actions.Permission(secondIceRaftRecordModel.TableName(), p)). Where("ice_raft_id = ? and id != ?", iceRaftRecordModel.IceRaftId, iceRaftRecordModel.Id). First(&secondIceRaftRecordModel).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { iceRaftModel.IceRaftRecordId = 0 } } iceRaftModel.IceRaftRecordId = secondIceRaftRecordModel.Id err = tx.Save(&iceRaftModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } return nil } func (e *IceRaftRecord) EndForCold(c *dto.IceRaftRecordEedReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // 查询冰排是否存在 for _, v := range c.Id { var iceRaftRecordModel model.IceRaftRecord err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)). First(&iceRaftRecordModel, v).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.UpdateNotFoundOrNoPermissionErr } return global.UpdateFailedErr } iceRaftRecordModel.IsSuitableForCold = 1 // 是否适冷 iceRaftRecordModel.EndForColdTime = model2.Time(time.Now()) iceRaftRecordModel.Id = v updates := tx.Where("id = ?", iceRaftRecordModel.Id).Updates(&iceRaftRecordModel) if err = updates.Error; err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } } return nil } // StartForCold 冰排开始释冷 func (e *IceRaftRecord) StartForCold(c *dto.IceStartbleForColfTimReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var user model.SysUser first := e.Orm.Model(&model.SysUser{}).Where("id = ?", p.UserId).First(&user) if first.Error != nil { return global.GetFailedErr } //查询冰排是否存在 for _, v := range c.Id { var iceRaftRecordModel model.IceRaftRecord var iceRaft model.IceRaft err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)). First(&iceRaftRecordModel, v).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.UpdateNotFoundOrNoPermissionErr } return global.UpdateFailedErr } err = e.Orm.Model(&iceRaft).Where("id = ?", iceRaftRecordModel.IceRaftId).Error if err != nil { return global.GetFailedErr } iceRaftRecordModel.StartIceColdTime = model2.Time(time.Now()) iceRaftRecordModel.Status = model.IceRaftRecordReleasedInTheCold //释冷中 iceRaftRecordModel.IceColdUsers = user.NickName iceRaftRecordModel.IceColdAddress = iceRaft.IceColdAddress iceRaftRecordModel.SuitableForCold = iceRaft.SuitableForCold updates := tx.Where("id = ?", iceRaftRecordModel.Id).Updates(&iceRaftRecordModel) if err = updates.Error; err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } } return nil } // IceRaftRecordRecording 获取冰排的历史记录 func (e *IceRaft) IceRaftRecordRecording(c *dto.IceRaftRecordRecording, list *[]model.IceRaftRecord, count *int64, p *actions.DataPermission) error { var err error var data model.IceRaftRecord if c.PageSize == 9999 { err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), actions.Permission(data.TableName(), p), IceRaftStartTimeAndEndTimeScopes(c.StartTime, c.EndTime), ). Where("status =?", model.IceRaftRecordStatusFinish). Preload("IceLocker"). Preload("CoolerBox"). Find(list).Limit(-1).Offset(-1). Count(count).Error } else { err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), IceRaftStartTimeAndEndTimeScopes(c.StartTime, c.EndTime), ). Where("status =?", model.IceRaftRecordStatusFinish). Preload("IceLocker"). Preload("CoolerBox"). Find(list).Limit(-1).Offset(-1). Count(count).Error } if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil }