package data_manage_permission

import (
	"github.com/beego/beego/v2/client/orm"
	"time"
)

// DataPermissionMoveRecord
// @Description: 数据资产转移记录表
type DataPermissionMoveRecord struct {
	DataPermissionMoveRecordId int64     `json:"data_permission_move_record_id" orm:"column(data_permission_move_record_id);pk"` // 数据操作记录id
	Source                     int32     `json:"source"`                                                                         // 数据来源，1：手工数据指标 2：钢联化工数据库 3：ETA指标库 4：ETA预测指标 5：图库 6：ETA表格
	SubSource                  int32     `json:"sub_source"`                                                                     // 子来源 ：ETA表格中的各种表格类型，以及图表的来源（这个是后续的扩展方向）
	OpUniqueCode               string    `json:"op_unique_code"`                                                                 // 操作的唯一编码，主要是记录统一操作的日志
	DataId                     string    `json:"data_id"`                                                                        // 资产id（指标、图表、表格）
	DataCode                   string    `json:"data_code"`                                                                      // 资产code（指标、图表、表格）
	DataName                   string    `json:"data_name"`                                                                      // 资产名称（指标、图表、表格）
	OriginalUserId             int32     `json:"original_user_id"`                                                               // 原创建人id
	OriginalUserName           string    `json:"original_user_name"`                                                             // 原创建人名称
	NewUserId                  int32     `json:"new_user_id"`                                                                    // 新创建人id
	NewUserName                string    `json:"new_user_name"`                                                                  // 新创建人名称
	CreateTime                 time.Time `json:"create_time"`                                                                    // 创建时间
}

// AddDataPermissionMoveRecord
// @Description: 添加资产转移的操作记录
// @param dataPermissionMoveRecordList
// @param dataPermissionMessage
// @return err
func AddDataPermissionMoveRecord(dataPermissionMoveRecordList []*DataPermissionMoveRecord, dataPermissionMessage *DataPermissionMessage) (err error) {
	num := len(dataPermissionMoveRecordList)
	if num <= 0 {
		return
	}
	o, err := orm.NewOrmUsingDB("data").Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = o.Rollback()
		} else {
			_ = o.Commit()
		}
	}()

	// 添加操作记录
	_, err = o.InsertMulti(500, dataPermissionMoveRecordList)
	if err != nil {
		return
	}

	// 添加消息通知
	_, err = o.Insert(dataPermissionMessage)

	return
}

// GetDataPermissionMoveRecordListByOpUniqueCode
// @Description: 根据操作唯一编码获取操作记录
// @author: Roc
// @datetime 2024-04-07 20:15:22
// @param opUniqueCode string
// @param source int
// @param subSource int
// @param startSize int
// @param pageSize int
// @return total int
// @return items []*DataPermissionMoveRecord
// @return err error
func GetDataPermissionMoveRecordListByOpUniqueCode(opUniqueCode string, source, subSource, startSize, pageSize int) (total int, items []*DataPermissionMoveRecord, err error) {
	o := orm.NewOrmUsingDB("data")

	// 获取总数
	sql := `SELECT count(1) AS total FROM data_permission_move_record WHERE op_unique_code = ? AND source = ? AND sub_source = ? `
	err = o.Raw(sql, opUniqueCode, source, subSource).QueryRow(&total)
	if err != nil {
		return
	}

	sql = `SELECT * FROM data_permission_move_record WHERE op_unique_code = ? AND source = ? AND sub_source = ? ORDER BY data_permission_move_record_id desc LIMIT ?,? `
	_, err = o.Raw(sql, opUniqueCode, source, subSource, startSize, pageSize).QueryRows(&items)

	return
}
