package excel

import (
	"eta_gn/eta_api/global"
	"eta_gn/eta_api/utils"
	"time"
)

type ExcelWorker struct {
	ExcelWorkerId   int       `orm:"column(excel_worker_id);pk" gorm:"primaryKey" `
	ExcelInfoId     int       `description:"表格id"`
	SysUserId       int       `description:"创建人"`
	SysUserRealName string    `description:"创建人姓名"`
	ModifyTime      time.Time `description:"修改时间"`
	CreateTime      time.Time `description:"创建时间"`
}

func (e *ExcelWorker) TableName() string {
	return "excel_worker"
}

// 新增 协作人
func (e *ExcelWorker) AddWorker(excelInfoId int, addWorkers []*ExcelWorker, notDeleteWorkers []string) (err error) {
	//o, err := orm.NewOrmUsingDB("data").Begin()
	//if err != nil {
	//	return
	//}
	//defer func() {
	//	if err != nil {
	//		_ = o.Rollback()
	//	} else {
	//		_ = o.Commit()
	//	}
	//}()

	to := global.DmSQL["data"].Begin()

	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()

	if len(notDeleteWorkers) > 0 {
		sql := `delete from excel_worker where excel_info_id = ? and sys_user_id not in (` + utils.GetOrmInReplace(len(notDeleteWorkers)) + `)`
		err = to.Exec(sql, excelInfoId, notDeleteWorkers).Error
		if err != nil {
			return
		}
	} else if len(notDeleteWorkers) == 0 { // 清空协作人
		//sql := `delete from excel_worker where excel_info_id = ? `
		//_, err = o.Raw(sql, excelInfoId).Exec()
		//if err != nil {
		//	return
		//}

		sql := `delete from excel_worker where excel_info_id = ? `
		err = to.Exec(sql, excelInfoId).Error
		if err != nil {
			return
		}
	}
	if len(addWorkers) > 0 {
		//_, err = o.InsertMulti(len(addWorkers), addWorkers)

		err = to.CreateInBatches(addWorkers, utils.MultiAddNum).Error
	}
	return
}

// 修改
func (e *ExcelWorker) Update(cols []string) (err error) {
	//o := orm.NewOrmUsingDB("data")
	//_, err = o.Update(e, cols...)
	err = global.DmSQL["data"].Select(cols).Updates(e).Error
	return
}

// 删除
func (e *ExcelWorker) Delete() (err error) {
	//o := orm.NewOrmUsingDB("data")
	//_, err = o.Delete(e)

	sql := ` DELETE FROM excel_worker WHERE excel_worker_id=? `
	err = global.DmSQL["data"].Exec(sql, e.ExcelWorkerId).Error
	return
}

// 查询
func (e *ExcelWorker) GetByExcelInfoId(excelInfoId int) (items []*ExcelWorker, err error) {
	//o := orm.NewOrmUsingDB("data")
	//sql := `select * from excel_worker where excel_info_id = ? `
	//_, err = o.Raw(sql, excelInfoId).QueryRows(&items)

	sql := `select * from excel_worker where excel_info_id = ? `
	err = global.DmSQL["data"].Raw(sql, excelInfoId).Find(&items).Error
	return
}

// 查询
func (e *ExcelWorker) GetBySysUserId(sysUserId int) (items []*ExcelWorker, err error) {
	//o := orm.NewOrmUsingDB("data")
	//sql := `select * from excel_worker where sys_user_id = ? `
	//_, err = o.Raw(sql, sysUserId).QueryRows(&items)

	sql := `select * from excel_worker where sys_user_id = ? `
	err = global.DmSQL["data"].Raw(sql, sysUserId).Find(&items).Error
	return
}