package dao

import (
	"github.com/druidcaesa/gotool"
	"ulink-admin/frame"
	"ulink-admin/modules/doc/models/model"
	"ulink-admin/modules/doc/models/req"
	"ulink-admin/pkg/base"
	"ulink-admin/pkg/page"
)

type DocFileDao struct {
	base.BaseDao
}

// Page 查询文档管理分页数据
func (this DocFileDao) Page(query *req.DocFileQuery) (*[]model.DocFile, int64) {
	docFile := make([]model.DocFile, 0)
	session := this.GetSession().Table(model.DocFile{}.TableName())

	if query.Id > 0 {
		session.And("id = ?", query.Id)
	}
	if query.CatgoryId > 0 {
		session.And("catgory_id = ?", query.CatgoryId)
	}
	if query.UserId > 0 {
		session.And("user_id = ?", query.UserId)
	}
	if !gotool.StrUtils.HasEmpty(query.Label) {
		session.And("label = ?", query.Label)
	}
	if !gotool.StrUtils.HasEmpty(query.Keywords) {
		session.And("keywords = ?", query.Keywords)
	}
	if !gotool.StrUtils.HasEmpty(query.Info) {
		session.And("info = ?", query.Info)
	}
	if !gotool.StrUtils.HasEmpty(query.Content) {
		session.And("content = ?", query.Content)
	}
	if !gotool.StrUtils.HasEmpty(query.File) {
		session.And("file = ?", query.File)
	}
	if query.State > 0 {
		session.And("state = ?", query.State)
	}
	if query.Sort > 0 {
		session.And("sort = ?", query.Sort)
	}
	if !gotool.StrUtils.HasEmpty(query.CreateBy) {
		session.And("create_by = ?", query.CreateBy)
	}
	if !gotool.StrUtils.HasEmpty(query.UpdateBy) {
		session.And("update_by = ?", query.UpdateBy)
	}
	if query.CompanyId > 0 {
		session.And("company_id = ?", query.CompanyId)
	}
	if !gotool.StrUtils.HasEmpty(query.BeginTime) {
		session.And("date_format(u.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
	}
	if !gotool.StrUtils.HasEmpty(query.EndTime) {
		session.And("date_format(u.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
	}
	total, _ := page.GetTotal(session.Clone())
	err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&docFile)
	if err != nil {
		frame.Throw(frame.SQL_CODE, "数据查询错误"+err.Error())
	}
	return &docFile, total
}

// List 查询文档管理分页数据
func (this DocFileDao) List(query *req.DocFileQuery, list interface{}) {
	session := this.GetSession().Table(model.DocFile{}.TableName())

	if query.Id > 0 {
		session.And("id = ?", query.Id)
	}
	if query.CatgoryId > 0 {
		session.And("catgory_id = ?", query.CatgoryId)
	}
	if query.UserId > 0 {
		session.And("user_id = ?", query.UserId)
	}
	if !gotool.StrUtils.HasEmpty(query.Label) {
		session.And("label = ?", query.Label)
	}
	if !gotool.StrUtils.HasEmpty(query.Keywords) {
		session.And("keywords = ?", query.Keywords)
	}
	if !gotool.StrUtils.HasEmpty(query.Info) {
		session.And("info = ?", query.Info)
	}
	if !gotool.StrUtils.HasEmpty(query.Content) {
		session.And("content = ?", query.Content)
	}
	if !gotool.StrUtils.HasEmpty(query.File) {
		session.And("file = ?", query.File)
	}
	if query.State > 0 {
		session.And("state = ?", query.State)
	}
	if query.Sort > 0 {
		session.And("sort = ?", query.Sort)
	}
	if !gotool.StrUtils.HasEmpty(query.CreateBy) {
		session.And("create_by = ?", query.CreateBy)
	}
	if !gotool.StrUtils.HasEmpty(query.UpdateBy) {
		session.And("update_by = ?", query.UpdateBy)
	}
	if query.CompanyId > 0 {
		session.And("company_id = ?", query.CompanyId)
	}
	if !gotool.StrUtils.HasEmpty(query.BeginTime) {
		session.And("date_format(u.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", query.BeginTime)
	}
	if !gotool.StrUtils.HasEmpty(query.EndTime) {
		session.And("date_format(u.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", query.EndTime)
	}
	err := session.Find(list)
	if err != nil {
		frame.Throw(frame.SQL_CODE, "数据查询错误"+err.Error())
	}
}