achievement.go 4.2 KB
package models

import (
	"fmt"
	"opp/internal/utils"
	"time"

	"github.com/astaxie/beego/orm"
)

type Achievement struct {
	Id              int64     `orm:"column(id);pk" description:"id 主键"`
	CompanyId       int64     `orm:"column(company_id);null" description:"公司编号 表company.id"`
	UserCompanyId   int64     `orm:"column(user_company_id)" description:"把握人 表user_company.id  id"`
	ChanceTypeId    int       `orm:"column(chance_type_id);null" description:"表chance_type.id 机会类型 "`
	AuditTemplateId int       `orm:"column(audit_template_id);null" description:"表audit_template.id 所属审批模板编号"`
	SourceContent   string    `orm:"column(source_content);null" description:"成果详情文本"`
	GraspScore      float64   `orm:"column(grasp_score);digits(4);decimals(1)" description:"把握分"`
	UserGraspScore  float64   `orm:"column(user_grasp_score);digits(4);decimals(1)" description:"把握人得分"`
	UpdateAt        time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"`
	CreateAt        time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"`
	ViewTotal       int       `orm:"column(view_total);null" description:"查看总数"`
	CommentTotal    int       `orm:"column(comment_total);null" description:"评论总数"`
	ZanTotal        int       `orm:"column(zan_total);null" description:"点赞总数"`
	Status          int8      `orm:"column(status);null" description:"机会状态 1:开启 2:关闭 0:删除"`
}

func (t *Achievement) TableName() string {
	return "achievement"
}

func init() {
	orm.RegisterModel(new(Achievement))
}

// GetAchievementById retrieves Achievement by Id. Returns error if
// Id doesn't exist
func GetAchievementById(id int64) (v *Achievement, err error) {
	o := orm.NewOrm()
	v = &Achievement{Id: id}
	if err = o.Read(v); err == nil {
		return v, nil
	}
	return nil, err
}

// UpdateAchievement updates Achievement by Id and returns error if
// the record to be updated doesn't exist
func UpdateAchievementById(m *Achievement) (err error) {
	o := orm.NewOrm()
	v := Achievement{Id: m.Id}
	// ascertain id exists in the database
	if err = o.Read(&v); err == nil {
		var num int64
		if num, err = o.Update(m); err == nil {
			fmt.Println("Number of records updated in database:", num)
		}
	}
	return
}

//成果列表
//@uid  成果把握人
//@cid 公司编号
//@lastId 最后编号
//@chanceTypeId 机会一级分类编号
//@departmentId 部门编号
func GetAchievementAll(uid, cid int64, chanceTypeId int, lastId int64, departmentId []int, pageSize int, v interface{}) (total int, err error) {
	var filter = utils.NewSqlExutor()
	filter.Where(fmt.Sprintf("company_id=%v", cid))
	filter.Where("status=1")
	if lastId > 0 {
		filter.Where(fmt.Sprintf("id<%v", lastId))
	}
	if chanceTypeId > 0 {
		filter.Where(fmt.Sprintf("chance_type_id =%v", chanceTypeId))
	}
	if len(departmentId) > 0 {
		filter.Where(fmt.Sprintf("department_id in (%v)", utils.JoinInts(departmentId, ",")))
	}
	if uid > 0 {
		filter.Where(fmt.Sprintf("user_company_id =%v", uid))
	}
	sql := fmt.Sprintf(`
select id,user_company_id,create_at,source_content,audit_template_id,chance_type_id,grasp_score,user_grasp_score,comment_total,zan_total,view_total,images from achievement 
%v
order by create_at desc
limit %v
`, filter.WhereString(), pageSize)

	sqlCount := fmt.Sprintf(`
select count(0) from achievement 
%v
`, filter.WhereString())

	if err = utils.ExecuteQueryOne(&total, sqlCount); err != nil {
		return
	}
	if v != nil {
		if err = utils.ExecuteQueryAll(v, sql); err != nil {
			return
		}
	}
	return
}

//成果详情
func GetCommAchievementItemOrmId(id int64, v interface{}) (err error) {
	o := orm.NewOrm()
	sql := "select *  from achievement where id=?"
	if _, err = o.Raw(sql, id).QueryRows(v); err == nil {
		return nil
	}
	return err
}

//获取成果统计
func GetAchievementStatisticByChanceType(uid int64, v interface{}) (err error) {
	o := orm.NewOrm()
	sql := `select a.*,b.name from (
	select chance_type_id,count(0) total from achievement where user_company_id =?
		group by chance_type_id
		)a inner join chance_type b on a.chance_type_id = b.id
		order by sort_num`
	if _, err = o.Raw(sql, uid).QueryRows(v); err == nil {
		return nil
	}
	return err
}