package service import ( "encoding/json" "errors" "fmt" "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" model2 "gas-cylinder-api/common/model" "github.com/go-resty/resty/v2" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm" "math/rand" "time" ) type GasCylinder struct { service.Service } // GetPage 获取GasCylinder列表 func (e *GasCylinder) GetPage(c *dto.GasCylinderGetPageReq, list *[]model.GasCylinder, count *int64, p *actions.DataPermission) error { var err error var data model.GasCylinder 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 } // Get 获取GasCylinder对象 func (e *GasCylinder) Get(d *dto.GasCylinderGetReq, data *model.GasCylinder, p *actions.DataPermission) error { // TODO 通过省平台获取气瓶详情 //client := resty.New() // //resp, err := client.R().Get("https://mock.apifox.com/m2/4037076-0-default/151344663") //if err != nil { // e.Log.Errorf("db error: %s", err) // return global.GetFailedErr //} //err = json.Unmarshal(resp.Body(), data) //if err != nil { // e.Log.Errorf("json Unmarshal err: %s", err) // return global.GetFailedErr //} //obj := model.GasCylinder{ // ProVariety: data.ProVariety, // ProName: data.ProName, // ProNo: data.ProNo, // FillMedia: data.FillMedia, // MakeUnit: data.MakeUnit, // MakeTime: data.MakeTime, // WorkPressure: data.WorkPressure, // //InnerCode: data.InnerCode, // Volume: data.Volume, // CheckTime: data.CheckTime, // NextCheckTime: data.NextCheckTime, // ProUuid: data.ProUuid, // //Uid: data.Uid, // ProductId: data.ProductId, // DeadlineTime: data.DeadlineTime, // CheckInTime: data.CheckInTime, // DeptBy: model2.DeptBy{ // DeptId: p.DeptId, // }, //} ////e.Orm.Create(&obj) // //err = e.Orm.Where("inner_code = ?", d.GetInnerCode()).Updates(&obj).Error //if err != nil { // e.Log.Errorf("db error: %s", err) // if errors.Is(err, gorm.ErrRecordNotFound) { // return global.GetNotFoundOrNoPermissionErr // } // return global.GetFailedErr //} // //data.InnerCode = d.InnerCode err := e.Orm.Where("inner_code = ?", d.GetInnerCode()).First(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } func (e *GasCylinder) GetByUid(d *dto.GasCylinderGetByUidReq, data *model.GasCylinder, p *actions.DataPermission) error { // 1、通过高频ID查询气瓶内编码 err := e.Orm.Where("uid = ?", d.ChipUid).First(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } //client := resty.New() //resp, err := client.R().Get("https://mock.apifox.com/m2/4037076-0-default/151344663") //if err != nil { // e.Log.Errorf("db error: %s", err) // return global.GetFailedErr //} //err = json.Unmarshal(resp.Body(), data) //if err != nil { // e.Log.Errorf("json Unmarshal err: %s", err) // return global.GetFailedErr //} //obj := model.GasCylinder{ // ProVariety: data.ProVariety, // ProName: data.ProName, // ProNo: data.ProNo, // FillMedia: data.FillMedia, // MakeUnit: data.MakeUnit, // MakeTime: data.MakeTime, // WorkPressure: data.WorkPressure, // //InnerCode: data.InnerCode, // Volume: data.Volume, // CheckTime: data.CheckTime, // NextCheckTime: data.NextCheckTime, // ProUuid: data.ProUuid, // //Uid: data.Uid, // ProductId: data.ProductId, // DeadlineTime: data.DeadlineTime, // CheckInTime: data.CheckInTime, // DeptBy: model2.DeptBy{ // DeptId: p.DeptId, // }, //} ////e.Orm.Create(&obj) // //err = e.Orm.Where("inner_code = ?", gasCylinder.InnerCode).Updates(&obj).Error //if err != nil { // e.Log.Errorf("db error: %s", err) // if errors.Is(err, gorm.ErrRecordNotFound) { // return global.GetNotFoundOrNoPermissionErr // } // return global.GetFailedErr //} // //data.InnerCode = gasCylinder.InnerCode //data.Uid = gasCylinder.Uid return nil } func (e *GasCylinder) Mock(d *dto.GasCylinderMockReq) error { for i := 0; i < 20; i++ { rand.New(rand.NewSource(time.Now().UnixNano())) // 生成随机数后八位 randomSuffix := rand.Intn(9999999999999999) randomSuffix2 := rand.Intn(999999999999) // 组合成16位随机数 InnerCode := fmt.Sprintf("%16d", randomSuffix) uid := fmt.Sprintf("%12d", randomSuffix2) client := resty.New() resp, err := client.R().Get("https://mock.apifox.com/m2/4037076-0-default/151344663") if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } var data model.GasCylinder err = json.Unmarshal(resp.Body(), &data) if err != nil { e.Log.Errorf("json Unmarshal err: %s", err) return global.GetFailedErr } obj := model.GasCylinder{ ProVariety: data.ProVariety, ProName: data.ProName, ProNo: data.ProNo, FillMedia: data.FillMedia, MakeUnit: data.MakeUnit, MakeTime: data.MakeTime, WorkPressure: data.WorkPressure, InnerCode: InnerCode, Volume: data.Volume, CheckTime: data.CheckTime, NextCheckTime: data.NextCheckTime, ProUuid: data.ProUuid, Uid: uid, DeptBy: model2.DeptBy{ DeptId: d.DeptId, }, } err = e.Orm.Create(&obj).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } } return nil } // Insert 创建GasCylinder对象 func (e *GasCylinder) Insert(c *dto.GasCylinderInsertReq) error { var err error var data model.GasCylinder tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() err = e.Orm.Where("inner_code = ? AND dept_id = ?", c.InnerCode, c.DeptId).First(&data).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { // 添加气瓶 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 } e.Log.Errorf("db error: %s", err) return global.GetFailedErr } c.Generate(&data) err = tx.Save(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } c.Id = data.Id return nil } // Update 修改GasCylinder对象 func (e *GasCylinder) Update(c *dto.GasCylinderUpdateReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var gasCylinderModel = model.GasCylinder{} // 查询气瓶是否存在 err = e.Orm.Scopes(actions.Permission(gasCylinderModel.TableName(), p)). First(&gasCylinderModel, 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 } c.Generate(&gasCylinderModel) err = tx.Save(&gasCylinderModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } c.Id = gasCylinderModel.Id return nil } // Remove 删除GasCylinder func (e *GasCylinder) Remove(c *dto.GasCylinderDeleteReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var gasCylinderModel model.GasCylinder // 查询气瓶是否存在 err = e.Orm.Scopes(actions.Permission(gasCylinderModel.TableName(), p)). First(&gasCylinderModel, 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(&gasCylinderModel) 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 }