package cygx import ( "fmt" "github.com/beego/beego/v2/client/orm" "hongze/hz_crm_api/utils" "time" ) type CygxActivityAppointment struct { Id int `orm:"column(id);pk"` ActivityId int `description:"活动ID"` UserId int `description:"用户ID"` AdminId int `description:"管理员ID"` CreateTime time.Time `description:"创建时间"` Mobile string `description:"手机号"` Email string `description:"邮箱"` CompanyId int `description:"公司id"` CompanyName string `description:"公司名称"` RealName string `description:"用户实际名称"` SellerName string `description:"所属销售"` Source int `description:"来源,1小程序,2后台添加"` } // 取消纪要预约 func CancelcygxActivityAppointment(item *CygxActivityAppointment) (lastId int64, err error) { o, err := orm.NewOrm().Begin() if err != nil { return } defer func() { fmt.Println(err) if err == nil { o.Commit() } else { o.Rollback() } }() //判断是否删除我的日程 var countSingup int var countReminder int sql := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel = 0 AND user_id=? AND activity_id=? ` err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countSingup) sql = `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE user_id=? AND activity_id=? ` err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countReminder) if err != nil { return } if countSingup == 0 && countReminder == 0 { sql = `DELETE FROM cygx_my_schedule WHERE user_id=? AND activity_id=? ` _, err = o.Raw(sql, item.UserId, item.ActivityId).Exec() if err != nil { return } } //删除预约的纪要 sql = `DELETE FROM cygx_activity_appointment WHERE user_id=? AND activity_id=? ` _, err = o.Raw(sql, item.UserId, item.ActivityId).Exec() if err != nil { return } return } // 预约纪要的人数列表 func GetCygxAppointmentSummaryList(activityId int, sqlStr string) (item []*CygxAppointmentList, err error) { o := orm.NewOrm() sql := `SELECT s.id,s.activity_id,s.user_id,s.create_time,s.mobile,s.company_id ,u.real_name,c.company_name,a.activity_time, (SELECT p.seller_name from company_product as p WHERE p.company_id = u.company_id AND p.product_id = 2 ) AS seller_name, GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name FROM cygx_activity_appointment AS s INNER JOIN wx_user AS u ON u.user_id = s.user_id LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id LEFT JOIN company_product AS p ON p.company_id = u.company_id LEFT JOIN company AS c ON c.company_id = u.company_id WHERE a.activity_id = ? ` + sqlStr + ` GROUP BY s.user_id ORDER BY s.create_time DESC ` _, err = o.Raw(sql, activityId).QueryRows(&item) return } // 预约纪要的人数数量 func GetCygxAppointmentSummaryCount(activityId int, sqlStr string) (count int, err error) { o := orm.NewOrm() sql := `SELECT COUNT(*) FROM cygx_activity_appointment AS s INNER JOIN wx_user AS u ON u.user_id = s.user_id LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id LEFT JOIN company_product AS p ON p.company_id = u.company_id WHERE s.activity_id = ? ` + sqlStr + ` GROUP BY s.user_id)` sql = `SELECT COUNT(*) as count FROM (` + sql + ` a` err = o.Raw(sql, activityId).QueryRow(&count) return } // 通过ID获取预约纪要详情 func GetCygxAppointmentSummaryInfoById(id int) (item *CygxActivityAppointment, err error) { o := orm.NewOrm() sql := `SELECT * FROM cygx_activity_appointment WHERE id=?` err = o.Raw(sql, id).QueryRow(&item) return } // 获取某一用户的报名的数量 func GetUserCygxActivityAppointmentCount(uid, activityId int) (count int, err error) { sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_appointment WHERE user_id=? AND activity_id =? ` o := orm.NewOrm() err = o.Raw(sqlCount, uid, activityId).QueryRow(&count) return } // 添加预约纪要 func AddCygxActivityAppointmentUser(items []*CygxActivityAppointment) (err error) { o := orm.NewOrm() to, err := o.Begin() if err != nil { return } defer func() { if err != nil { fmt.Println(err) _ = to.Rollback() } else { _ = to.Commit() } }() for _, item := range items { var count int sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? ` err = to.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count) if err != nil { return } if count == 0 { itemMy := new(CygxMySchedule) itemMy.UserId = item.UserId itemMy.ActivityId = item.ActivityId itemMy.CreateTime = time.Now() itemMy.Mobile = item.Mobile itemMy.Email = item.Email itemMy.CompanyId = item.CompanyId itemMy.CompanyName = item.CompanyName _, err = to.Insert(itemMy) if err != nil { return } } sql = `SELECT COUNT(1) AS count FROM cygx_activity_appointment WHERE user_id=? AND activity_id=? ` err = to.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count) if err != nil { return } if count == 0 { _, err = to.Insert(item) } } return } type CygxAppointmentMobileList struct { ActivityId int `description:"活动ID"` Mobile string `description:"手机号"` ActivityName string `description:"活动名称"` } // 通过活动ID获取预约纪要的人数列表 func GetCygxAppointmentSummaryListBySubjectId(subjectIds string) (item []*CygxAppointmentMobileList, err error) { o := orm.NewOrm() sql := `SELECT ap.mobile, ap.activity_id, a.activity_name FROM cygx_activity_appointment AS ap INNER JOIN cygx_activity AS a ON a.activity_id = ap.activity_id INNER JOIN cygx_industrial_activity_group_subject AS sg ON sg.activity_id = a.activity_id WHERE a.active_state = 3 AND a.chart_permission_id = 31 AND DATE_SUB( CURDATE(), INTERVAL 14 DAY ) <= date( a.activity_time ) AND a.activity_type_id = 1 AND sg.industrial_subject_id IN (` + subjectIds + `) GROUP BY ap.mobile, ap.activity_id ` _, err = o.Raw(sql).QueryRows(&item) return } // 获取预约活动纪要的的用户的openID func GetActivityAppointmentOpenIdList(activityId int) (items []*OpenIdList, err error) { var sql string if utils.RunMode == "release" { sql = `SELECT DISTINCT cr.open_id,u.user_id FROM cygx_activity_appointment AS m INNER JOIN user_record AS u ON u.bind_account = m.mobile INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id WHERE m.activity_id = ? AND u.create_platform = 4 ` } else { sql = `SELECT u.open_id, u.user_id FROM cygx_activity_appointment AS s INNER JOIN wx_user AS wx ON wx.user_id = s.user_id INNER JOIN user_record AS u ON u.bind_account = wx.mobile INNER JOIN company_product AS p ON p.company_id = wx.company_id WHERE s.activity_id = ? AND u.create_platform = 1 AND p.STATUS IN ( '正式', '试用', '永续' ) GROUP BY u.open_id` } _, err = orm.NewOrm().Raw(sql, activityId).QueryRows(&items) return }