// 模块模型操作接口-公司 // 秒寻科技 // 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/module/bparam/bparamapi" "ipsomc/module/bparam/bparammodel" "ipsomc/module/project/projectmodel" "ipsomc/util" "strconv" ) type CompanyLgc struct { companyApi companyapi.CompanyApi userApi userapi.UserApi mySqlApi mysqlapi.MySqlApi bparamApi bparamapi.BparamApi } // 公司注册,包括注册系统管理员 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 } //修改公司记录归属owner_id,公司记录全部由平台管理员创建,所有公司记录的owner_id为平台管理员记录id(公司记录owner_id与记录id相同) if err := tx.Model(dataModel).Where("id=?", dataModel.ID).Update("owner_id", dataModel.OwnerID).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 operatorModel.Nickname = dataModel.Nickname ciphertext, err := util.EncryptAes([]byte(dataModel.Password)) if err != nil { tx.Rollback() return err } operatorModel.Password = ciphertext operatorModel.UserTypeID = 2 //1:平台管理员,2:系统管理员,3:项目管理员 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).Where("id=?", operatorModel.ID).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 } // 删除公司资料,包括删除公司系统管理员、项目资料和项目管理员 func (obj *CompanyLgc) DeleteCompanyLgc(dataModel *companymodel.Company) error { //开启事务 tx := obj.mySqlApi.GetDb().Begin() //删除公司的所有基站 if err := tx.Delete(&bparammodel.BtsBaseParam{}, "company_id=?", dataModel.ID).Error; err != nil { tx.Rollback() return err } //删除该公司的所有项目 if err := tx.Delete(&projectmodel.Project{}, "company_id=?", dataModel.ID).Error; err != nil { tx.Rollback() return err } //删除该公司的所有管理员 if err := tx.Delete(&usermodel.Operator{}, "company_id=?", dataModel.ID).Error; err != nil { tx.Rollback() return err } //删除该公司资料 if err := tx.Delete(&companymodel.Company{}, "id=?", dataModel.ID).Error; err != nil { tx.Rollback() return err } //提交事务 if err := tx.Commit().Error; err != nil { tx.Rollback() return err } return nil }