department.go 3.6 KB
package models

import (
	"fmt"
	"time"

	"github.com/astaxie/beego/orm"
)

type Department struct {
	Id        int64     `orm:"column(id);auto"`
	CompanyId int64     `orm:"column(company_id)" description:"公司id"`
	Name      string    `orm:"column(name);size(30)" description:"部门名称"`
	CreateAt  time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"`
	ParentId  int64     `orm:"column(parent_id)" description:"父级id"`
	Relation  string    `orm:"column(relation);size(400)" description:"父子级关系树"`
	DeleteAt  time.Time `orm:"column(delete_at);type(timestamp)" description:"删除时间"`
	UpdateAt  time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"`
	Managers  string    `orm:"column(managers);null" description:"部门负责人id列表 json 数组 [ ]"`
}

func (t *Department) TableName() string {
	return "department"
}

func init() {
	orm.RegisterModel(new(Department))
}

// AddDepartment insert a new Department into database and returns
// last inserted Id on success.
func AddDepartment(m *Department) (id int64, err error) {
	o := orm.NewOrm()
	id, err = o.Insert(m)
	return
}

// GetDepartmentById retrieves Department by Id. Returns error if
// Id doesn't exist
func GetDepartmentById(id int64) (v *Department, err error) {
	o := orm.NewOrm()
	v = &Department{Id: id}
	if err = o.Read(v); err == nil {
		return v, nil
	}
	return nil, err
}

// UpdateDepartment updates Department by Id and returns error if
// the record to be updated doesn't exist
func UpdateDepartmentById(m *Department) (err error) {
	o := orm.NewOrm()
	v := Department{Id: m.Id}
	// ascertain id exists in the database
	if err = o.Read(&v); err == nil {
		var num int64
		if num, err = o.Update(m); err == nil {
			fmt.Println("Number of records updated in database:", num)
		}
	}
	return
}

// DeleteDepartment deletes Department by Id and returns error if
// the record to be deleted doesn't exist
func DeleteDepartment(id int64) (err error) {
	o := orm.NewOrm()
	v := Department{Id: id}
	// ascertain id exists in the database
	if err = o.Read(&v); err == nil {
		var num int64
		if num, err = o.Delete(&Department{Id: id}); err == nil {
			fmt.Println("Number of records deleted in database:", num)
		}
	}
	return
}

//按 1.公司编号
//获取部门列表
func GetDepartmentByCompanyId(companyId int64) (v []*Department, err error) {
	o := orm.NewOrm()
	sql := `
select *
from  department 
where  company_id =?  and delete_at =0
order by level,id`
	if _, err = o.Raw(sql, companyId).QueryRows(&v); err == nil {
		return
	}
	return
}

func GetSubDepartmentIds(companyId int64, relation string) (v []int, err error) {
	o := orm.NewOrm()
	sql := fmt.Sprintf(`
select id from department where company_id=? and relation like '%v%%'  and delete_at =0`, relation)
	if _, err = o.Raw(sql, companyId).QueryRows(&v); err == nil {
		return
	}
	return
}

func GetDepartmentIdsByCompanyId(companyId int) (v []int64, err error) {
	o := orm.NewOrm()
	sql := `
select id
from  department 
where  company_id =?  and delete_at =0
order by level,id`
	if _, err = o.Raw(sql, companyId).QueryRows(&v); err == nil {
		return
	}
	return
}

//获取用户所有部门
func GetDepartmentByUser(uid int64) (v []*Department, err error) {
	o := orm.NewOrm()
	sql := `
select id from (
select department_id from user_department where user_company_id=? and enable_status = 1
)a inner join department b on a.department_id = b.id
where b.delete_at =0
order by b.level,b.id`
	if _, err = o.Raw(sql, uid).QueryRows(&v); err == nil {
		if err == orm.ErrNoRows {
			err = nil
			return
		}
		return
	}
	return
}