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" cModel "gas-cylinder-api/common/model" log "gogs.baozhida.cn/zoie/OAuth-core/logger" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm/utils" "gorm.io/gorm" "time" ) type OperationLog struct { service.Service } // GetPage 获取OperationLog列表 func (e *OperationLog) GetPage(c *dto.OperationLogGetPageReq, list *[]model.OperationLog, count *int64, p *actions.DataPermission) error { var err error var data model.OperationLog err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), ). Preload("OptUserObj"). Preload("ObjectUserObj"). Preload("ObjectCustomerObj"). Preload("OptCustomerObj"). Preload("CompanyObj"). Preload("CurrentEnterpriseObj"). Preload("CurrentStationObj"). Preload("CurrentStoreObj"). Preload("CurrentTruckObj"). Preload("CurrentAddressObj"). 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 获取OperationLog对象 func (e *OperationLog) Get(d *dto.OperationLogGetReq, carInfoModel *model.OperationLog, 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 创建OperationLog对象 func (e *OperationLog) Insert(c *dto.OperationLogInsertReq, p *actions.DataPermission) error { var err error data := make([]model.OperationLog, 0) //company, err := model.GetProvCodeById(p.DeptId) if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } user, err := model.GetUserCode(p.UserId) if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() switch c.OptType { case "25", "27": // 送气员领重瓶 // 查询门店 store, err := model.GetDeptByCmpCode(c.CurrentEnterprise) if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return errors.New("获取门店信息失败") } for _, chipUid := range c.ChipUidList { // 1、通过高频ID查询气瓶内编码 var gasCylinder model.GasCylinder err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } operationLog := model.OperationLog{ ProvOperationLog: model.ProvOperationLog{ InnerCode: gasCylinder.InnerCode, OptType: c.OptType, OptUser: user.ProvUserId, CompanyId: user.ProvUser.CmpCode, CurrentEnterprise: user.ProvUser.CmpCode, CurrentStore: store.CmpCode, Lng: utils.ToString(store.ProvStore.Lng), Lat: utils.ToString(store.ProvStore.Lat), OptTime: time.Now().Format("2006-01-02 15:04:05"), }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLog) if c.OptType == "27" { // 修改用户关联的气瓶信息 var cgc model.CustomerGasCylinder err = tx.Where("inner_code = ? and state = 1", gasCylinder.InnerCode).First(&cgc).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } cgc.ReturnTime = cModel.Time(time.Now()) cgc.State = 2 err = tx.Save(&cgc).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } } } case "6", "10", "21", "31", "33", "34", "35", "37": // 门店端 for _, chipUid := range c.ChipUidList { // 1、通过高频ID查询气瓶内编码 var gasCylinder model.GasCylinder err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } if c.OptType == "21" { err = tx.Model(&model.OperationLog{}).Where("inner_code = ? and state = 1", gasCylinder.InnerCode).Updates(map[string]int{ "state": 2, }).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } } operationLog := model.OperationLog{ ProvOperationLog: model.ProvOperationLog{ InnerCode: gasCylinder.InnerCode, OptType: c.OptType, OptUser: user.ProvUserId, CompanyId: user.ProvUser.CmpCode, CurrentEnterprise: user.ProvUser.CmpCode, CurrentStore: user.ProvUser.CmpCode, Lng: utils.ToString(user.Dept.ProvStore.Lng), Lat: utils.ToString(user.Dept.ProvStore.Lat), OptTime: time.Now().Format("2006-01-02 15:04:05"), }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLog) } case "11", "12", "16", "17", "19": // 司机端 for _, chipUid := range c.ChipUidList { // 1、通过高频ID查询气瓶内编码 var gasCylinder model.GasCylinder err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error if err != nil { tx.Rollback() e.Log.Errorf("获取气瓶信息失败: %s", err) return errors.New("获取气瓶信息失败") } var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", user.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) return errors.New("获取车辆信息失败") } operationLog := model.OperationLog{ ProvOperationLog: model.ProvOperationLog{ InnerCode: gasCylinder.InnerCode, OptType: c.OptType, OptUser: user.ProvUserId, //CompanyId: user.ProvUser.CmpCode, //CurrentEnterprise: user.ProvUser.CmpCode, //CurrentStore: user.ProvUser.CmpCode, CurrentTruck: user.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: time.Now().Format("2006-01-02 15:04:05"), }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } if c.OptType == "12" || c.OptType == "16" || c.OptType == "17" { operationLog.CurrentStation = c.CurrentEnterprise operationLog.CompanyId = c.CurrentEnterprise operationLog.CurrentEnterprise = c.CurrentEnterprise } if c.OptType == "11" || c.OptType == "19" { operationLog.CompanyId = c.CurrentEnterprise operationLog.CurrentEnterprise = c.CurrentEnterprise operationLog.CurrentStore = c.CurrentEnterprise } data = append(data, operationLog) } } provList := make([]model.ProvOperationLog, 0) for _, datum := range data { provList = append(provList, datum.GenProvOperationLog()) } // TODO 同步省平台 1.1.1.22 批量新增操作记录 err = tx.Create(&data).Error if err != nil { tx.Rollback() e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } return nil } func (e *OperationLog) InsertForGasStation(c *dto.OperationLogInsertForGasStationReq) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // 通过sn查询设备信息 var device model.Device err = tx.Where("sn = ?", c.Sn).Preload("User").First(&device).Error if err != nil { tx.Rollback() e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } // 1、通过高频ID查询气瓶内编码 var gasCylinder model.GasCylinder err = tx.Where("uid = ?", c.ChipUid).First(&gasCylinder).Error operationLog := model.OperationLog{ ProvOperationLog: model.ProvOperationLog{ OptType: device.OptType, OptTime: time.Now().Format("2006-01-02 15:04:05"), OptUser: device.ProvUserId, InnerCode: gasCylinder.InnerCode, CompanyId: device.ProvCmpCode, CurrentEnterprise: device.ProvCmpCode, CurrentStation: device.ProvCmpCode, }, DeptBy: cModel.DeptBy{ DeptId: device.DeptId, }, } // TODO 同步省平台 1.1.1.20 新增操作记录 //ipr := data.GenProvOperationLog() err = tx.Create(&operationLog).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } return nil } // 送气员送达重瓶,送气订单取消 func InsertOperationLogByOptType26Or36(tx *gorm.DB, OptType string, chipUid string, order model.Order) error { var err error // 1、通过高频ID查询气瓶内编码 var gasCylinder model.GasCylinder err = tx.Where("uid = ?", chipUid).First(&gasCylinder).Error if err != nil { return errors.New("获取气瓶信息失败") } operationLog := model.OperationLog{ ProvOperationLog: model.ProvOperationLog{ OptType: OptType, OptTime: time.Now().Format("2006-01-02 15:04:05"), OptUser: order.User.ProvUserId, InnerCode: gasCylinder.InnerCode, ObjectCustomer: order.CustomerId, OptCustomer: order.CustomerId, CompanyId: order.Dept.CmpCode, CurrentEnterprise: order.Store.CmpCode, CurrentAddress: order.CustomerId, }, ControlBy: cModel.ControlBy{ CreateBy: order.UserId, }, DeptBy: cModel.DeptBy{ DeptId: order.DeptId, }, } // TODO 同步省平台 1.1.1.20 新增操作记录 //ipr := data.GenProvOperationLog() err = tx.Create(&operationLog).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } if OptType == "26" { // 新增客户气瓶信息 err = tx.Create(&model.CustomerGasCylinder{ CustomerId: order.CustomerId, InnerCode: gasCylinder.InnerCode, State: 1, BorrowTime: cModel.Time(time.Now()), }).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } } if OptType == "36" { // 查询气瓶信息 var cgc model.CustomerGasCylinder err = tx.Where("inner_code = ? and state = 1", gasCylinder.InnerCode, order.CustomerId).First(&cgc).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } cgc.ReturnTime = cModel.Time(time.Now()) cgc.State = 2 err = tx.Save(&cgc).Error if err != nil { tx.Rollback() log.Errorf("db error: %s", err) return global.CreateFailedErr } } return nil } // ListByUid 通过uid获取OperationLog列表 func (e *OperationLog) ListByUid(InnerCode string, list *[]model.OperationLog) error { var err error var data model.OperationLog err = e.Orm.Model(&data). Where("inner_code = ? and state = 1", InnerCode). Preload("OptUserObj"). Preload("ObjectUserObj"). Preload("ObjectCustomerObj"). Preload("OptCustomerObj"). Preload("CompanyObj"). Preload("CurrentEnterpriseObj"). Preload("CurrentStationObj"). Preload("CurrentStoreObj"). Preload("CurrentTruckObj"). Preload("CurrentAddressObj"). Find(list).Order("opt_time").Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil }