package service import ( "errors" "gas-cylinder-api/app/admin/model" "gas-cylinder-api/app/admin/service/dto" "gas-cylinder-api/common/actions" cDto "gas-cylinder-api/common/dto" "gas-cylinder-api/common/global" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm" ) type CarInfo struct { service.Service } func CarInfoStartTransportTimeScopes(startTransportTime string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(startTransportTime) == 0 { return db } return db.Where("JSON_EXTRACT(prov_car_info, '$.transportTime') >= ? ", startTransportTime) } } func CarInfoEndTransportTimeScopes(endTransportTime string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(endTransportTime) == 0 { return db } return db.Where("JSON_EXTRACT(prov_car_info, '$.transportTime') <= ? ", endTransportTime) } } // GetPage 获取CarInfo列表 func (e *CarInfo) GetPage(c *dto.CarInfoGetPageReq, list *[]model.CarInfo, count *int64, p *actions.DataPermission) error { var err error var data model.CarInfo err = e.Orm.Model(&data). Scopes( CarInfoStartTransportTimeScopes(c.StartTransportTime), CarInfoEndTransportTimeScopes(c.EndTransportTime), cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), ).Preload("TruckUserCarInfo.User"). 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 获取CarInfo对象 func (e *CarInfo) Get(d *dto.CarInfoGetReq, carInfoModel *model.CarInfo, p *actions.DataPermission) error { err := e.Orm. Scopes(actions.Permission(carInfoModel.TableName(), p)). First(carInfoModel, 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 } // Insert 创建CarInfo对象 func (e *CarInfo) Insert(c *dto.CarInfoInsertReq) error { var err error var data model.CarInfo tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // TODO 1.1.1.12新运输增车辆信息 // 查询车辆信息是否存在 err = e.Orm.Where("car_no = ?", c.ProvCarInfo.CarNo).First(&data).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } if data.Id > 0 { return errors.New("车辆信息已存在") } // 添加车辆信息 c.Generate(&data) err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } c.Id = data.Id return nil } // Update 修改CarInfo对象 func (e *CarInfo) Update(c *dto.CarInfoUpdateReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var carInfoModel = model.CarInfo{} // 查询车辆信息是否存在 err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)). First(&carInfoModel, 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 } // TODO 1.1.1.13更新车辆信息 c.Generate(&carInfoModel) err = tx.Save(&carInfoModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } c.Id = carInfoModel.Id return nil } // Remove 删除CarInfo func (e *CarInfo) Remove(c *dto.CarInfoDeleteReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var carInfoModel model.CarInfo // 查询车辆信息是否存在 err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)). First(&carInfoModel, 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 } // TODO 1.1.1.14注销车辆信息 db := tx.Delete(&carInfoModel) 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 *CarInfo) BindTruckUser(c *dto.CarInfoBindTruckUserReq) error { var err error var data model.TruckUserCarInfo tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // 查询车辆是否绑定了其他货车司机 var truckUserCarInfo = model.TruckUserCarInfo{} // 查询车辆信息是否存在 err = e.Orm.Where("car_no = ?", c.CarNo).First(&truckUserCarInfo).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { data.ProvUserId = c.UserId data.CarNo = c.CarNo err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } // TODO 1.1.1.15货车司机绑定车辆信息 c.CarNo = data.CarNo return nil } return global.UpdateFailedErr } // TODO 1.1.1.15货车司机绑定车辆信息 truckUserCarInfo.ProvUserId = c.UserId err = tx.Updates(&truckUserCarInfo).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } c.CarNo = data.CarNo return nil }