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" "github.com/alibaba/sentinel-golang/util" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm" "time" ) type FillData struct { service.Service } func FillDataStationId(stationId string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(stationId) == 0 { return db } return db.Where("JSON_EXTRACT(tb_fill_data, '$.stationId') = ? ", stationId) } } func FillDataUserId(userId string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(userId) == 0 { return db } return db.Where("JSON_EXTRACT(tb_fill_data, '$.userId') = ? ", userId) } } func FillDataInnerCode(innerCode string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(innerCode) == 0 { return db } return db.Where("JSON_EXTRACT(tb_fill_data, '$.innerCode') like ? ", "%"+innerCode+"%") } } func FillDataChipId(chipId string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(chipId) == 0 { return db } return db.Where("JSON_EXTRACT(tb_fill_data, '$.chipId') like ? ", "%"+chipId+"%") } } func FillDataStartFillTime(startFillTime string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(startFillTime) == 0 { return db } return db.Where("JSON_EXTRACT(tb_fill_data, '$.fillTime') >=? ", startFillTime) } } func FillDataEndFillTime(endFillTime string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(endFillTime) == 0 { return db } return db.Where("JSON_EXTRACT(tb_fill_data, '$.fillTime') <= ?", endFillTime) } } // GetPage 获取FillData列表 func (e *FillData) GetPage(c *dto.FillDataGetPageReq, list *[]model.FillData, count *int64, p *actions.DataPermission) error { var err error var data model.FillData err = e.Orm.Model(&data). Scopes( //FillDataStationId(c.StationId), //FillDataUserId(c.UserId), cDto.MakeCondition(c.GetNeedSearch()), FillDataInnerCode(c.InnerCode), FillDataChipId(c.ChipId), FillDataStartFillTime(c.StartFillTime), FillDataEndFillTime(c.EndFillTime), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), ). Preload("User").Preload("Station").Preload("Company"). Find(list).Limit(-1).Offset(-1). Count(count).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } // Insert 创建FillData对象 func (e *FillData) Insert(c *dto.FillDataInsertReq, fillGun model.FillGun) error { var err error // 通过高频id查询气瓶编码 var gasCylinder model.GasCylinder err = e.Orm.Where("uid = ?", c.ChipUid).First(&gasCylinder).Error if err != nil { e.Log.Errorf("获取气瓶信息(chip_id:%s)失败: %s", c.ChipUid, err) return errors.New("气瓶编码不存在") } now := time.Now() data := model.FillData{ Status: 2, StationId: fillGun.Dept.CmpCode, CompanyId: fillGun.Dept.CmpCode, UserId: fillGun.PersonCode, GasLog: model.TbGasLog{ Id: util.NewUuid(), GunCode: fillGun.GunCode, //PersonFlag:1, //ChipFlag:1, //OpenStatus:1, InnerCode: gasCylinder.InnerCode, PersonCode: fillGun.PersonCode, ChipId: c.ChipUid, CreateTime: now.Format("2006-01-02 15:04:05"), }, TbFillData: model.TbFillData{ FillId: util.NewUuid(), GunCode: fillGun.GunCode, StationId: fillGun.Dept.CmpCode, CompanyId: fillGun.Dept.CmpCode, Area: fillGun.Dept.ProvStore.District, City: fillGun.Dept.ProvStore.City, //PersonFlag:1, //ChipFlag:1, //OpenStatus:1, InnerCode: gasCylinder.InnerCode, UserId: fillGun.PersonCode, ChipId: c.ChipUid, //ProductMediaId: gasCylinder.FillMedia, FillTime: now.Format("2006-01-02 15:04:05"), CreateTime: now.Format("2006-01-02 15:04:05"), }, } data.SetDeptId(gasCylinder.DeptId) tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // TODO 同步省平台 1.1.1.24上报充装记录 err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } c.Id = data.Id return nil } func (e *FillData) GetStationList(list *[]model.FillDataDistinctStation, count *int64, p *actions.DataPermission) error { var err error var data model.FillData err = e.Orm.Model(&data). Scopes( actions.Permission(data.TableName(), p), ). Distinct("station_id").Preload("Station"). Find(list). Count(count).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } func (e *FillData) GetUserList(list *[]model.FillDataDistinctUser, count *int64, p *actions.DataPermission) error { var err error var data model.FillData err = e.Orm.Model(&data). Scopes( actions.Permission(data.TableName(), p), ). Distinct("user_id").Preload("User"). Find(list). Count(count).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil }