/* * @description:项目用户数据库操作 * @Author: CP * @Date: 2020-08-31 15:57:04 * @FilePath: \construction_management\dao\project_account_dao.go */ package dao import ( "errors" "log" "time" "github.com/go-xorm/xorm" "go.mod/models" "go.mod/web/viewmodels" ) //数据库操作引擎 type ProjectAccountDao struct { engine *xorm.Engine } //获得一个DAO对象 func NewProjectAccountDao(engine *xorm.Engine) *ProjectAccountDao { return &ProjectAccountDao{ engine: engine, } } //CmProjectAccount 设置的值获得数据-弃用 // func (d *ProjectAccountDao) GetOne(data *models.CmProjectAccount) *models.CmProjectAccount { // //data := data // //Get取到值后,会自动赋值到data中 // ok, err := d.engine. // Where("account = ?", data.Account). // Get(data) // if ok && err == nil { // return data // } else { // data.Id = 0 // return data // } // } // 根据账号获得数据 func (d *ProjectAccountDao) GetAccount(account string) *models.CmProjectAccount { data := &models.CmProjectAccount{} ok, err := d.engine. Where("account = ?", account). Get(data) if ok && err == nil { return data } else { data.Id = 0 return data } } func (d *ProjectAccountDao) GetAccountByAuth(account string, projectId int) *models.CmProjectAccount { data := &models.CmProjectAccount{} ok, err := d.engine. Where("account = ? and project_id = ? and jl_auth = 1", account, projectId). Get(data) if ok && err == nil { return data } else { data.Id = 0 return data } } func (d *ProjectAccountDao) GetAccountProjectId(account string, projectId int) *models.CmProjectAccount { data := &models.CmProjectAccount{} ok, err := d.engine. Where("account = ? and project_id = ?", account, projectId). Get(data) if ok && err == nil { return data } else { data.Id = 0 return data } } func (d *ProjectAccountDao) GetAdmin(projectId int) *models.CmProjectAccount { data := &models.CmProjectAccount{} ok, err := d.engine. Where("is_admin = 1 and project_id = ?", projectId). Get(data) if ok && err == nil { return data } else { data.Id = 0 return data } } //id获得数据 func (d *ProjectAccountDao) Get(id int, projectId int) *models.CmProjectAccount { data := &models.CmProjectAccount{Id: id, ProjectId: projectId} ok, err := d.engine.Get(data) if ok && err == nil { return data } else { data.Id = 0 return data } } // 获得项目下的账号信息 func (d *ProjectAccountDao) GetAll(projectId int) []models.CmProjectAccount { datalist := make([]models.CmProjectAccount, 0) err := d.engine. Where("project_id = ?", projectId). Desc("id"). Find(&datalist) if err != nil { return datalist } else { return datalist } } func (d *ProjectAccountDao) GetInId(ids string, name string) []models.CmProjectAccount { datalist := make([]models.CmProjectAccount, 0) err := d.engine. Where("id in ( "+ids+" ) "). And("account like ? or name like ? or company like ? or mobile like ?", name+"%", name+"%", name+"%", name+"%"). Desc("id"). Find(&datalist) if err != nil { return datalist } else { return datalist } } // 检索 账号姓名单位手机 func (d *ProjectAccountDao) Search(name string, projectId int) []models.CmProjectAccount { datalist := make([]models.CmProjectAccount, 0) err := d.engine. Where("project_id = ? ", projectId). And("account like ? or name like ? or mobile like ?", "%"+name+"%", "%"+name+"%", "%"+name+"%"). // And("account like ? or name like ? or company like ? or mobile like ?", "%"+name+"%", "%"+name+"%", "%"+name+"%", "%"+name+"%"). Desc("id"). Find(&datalist) if err != nil { return datalist } else { return datalist } } // 同步计量账号 func (d *ProjectAccountDao) JlSync(accountList []map[string]interface{}, projectId int) error { var ( accountName string err error flag bool accountItemId int ) accountListNow := make([]models.CmProjectAccount, 0) err = d.engine. Where("project_id=? ", projectId). Find(&accountListNow) session := d.engine.NewSession() defer session.Close() err = session.Begin() if err != nil { return errors.New("同步出错-db") } // 库里没有账号数据,全部新增 if len(accountListNow) == 0 { for _, item := range accountList { accountGroup := int(item["accountGroup"].(float64)) // 新增 account := &models.CmProjectAccount{} account.JlAuth = 1 account.ProjectId = projectId account.Account = item["account"].(string) account.Password = "JL" account.AccountGroup = accountGroup account.Name = item["name"].(string) account.Company = item["company"].(string) account.Position = item["role"].(string) account.Mobile = item["mobile"].(string) account.Telephone = item["telephone"].(string) account.Enable = 1 account.CreateTime = time.Now() if _, err = session.Insert(account); err != nil { session.Rollback() log.Println("同步计量账号新增 error=", err) return errors.New("创建账号出错") } } // 有数据 存在的授权,不存新增 } else { for _, item := range accountList { accountGroup := int(item["accountGroup"].(float64)) accountName = item["account"].(string) flag = false for _, accountItem := range accountListNow { // 已存在相同账号 if accountItem.Account == accountName { accountItemId = accountItem.Id flag = true break } } if flag { if _, err = session.Exec("UPDATE cm_project_account SET `jl_auth` = 1 where id = ? ", accountItemId); err != nil { session.Rollback() log.Println("同步计量账号 授权 error=", err) return errors.New("账号授权出错") } } else { // 新增 account := &models.CmProjectAccount{} account.JlAuth = 1 account.ProjectId = projectId account.Account = accountName account.Password = "JL" account.AccountGroup = accountGroup account.Name = item["name"].(string) account.Company = item["company"].(string) account.Position = item["role"].(string) account.Mobile = item["mobile"].(string) account.Telephone = item["telephone"].(string) account.Enable = 1 account.CreateTime = time.Now() if _, err = session.Insert(account); err != nil { session.Rollback() log.Println("同步计量账号新增 error=", err) return errors.New("创建账号出错") } } } } // 过滤已存在的账号-项目但没有授权的,设置为授权 if err = session.Commit(); err != nil { session.Rollback() return errors.New("移动出错-db") } return nil } // 新增 func (d *ProjectAccountDao) Add(data *models.CmProjectAccount) error { _, err := d.engine.Insert(data) return err } //更新 func (d *ProjectAccountDao) Update(data *models.CmProjectAccount, columns []string) error { //_, err := d.engine.Id(data.Id).MustCols(columns...).Update(data) _, err := d.engine.Where("id = ? and project_id = ? ", data.Id, data.ProjectId).MustCols(columns...).Update(data) if err != nil { return errors.New("更新账号失败") } return nil } // 物理删除 func (d *ProjectAccountDao) Delete(data *models.CmProjectAccount) error { _, err := d.engine.Where("id = ? and project_id = ? ", data.Id, data.ProjectId).Delete(data) if err != nil { return errors.New("删除到账号失败") } return nil } // 查找 func (d *ProjectAccountDao) FindById(id int) (viewmodels.ProjectInfo, error) { projectInfo := viewmodels.ProjectInfo{} _, err := d.engine.Sql("select p.`name` as project_name, p.`code`, p.`create_time`, a.`mobile`, a.`name` from `cm_project` as p, `cm_project_account` as a where p.`user_id` = a.`id` and p.`id` = ?", id).Get(&projectInfo) return projectInfo, err }