浏览代码

no message

xingzai 2 年之前
父节点
当前提交
2801dfa543
共有 6 个文件被更改,包括 1036 次插入0 次删除
  1. 406 0
      controllers/activity.go
  2. 8 0
      models/activity.go
  3. 585 0
      models/activity_signup.go
  4. 3 0
      models/db.go
  5. 16 0
      models/user.go
  6. 18 0
      routers/commentsRouter.go

+ 406 - 0
controllers/activity.go

@@ -1,6 +1,7 @@
 package controllers
 
 import (
+	"encoding/json"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_clpt/models"
@@ -534,6 +535,7 @@ func (this *ActivityController) Detail() {
 			br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
 			return
 		}
+		popupMsg = "暂无查看权限"
 		resp.PopupMsg = popupMsg
 		resp.HasPermission = hasPermission
 		resp.SellerName = sellerName
@@ -544,3 +546,407 @@ func (this *ActivityController) Detail() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 活动报名
+// @Description 活动报名接口
+// @Param	request	body models.ActivitySingnupRep true "type json string"
+// @Success Ret=200 {object} models.SignupStatus
+// @router /signup/add [post]
+func (this *ActivityController) SignupAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	uid := user.UserId
+	signupStatus := ""
+	var req models.ActivitySingnupRep
+	resp := new(models.SignupStatus)
+	var total int
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	activityId := req.ActivityId
+	signupType := req.SignupType
+	hasPermission := 0
+	if signupType == 1 && user.Mobile == "" && user.OutboundMobile == "" {
+		resp.GoBindEmail = true
+	}
+	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
+	if activityInfo == nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	if errInfo != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
+		return
+	}
+
+	havePower, err := services.GetActivityDetailUserPower(user, activityInfo)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "校验用户权限失败,Err:" + err.Error()
+		return
+	}
+	if havePower {
+		item := new(models.CygxActivitySignup)
+		resp.HasPermission = 1
+		hasPermission = 1
+		signupStatus = "Success"
+		resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
+		if time.Now().After(resultTime.Add(-time.Minute * 60)) {
+			signupStatus = "Overtime"
+			resp.SignupType = signupType
+			resp.SignupStatus = signupStatus
+			resp.HasPermission = hasPermission
+			resp.PopupMsg = "活动开始前1小时内无法预约,请联系对口销售处理"
+			br.Ret = 200
+			br.Success = true
+			br.Msg = ""
+			br.Data = resp
+			return
+		}
+		var sellerName string
+		sellerName, err = models.GetCompanySellerName(user.CompanyId)
+		if err != nil {
+			br.Msg = "报名失败!"
+			br.ErrMsg = "获取对应销售失败,Err:" + err.Error()
+			return
+		}
+		//人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
+		//如果是下面几种情况则对报名信息做判断限制 (公司调研电话会(限制人数)、公司线下调研、专家/分析师线下沙龙)
+		//if (activityInfo.ActivityTypeId == 3 && activityInfo.IsLimitPeople == 1) || activityInfo.ActivityTypeId > 3 {
+		if activityInfo.IsLimitPeople == 1 {
+			//判断优先级:总人数限制→单机构2人限制→爽约3次限制
+			totalRestrict, err := models.GetUserRestrictCount(user.Mobile)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+				return
+			}
+			if totalRestrict >= 1 {
+				signupStatus = "BreakPromise"
+				resp.PopupMsg = "由于爽约次数过多,您暂时被限制报名资格"
+				item.FailType = 3
+			}
+			totalSignupCompany, err := models.GetActivitySignupCompanyCount(activityId, user.CompanyId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+				return
+			}
+			if totalSignupCompany >= 2 {
+				signupStatus = "TwoPeople"
+				resp.PopupMsg = "单机构最多2人报名同一活动,您所在机构报名人数已满"
+				item.FailType = 2
+			}
+			totaSignupPeopleNum, err := models.GetActivitySignupSuccessCount(activityId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+				return
+			}
+			if totaSignupPeopleNum >= activityInfo.LimitPeopleNum {
+				signupStatus = "FullStarffed"
+				resp.PopupMsg = "此活动报名人数已满,请留意下期活动"
+				item.FailType = 1
+			}
+			totalUserRestrictCount, err := models.GetActivitySignupByUserRestrictCount(uid, activityId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+			//解除报名限制之后二次报名相同活动
+			if totalUserRestrictCount > 0 && totalRestrict == 0 && resp.GoBindEmail != true {
+				item.UserId = uid
+				item.RealName = user.RealName
+				item.SellerName = sellerName
+				item.ActivityId = activityId
+				item.CreateTime = time.Now()
+				item.Mobile = user.Mobile
+				item.Email = user.Email
+				item.CompanyId = user.CompanyId
+				item.CompanyName = user.CompanyName
+				item.SignupType = signupType
+				item.FailType = 0
+				item.DoFailType = 0
+				_, errSignup := models.AddActivitySignupByRestrict(item)
+				if errSignup != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "操作失败,Err:" + errSignup.Error()
+					return
+				}
+				resp.HaqveJurisdiction = true
+				resp.SignupType = signupType
+				resp.SignupStatus = "Success"
+				resp.HasPermission = hasPermission
+				resp.ActivityId = activityId
+				total, err = models.GetUserMeetingReminderCount(user.UserId)
+				if err != nil {
+					br.Msg = "获取信息失败"
+					br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
+					return
+				}
+				if total == 0 {
+					resp.GoFollow = true
+				}
+				br.Ret = 200
+				br.Success = true
+				br.Msg = "操作成功"
+				br.Data = resp
+				return
+			}
+			totalMy, err := models.GetActivitySignupByUserCount(uid, activityId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
+
+			if signupStatus != "Success" && totalMy == 0 && resp.GoBindEmail != true {
+				item.UserId = uid
+				item.RealName = user.RealName
+				item.SellerName = sellerName
+				item.ActivityId = activityId
+				item.CreateTime = time.Now()
+				item.Mobile = user.Mobile
+				item.Email = user.Email
+				item.CompanyId = user.CompanyId
+				item.CompanyName = user.CompanyName
+				item.SignupType = signupType
+				item.DoFailType = item.FailType
+				if user.OutboundMobile != "" {
+					item.OutboundMobile = user.OutboundMobile
+					if user.OutboundCountryCode == "" {
+						item.CountryCode = "86"
+					} else {
+						item.CountryCode = user.OutboundCountryCode
+					}
+				} else {
+					item.OutboundMobile = user.Mobile
+					if user.CountryCode == "" {
+						item.CountryCode = "86"
+					} else {
+						item.CountryCode = user.CountryCode
+					}
+				}
+				//添加报名信息,但是不加入日程
+				_, errSignup := models.AddActivitySignupNoSchedule(item)
+				if errSignup != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "操作失败,Err:" + errSignup.Error()
+					return
+				}
+			}
+		}
+		totalMySuccess, err := models.GetActivitySignupCount(uid, activityId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		if totalMySuccess > 0 {
+			br.Msg = "您已报名这个活动"
+			return
+		}
+		if signupStatus == "Success" && resp.GoBindEmail != true {
+			item.UserId = uid
+			item.RealName = user.RealName
+			item.SellerName = sellerName
+			item.ActivityId = activityId
+			item.CreateTime = time.Now()
+			item.Mobile = user.Mobile
+			item.Email = user.Email
+			item.CompanyId = user.CompanyId
+			item.CompanyName = user.CompanyName
+			item.SignupType = signupType
+			item.FailType = 0
+			item.DoFailType = 0
+			item.OutboundMobile = user.Mobile
+			if user.OutboundMobile != "" {
+				item.OutboundMobile = user.OutboundMobile
+				if user.OutboundCountryCode == "" {
+					item.CountryCode = "86"
+				} else {
+					item.CountryCode = user.OutboundCountryCode
+				}
+			} else {
+				item.OutboundMobile = user.Mobile
+				if user.CountryCode == "" {
+					item.CountryCode = "86"
+				} else {
+					item.CountryCode = user.CountryCode
+				}
+			}
+			_, errSignup := models.AddActivitySignup(item)
+			if errSignup != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = "操作失败,Err:" + errSignup.Error()
+				return
+			}
+			resp.HaqveJurisdiction = true
+			//1:预约外呼 、2:设置会议提醒 、 3:预约纪要 、4:活动报名
+			if signupType == 1 {
+				//go services.ActivityUserRemind(user, activityInfo, 1)
+				resp.PopupMsg = item.CountryCode + "-" + item.Mobile + "<br/>预约成功,已加入您的活动日程<br/><br/>想要及时获取活动时间变更通知,请关注【查研观向小助手】公众号"
+			} else {
+				//go services.ActivityUserRemind(user, activityInfo, 4)
+				resp.PopupMsg = "报名成功,已加入您的活动日程<br/><br/>想要及时获取活动时间变更通知,请关注【查研观向小助手】公众号"
+			}
+		}
+
+	} else {
+		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermission(user)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
+			return
+		}
+		popupMsg = "暂无查看权限"
+		resp.PopupMsg = popupMsg
+		resp.HasPermission = hasPermission
+		resp.SellerName = sellerName
+		resp.SellerMobile = sellerMobile
+	}
+
+	if signupType == 1 && user.IsMsgOutboundMobile == 0 {
+		resp.GoOutboundMobile = true
+		if user.Mobile != "" || user.OutboundMobile != "" {
+			go models.ModifyWxUserIsMsgOutboundMobile(user.UserId)
+		}
+	}
+	if user.OutboundMobile == "" {
+		resp.Mobile = user.Mobile
+		if user.CountryCode == "" && len(user.Mobile) == 11 {
+			resp.CountryCode = "86"
+		} else {
+			resp.CountryCode = user.CountryCode
+		}
+	} else {
+		resp.Mobile = user.OutboundMobile
+		resp.CountryCode = user.OutboundCountryCode
+	}
+	//如果用户有绑定手机号,但是没有绑定外呼手机号
+	if signupType == 1 && user.Mobile != "" && user.OutboundMobile == "" {
+		var countryCode string
+		if len(user.Mobile) == 8 {
+			countryCode = "852"
+		} else if len(user.Mobile) == 9 {
+			countryCode = "886"
+		} else if len(user.Mobile) == 10 {
+			countryCode = "1"
+		} else if len(user.Mobile) >= 11 {
+			countryCode = "86"
+		}
+		models.BindUserOutboundMobileByMobile(user.Mobile, countryCode, uid)
+	}
+	resp.SignupType = signupType
+	resp.SignupStatus = signupStatus
+	resp.HasPermission = hasPermission
+	//if signupStatus == "Success" {
+	resp.ActivityId = activityId
+	//}
+	total, err = models.GetUserSignupCount(user.UserId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
+		return
+	}
+	if total <= 1 {
+		resp.GoFollow = true
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+	br.Data = resp
+}
+
+// @Title 活动取消报名
+// @Description 活动取消报名接口
+// @Param	request	body models.ActivitySingnupRep true "type json string"
+// @Success Ret=200 {object} models.SignupStatus
+// @router /signup/cancel [post]
+func (this *ActivityController) SignupCancel() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	uid := user.UserId
+	var req models.ActivitySingnupRep
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	activityId := req.ActivityId
+	signupType := req.SignupType
+	item := new(models.CygxActivitySignup)
+	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
+	if activityInfo == nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	if errInfo != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
+		return
+	}
+	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
+	if time.Now().After(resultTime.Add(-time.Minute * 60)) {
+		if signupType == 1 {
+			br.Msg = "活动开始前1小时内无法取消预约外呼,请联系对口销售处理"
+		} else {
+			br.Msg = "活动开始前1小时内无法取消报名,请联系对口销售处理"
+		}
+		return
+	}
+	total, err := models.GetActivitySignupCount(uid, activityId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	if total == 0 {
+		br.Msg = "您暂未报名这个活动"
+		return
+	}
+	item.UserId = uid
+	item.ActivityId = activityId
+	item.CreateTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	_, errSignup := models.CancelActivitySignup(item)
+	if errSignup != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errSignup.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 8 - 0
models/activity.go

@@ -224,6 +224,14 @@ func GetCygxActivityList(condition string, pars []interface{}, sortTime string,
 	return
 }
 
+//通过纪要ID获取活动详情
+func GetAddActivityInfoById(ActivityId int) (item *ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity  WHERE activity_id=? AND publish_status = 1 `
+	err = o.Raw(sql, ActivityId).QueryRow(&item)
+	return
+}
+
 //获取数量
 func GetActivityCount(condition string, playBack int, pars []interface{}) (count int, err error) {
 	var sqlJiontable string

+ 585 - 0
models/activity_signup.go

@@ -0,0 +1,585 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySignup struct {
+	Id             int       `orm:"column(id);pk"`
+	ActivityId     int       `description:"活动ID"`
+	UserId         int       `description:"用户ID"`
+	CreateTime     time.Time `description:"创建时间"`
+	Mobile         string    `description:"手机号"`
+	Email          string    `description:"邮箱"`
+	CompanyId      int       `description:"公司id"`
+	CompanyName    string    `description:"公司名称"`
+	FailType       int       `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
+	SignupType     int       `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
+	DoFailType     int       `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
+	OutboundMobile string    `description:"外呼手机号"`
+	CountryCode    string    `description:"手机国家区号"`
+	RealName       string    `description:"用户实际名称"`
+	SellerName     string    `description:"所属销售"`
+}
+
+type SignupStatus struct {
+	SignupStatus      string `description:"返回状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
+	GoFollow          bool   `description:"是否去关注"`
+	SignupType        int    `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
+	ActivityId        int    `description:"活动ID"`
+	HaqveJurisdiction bool   `description:"是否有权限"`
+	HasPermission     int    `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下(ficc),3:无该品类权限,已提交过申请,4:无该品类权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	PopupMsg          string `description:"权限弹窗信息"`
+	SellerMobile      string `description:"销售电话"`
+	SellerName        string `description:"销售姓名"`
+	Mobile            string `description:"外呼手机号"`
+	CountryCode       string `description:"外呼手机号区号"`
+	GoOutboundMobile  bool   `description:"是否去绑定手机号"`
+	GoBindEmail       bool   `description:"是否去绑定邮箱"`
+}
+type ActivitySingnupRep struct {
+	ActivityId int `description:"活动id"`
+	SignupType int `description:"报名方式,,1预约外呼,2自主拨入,3我要报名"`
+}
+
+//我的日程
+type CygxMySchedule struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+}
+
+//报名记录日志
+type CygxActivitySignupLog struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	Type        int       `description:"操作方式,1报名,2取消报名"`
+}
+
+//添加报名信息
+func AddActivitySignup(item *CygxActivitySignup) (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 count int
+	var countMySchedule int
+	sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
+	if err != nil {
+		return
+	}
+	if countMySchedule == 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
+		lastId, err = o.Insert(itemMy)
+		if err != nil {
+			return
+		}
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		sql := `UPDATE cygx_activity_signup SET is_cancel = 0 ,do_fail_type = 0, signup_type=? WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.SignupType, item.UserId, item.ActivityId).Exec()
+	} else {
+		lastId, err = o.Insert(item)
+	}
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//仅绑定邮箱的用户修改报名后,添加报名信息
+func AddActivitySignupFromEmail(item *CygxActivitySignup) (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 count int
+	var countMySchedule int
+	sql := `UPDATE wx_user SET outbound_mobile=? ,outbound_country_code = ? ,is_msg_outbound_mobile = 1   WHERE user_id=? `
+	_, err = o.Raw(sql, item.OutboundMobile, item.CountryCode, item.UserId).Exec()
+	if err != nil {
+		return
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
+	if err != nil {
+		return
+	}
+	if countMySchedule == 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
+		lastId, err = o.Insert(itemMy)
+		if err != nil {
+			return
+		}
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		sql := `UPDATE cygx_activity_signup SET is_cancel = 0 ,do_fail_type = 0, signup_type=? WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.SignupType, item.UserId, item.ActivityId).Exec()
+	} else {
+		lastId, err = o.Insert(item)
+	}
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//添加报名信息
+func AddActivitySignupNoSchedule(item *CygxActivitySignup) (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()
+		}
+	}()
+	lastId, err = o.Insert(item)
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//获取用户报名成功数量
+func GetActivitySignupCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0  AND do_fail_type = 0 AND user_id=? AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取用户报名数量
+func GetActivitySignupByUserCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND user_id=? AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取用户报名禁止数量
+func GetActivitySignupByUserRestrictCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE do_fail_type=3 AND user_id=? AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取某一活动已经报名的数量
+func GetActivitySignupSuccessCount(activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND do_fail_type = 0 AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
+//获取某一活动某个机构已经报名的数量
+func GetActivitySignupCompanyCount(activityId, companyId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND fail_type = 0 AND activity_id=? AND company_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId, companyId).QueryRow(&count)
+	return
+}
+
+//获取某一用户是否被限制报名
+func GetUserRestrictCount(mobile string) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_restrict_signup WHERE is_restrict=1  AND mobile=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, mobile).QueryRow(&count)
+	return
+}
+
+//获取某一用户的日程数量
+func GetUserMeetingReminderCount(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE  user_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//获取某一用户的报名的数量
+func GetUserSignupCount(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup_log WHERE  user_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//取消报名
+func CancelActivitySignup(item *CygxActivitySignup) (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 countReminder int
+	var countAppointment int
+	sql := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE is_cancel = 0  AND  user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countReminder)
+
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_appointment WHERE  user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countAppointment)
+	if err != nil {
+		return
+	}
+	if countReminder == 0 && countAppointment == 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_signup   WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 2
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//详情
+func GetActivitySignupDetail(activityId, uid int) (item *CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_signup WHERE  activity_id = ? AND user_id =? `
+	err = o.Raw(sql, activityId, uid).QueryRow(&item)
+	return
+}
+
+func GetActivitySignuListByUser(condition string, pars []interface{}) (item []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+			FROM
+			cygx_activity_signup  
+			WHERE 1 = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}
+
+//解除报名限制之后二次报名
+func AddActivitySignupByRestrict(item *CygxActivitySignup) (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()
+		}
+	}()
+	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
+	lastId, err = o.Insert(itemMy)
+	if err != nil {
+		return
+	}
+	sql := `UPDATE cygx_activity_signup SET do_fail_type = 0 , fail_type=0 WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//列表
+func GetActivitySignupListAll() (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_signup `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//修改是否推送消息状态
+func UPdateSignup(item *CygxActivitySignup) (err error) {
+	sql := ` UPDATE cygx_activity_signup SET  outbound_mobile= ? , country_code=86  WHERE id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, item.Mobile, item.Id).Exec()
+	return
+}
+
+//获取数量
+func GetActivityCountByIdWithUid(activityId, Uid int) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := `SELECT COUNT(1) AS count  FROM cygx_activity_signup WHERE activity_id = ? AND user_id = ?`
+	err = o.Raw(sqlCount, activityId, Uid).QueryRow(&count)
+	return
+}
+
+//获取用户报名数量
+func GetActivitySignupNomeetingCount(activityId int) (count int, err error) {
+	sqlCount := `SELECT
+	COUNT( 1 ) count 
+FROM
+	cygx_activity_signup AS s
+	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
+WHERE
+	1 = 1 
+	AND a.is_limit_people > 0 
+	AND s.is_meeting = 0 
+	AND a.is_submit_meeting = 1
+	AND a.activity_id = ?`
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
+func GetUserMeetingMobile(activityId int) (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+FROM
+	cygx_activity_signup AS s 
+WHERE
+	s.is_meeting = 1 
+	AND s.activity_id = ?`
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	return
+}
+
+//获取用户是否被限制报名
+func GetRestrictSignupCountByUid(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT( 1 ) count FROM cygx_activity_restrict_signup  WHERE user_id = ?`
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//获取用户爽约次数
+func GetActivitySignupNomeetingCountByUid(uid int) (count int, err error) {
+	sqlCount := `SELECT
+	COUNT( 1 ) count 
+FROM
+	cygx_activity_signup AS s
+	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
+WHERE
+	1 = 1 
+	AND a.is_limit_people > 0 
+	AND s.is_meeting = 0 
+	AND a.is_submit_meeting = 1
+	AND s.do_fail_type = 0
+	AND s.user_id = ?`
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//删除
+func DeleteCygxActivityRestrictSignup(uid int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_restrict_signup  WHERE user_id=?`
+	_, err = o.Raw(sql, uid).Exec()
+	return
+}
+
+type CygxActivitySignupList struct {
+	Id          int    `orm:"column(id);pk"`
+	UserId      int    `description:"用户id"`
+	ActivityId  int    `description:"活动ID"`
+	CompanyName string `description:"公司名称"`
+	RealName    string `description:"姓名"`
+	CreateTime  string `description:"创建时间"`
+	IsMeeting   int    `description:"是否到会 ,1是, 0否"`
+	Operation   bool   `description:"操作按钮,true,到会,false 未到会"`
+	Channel     int    `description:"报名渠道,0 空降、 1小程序报名"`
+}
+
+//获取用户报名列表
+func GetActivitySignupNomeetingCountList(activityId int) (items []*CygxActivitySignupList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	s.user_id
+FROM
+	cygx_activity_signup AS s
+	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
+WHERE
+	1 = 1 
+	AND a.is_limit_people > 0 
+	AND s.is_meeting = 0 
+	AND a.is_submit_meeting = 1
+	AND a.activity_id = ?`
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	return
+}
+
+type UserAndCompanyName struct {
+	UserId              int `orm:"column(user_id);pk"`
+	Mobile              string
+	Email               string
+	CompanyId           int
+	CompanyName         string `description:"公司名称"`
+	CountryCode         string `description:"手机国家区号"`
+	OutboundMobile      string `description:"外呼手机号"`
+	OutboundCountryCode string `description:"外呼手机号区号"`
+}
+
+func GetUserAndCompanyNameList(uid int) (item *UserAndCompanyName, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT u.*,c.company_name 
+			FROM wx_user AS u
+	INNER JOIN company AS c ON c.company_id = u.company_id
+	WHERE user_id =?`
+	err = o.Raw(sql, uid).QueryRow(&item)
+	return
+}
+
+type CygxActivityRestrictSignup struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户id,多个用,隔开"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱号"`
+	CompanyId   int       `description:"公司ID"`
+	CompanyName string    `description:"公司名称"`
+	IsRestrict  int       `description:"是否限制报名,1是,0否"`
+}
+
+//添加
+func AddCygxActivityRestrictSignup(item *CygxActivityRestrictSignup) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+//获取列表信息根据手机号分组
+func GetCygxActivitySignupByMobileList(condition string) (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_signup  WHERE  1= 1 ` + condition + `  GROUP BY mobile  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//修改用户报名的相关信息
+func UpdateCygxActivitySignup(wxUser *WxUserItem) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_signup SET email=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE  mobile=? `
+	_, err = o.Raw(sql, wxUser.Email, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Mobile).Exec()
+	return
+}
+
+//UpdateCygxActivitySignupisMeet 修改易董的活动,用户已到会
+func UpdateCygxActivitySignupisMeet(activityId int, mobile string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_signup SET is_meeting=1 WHERE activity_id=?  AND mobile = ? `
+	_, err = o.Raw(sql, activityId, mobile).Exec()
+	return
+}

+ 3 - 0
models/db.go

@@ -42,6 +42,9 @@ func init() {
 		new(CygxXzsChooseCategory),
 		new(CygxReportIndustrialSeaarchHistory),
 		new(CygxMicroRoadshowVideoHistory),
+		new(CygxActivitySignup),
+		new(CygxActivitySignupLog),
+		new(CygxMySchedule),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 16 - 0
models/user.go

@@ -247,3 +247,19 @@ type UserPermissionAuthInfo struct {
 	OperationMode string `description:"操作方式:Apply-立即申请; Call-拨号"`
 	PopupMsg      string `description:"权限弹窗信息"`
 }
+
+//修改用户是否绑定外呼手机号弹窗
+func ModifyWxUserIsMsgOutboundMobile(userId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE wx_user SET is_msg_outbound_mobile=1 WHERE user_id=? `
+	_, err = o.Raw(sql, userId).Exec()
+	return
+}
+
+//已经绑定手机号,没有绑定外呼手机号的的用户,预约外呼的时候,将外呼手机号同步成手机号
+func BindUserOutboundMobileByMobile(mobile, countryCode string, userId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE wx_user SET outbound_mobile=? ,outbound_country_code = ? WHERE user_id=? `
+	_, err = o.Raw(sql, mobile, countryCode, userId).Exec()
+	return
+}

+ 18 - 0
routers/commentsRouter.go

@@ -34,6 +34,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"],
+        beego.ControllerComments{
+            Method: "SignupAdd",
+            Router: `/signup/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"],
+        beego.ControllerComments{
+            Method: "SignupCancel",
+            Router: `/signup/cancel`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ArticleController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ArticleController"],
         beego.ControllerComments{
             Method: "AskAdd",