package service import ( "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" cModel "gas-cylinder-api/common/model" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm" "gorm.io/gorm/utils" "strings" "time" ) type GasCylinderStatus struct { service.Service } func GasCylinderStatusScopes(status string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if len(status) == 0 { return db } if status == model.GasCylinderStatusUnqualified { return db.Where("status = ? or status = ?", model.GasCylinderStatusScrap, model.GasCylinderStatusExtended) } if strings.Contains(status, model.GasCylinderStatusScrap) { return db.Where("status = ?", model.GasCylinderStatusScrap) } if strings.Contains(status, model.GasCylinderStatusExtended) { return db.Where("status = ?", model.GasCylinderStatusExtended) } return db.Where("status = ? ", status) } } // GetPage 获取GasCylinderStatus列表 func (e *GasCylinderStatus) GetPage(c *dto.GasCylinderStatusGetPageReq, list *[]model.GasCylinderStatus, count *int64, p *actions.DataPermission) error { var err error var data model.GasCylinderStatus err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), //actions.Permission(data.TableName(), p), GasCylinderStatusScopes(c.Status), ). Where("company_id = ? AND user_id = 0", p.DeptId). Find(list).Limit(-1).Offset(-1). Count(count).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } // GetPage 获取GasCylinderStatus列表 func (e *GasCylinderStatus) GetUserPage(c *dto.GasCylinderStatusGetPageReq, list *[]model.GasCylinderStatus, count *int64, p *actions.DataPermission) error { var err error var data model.GasCylinderStatus err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), //actions.Permission(data.TableName(), p), GasCylinderStatusScopes(c.Status), ). Where("user_id = ?", p.UserId). 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 获取GasCylinderStatus对象 func (e *GasCylinderStatus) Get(d *dto.GasCylinderStatusGetReq, gasCylinderStatusModel *model.GasCylinderStatus, p *actions.DataPermission) error { err := e.Orm. Scopes(actions.Permission(gasCylinderStatusModel.TableName(), p)). First(gasCylinderStatusModel, 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 创建GasCylinderStatus对象 func (e *GasCylinderStatus) Insert(c *dto.GasCylinderStatusInsertReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() inDeptIdScopes := InRootCompanyIdsScopes(p.DeptId) for _, innerCode := range c.InnerCodeList { // 查询钢瓶档案 var gasCylinder = model.GasCylinder{} // 查询订单是否存在 err = e.Orm. Scopes(inDeptIdScopes). Where("inner_code = ?", innerCode). First(&gasCylinder).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("钢瓶%s不存在,请先在钢瓶档案添加!", innerCode)) } return errors.New(fmt.Sprintf("查询钢瓶%s失败,请检查!", innerCode)) } var data model.GasCylinderStatus err = e.Orm. Where("inner_code = ? ", innerCode). Preload("Company"). Preload("User"). First(&data).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } if data.Id > 0 { if data.UserId > 0 && data.UserId != p.UserId { err = errors.New(fmt.Sprintf("钢瓶%s被【%s】关联,请检查!", innerCode, data.User.NickName)) return err } if data.CompanyId == p.DeptId { if data.Status != c.Status { if data.Status != c.Status { err = errors.New(fmt.Sprintf("钢瓶%s状态为【%s】,请检查!", innerCode, model.GasCylinderStatusState2Map[data.Status])) return err } } } else { err = errors.New(fmt.Sprintf("钢瓶%s被【%s】关联,请检查!", innerCode, data.Company.Name)) return err } } // 添加调拨信息 data.CompanyId = p.DeptId c.Generate(innerCode, &data) err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } return nil } func (e *GasCylinderStatus) UserInsert(c *dto.GasCylinderStatusInsertReq, p *actions.DataPermission, isorders bool) error { //Isorders 是否是送气员 var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() inDeptIdScopes := InRootCompanyIdsScopes(p.DeptId) for _, innerCode := range c.InnerCodeList { // 查询钢瓶档案 var gasCylinder = model.GasCylinder{} // 查询订单是否存在 err = e.Orm. Scopes(inDeptIdScopes). Where("inner_code = ?", innerCode). First(&gasCylinder).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("钢瓶%s不存在,请先在钢瓶档案添加!", innerCode)) } return errors.New(fmt.Sprintf("查询钢瓶%s失败,请检查!", innerCode)) } var data model.GasCylinderStatus err = e.Orm. Where("inner_code = ? ", innerCode). Preload("Company"). Preload("User"). First(&data).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } if data.Id > 0 { if data.UserId == p.UserId { if data.Status != c.Status { err = errors.New(fmt.Sprintf("钢瓶%s状态为【%s】,请检查!", innerCode, model.GasCylinderStatusState2Map[data.Status])) return err } } else { err = errors.New(fmt.Sprintf("钢瓶%s被【%s】%s关联,请检查!", innerCode, data.Company.Name, data.User.NickName)) return err } } // 添加调拨信息 data.UserId = p.UserId data.CompanyId = p.DeptId c.Generate(innerCode, &data) err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } if isorders && c.Status == model.GasCylinderStatusWeighty { // 27 送气员回收空瓶 log := make([]model.OperationLog, 0) var user model.SysUser user, err = model.GetUserCode(p.UserId) if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } // 修改用户关联的气瓶信息 var cgc model.CustomerGasCylinder err = tx.Where("inner_code = ? and state = 1", innerCode).First(&cgc).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } operationLog := model.OperationLog{ ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "27", ObjectCustomer: cgc.CustomerId, OptCustomer: cgc.CustomerId, OptUser: user.ProvUserId, ObjectUser: user.ProvUserId, CompanyId: user.ProvUser.CmpCode, CurrentEnterprise: user.ProvUser.CmpCode, CurrentStore: user.Dept.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, }, } log = append(log, operationLog) // TODO 同步省平台 1.1.1.22 批量新增操作记录 err = tx.Create(&log).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } if cgc.Id > 0 { cgc.ReturnTime = cModel.Time(time.Now()) cgc.State = 2 err = tx.Save(&cgc).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } } } return nil } // Remove 删除GasCylinderStatus func (e *GasCylinderStatus) Remove(c *dto.GasCylinderStatusDeleteReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var gasCylinderStatusModel model.GasCylinderStatus // 查询钢瓶是否存在 err = e.Orm.Scopes(actions.Permission(gasCylinderStatusModel.TableName(), p)). First(&gasCylinderStatusModel, 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(&gasCylinderStatusModel) 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 } // Update 创建GasCylinderStatus对象 func (e *GasCylinderStatus) Update(c *dto.GasCylinderStatusUpdateReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() for _, innerCode := range c.InnerCodeList { var data model.GasCylinderStatus err = e.Orm. Where("inner_code = ? ", innerCode). First(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } if data.Status != c.Status { data.Status = c.Status data.UpdateBy = c.UpdateBy err = tx.Save(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } } return nil }