瀏覽代碼

no message

zhangchuanxing 2 天之前
父節點
當前提交
4dffe7c147

+ 163 - 54
controllers/jinmencaijing.go

@@ -2,9 +2,10 @@ package controllers
 
 import (
 	"encoding/json"
-	"fmt"
 	jinmencaijingReq "hongze/hongze_open_api/models/request/jinmencaijing"
 	"hongze/hongze_open_api/models/response/jinmencaijing"
+	"hongze/hongze_open_api/models/tables/company_product"
+	"hongze/hongze_open_api/models/tables/company_report_permission"
 	cygxActivity "hongze/hongze_open_api/models/tables/cygx/cygx_activity"
 	"hongze/hongze_open_api/models/tables/wx_user"
 	servicesWxUser "hongze/hongze_open_api/services/wx_user"
@@ -86,7 +87,28 @@ func (c *JinMenCaiJingController) ActivitySignupAdd() {
 	var dateTxt = []byte(mobile)
 	resultDe := utils.DesBase64Decrypt(dateTxt)
 	deMobile := string(resultDe)
-	fmt.Println(activityId)
+	resp := new(jinmencaijing.CygxActivitySignupResp)
+	activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
+	if err != nil {
+		c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
+		return
+	}
+	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
+	if time.Now().After(resultTime.Add(-time.Minute * 60)) {
+		resp.SignupStatus = 2
+		c.OkDetailed(resp, "报名失败时间超时")
+	}
+	if activityInfo.LimitPeopleNum > 0 {
+		totalSuccess, err := cygxActivity.GetActivitySignupSuccessCount(activityId)
+		if err != nil {
+			c.FailWithMessage("获取已报名的用户数量失败!" + err.Error())
+			return
+		}
+		if activityInfo.LimitPeopleNum <= totalSuccess {
+			resp.SignupStatus = 3
+			c.OkDetailed(resp, "报名失败人数已满")
+		}
+	}
 	userTotal, err := wx_user.GetWxUserCountByMobile(deMobile)
 	if err != nil {
 		c.FailWithMessage("根据手机号判断用户信息失败")
@@ -140,19 +162,19 @@ func (c *JinMenCaiJingController) ActivitySignupAdd() {
 		}
 		_, err = cygxActivity.AddActivitySignup(item)
 		if err != nil {
-			c.FailWithMessage("报名失败")
+			c.OkDetailed(resp, "报名成功")
 			return
 		}
 	}
-
-	c.OkWithMessage("操作成功")
+	resp.SignupStatus = 1
+	c.OkDetailed(resp, "报名成功")
 }
 
-// 活动报名相关信息校验
-// @Title 活动报名相关信息校验接口
-// @Description 活动报名相关信息校验接口
-// @router /activity/signup/check [post]
-func (c *JinMenCaiJingController) ActivitySignupCheck() {
+// 活动取消报名
+// @Title 活动取消报名接口
+// @Description 活动取消报名接口
+// @router /activity/signup/cancel [post]
+func (c *JinMenCaiJingController) ActivitySignupCancel() {
 	//回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
 	var req jinmencaijingReq.ActivitySignupReq
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
@@ -162,74 +184,161 @@ func (c *JinMenCaiJingController) ActivitySignupCheck() {
 	}
 	activityId := req.ActivityId
 	mobile := req.Mobile
-
 	var dateTxt = []byte(mobile)
 	resultDe := utils.DesBase64Decrypt(dateTxt)
 	deMobile := string(resultDe)
+	activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
+	if err != nil {
+		c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
+		return
+	}
+	resp := new(jinmencaijing.CygxActivitySignupcancelResp)
+
+	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
+	if time.Now().After(resultTime.Add(-time.Minute * 60)) {
+		resp.CancelStatus = 2
+		c.OkDetailed(resp, "活动开始前1小时内无法取消报名")
+	}
+
+	var user *wx_user.WxUser
+	user, err = wx_user.GetByUserMobile(deMobile)
+	if err != nil {
+		c.FailWithMessage("获取用户信息失败")
+		return
+	}
+	item := new(cygxActivity.CygxActivitySignup)
+	item.UserId = int(user.UserId)
+	item.ActivityId = activityId
+	item.CreateTime = time.Now()
+
+	_, err = cygxActivity.CancelActivitySignup(item)
+	if err != nil {
+		c.OkDetailed(resp, "取消报名失败")
+		return
+	}
+	resp.CancelStatus = 1
+	c.OkDetailed(resp, "取消报名成功")
+}
 
+// 活动白名单校验
+// @Title 活动白名单校验接口
+// @Description 活动白名单校验接口
+// @router /activity/white/check [post]
+func (c *JinMenCaiJingController) ActivityWhiteCheck() {
+	//回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
+	var req jinmencaijingReq.ActivitySignupReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		c.FailWithMessage("参数解析异常")
+		return
+	}
+	activityId := req.ActivityId
+	mobile := req.Mobile
+	var dateTxt = []byte(mobile)
+	resultDe := utils.DesBase64Decrypt(dateTxt)
+	deMobile := string(resultDe)
 	userTotal, err := wx_user.GetWxUserCountByMobile(deMobile)
 	if err != nil {
 		c.FailWithMessage("根据手机号判断用户信息失败")
 		return
 	}
+	activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
+	if err != nil {
+		c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
+		return
+	}
 	var user *wx_user.WxUser
-	var signupCount int
+	resp := new(jinmencaijing.CygxActivityWhiteCheckResp)
 	if userTotal == 0 {
-
+		c.OkDetailed(resp, "获取成功")
 	} else {
 		user, err = wx_user.GetByUserMobile(deMobile)
 		if err != nil {
 			c.FailWithMessage("获取用户信息失败")
 			return
 		}
-		signupCount, err = cygxActivity.GetActivitySignupCountByUserId(int(user.UserId), activityId)
+	}
+	if activityInfo.LimitPeopleNum > 0 {
+		total, err := company_product.CheckUserAaiPerssionByMobile(deMobile)
+		if err != nil {
+			c.FailWithMessage("校验失败!" + err.Error())
+			return
+		}
+		if total > 0 {
+			resp.IsWhite = true
+		}
+	} else {
+		listPermissionName, err := company_report_permission.GetPermissionListNameByCompanyIdAndProductId(user.CompanyId, 2)
 		if err != nil {
-			c.FailWithMessage("获取用户是否报名信息失败")
+			c.FailWithMessage("获取用户权限信息失败:" + strconv.Itoa(activityId))
 			return
 		}
+		if len(listPermissionName) > 0 {
+			listPermissionName = append(listPermissionName, &company_report_permission.ChartPermissionNameResp{ChartPermissionName: "宏观"})
+		}
+		for _, v := range listPermissionName {
+			if v.ChartPermissionName == activityInfo.ChartPermissionName {
+				resp.IsWhite = true
+				break
+			}
+		}
 	}
-	fmt.Println(user)
-	fmt.Println(activityId)
+	c.OkDetailed(resp, "获取成功")
+}
 
-	//item := new(cygxActivity.CygxActivitySignup)
-	//item.UserId = int(user.UserId)
-	//item.RealName = user.RealName
-	//
-	//item.ActivityId = activityId
-	//item.CreateTime = time.Now()
-	//item.Mobile = user.Mobile
-	//item.Email = user.Email
-	//item.CompanyId = user.CompanyId
-	//item.CompanyName = companyName
-	//item.SignupType = 3
-	//item.ThreeSource = 1
-	//
-	//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
-	//	}
-	//}
-	//_, err = cygxActivity.AddActivitySignup(item)
-	//if err != nil {
-	//	c.FailWithMessage("报名失败")
-	//	return
-	//}
-	resp := jinmencaijing.CygxActivitySignupCheckResp{
-		IsSignup:  signupCount,
-		SignupNum: signupCount,
+// 活动用户报名信息回显(自己是否报名,以及已经报名的人数)
+// @Title 活动用户报名信息回显接口
+// @Description 活动用户报名信息回显接口
+// @router /activity/signup/detail [post]
+func (c *JinMenCaiJingController) ActivitySignupDetail() {
+	//回调中url参数要做签名(get请求中的参数,按照自己的方式签名,避免链接被别人拿去随意请求)
+	var req jinmencaijingReq.ActivitySignupReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		c.FailWithMessage("参数解析异常")
+		return
+	}
+	activityId := req.ActivityId
+	mobile := req.Mobile
+	var dateTxt = []byte(mobile)
+	resultDe := utils.DesBase64Decrypt(dateTxt)
+	deMobile := string(resultDe)
+	userTotal, err := wx_user.GetWxUserCountByMobile(deMobile)
+	if err != nil {
+		c.FailWithMessage("根据手机号判断用户信息失败")
+		return
+	}
+	activityInfo, err := cygxActivity.GetAddActivityInfoByActivityId(activityId)
+	if err != nil {
+		c.FailWithMessage("会议id异常:" + strconv.Itoa(activityId))
+		return
+	}
+	resp := new(jinmencaijing.CygxActivitySignupCheckResp)
+	var user *wx_user.WxUser
+	if userTotal == 0 {
+		c.OkDetailed(resp, "获取成功")
+	} else {
+		user, err = wx_user.GetByUserMobile(deMobile)
+		if err != nil {
+			c.FailWithMessage("获取用户信息失败")
+			return
+		}
 	}
 
+	if activityInfo.LimitPeopleNum > 0 {
+		total, err := cygxActivity.GetActivitySignupSuccessCount(activityId)
+		if err != nil {
+			c.FailWithMessage("获取已报名的用户数量失败!" + err.Error())
+			return
+		}
+		resp.SignupNum = total
+	}
+	totalUser, err := cygxActivity.GetActivitySignupCountByUserIdeffective(int(user.UserId), activityId)
+	if err != nil {
+		c.FailWithMessage("获取已报名的用户数量失败!" + err.Error())
+		return
+	}
+	resp.IsSignup = totalUser
 	c.OkDetailed(resp, "获取成功")
 }
 

+ 18 - 4
models/response/jinmencaijing/jinmencaijing.go

@@ -50,9 +50,23 @@ type CygxActivityDetailResp struct {
 	Detail *CygxActivityResp `json:"detail" description:"备注"`
 }
 
-// CygxActivity 活动表结构体
+// 是否在白名单结构体
+type CygxActivitySignupResp struct {
+	SignupStatus int `json:"signup_status" description:"报名状态,1:报名成功、2:超时、3人员已满"`
+}
+
+// 是否在白名单结构体
+type CygxActivitySignupcancelResp struct {
+	CancelStatus int `json:"cancel_status" description:"取消报名状态,1:取消成功、2:取消超时"`
+}
+
+// 是否在白名单结构体
+type CygxActivityWhiteCheckResp struct {
+	IsWhite bool `json:"is_white" description:"是否在白名单里面"`
+}
+
+// 活动报名信息回显结构体
 type CygxActivitySignupCheckResp struct {
-	IsWhite   bool `json:"is_white" description:"是否在白名单里面"`
-	IsSignup  int  `json:"is_signup" description:"是否报名了"`
-	SignupNum int  `json:"signup_num" description:"已报名人数"`
+	IsSignup  int `json:"is_signup" description:"是否报名了,1:是、0:否"`
+	SignupNum int `json:"signup_num" description:"已报名人数"`
 }

+ 20 - 0
models/tables/company_report_permission/company_report_permission.go

@@ -28,3 +28,23 @@ func GetPermissionListByCompanyIdAndProductId(companyId, productId int) (items [
 	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
 	return
 }
+
+type ChartPermissionNameResp struct {
+	ChartPermissionName string `description:"'正式','试用','关闭'"`
+}
+
+// GetPermissionListNameByCompanyIdAndProductId 根据客户id和产品id获取可用的权限列表
+func GetPermissionListNameByCompanyIdAndProductId(companyId, productId int) (items []*ChartPermissionNameResp, err error) {
+	sql := ` SELECT
+			b.chart_permission_name 
+		FROM
+			company_report_permission  as a
+			INNER JOIN chart_permission as b ON  a.chart_permission_id = b.chart_permission_id 
+		WHERE
+			a.company_id = ? 
+			AND a.product_id = ? 
+			AND a.status in ("试用","正式","永续") `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
+	return
+}

+ 53 - 1
models/tables/cygx/cygx_activity/cygx_activity.go

@@ -346,10 +346,62 @@ func AddActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
 	return
 }
 
+// 取消报名
+func CancelActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	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 GetActivitySignupCountByUserId(uid, activityId int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+// 获取用户是否报了名(有效的)
+func GetActivitySignupCountByUserIdeffective(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.NewOrmUsingDB("hz_cygx")
 	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 company_id != 16  AND activity_id=? `
+	o := orm.NewOrmUsingDB("hz_cygx")
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}

+ 27 - 0
routers/commentsRouter.go

@@ -106,6 +106,33 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:JinMenCaiJingController"] = append(beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:JinMenCaiJingController"],
+        beego.ControllerComments{
+            Method: "ActivitySignupCancel",
+            Router: `/activity/signup/cancel`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:JinMenCaiJingController"] = append(beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:JinMenCaiJingController"],
+        beego.ControllerComments{
+            Method: "ActivitySignupDetail",
+            Router: `/activity/signup/detail`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:JinMenCaiJingController"] = append(beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:JinMenCaiJingController"],
+        beego.ControllerComments{
+            Method: "ActivityWhiteCheck",
+            Router: `/activity/white/check`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:QuanShiControllerCommon"] = append(beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:QuanShiControllerCommon"],
         beego.ControllerComments{
             Method: "CallBack",