// 模块模型操作接口-公司 // 秒寻科技 // zt 2024-02-01 package companylogic import ( "errors" "ipsomc/core/company/companyapi" "ipsomc/core/company/companymodel" "ipsomc/core/dao/mysql/mysqlapi" "ipsomc/core/user/userapi" "ipsomc/core/user/usermodel" "ipsomc/util" "strconv" ) type CompanyLgc struct { companyApi companyapi.CompanyApi userApi userapi.UserApi mySqlApi mysqlapi.MySqlApi } // 公司注册,包括注册系统管理员 func (obj *CompanyLgc) CompanyRegister(dataModel *companymodel.Company) error { roleModel := new(usermodel.Role) //公司查重 if err := obj.companyApi.CheckCompany(dataModel); err != nil { return err } //系统操作员查重 if err := obj.userApi.CheckOperatorName(dataModel.UserName); err != nil { return err } //开启一个事务 db := obj.mySqlApi.GetDb() tx := db.Begin() //新增公司资料 if err := tx.Create(dataModel).Error; err != nil { tx.Rollback() return err } //查询系统管理员的角色ID if err := db.Model(roleModel).Where("type_id=?", 2).First(roleModel).Error; err != nil { tx.Rollback() return err } if roleModel.ID <= 0 { //角色不存在 tx.Rollback() return errors.New("系统错误,请联系平台管理员") } //注册系统管理员 var operatorModel usermodel.Operator operatorModel.Name = dataModel.ContactPerson operatorModel.Telephone = dataModel.ContactTel operatorModel.UserName = dataModel.UserName ciphertext, err := util.EncryptAes([]byte(dataModel.Password)) if err != nil { tx.Rollback() return err } operatorModel.Password = ciphertext operatorModel.UserTypeID = 2 //系统管理员 operatorModel.CompanyID = dataModel.ID operatorModel.Role = strconv.Itoa(int(roleModel.ID)) //为系统管理员分配角色 if err := tx.Create(&operatorModel).Error; err != nil { tx.Rollback() return err } //修改系统管理员的OwnerID if err := tx.Model(operatorModel).Update("owner_id", operatorModel.ID).Error; err != nil { tx.Rollback() return err } //提交事务 if err := tx.Commit().Error; err != nil { tx.Rollback() return errors.New("数据库操作失败") } return nil }