123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- /*
- * @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
- }
|