package models

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

// 首页资源表与产业的关系
type CygxResourceDataIndustrialGroupManagement struct {
	Id                     int       `orm:"column(id);pk" description:"主键ID"`
	ResourceDataId         int       `description:"cygx_resource_data 主键ID"`
	SourceId               int       `description:"资源ID"`
	Source                 string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
	IndustrialManagementId int       `description:"cygx_industrial_management表的主键ID"`
	CreateTime             time.Time `description:"创建时间"`
}

// 首页资源表与产业的关系
type CygxResourceDataIndustrialGroupSubject struct {
	Id                  int       `orm:"column(id);pk" description:"主键ID"`
	ResourceDataId      int       `description:"cygx_resource_data 主键ID"`
	SourceId            int       `description:"资源ID"`
	Source              string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
	IndustrialSubjectId int       `description:"cygx_industrial_subject表的主键ID"`
	CreateTime          time.Time `description:"创建时间"`
}

// 关联产业列表
func GetCygxResourceDataIndustrialGroupManagementList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResourceDataIndustrialGroupManagement, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM cygx_resource_data_industrial_group_management as a WHERE 1= 1 `
	if condition != "" {
		sql += condition
	}
	if startSize+pageSize > 0 {
		sql += ` LIMIT ?,?  `
		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	} else {
		_, err = o.Raw(sql, pars).QueryRows(&items)
	}

	return
}

// 关联标的列表
func GetCygxResourceDataIndustrialGroupSubjectList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResourceDataIndustrialGroupSubject, err error) {
	o := orm.NewOrm()
	sql := `SELECT * FROM cygx_resource_data_industrial_group_subject as a WHERE 1= 1 `
	if condition != "" {
		sql += condition
	}
	if startSize+pageSize > 0 {
		sql += ` LIMIT ?,?  `
		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
	} else {
		_, err = o.Raw(sql, pars).QueryRows(&items)
	}

	return
}

// 添加
func AddCygxResourceDataGroup(sourceId int, source string, industrialItems []*CygxResourceDataIndustrialGroupManagement, subjectItems []*CygxResourceDataIndustrialGroupSubject) (err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()
	//删除关联产业
	sql := `	DELETE FROM cygx_resource_data_industrial_group_management WHERE source_id = ? AND source =? `
	_, err = to.Raw(sql, sourceId, source).Exec()
	if err != nil {
		return
	}
	//删除关联标的
	sql = `	DELETE FROM cygx_resource_data_industrial_group_subject WHERE source_id = ? AND source =? `
	_, err = to.Raw(sql, sourceId, source).Exec()
	if err != nil {
		return
	}

	//批量插入关联产业
	if len(industrialItems) > 0 {
		_, err = to.InsertMulti(len(industrialItems), industrialItems)
		if err != nil {
			return
		}
	}

	//批量插入关联标的
	if len(subjectItems) > 0 {
		_, err = to.InsertMulti(len(subjectItems), subjectItems)
		if err != nil {
			return
		}
	}

	return
}

// 删除
func DeleteCygxResourceDataGroup(sourceId int, source string) (err error) {
	o := orm.NewOrm()
	to, err := o.Begin()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			_ = to.Rollback()
		} else {
			_ = to.Commit()
		}
	}()
	//删除关联产业
	sql := `	DELETE FROM cygx_resource_data_industrial_group_management WHERE source_id = ? AND source =? `
	_, err = to.Raw(sql, sourceId, source).Exec()
	if err != nil {
		return
	}
	//删除关联标的
	sql = `	DELETE FROM cygx_resource_data_industrial_group_subject WHERE source_id = ? AND source =? `
	_, err = to.Raw(sql, sourceId, source).Exec()
	if err != nil {
		return
	}

	return
}