package models

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

type CygxActivitySpecialTripBill struct {
	Id                  int       `orm:"column(id);pk"`
	UserId              int       `description:"用户id,多个用,隔开"`
	ActivityId          int       `description:"活动ID"`
	CreateTime          time.Time `description:"创建时间"`
	Mobile              string    `description:"手机号"`
	Email               string    `description:"邮箱号"`
	CompanyId           int       `description:"公司ID"`
	CompanyName         string    `description:"公司名称"`
	RealName            string    `description:"用户实际名称"`
	AdminId             int       `description:"销售/管理员ID"`
	Source              int       `description:"来源，1小程序，2后台添加, 3开发人员手动添加"`
	BillDetailed        float64   `description:"流水明细，判断是进账还是出账"`
	DoType              int       `description:"操作方式，1报名，2取消报名"`
	RegisterPlatform    int       `description:"来源 1小程序，2：网页"`
	ChartPermissionId   int       `description:"行业id"`
	ChartPermissionName string    `description:"行业名称"`
	Way                 int       `description:"1报名，取消报名。2到会取消到会 3转正或清零 4取消活动"`
	Content             string    `description:"内容"`
	Total               string    `description:"总和"`
	TableSource         string    `description:"活动类型来源 活动 ：activity 、专项调研活动：activityspecial、路演：roadshow"`
	ResearcherId        int       `description:"研究员id"`
	ResearcherName      string    `description:"研究员名称"`
}

// 添加
func AddCygxActivitySpecialTripBill(item *CygxActivitySpecialTripBill) (err error) {
	o := orm.NewOrm()
	_, err = o.Insert(item)
	if err != nil {
		return
	}
	return
}

func GetCygxActivitySpecialTripBill(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBill, err error) {
	o := orm.NewOrm()
	sql := `SELECT *
			FROM
			cygx_activity_special_trip_bill  
			WHERE 1 = 1 ` + condition
	_, err = o.Raw(sql, pars).QueryRows(&item)
	return
}

type CygxActivitySpecialTripBillList struct {
	Id                  int       `orm:"column(id);pk"`
	UserId              int       `description:"用户id,多个用,隔开"`
	ActivityId          int       `description:"活动ID"`
	CreateTime          time.Time `description:"创建时间"`
	Mobile              string    `description:"手机号"`
	Email               string    `description:"邮箱号"`
	CompanyId           int       `description:"公司ID"`
	CompanyName         string    `description:"公司名称"`
	RealName            string    `description:"用户实际名称"`
	AdminId             int       `description:"销售/管理员ID"`
	Source              int       `description:"来源，1小程序，2后台添加, 3开发人员手动添加"`
	BillDetailed        int       `description:"流水明细，判断是进账还是出账"`
	DoType              int       `description:"操作方式，1报名，2取消报名"`
	RegisterPlatform    int       `description:"来源 1小程序，2：网页"`
	ChartPermissionId   int       `description:"行业id"`
	ChartPermissionName string    `description:"行业名称"`
	Way                 int       `description:"1报名，取消报名。2到会取消到会 3转正或清零 4取消活动"`
	Content             string    `description:"内容"`
}

func GetCygxActivitySpecialTripBillList(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBillList, err error) {
	o := orm.NewOrm()
	sql := `SELECT
			b.*
		FROM
			cygx_activity_special_trip_bill AS b
		WHERE
			1 = 1` + condition
	_, err = o.Raw(sql, pars).QueryRows(&item)
	return
}

// 通过查询条件获取详情
func GetCygxActivitySpecialTripBillByCondition(condition string, pars []interface{}) (item *CygxActivitySpecialTripBill, err error) {
	if condition == "" {
		return
	}
	o := orm.NewOrm()
	sql := `SELECT * FROM cygx_activity_special_trip_bill  WHERE 1 = 1  ` + condition
	err = o.Raw(sql, pars).QueryRow(&item)
	return
}

// GetCygxActivitySpecialTripBillLastDetialByActivityId  根据活动ID获取最后一条扣点明细
func GetCygxActivitySpecialTripBillLastDetialByActivityId(activityId, userId int) (item *CygxActivitySpecialTripBill, err error) {
	o := orm.NewOrm()
	sql := `SELECT *
			FROM
			cygx_activity_special_trip_bill  
			WHERE 1 = 1  AND activity_id =?  AND  user_id = ?    ORDER BY id  DESC LIMIT 1 `
	err = o.Raw(sql, activityId, userId).QueryRow(&item)
	return
}

// AddCygxActivitySpecialTripBillMulti 批量添加
func AddCygxActivitySpecialTripBillMulti(items []*CygxActivitySpecialTripBill, itemsUpdate []*CygxActivitySpecialPermissionPoints) (err error) {
	o, err := orm.NewOrm().Begin()
	if err != nil {
		return
	}
	defer func() {
		if err == nil {
			o.Commit()
		} else {
			o.Rollback()
		}
	}()
	if len(items) > 0 {
		//批量添加流水信息
		_, err = o.InsertMulti(len(items), items)
	}
	//批量修改公司剩余点数
	p, err := o.Raw("UPDATE cygx_activity_special_permission_points SET points = ?, modify_time = ? WHERE company_id = ?").Prepare()
	if err != nil {
		return
	}
	defer func() {
		_ = p.Close() // 别忘记关闭 statement
	}()
	for _, v := range itemsUpdate {
		_, err = p.Exec(v.Points, v.ModifyTime, v.CompanyId)
		if err != nil {
			return
		}
	}
	return
}

// 删除
func DelCygxActivitySpecialTripBillById(id int) (err error) {
	o := orm.NewOrm()
	sql := ` DELETE FROM cygx_activity_special_trip_bill  WHERE id   = ?  `
	_, err = o.Raw(sql, id).Exec()

	return
}
