Parcourir la source

Merge branch 'master' of http://8.136.199.33:3000/cxzhang/hongze_web_mfyx into mfyx_3.0

xingzai il y a 10 mois
Parent
commit
315300cfa0

+ 7 - 0
controllers/activity.go

@@ -698,6 +698,7 @@ func (this *ActivityNoLoginController) ActivityListNew() {
 // @Title  活动详情
 // @Description 获取活动详情接口
 // @Param   ActivityId   query   int  true       "活动ID"
+// @Param   InviteShareCode   query   string  false       "销售账号邀请码"
 // @Success Ret=200 {object} models.CygxActivityResp
 // @router /detail [get]
 func (this *ActivityNoLoginController) Detail() {
@@ -719,6 +720,7 @@ func (this *ActivityNoLoginController) Detail() {
 		br.Msg = "请输入活动ID"
 		return
 	}
+	inviteShareCode := this.GetString("InviteShareCode")
 	resp := new(models.CygxActivityResp)
 	activityInfo, err := models.GetAddActivityInfoByIdShow(uid, activityId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -731,6 +733,11 @@ func (this *ActivityNoLoginController) Detail() {
 		br.ErrMsg = "活动ID错误,Err:" + "activityId:" + strconv.Itoa(activityId)
 		return
 	}
+
+	//记录分享来源
+	if inviteShareCode != "" {
+		go services.AddCygxUserAdminShareHistory(user, utils.CYGX_OBJ_ACTIVITY, activityInfo.ActivityName, inviteShareCode, activityId)
+	}
 	// 判断是否属于研选类型的活动
 	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
 		activityInfo.IsResearch = true

+ 19 - 0
controllers/article.go

@@ -25,6 +25,7 @@ type ArticleNoLoginController struct {
 // @Title 获取报告详情
 // @Description 获取报告详情接口
 // @Param   ArticleId   query   int  true       "报告ID"
+// @Param   InviteShareCode   query   string  false       "销售账号邀请码"
 // @Success 200 {object} models.ArticleDetailResp
 // @router /detail [get]
 func (this *ArticleNoLoginController) Detail() {
@@ -48,6 +49,7 @@ func (this *ArticleNoLoginController) Detail() {
 		br.ErrMsg = "文章不存在,文章ID错误"
 		return
 	}
+	inviteShareCode := this.GetString("InviteShareCode")
 	detail := new(models.ArticleDetail)
 	hasPermission := 0
 
@@ -58,6 +60,10 @@ func (this *ArticleNoLoginController) Detail() {
 		br.ErrMsg = "获取信息失败,Err:" + err.Error()
 		return
 	}
+	//记录分享来源
+	if inviteShareCode != "" {
+		go services.AddCygxUserAdminShareHistory(user, utils.CYGX_OBJ_ARTICLE, detail.Title, inviteShareCode, articleId)
+	}
 	resp.IsResearch = true
 
 	havePower, err := services.GetArticleDetailUserPower(user, detail)
@@ -66,6 +72,12 @@ func (this *ArticleNoLoginController) Detail() {
 		br.ErrMsg = "校验用户权限失败,Err:" + err.Error()
 		return
 	}
+
+	// 判断是否属于研选类型的报告
+	if strings.Contains(detail.CategoryName, utils.CHART_PERMISSION_NAME_YANXUAN) {
+		resp.IsResearch = true
+	}
+
 	if havePower {
 		hasPermission = 1
 		go services.ArticleHistory(articleId, user)
@@ -124,6 +136,13 @@ func (this *ArticleNoLoginController) Detail() {
 	}
 	detail.Disclaimers = utils.DISCLAIMERS
 	detail.ShareImg = services.GetArticleShareImg(articleId)
+	//作者头像
+	if detail.DepartmentId > 0 {
+		departmentDetail, err := models.GetArticleDepartmentDateilById(detail.DepartmentId)
+		if err == nil {
+			detail.ShareImg = departmentDetail.ImgUrl
+		}
+	}
 	resp.HasPermission = hasPermission
 	resp.IsSpecialArticle = detail.IsSpecialArticle
 	resp.Detail = detail

+ 7 - 3
controllers/user.go

@@ -55,6 +55,7 @@ func (this *UserCommonController) Login() {
 		return
 	}
 	authorization := req.Token
+	inviteShareCode := req.InviteShareCode
 
 	item, err := models.GetMsgCode(req.Mobile, req.VCode)
 	if err != nil {
@@ -73,7 +74,7 @@ func (this *UserCommonController) Login() {
 		return
 	}
 
-	user, err := services.BindWxUser(mobile, "86")
+	user, err := services.BindWxUser(mobile, "86", inviteShareCode)
 	//user, err := models.GetWxUserItemByMobile(mobile)
 	if err != nil {
 		br.Msg = "登录失败"
@@ -125,10 +126,10 @@ func (this *UserCommonController) Login() {
 		}
 	}
 
-	//记录通过三方合作机构过来的公司
 	{
-		services.AddInviteCompany(user)
+		services.AddInviteCompany(user) //记录通过三方合作机构过来的公司
 	}
+
 	resp := new(models.LoginResp)
 	resp.UserId = user.UserId
 	resp.Headimgurl = user.Headimgurl
@@ -172,6 +173,9 @@ func (this *UserController) Detail() {
 		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
 		return
 	}
+	if userDetail.Mobile != "" {
+		resp.InviteShareCode = services.GetInviteShareCode(userDetail.Mobile) //判断用户是否属于销售,并且获取对应加密的分享码
+	}
 	resp.OutboundCountryCode = userDetail.OutboundCountryCode
 	resp.OutboundMobile = userDetail.OutboundMobile
 	var hasPermission int

+ 1 - 1
controllers/wechat.go

@@ -232,7 +232,7 @@ func (this *MobileWechatController) WechatBindMobile() {
 		br.Msg = "验证码错误,请重新输入"
 		return
 	}
-	user, err := services.BindWxUser(mobile, "86")
+	user, err := services.BindWxUser(mobile, "86", "")
 	if err != nil {
 		br.Msg = "登录失败"
 		br.ErrMsg = "获取用户信息失败,GetUserDetailByMobile Err:" + err.Error()

+ 9 - 2
controllers/yanxuan_special.go

@@ -154,6 +154,7 @@ func (this *YanxuanSpecialNoLoginController) List() {
 // @Title 专栏详情
 // @Description 专栏详情
 // @Param	request	body help_doc.AddHelpDocReq true "type json string"
+// @Param   InviteShareCode   query   string  false       "销售账号邀请码"
 // @Success 200 {object} models.AddEnglishReportResp
 // @router /detail [get]
 func (this *YanxuanSpecialNoLoginController) Detail() {
@@ -171,7 +172,7 @@ func (this *YanxuanSpecialNoLoginController) Detail() {
 	}
 
 	specialId, _ := this.GetInt("Id", 0)
-
+	inviteShareCode := this.GetString("InviteShareCode")
 	if specialId <= 0 {
 		br.Msg = "参数错误"
 		br.ErrMsg = "参数错误"
@@ -184,6 +185,11 @@ func (this *YanxuanSpecialNoLoginController) Detail() {
 		br.ErrMsg = "获取失败, Err:" + tmpErr.Error()
 		return
 	}
+
+	//记录分享来源
+	if inviteShareCode != "" {
+		go services.AddCygxUserAdminShareHistory(sysUser, utils.CYGX_OBJ_YANXUANSPECIAL, item.Title, inviteShareCode, specialId)
+	}
 	if item.MyCollectNum > 0 {
 		item.IsCollect = 1
 	}
@@ -275,7 +281,8 @@ func (this *YanxuanSpecialNoLoginController) Detail() {
 	//if resp.HasPermission != 1 || sysUser.UserId == 0 {
 	//	resp.Content = utils.InterceptHtmlLength(resp.Content, 240)
 	//}
-	resp.ShareImg = utils.YANXUAN_SPECIAL_SHARE_IMG
+	//resp.ShareImg = utils.YANXUAN_SPECIAL_SHARE_IMG
+	resp.ShareImg = resp.HeadImg
 	br.Data = resp
 	br.Ret = 200
 	br.Success = true

+ 10 - 0
models/admin.go

@@ -100,3 +100,13 @@ func GetSysAdminById(adminId int) (item *Admin, err error) {
 	err = o.Raw(sql, adminId).QueryRow(&item)
 	return
 }
+
+func GetSysAdminByMobile(mobile string) (item *Admin, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := ` SELECT  * FROM admin  WHERE
+				enabled = 1 
+				AND role_type_code IN ( 'admin', 'rai_seller', 'rai_group', 'rai_admin', 'rai_researcher' ) 
+				AND mobile = ?  LIMIT  1 `
+	err = o.Raw(sql, mobile).QueryRow(&item)
+	return
+}

+ 2 - 0
models/db.go

@@ -105,6 +105,8 @@ func init() {
 		new(CygxAskserieVideoCollect),
 		new(CygxVoiceAndVideoHistory),
 		new(CygxActivityVideoHistory),
+		new(CygxUserAdminShareHistory),
+		new(CygxUserAdminShareCode),
 	)
 
 	initOrder() // 订单模块

+ 5 - 3
models/user.go

@@ -44,9 +44,10 @@ type UserPermission struct {
 }
 
 type LoginReq struct {
-	Mobile string `description:"手机号"`
-	VCode  string `description:"验证码"`
-	Token  string `description:"微信扫码登录之后返回的Token"`
+	Mobile          string `description:"手机号"`
+	VCode           string `description:"验证码"`
+	Token           string `description:"微信扫码登录之后返回的Token"`
+	InviteShareCode string `description:"销售账号邀请码"`
 }
 
 type WxBindMobileReq struct {
@@ -154,6 +155,7 @@ type UserDetailResp struct {
 	IsAuthor             bool     `description:"是否开通了研选专栏"`
 	SpecialColumnId      int      // 专栏栏目ID
 	IsImproveInformation bool     `description:"作者信息是否完善"`
+	InviteShareCode      string   `description:"销售账号邀请码"`
 	UserCardType         int      `description:"权益卡类型,0:未开通、1日卡、2月卡"`
 	UserCardEndDate      string   `description:"权益卡有效期"`
 }

+ 37 - 0
models/user_admin_share_code.go

@@ -0,0 +1,37 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxUserAdminShareCode struct {
+	UserAdminCodeId int       `orm:"column(user_admin_share_code_id);pk";comment:"主键ID"`
+	SellerName      string    `comment:"所属销售"`
+	SellerId        int       `comment:"所属销售id"`
+	Mobile          string    `comment:"手机号"`
+	CreateTime      time.Time `comment:"创建时间"`
+	ModifyTime      time.Time `comment:"修改时间"`
+	ShareCode       string    `comment:"分享码,对seller_id进行MD5加密的结果"`
+}
+
+// 获取数量
+func GetCygxUserAdminShareCodeByShareCodeCount(chareCode string) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_user_admin_share_code WHERE  share_code  = ? `
+	err = o.Raw(sqlCount, chareCode).QueryRow(&count)
+	return
+}
+
+func AddCygxUserAdminShareCode(item *CygxUserAdminShareCode) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+func GetUserAdminShareCodeByShareCode(shareCode string) (item *CygxUserAdminShareCode, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT  * FROM cygx_user_admin_share_code  WHERE   share_code  = ? `
+	err = o.Raw(sql, shareCode).QueryRow(&item)
+	return
+}

+ 33 - 0
models/user_admin_share_history.go

@@ -0,0 +1,33 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxUserAdminShareHistory struct {
+	UserAdminShareHistoryId int       `orm:"column(user_admin_share_history_id);pk";comment:"主键ID"`
+	Action                  string    `comment:"动作内容"`
+	UserId                  int       `comment:"用户ID"`
+	Mobile                  string    `comment:"手机号"`
+	Email                   string    `comment:"邮箱"`
+	CompanyId               int       `comment:"公司ID"`
+	CompanyName             string    `comment:"公司名称"`
+	RealName                string    `comment:"用户实际名称"`
+	SellerName              string    `comment:"所属销售名称"`
+	SellerId                int       `comment:"所属销售ID"`
+	ShareId                 int       `comment:"分享人ID"`
+	ShareName               string    `comment:"分享人姓名"`
+	Source                  string    `comment:"来源(article, activity, login)"`
+	SourceId                int       `comment:"来源 ID"`
+	SourceTitle             string    `comment:"来源名称,活动或者报告标题"`
+	RegisterPlatform        int       `comment:"注册平台(1: 小程序, 2: 网页)"`
+	CreateTime              time.Time `comment:"创建时间"`
+	ModifyTime              time.Time `comment:"修改时间"`
+}
+
+func AddCygxUserAdminShareHistory(item *CygxUserAdminShareHistory) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 1 - 0
services/activity.go

@@ -315,6 +315,7 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 
 // 根据用户身份处理活动可见
 func ActivityConditioninitSql(user *models.WxUserItem, condition string, isPower int) (conditionActivity string, err error) {
+	condition += "  AND  IF ( art.is_limit_people  = 1 ,  art.customer_type_ids != '' ,1=1  )  "
 	// cygx_10.9 未绑定联系方式的客户可以看到部分活动
 	if user.UserId == 0 || user.CompanyId == 1 {
 		conditionActivity = ` AND art.publish_status = 1  AND art.visible_range != 1 AND (art.is_limit_people = 0 OR (art.is_limit_people=1 AND art.is_all_customer_type=1))   ` + condition

+ 2 - 2
services/sms.go

@@ -11,7 +11,7 @@ import (
 
 func SendSmsCode(mobile, vcode string) bool {
 	flag := false
-	tplId := "65692"
+	tplId := "262126"
 	result, err := sendSms(mobile, tplId, vcode)
 	if err != nil {
 		fmt.Println("发送短信失败")
@@ -92,7 +92,7 @@ func sendSmsGj(mobile, code, areaNum string) (rs []byte, err error) {
 	param := url.Values{}
 	//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
 	param.Set("mobile", mobile)           //接受短信的用户手机号码
-	param.Set("tplId", "10054")           //您申请的短信模板ID,根据实际情况修改
+	param.Set("tplId", "12867")           //您申请的短信模板ID,根据实际情况修改
 	param.Set("tplValue", "#code#="+code) //您设置的模板变量,根据实际情况
 	param.Set("key", utils.JhGjAppKey)    //应用APPKEY(应用详细页查询)
 	param.Set("areaNum", areaNum)         //应用APPKEY(应用详细页查询)

+ 4 - 1
services/user.go

@@ -231,7 +231,7 @@ func GetUserTypeZhengShi(companyId int) (userType int, permissionStrnew, permiss
 }
 
 // 用户绑定
-func BindWxUser(mobile, countryCode string) (wxUser *models.WxUserItem, err error) {
+func BindWxUser(mobile, countryCode, inviteShareCode string) (wxUser *models.WxUserItem, err error) {
 	if mobile == "" {
 		err = errors.New("手机号或邮箱必填一个")
 		return
@@ -271,6 +271,9 @@ func BindWxUser(mobile, countryCode string) (wxUser *models.WxUserItem, err erro
 		user.UserId = int(tmpUserId)
 		userId = int(tmpUserId)
 		wxUser, err = models.GetWxUserItemByUserId(userId)
+		if inviteShareCode != "" { //记录分享来源
+			go AddCygxUserAdminShareHistory(wxUser, "login", "", inviteShareCode, 0) //记录分享来源
+		}
 	} else {
 		userId = wxUser.UserId
 		err = models.BindUserOutboundMobile(mobile, countryCode, userId)

+ 131 - 0
services/user_admin_share.go

@@ -0,0 +1,131 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_web_mfyx/models"
+	"hongze/hongze_web_mfyx/utils"
+	"strconv"
+	"time"
+)
+
+// 判断用户是否属于销售,并且获取对应加密的分享码
+func GetInviteShareCode(mobile string) (inviteShareCode string) {
+	if mobile == "" {
+		return
+	}
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("判断用户是否属于销售,并且获取对应加密的分享码失败 GetInviteShareCode, err:", err.Error(), "mobile:", mobile), 2)
+		}
+	}()
+	adminDetail, e := models.GetSysAdminByMobile(mobile)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetSysAdminByMobile, Err: " + e.Error())
+		return
+	}
+	if adminDetail == nil {
+		return
+	}
+	inviteShareCode = utils.MD5(strconv.Itoa(adminDetail.AdminId)) //MD5 对ID进行加密
+	total, e := models.GetCygxUserAdminShareCodeByShareCodeCount(inviteShareCode)
+	if e != nil {
+		err = errors.New("GetCygxUserAdminShareCodeByShareCodeCount, Err: " + e.Error())
+		return
+	}
+	//如果不存在就新增一个
+	if total == 0 {
+		item := new(models.CygxUserAdminShareCode)
+		item.SellerName = adminDetail.RealName
+		item.SellerId = adminDetail.AdminId
+		item.Mobile = adminDetail.Mobile
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		item.ShareCode = inviteShareCode
+		e = models.AddCygxUserAdminShareCode(item)
+		if e != nil {
+			err = errors.New("AddCygxUserAdminShareCode, Err: " + e.Error())
+			return
+		}
+	}
+	return
+}
+
+// 记录分享来源
+func AddCygxUserAdminShareHistory(user *models.WxUserItem, source, sourceTitle, inviteShareCode string, sourceId int) {
+	if inviteShareCode == "" {
+		return
+	}
+
+	if user.UserId == 0 {
+		return
+	}
+	//3秒之内多次请求,不重复记录
+	key := "CYGX_" + source + "_" + strconv.Itoa(sourceId) + "_" + strconv.Itoa(user.UserId)
+	if utils.Rc.IsExist(key) {
+		return
+	}
+	utils.Rc.Put(key, 1, 3*time.Second)
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("记录分享来源失败 AddCygxUserAdminShareHistory, err:", err.Error()), 2)
+		}
+	}()
+	adminDetail, e := models.GetUserAdminShareCodeByShareCode(inviteShareCode)
+	if e != nil {
+		err = errors.New("GetUserAdminShareCodeByShareCode, Err: " + e.Error())
+		return
+	}
+	if adminDetail == nil {
+		return
+	}
+
+	//内部人员访问不做记录
+
+	//adminUserDetail, e := models.GetSysAdminByMobile(user.Mobile)
+	//if e != nil && e.Error() != utils.ErrNoRow() {
+	//	err = errors.New("GetSysAdminByMobile, Err: " + e.Error())
+	//	return
+	//}
+	//if adminUserDetail != nil {
+	//	return
+	//}
+
+	item := new(models.CygxUserAdminShareHistory)
+	switch source {
+	case utils.CYGX_OBJ_ACTIVITY:
+		item.Action = "查看活动"
+	case utils.CYGX_OBJ_ARTICLE:
+		item.Action = "查看报告"
+	case utils.CYGX_OBJ_YANXUANSPECIAL:
+		item.Action = "查看专栏"
+	case "login":
+		item.Action = "注册"
+	}
+	item.UserId = user.UserId
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.RealName = user.RealName
+	item.SellerName, item.SellerId = GetSellerName(user) // 销售姓名
+	item.Source = source
+	item.SourceId = sourceId
+	item.SourceTitle = sourceTitle
+	item.ShareId = adminDetail.SellerId
+	item.ShareName = adminDetail.SellerName
+	item.RegisterPlatform = utils.REGISTER_PLATFORM
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+
+	e = models.AddCygxUserAdminShareHistory(item)
+	if e != nil {
+		err = errors.New("AddCygxUserAdminShareHistory, Err: " + e.Error())
+		return
+	}
+	return
+}

+ 0 - 2
services/user_permission.go

@@ -315,7 +315,6 @@ func GetUserDetailPermissionCode(userId, companyId int) (permission int, err err
 		err = errors.New("获取用户申请信息失败, Err: " + e.Error())
 		return
 	}
-	fmt.Println("companyId", companyId)
 	if companyId == 1 {
 		// 潜在用户
 		if applyCount > 0 {
@@ -353,7 +352,6 @@ func GetUserDetailPermissionCode(userId, companyId int) (permission int, err err
 			}
 		}
 	}
-	fmt.Println("permission", permission)
 	return
 }
 

+ 1 - 1
utils/constants.go

@@ -22,7 +22,7 @@ const (
 )
 
 const (
-	APPNAME                             = "弘则-策略平台网页版"
+	APPNAME                             = "弘则-买方研选网页版"
 	EmailSendToUsers                    = "cxzhang@hzinsights.com"
 	ApiAuthorization                    = "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag"
 	ApiUrl                              = "https://vmp.hzinsights.com/v2api/"