فهرست منبع

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_10.5

xingzai 1 سال پیش
والد
کامیت
dd8534a0b6
47فایلهای تغییر یافته به همراه2125 افزوده شده و 261 حذف شده
  1. 23 6
      controllers/activity.go
  2. 338 0
      controllers/activity_sign.go
  3. 97 0
      controllers/banner.go
  4. 8 3
      controllers/home.go
  5. 90 88
      controllers/report.go
  6. 97 22
      controllers/report_selection.go
  7. 6 0
      controllers/search.go
  8. 6 1
      controllers/user.go
  9. 12 2
      models/activity.go
  10. 121 7
      models/activity_meet_detail_log.go
  11. 74 0
      models/activity_offline_meeting_detail.go
  12. 129 0
      models/activity_signin.go
  13. 5 1
      models/activity_signup.go
  14. 53 0
      models/activity_signup_break.go
  15. 81 0
      models/banner.go
  16. 29 0
      models/banner_history.go
  17. 26 0
      models/chart.go
  18. 1 1
      models/company.go
  19. 12 0
      models/company_product.go
  20. 14 6
      models/cygx_user_record.go
  21. 6 0
      models/db.go
  22. 18 0
      models/ik_word_map.go
  23. 42 13
      models/report_history_record.go
  24. 7 0
      models/report_selection.go
  25. 31 24
      models/wx_user.go
  26. 45 0
      routers/commentsRouter.go
  27. 10 0
      routers/router.go
  28. 224 40
      services/activity.go
  29. 181 0
      services/activity_signin.go
  30. 11 11
      services/activity_signup.go
  31. 4 1
      services/activity_special.go
  32. 4 3
      services/activity_special_trip.go
  33. 1 1
      services/admin.go
  34. 9 8
      services/article.go
  35. 135 0
      services/banner.go
  36. 6 1
      services/chart.go
  37. 47 0
      services/init_10.4.go
  38. 4 4
      services/keyword.go
  39. 1 1
      services/micro_roadshow.go
  40. 17 4
      services/page_history_record.go
  41. 41 0
      services/report_history_record.go
  42. 1 0
      services/resource_data.go
  43. 3 0
      services/task.go
  44. 21 0
      services/user.go
  45. 12 10
      services/wx_template_msg.go
  46. 0 1
      utils/common.go
  47. 22 2
      utils/constants.go

+ 23 - 6
controllers/activity.go

@@ -542,8 +542,15 @@ func (this *ActivityCoAntroller) Detail() {
 		} else {
 			activityInfo.ArticleList = make([]*models.ActivityArticleResp, 0)
 		}
+		if (activityInfo.ActivityTypeId == 5 || activityInfo.ActivityTypeId == 6) && services.GetBelongingRai(user.Mobile) {
+			activityInfo.IsShowSigninButton = true
+		}
 		//处理按钮是否展示问题
 		resp.Detail = services.ActivityButtonShow(activityInfo)
+		// 暂时写死,客户需要 5.16
+		if activityInfo.ActivityId == 2992 {
+			activityInfo.ActivityTypeName = "分析师线下沙龙"
+		}
 	} else {
 		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
 		if err != nil {
@@ -607,6 +614,9 @@ func (this *ActivityCoAntroller) SignupAdd() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+	if user.Mobile == "" {
+		user.Mobile = user.OutboundMobile
+	}
 	activityId := req.ActivityId
 	signupType := req.SignupType
 	hasPermission := 0
@@ -1227,6 +1237,7 @@ func (this *ActivityCoAntroller) MeetingReminderAdd() {
 		item.Email = user.Email
 		item.CompanyId = user.CompanyId
 		item.CompanyName = user.CompanyName
+		resp.HasPermission = hasPermission
 		_, errSignup := models.AddActivityMeetingReminder(item)
 		if errSignup != nil {
 			br.Msg = "操作失败"
@@ -1248,8 +1259,6 @@ func (this *ActivityCoAntroller) MeetingReminderAdd() {
 		resp.SellerName = sellerName
 		resp.SellerMobile = sellerMobile
 	}
-
-	resp.HasPermission = hasPermission
 	resp.SignupStatus = signupStatus
 	resp.ActivityId = activityId
 	var total int
@@ -1519,7 +1528,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 			if openIpItem != nil && openIpItem.OpenId != "" {
 				if sellerItem != nil {
 					//services.SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
 				}
 			}
 		}
@@ -1527,7 +1536,8 @@ func (this *ActivityCoAntroller) AskAdd() {
 		if sellerItem != nil {
 			openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 			if openIpItem != nil && openIpItem.OpenId != "" {
-				services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+				//services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+				services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
 			}
 		}
 	}
@@ -2320,7 +2330,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 	if chartPermissionIds != "" {
 		chartPermissionIds += ",1"
 	}
-	userType, permissionStr, err := services.GetUserType(user.CompanyId)
+	userType, _, err := services.GetUserType(user.CompanyId)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -2331,7 +2341,14 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 	var sortTime string
 	var pars []interface{}
 	//活动可见限制
-	slicePer := strings.Split(permissionStr, ",")
+
+	permissionZhengShiStr, err := models.GetCompanyPermissionByUserZhengShi(user.CompanyId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	slicePer := strings.Split(permissionZhengShiStr, ",")
 	//var permissionSqlStr string
 	var permissionNameStr string
 	for _, v := range slicePer {

+ 338 - 0
controllers/activity_sign.go

@@ -0,0 +1,338 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"time"
+)
+
+// 活动
+type ActivitySignCoAntroller struct {
+	BaseAuthController
+}
+
+// @Title  活动扫码自动签到
+// @Description 活动扫码签到接口
+// @Param   ActivityId   query   int  true       "活动ID"
+// @Success Ret=200 {object} models.CygxActivityResp
+// @router /detail [get]
+func (this *ActivitySignCoAntroller) Detail() {
+	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
+	activityId, _ := this.GetInt("ActivityId")
+	if activityId < 1 {
+		br.Msg = "请输入活动ID"
+		return
+	}
+	resp := new(models.CygxActivitySigninDetailResp)
+	activityInfo, err := models.GetAddActivityInfoByIdShow(uid, activityId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取活动详情信息失败,Err:" + err.Error()
+		return
+	}
+	if activityInfo == nil {
+		br.Msg = "活动不存在"
+		br.ErrMsg = "活动ID错误,Err:" + "activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	totalMySuccess, err := models.GetActivitySignupCount(uid, activityId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	detail := new(models.CygxActivitySigninResp)
+	if totalMySuccess > 0 {
+		detail.IsSignup = true
+	}
+	var condition string
+	var pars []interface{}
+	condition = " AND  open_id = ?  AND activity_id = ?  "
+	pars = append(pars, user.OpenId, activityId)
+	total, err := models.GetCygxActivitySigninCount(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	item := new(models.CygxActivitySignin)
+	item.ActivityId = activityId
+	item.UserId = user.UserId
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.RealName = user.RealName
+	item.CompanyName = user.CompanyName
+	item.IsSignup = totalMySuccess
+	item.CountryCode = user.CountryCode
+	item.OpenId = user.OpenId
+	item.CreateTime = time.Now()
+	if total == 0 && user.Mobile != "" {
+		err = models.AddCygxActivitySignin(item)
+		if err != nil {
+			br.Msg = "签到失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+	}
+
+	//记录签到信息到用户到会表
+	if user.CompanyId > 1 {
+		pars = make([]interface{}, 0)
+		condition = " AND  user_id = ?  AND activity_id = ?  "
+		pars = append(pars, user.UserId, activityId)
+		totalOfflineMeeting, err := models.GetCygxActivityOfflineMeetingDetailCount(condition, pars)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		if totalOfflineMeeting == 0 {
+			itemOfflineMeeting := new(models.CygxActivityOfflineMeetingDetail)
+			itemOfflineMeeting.UserId = user.UserId
+			itemOfflineMeeting.ActivityId = activityId
+			itemOfflineMeeting.CreateTime = time.Now()
+			itemOfflineMeeting.Mobile = user.Mobile
+			itemOfflineMeeting.CompanyId = user.CompanyId
+			itemOfflineMeeting.CompanyName = user.CompanyName
+			itemOfflineMeeting.IsMeeting = 1
+			err = models.AddCygxActivityOfflineMeetingDetail(itemOfflineMeeting)
+			if err != nil {
+				br.Msg = "签到失败"
+				br.ErrMsg = "获取失败AddCygxActivityOfflineMeetingDetail,Err:" + err.Error()
+				return
+			}
+		}
+		//添加日志记录
+		services.AddCygxActivitySigninLog(item)
+
+		//把报名信息写入签到到会表
+		services.AddCygxActivityOfflineMeetingDetail(activityId, user.UserId)
+
+		//后期扫码签到,处理是否爽约限制
+		services.CygxActivityRestrictSignupByuid(user.UserId, activityId)
+	}
+
+	if user.Mobile != "" || total > 0 {
+		resp.IsBindingMobile = true
+	}
+	if user.CompanyId == 1 {
+		detail.IsNewUser = true
+	}
+	detail.ActivityId = activityId
+	detail.ActivityName = activityInfo.ActivityName
+	detail.Mobile = user.Mobile
+	detail.RealName = user.RealName
+	detail.CompanyName = user.CompanyName
+
+	//用于前端二次回显
+	if user.Mobile == "" {
+		pars = make([]interface{}, 0)
+		condition = " AND  open_id = ?  AND activity_id = ?  "
+		pars = append(pars, user.OpenId, activityId)
+		signinDetail, err := models.GetCygxActivitySigninDetail(condition, pars)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "签到失败"
+			br.ErrMsg = "获取失败GetCygxActivitySigninDetail,Err:" + err.Error()
+			return
+		}
+		if signinDetail != nil {
+			detail.BusinessCard = signinDetail.BusinessCard
+			detail.Mobile = signinDetail.Mobile
+			detail.RealName = signinDetail.RealName
+			detail.CompanyName = signinDetail.CompanyName
+			detail.IsNewUser = true
+		}
+	}
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title  活动扫码手动签到
+// @Description 活动扫码手动签到接口
+// @Param   ActivityId   query   int  true       "活动ID"
+// @Success Ret=200 {object} models.CygxActivityResp
+// @router /byHand [post]
+func (this *ActivitySignCoAntroller) ByHand() {
+	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
+	resp := new(models.CygxActivitySigninDetailResp)
+	var req models.CygxActivitySigninReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	signinType := req.SigninType
+	activityId := req.ActivityId
+	CountryCode := req.CountryCode
+	Mobile := req.Mobile
+	CompanyName := req.CompanyName
+	BusinessCard := req.BusinessCard
+	RealName := req.RealName
+	if activityId < 1 {
+		br.Msg = "请输入活动ID"
+		return
+	}
+	user.RealName = RealName
+	user.CompanyName = CompanyName
+	activityInfo, err := models.GetAddActivityInfoByIdShow(uid, activityId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取活动详情信息失败,Err:" + err.Error()
+		return
+	}
+	if activityInfo == nil {
+		br.Msg = "活动不存在"
+		br.ErrMsg = "活动ID错误,Err:" + "activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	totalMySuccess, err := models.GetActivitySignupCount(uid, activityId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	item := new(models.CygxActivitySignin)
+
+	var condition string
+	var pars []interface{}
+	condition = " AND  open_id = ?  AND activity_id = ?  "
+	pars = append(pars, user.OpenId, activityId)
+	total, err := models.GetCygxActivitySigninCount(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	if signinType == 1 {
+		if req.Mobile == "" {
+			br.Msg = "参数错误"
+			br.ErrMsg = "参数错误,手机号为空 为空"
+			return
+		}
+		itemMsgCode, err := models.GetMsgCode(req.Mobile, req.VCode)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				br.Msg = "验证码错误,请重新输入"
+				br.ErrMsg = "校验验证码失败,Err:" + err.Error()
+				return
+			} else {
+				br.Msg = "验证码错误,请重新输入"
+				br.ErrMsg = "校验验证码失败,Err:" + err.Error()
+				return
+			}
+		}
+		if itemMsgCode == nil {
+			br.Msg = "验证码错误,请重新输入"
+			return
+		}
+		userMobile, err := models.GetWxUserItemByMobile(Mobile)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "签到失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		if userMobile != nil {
+			user = userMobile
+		}
+	} else {
+		if BusinessCard == "" {
+			br.Msg = "签到失败"
+			br.ErrMsg = "签到失败名片地址为空,Err:"
+			return
+		}
+		item.BusinessCard = BusinessCard
+	}
+	item.ActivityId = activityId
+	item.UserId = user.UserId
+	item.Mobile = Mobile
+	item.CountryCode = CountryCode
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.RealName = user.RealName
+	item.CompanyName = user.CompanyName
+	item.IsSignup = totalMySuccess
+	item.BusinessCard = BusinessCard
+	item.OpenId = user.OpenId
+	item.CreateTime = time.Now()
+	if total == 0 {
+		err = models.AddCygxActivitySignin(item)
+		if err != nil {
+			br.Msg = "签到失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+	} else {
+		pars = make([]interface{}, 0)
+		condition = " AND  open_id = ?  AND activity_id = ?  "
+		pars = append(pars, user.OpenId, activityId)
+		signinDetail, err := models.GetCygxActivitySigninDetail(condition, pars)
+		if err != nil {
+			br.Msg = "签到失败"
+			br.ErrMsg = "获取失败GetCygxActivitySigninDetail,Err:" + err.Error()
+			return
+		}
+		item.Id = signinDetail.Id
+		err = models.UpdateCygxActivitySignin(item)
+		if err != nil {
+			br.Msg = "签到失败"
+			br.ErrMsg = "获取失败,UpdateCygxActivitySignin,Err:" + err.Error()
+			return
+		}
+	}
+	detail := new(models.CygxActivitySigninResp)
+	if totalMySuccess > 0 {
+		detail.IsSignup = true
+	}
+	//添加日志记录
+	go services.AddCygxActivitySigninLog(item)
+	if user.CompanyId <= 1 {
+		detail.IsNewUser = true
+	}
+	if user.UserId == 0 {
+		detail.IsNewUser = true
+	}
+	detail.ActivityId = activityId
+	detail.ActivityName = activityInfo.ActivityName
+	detail.Mobile = Mobile
+	detail.RealName = RealName
+	detail.CompanyName = CompanyName
+	resp.Detail = detail
+	resp.IsBindingMobile = true
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 97 - 0
controllers/banner.go

@@ -0,0 +1,97 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+)
+
+// Banner
+type BannerController struct {
+	BaseAuthController
+}
+
+// @Title 列表
+// @Description 列表接口
+// @Success Ret=200 {object} cygx.CygxBannerListResp
+// @router /list [get]
+func (this *BannerController) List() {
+	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
+	}
+	resp := new(models.CygxBannerListResp)
+	var condition string
+	var pars []interface{}
+	condition += "	 AND art.status = 1 ORDER BY art. list_type ASC   , art.sort ASC  "
+	list, err := models.GetCygxBannerList(condition, pars, 0, 99999)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	bannerImgList, err := models.GetCygxBannerImgList()
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	mapImg := make(map[int]string)
+	for _, v := range bannerImgList {
+		mapImg[v.ImgId] = v.IndexImg
+	}
+	for _, v := range list {
+		v.IndexImg = mapImg[v.ImgId]
+		v.BannerUrlResp = services.GetBannerUrlBody(v.Link)
+	}
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 记录点击信息
+// @Description 记录点击信息
+// @Param	request	body cygx.CygxBannerIdReq true "type json string"
+// @Success 200 Ret=200 发布成功
+// @router /add/history [post]
+func (this *BannerController) History() {
+	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
+	}
+	var req models.CygxBannerIdReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	bannerId := req.BannerId
+	if bannerId == 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,id不可为空"
+		return
+	}
+	go services.AddCygxBannerHistory(user, bannerId)
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "记录成功"
+}

+ 8 - 3
controllers/home.go

@@ -672,13 +672,18 @@ func (this *HomeController) NewList() {
 	var condition string
 	var conditionInit string
 	var pars []interface{}
-	var total int
+	//var total int
 	resp := new(models.HomeResourceDataListResp)
-
+	totalRai, err := models.GetCountCompanyProductCompanyId(user.CompanyId, utils.COMPANY_PRODUCT_RAI_ID)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "GetCountCompanyProductCompanyId,Err:" + err.Error()
+		return
+	}
 	//condition += " AND source = 'article' "
 	//查询近一个月的数据
 	conditionInit = " AND publish_date  >   '" + time.Now().AddDate(0, 0, -30).Format(utils.FormatDateTime) + "'"
-	if user.CompanyId <= 1 {
+	if user.CompanyId <= 1 || totalRai == 0 {
 		condition += " AND source IN ('roadshow','article','activityvideo','activityvoice') " + conditionInit
 		if user.Mobile == "" && user.Email == "" {
 			startSize = 0

+ 90 - 88
controllers/report.go

@@ -731,14 +731,16 @@ func (this *ReportController) List() {
 			list[k].ImgUrlPc = mapCategoryUrl[id]
 
 			if mapCategoryUrl[id] == "" {
-				if detail.ChartPermissionId == utils.YI_YAO_ID {
-					list[k].ImgUrlPc = utils.YI_YAO_QI_TA
+				if detail != nil {
+					if detail.ChartPermissionId == utils.YI_YAO_ID {
+						list[k].ImgUrlPc = utils.YI_YAO_QI_TA
+					}
 				}
 			}
 		}
 
 		resp := new(models.TimeLineReportListResp)
-		resp.CategoryImgUrlPc = mapChartPermission[detail.ChartPermissionName]
+		//resp.CategoryImgUrlPc = mapChartPermission[detail.ChartPermissionName]
 
 		resp.List = list
 		resp.Paging = page
@@ -1580,7 +1582,7 @@ func (this *ReportController) Detail() {
 	//	br.IsSendEmail = false
 	//	return
 	//}
-	uid := user.UserId
+	//uid := user.UserId
 	articleId, _ := this.GetInt("ArticleId")
 	isBestNew, _ := this.GetBool("IsBestNew")
 	if isBestNew {
@@ -1729,27 +1731,27 @@ func (this *ReportController) Detail() {
 		existMap[v.ChartPermissionId] = v.ChartPermissionId
 	}
 
-	historyRecord := new(models.CygxReportHistoryRecord)
-	historyRecord.UserId = uid
-	historyRecord.ArticleId = articleId
-	historyRecord.CreateTime = time.Now()
-	historyRecord.Mobile = user.Mobile
-	historyRecord.Email = user.Email
-	historyRecord.CompanyId = user.CompanyId
-	historyRecord.CompanyName = user.CompanyName
-	historyRecord.ReportType = "bgjx"
-	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-		return
-	}
-	historyRecord.RealName = user.RealName
-	if sellerItem != nil {
-		historyRecord.SellerName = sellerItem.RealName
-	}
-
-	go models.AddCygxReportHistoryRecord(historyRecord)
+	//historyRecord := new(models.CygxReportHistoryRecord)
+	//historyRecord.UserId = uid
+	//historyRecord.ArticleId = articleId
+	//historyRecord.CreateTime = time.Now()
+	//historyRecord.Mobile = user.Mobile
+	//historyRecord.Email = user.Email
+	//historyRecord.CompanyId = user.CompanyId
+	//historyRecord.CompanyName = user.CompanyName
+	//historyRecord.ReportType = "bgjx"
+	//sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取信息失败"
+	//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//historyRecord.RealName = user.RealName
+	//if sellerItem != nil {
+	//	historyRecord.SellerName = sellerItem.RealName
+	//}
+	//
+	//go models.AddCygxReportHistoryRecord(historyRecord)
 	resp.List = items
 	resp.ListPermissionSubject = itemsSubject
 	resp.Detail = detail
@@ -1776,7 +1778,7 @@ func (this *ReportController) ResearchDetail() {
 		br.Ret = 408
 		return
 	}
-	uid := user.UserId
+	//uid := user.UserId
 	articleId, _ := this.GetInt("ArticleId")
 	if articleId < 0 {
 		br.Msg = "参数错误"
@@ -1886,26 +1888,26 @@ func (this *ReportController) ResearchDetail() {
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
 		}
 	}
-	historyRecord := new(models.CygxReportHistoryRecord)
-	historyRecord.UserId = uid
-	historyRecord.ArticleId = articleId
-	historyRecord.CreateTime = time.Now()
-	historyRecord.Mobile = user.Mobile
-	historyRecord.Email = user.Email
-	historyRecord.CompanyId = user.CompanyId
-	historyRecord.CompanyName = user.CompanyName
-	historyRecord.ReportType = "bzyjhz"
-	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-		return
-	}
-	historyRecord.RealName = user.RealName
-	if sellerItem != nil {
-		historyRecord.SellerName = sellerItem.RealName
-	}
-	go models.AddCygxReportHistoryRecord(historyRecord)
+	//historyRecord := new(models.CygxReportHistoryRecord)
+	//historyRecord.UserId = uid
+	//historyRecord.ArticleId = articleId
+	//historyRecord.CreateTime = time.Now()
+	//historyRecord.Mobile = user.Mobile
+	//historyRecord.Email = user.Email
+	//historyRecord.CompanyId = user.CompanyId
+	//historyRecord.CompanyName = user.CompanyName
+	//historyRecord.ReportType = "bzyjhz"
+	//sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取信息失败"
+	//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//historyRecord.RealName = user.RealName
+	//if sellerItem != nil {
+	//	historyRecord.SellerName = sellerItem.RealName
+	//}
+	//go models.AddCygxReportHistoryRecord(historyRecord)
 	resp.List = listFirst
 	resp.Detail = detail
 	br.Ret = 200
@@ -1931,7 +1933,7 @@ func (this *ReportController) MinutesDetailV4() {
 		br.Ret = 408
 		return
 	}
-	uid := user.UserId
+	//uid := user.UserId
 	articleId, _ := this.GetInt("ArticleId")
 	if articleId < 0 {
 		br.Msg = "参数错误"
@@ -2020,26 +2022,26 @@ func (this *ReportController) MinutesDetailV4() {
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
 		}
 	}
-	historyRecord := new(models.CygxReportHistoryRecord)
-	historyRecord.UserId = uid
-	historyRecord.ArticleId = articleId
-	historyRecord.CreateTime = time.Now()
-	historyRecord.Mobile = user.Mobile
-	historyRecord.Email = user.Email
-	historyRecord.CompanyId = user.CompanyId
-	historyRecord.CompanyName = user.CompanyName
-	historyRecord.ReportType = "szjyhz"
-	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-		return
-	}
-	historyRecord.RealName = user.RealName
-	if sellerItem != nil {
-		historyRecord.SellerName = sellerItem.RealName
-	}
-	go models.AddCygxReportHistoryRecord(historyRecord)
+	//historyRecord := new(models.CygxReportHistoryRecord)
+	//historyRecord.UserId = uid
+	//historyRecord.ArticleId = articleId
+	//historyRecord.CreateTime = time.Now()
+	//historyRecord.Mobile = user.Mobile
+	//historyRecord.Email = user.Email
+	//historyRecord.CompanyId = user.CompanyId
+	//historyRecord.CompanyName = user.CompanyName
+	//historyRecord.ReportType = "szjyhz"
+	//sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取信息失败"
+	//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//historyRecord.RealName = user.RealName
+	//if sellerItem != nil {
+	//	historyRecord.SellerName = sellerItem.RealName
+	//}
+	//go models.AddCygxReportHistoryRecord(historyRecord)
 	resp.List = listFirst
 	resp.Detail = detail
 	br.Ret = 200
@@ -2065,7 +2067,7 @@ func (this *ReportController) MinutesDetail() {
 		br.Ret = 408
 		return
 	}
-	uid := user.UserId
+	//uid := user.UserId
 	articleId, _ := this.GetInt("ArticleId")
 	if articleId < 0 {
 		br.Msg = "参数错误"
@@ -2117,26 +2119,26 @@ func (this *ReportController) MinutesDetail() {
 			}
 		}
 	}
-	historyRecord := new(models.CygxReportHistoryRecord)
-	historyRecord.UserId = uid
-	historyRecord.ArticleId = articleId
-	historyRecord.CreateTime = time.Now()
-	historyRecord.Mobile = user.Mobile
-	historyRecord.Email = user.Email
-	historyRecord.CompanyId = user.CompanyId
-	historyRecord.CompanyName = user.CompanyName
-	historyRecord.ReportType = "szjyhz"
-	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-		return
-	}
-	historyRecord.RealName = user.RealName
-	if sellerItem != nil {
-		historyRecord.SellerName = sellerItem.RealName
-	}
-	go models.AddCygxReportHistoryRecord(historyRecord)
+	//historyRecord := new(models.CygxReportHistoryRecord)
+	//historyRecord.UserId = uid
+	//historyRecord.ArticleId = articleId
+	//historyRecord.CreateTime = time.Now()
+	//historyRecord.Mobile = user.Mobile
+	//historyRecord.Email = user.Email
+	//historyRecord.CompanyId = user.CompanyId
+	//historyRecord.CompanyName = user.CompanyName
+	//historyRecord.ReportType = "szjyhz"
+	//sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取信息失败"
+	//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//historyRecord.RealName = user.RealName
+	//if sellerItem != nil {
+	//	historyRecord.SellerName = sellerItem.RealName
+	//}
+	//go models.AddCygxReportHistoryRecord(historyRecord)
 	resp.List = listLog
 	resp.Detail = detail
 	br.Ret = 200

+ 97 - 22
controllers/report_selection.go

@@ -33,7 +33,7 @@ func (this *ReportSelectionController) Detail() {
 		br.Ret = 408
 		return
 	}
-	uid := user.UserId
+	//uid := user.UserId
 	articleId, _ := this.GetInt("ArticleId")
 	isBestNew, _ := this.GetBool("IsBestNew")
 	isBestNew = true
@@ -148,27 +148,27 @@ func (this *ReportSelectionController) Detail() {
 		existMap[v.ChartPermissionId] = v.ChartPermissionId
 	}
 
-	historyRecord := new(models.CygxReportHistoryRecord)
-	historyRecord.UserId = uid
-	historyRecord.ArticleId = articleId
-	historyRecord.CreateTime = time.Now()
-	historyRecord.Mobile = user.Mobile
-	historyRecord.Email = user.Email
-	historyRecord.CompanyId = user.CompanyId
-	historyRecord.CompanyName = user.CompanyName
-	historyRecord.ReportType = "bgjx"
-	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-		return
-	}
-	historyRecord.RealName = user.RealName
-	if sellerItem != nil {
-		historyRecord.SellerName = sellerItem.RealName
-	}
-
-	go models.AddCygxReportHistoryRecord(historyRecord)
+	//historyRecord := new(models.CygxReportHistoryRecord)
+	//historyRecord.UserId = uid
+	//historyRecord.ArticleId = articleId
+	//historyRecord.CreateTime = time.Now()
+	//historyRecord.Mobile = user.Mobile
+	//historyRecord.Email = user.Email
+	//historyRecord.CompanyId = user.CompanyId
+	//historyRecord.CompanyName = user.CompanyName
+	//historyRecord.ReportType = "bgjx"
+	//sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取信息失败"
+	//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//historyRecord.RealName = user.RealName
+	//if sellerItem != nil {
+	//	historyRecord.SellerName = sellerItem.RealName
+	//}
+	//
+	//go models.AddCygxReportHistoryRecord(historyRecord)
 	resp.List = items
 	resp.ListPermissionSubject = itemsSubject
 	resp.Detail = detail
@@ -232,3 +232,78 @@ func (this *ReportSelectionController) ClickHistory() {
 	br.Success = true
 	br.Msg = "记录成功"
 }
+
+// @Title 上传文章阅读时间
+// @Description 上传文章阅读时间接口
+// @Param  request	body models.AddStopTimeRep true "type json string"
+// @Success 200 {object} models.ArticleDetailResp
+// @router /addStopTime [post]
+func (this *ReportSelectionController) AddStopTime() {
+	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
+	}
+	var req models.AddReportSelectionStopTimeRep
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	uid := user.UserId
+	articleId := req.ArticleId
+	stopTime := req.StopTime
+	outType := req.OutType
+	source := req.Source
+	var reportType string
+	if source == 1 {
+		reportType = "bgjx"
+	} else if source == 2 {
+		reportType = "bzyjhz"
+	} else if source == 3 {
+		reportType = "szjyhz"
+	}
+	hasPermission, err := services.GetUserhasPermission(user)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
+	}
+
+	if hasPermission == 1 {
+		historyRecord := new(models.CygxReportHistoryRecord)
+		historyRecord.UserId = uid
+		historyRecord.ArticleId = articleId
+		historyRecord.CreateTime = time.Now().Add(-time.Second * time.Duration(stopTime))
+		historyRecord.Mobile = user.Mobile
+		historyRecord.Email = user.Email
+		historyRecord.CompanyId = user.CompanyId
+		historyRecord.CompanyName = user.CompanyName
+		historyRecord.StopTime = stopTime
+		historyRecord.OutType = outType
+		historyRecord.ReportType = reportType
+		historyRecord.RegisterPlatform = utils.REGISTER_PLATFORM
+		sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+			return
+		}
+		historyRecord.RealName = user.RealName
+		if sellerItem != nil {
+			historyRecord.SellerName = sellerItem.RealName
+		}
+		go services.AddCygxReportHistoryRecord(historyRecord)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 6 - 0
controllers/search.go

@@ -598,6 +598,12 @@ func (this *SearchController) ListHomeArtAndChartPage() {
 	var result []*models.SearchItem
 	var total int64
 	if listType == 1 || listType == 2 {
+		//添加映射关系
+		keyWord = strings.ToUpper(keyWord)
+		keyWordDetail, _ := models.GetCygxCygxIkWordMapDetail(keyWord)
+		if keyWordDetail != nil {
+			keyWord = keyWordDetail.KeyWordMap
+		}
 		_, tmpTotal, err := services.EsArticleSearch(keyWord, startSize, pageSize, orderColumn, 0)
 		if err != nil {
 			br.Msg = "检索失败"

+ 6 - 1
controllers/user.go

@@ -158,7 +158,7 @@ func (this *UserController) Login() {
 	{
 		loginLog := new(models.WxUserLog)
 		loginLog.UserId = userId
-		loginLog.OpenId = unionId
+		loginLog.OpenId = openId
 		loginLog.Mobile = req.Mobile
 		loginLog.Email = req.Email
 		loginLog.CreateTime = time.Now()
@@ -187,6 +187,11 @@ func (this *UserController) Login() {
 			}
 		}
 	}
+
+	//先关注后登录,更新用户是否关注过查研观向小助手公众号
+	{
+		services.UpdateCygxSubscribe(userId, unionId)
+	}
 	resp := new(models.LoginResp)
 	resp.UserId = userId
 	resp.Authorization = token

+ 12 - 2
models/activity.go

@@ -205,6 +205,8 @@ type ActivityDetail struct {
 	IsCanOutboundCall       int                        `description:"是否提供外呼 1:是 、0:否"`
 	TencentConferenceNumber string                     `description:"腾讯会议号"`
 	YidongActivityIdByCygx  string                     `description:"通过查研观向建会易董返回的活动ID"`
+	IsShowSigninButton      bool                       `description:"是否展示签到码按钮"`
+	SigninImg               string                     `description:"签到码图片"`
 }
 type ListArticleActivity struct {
 	Title   string `description:"文章标题"`
@@ -498,7 +500,7 @@ func UpdateActivitySattusToHaveInHand() (err error) {
 		}
 	}()
 	o := orm.NewOrm()
-	resultTime_30 := time.Now().Add(-time.Minute * 30).Format("2006-01-02 15:04:05")
+	resultTime_30 := time.Now().Add(-time.Minute * 60).Format("2006-01-02 15:04:05") // 线上活动也改成60分钟之后结束了 2023.5.8
 	resultTime_60 := time.Now().Add(-time.Minute * 60).Format("2006-01-02 15:04:05")
 	var sqlOr string
 	var condition string
@@ -521,7 +523,7 @@ func UpdateActivitySattusToComplete() (err error) {
 		}
 	}()
 	o := orm.NewOrm()
-	resultTime_30 := time.Now().Add(-time.Minute * 30).Format("2006-01-02 15:04:05")
+	resultTime_30 := time.Now().Add(-time.Minute * 60).Format("2006-01-02 15:04:05") // 线上活动也改成60分钟之后结束了 2023.5.8
 	resultTime_60 := time.Now().Add(-time.Minute * 60).Format("2006-01-02 15:04:05")
 	//var sqlOr string
 	var condition string
@@ -1025,6 +1027,14 @@ func GetActivityListByCondition(condition string, pars []interface{}) (items []*
 	return
 }
 
+// UpdateCygxActivitySubmitMeetingByActivityId  ,修改活动提交到会状态
+func UpdateCygxActivitySubmitMeetingByActivityId(activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity SET is_submit_meeting = 1 WHERE activity_id  = ? `
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
 // UpdateCygxActivitySubmitMeetingByYidong  ,跟易董返回的用户状态修改活动以提交到会状态
 func UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId string) (err error) {
 	o := orm.NewOrm()

+ 121 - 7
models/activity_meet_detail_log.go

@@ -3,11 +3,12 @@ package models
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"strconv"
 	"strings"
 	"time"
 )
 
-//报名
+// 报名
 type CygxActivityMeetDetailLog struct {
 	AttendanceId int       `orm:"column(attendance_id);pk;"description:"主键ID"`
 	ActivityId   int       `description:"活动ID"`
@@ -20,6 +21,9 @@ type CygxActivityMeetDetailLog struct {
 }
 
 func GetOfflineMeetingDetailListCompanyIdStr(companyIdStr string) (item []*CygxActivityMeetDetailLog, err error) {
+	if companyIdStr == "" {
+		return
+	}
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_activity_offline_meeting_detail WHERE company_id IN (` + companyIdStr + `)`
 	_, err = o.Raw(sql).QueryRows(&item)
@@ -37,7 +41,7 @@ func GetOfflineMeetingDetailListCompanyName(companyName string) (item []*CygxAct
 	return
 }
 
-//添加
+// 添加
 func AddCygxActivityMeetDetailLog(item *CygxActivityMeetDetailLog) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
@@ -45,6 +49,9 @@ func AddCygxActivityMeetDetailLog(item *CygxActivityMeetDetailLog) (lastId int64
 }
 
 func GetActivityMeetDetailLog(mobileStr string) (item []*CygxActivityMeetDetailLog, err error) {
+	if mobileStr == "" {
+		return
+	}
 	o := orm.NewOrm()
 	sql := `SELECT l.* 
 			FROM
@@ -62,7 +69,7 @@ func GetActivityMeetDetailLogByMobile() (item []*CygxActivityMeetDetailLog, err
 	return
 }
 
-//获取数量
+// 获取数量
 func GetActivityMeetDetailLogCount(condition string) (count int, err error) {
 	o := orm.NewOrm()
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_meet_detail_log WHERE 1=1 `
@@ -73,7 +80,7 @@ func GetActivityMeetDetailLogCount(condition string) (count int, err error) {
 	return
 }
 
-//修改公司参会数量
+// 修改公司参会数量
 func UpdateActivityMeetDetailLog(companyName string, num int) (err error) {
 	sql := ` UPDATE cygx_activity_meet_detail_log SET  company_meet_num= ?  WHERE company_name = ?`
 	o := orm.NewOrm()
@@ -81,7 +88,7 @@ func UpdateActivityMeetDetailLog(companyName string, num int) (err error) {
 	return
 }
 
-//修改个人参会数量
+// 修改个人参会数量
 func UpdateActivityMeetDetailLogByUser(mobile string, num int) (err error) {
 	sql := ` UPDATE cygx_activity_meet_detail_log SET  user_meet_num= ?  WHERE mobile = ?`
 	o := orm.NewOrm()
@@ -89,7 +96,7 @@ func UpdateActivityMeetDetailLogByUser(mobile string, num int) (err error) {
 	return
 }
 
-//添加线上到会记录(下载使用)
+// 添加线上到会记录(下载使用)
 func AddCygxActivityMeetDetailLogOnline(list []*CygxActivityAttendanceDetail, activityId int) (err error) {
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
@@ -167,7 +174,7 @@ func AddCygxActivityMeetDetailLogOnline(list []*CygxActivityAttendanceDetail, ac
 	return
 }
 
-//添加线上到会记录
+// 添加线上到会记录
 func AddCygxActivityMeetDetailLogOnlineByList(list []*CygxActivityAttendanceDetail, activityIds string) (err error) {
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
@@ -255,3 +262,110 @@ func AddCygxActivityMeetDetailLogOnlineByList(list []*CygxActivityAttendanceDeta
 	fmt.Println("user_end")
 	return
 }
+
+// 添加线下到会记录
+func AddCygxActivityMeetDetailLogOffline(activityId int) (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()
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	condition = `  AND activity_id = ? `
+	pars = append(pars, activityId)
+	listOfflineMeeting, err := GetOfflineMeetingList(condition, pars)
+	if err != nil {
+		return
+	}
+	var meetingUids string
+	for _, v := range listOfflineMeeting {
+		meetingUids += strconv.Itoa(v.UserId) + ","
+	}
+	meetingUids = strings.TrimRight(meetingUids, ",")
+	if meetingUids == "" {
+		meetingUids = "-1"
+	}
+	var CompanyIdStr string
+	var MobileStr string
+	var items []*CygxActivityMeetDetailLog
+	list, err := GetOfflineMeetingListByUser(meetingUids, activityId)
+	fmt.Println(len(list))
+	if err != nil {
+		return
+	}
+	//删除原有数据
+	sql := ` DELETE FROM cygx_activity_meet_detail_log WHERE activity_id = ?`
+	_, err = to.Raw(sql, activityId).Exec()
+	if err != nil {
+		return
+	}
+	//插入新的数据
+	for _, v := range list {
+		item := new(CygxActivityMeetDetailLog)
+		item.ActivityId = v.ActivityId
+		item.Mobile = v.Mobile
+		item.CompanyName = v.CompanyName
+		item.CompanyId = v.CompanyId
+		item.CreateTime = v.CreateTime
+		CompanyIdStr += strconv.Itoa(v.CompanyId) + ","
+		if v.Mobile != "" {
+			MobileStr += v.Mobile + ","
+		}
+		items = append(items, item)
+	}
+	CompanyIdStr = strings.TrimRight(CompanyIdStr, ",")
+	MobileStr = strings.TrimRight(MobileStr, ",")
+	for _, v := range items {
+		_, err = to.Insert(v)
+		if err != nil {
+			return
+		}
+	}
+	listCompanyId, err := GetOfflineMeetingDetailListCompanyIdStr(CompanyIdStr)
+	if err != nil {
+		return
+	}
+	//修改公司对应的数量
+	//var condition string
+	for _, v := range listCompanyId {
+		var total int
+		condition = ` AND company_name = '` + v.CompanyName + `' `
+		total, err = GetActivityMeetDetailLogCount(condition)
+		if err != nil {
+			return
+		}
+		sql := ` UPDATE cygx_activity_meet_detail_log SET  company_meet_num= ?  WHERE company_name = ?`
+		_, err = to.Raw(sql, total, v.CompanyName).Exec()
+		if err != nil {
+			return
+		}
+	}
+	listMobile, err := GetActivityMeetDetailLog(MobileStr)
+	if err != nil {
+		return
+	}
+	//修改个人对应的数量
+	for _, v := range listMobile {
+		var total int
+		condition = ` AND mobile = '` + v.Mobile + `' `
+		total, err = GetActivityMeetDetailLogCount(condition)
+		if err != nil {
+			return
+		}
+		sql := ` UPDATE cygx_activity_meet_detail_log SET  user_meet_num= ?  WHERE mobile = ?`
+		_, err = to.Raw(sql, total, v.Mobile).Exec()
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 74 - 0
models/activity_offline_meeting_detail.go

@@ -0,0 +1,74 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// 报名
+type CygxActivityOfflineMeetingDetail struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户id"`
+	ActivityId  int       `description:"活动ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱号"`
+	CompanyId   int       `description:"公司ID"`
+	CompanyName string    `description:"公司名称"`
+	IsMeeting   int       `description:"是否到会  1.是 ,0否"`
+	SigninTime  string    `description:"签到时间"`
+}
+
+// 列表
+func GetOfflineMeetingList(condition string, pars []interface{}) (items []*CygxActivitySignupList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT  *
+			FROM cygx_activity_offline_meeting_detail   WHERE 1 =1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// 批量添加
+func AddCygxActivityOfflineMeetingDetailList(items []*CygxActivityOfflineMeetingDetail) (lastId int64, err error) {
+	lenitems := len(items)
+	if lenitems == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(1, items)
+	return
+}
+
+// 添加
+func AddCygxActivityOfflineMeetingDetail(item *CygxActivityOfflineMeetingDetail) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+// 获取数量
+func GetCygxActivityOfflineMeetingDetailCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_offline_meeting_detail as art WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+// UpdateCygxActivityOfflineMeetingDetailSigninTime  修改签到时间
+func UpdateCygxActivityOfflineMeetingDetailSigninTime(activityId, userId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_offline_meeting_detail SET signin_time = NOW() ,is_meeting = 1  WHERE activity_id  = ? AND  user_id = ? `
+	_, err = o.Raw(sql, activityId, userId).Exec()
+	return
+}
+
+// 预约外呼列表
+func GetOfflineMeetingListByUser(meetingUids string, activityId int) (items []*CygxActivityOfflineMeetingDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT s.* FROM cygx_activity_offline_meeting_detail  as s  WHERE activity_id = ? AND user_id IN  (` + meetingUids + `)`
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	return
+}

+ 129 - 0
models/activity_signin.go

@@ -0,0 +1,129 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySignin 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:"公司名称"`
+	BusinessCard string    `description:"名片"`
+	RealName     string    `description:"用户实际名称"`
+	IsSignup     int       `description:"是否报名了"`
+	CountryCode  string    `description:"手机国家区号"`
+	OpenId       string    `description:"Openid"`
+}
+
+type CygxActivitySigninLog 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:"公司名称"`
+	BusinessCard string    `description:"名片"`
+	RealName     string    `description:"用户实际名称"`
+	IsSignup     int       `description:"是否报名了"`
+	CountryCode  string    `description:"手机国家区号"`
+	OpenId       string    `description:"Openid"`
+}
+
+type CygxActivitySigninResp struct {
+	ActivityId   int    `description:"活动ID"`
+	ActivityName string `description:"活动名称"`
+	RealName     string `description:"用户实际名称"`
+	Mobile       string `description:"手机号"`
+	CompanyName  string `description:"公司名称"`
+	BusinessCard string `description:"名片"`
+	IsNewUser    bool   `description:"是否属于新客户"`
+	IsSignup     bool   `description:"是否报名了"`
+}
+
+type CygxActivitySigninDetailResp struct {
+	Detail          *CygxActivitySigninResp
+	IsBindingMobile bool `description:"是否绑定手机号"`
+}
+
+// 获取数量
+func GetCygxActivitySigninCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_signin as art WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+func GetCygxActivitySigninDetail(condition string, pars []interface{}) (item *CygxActivitySignin, err error) {
+	sql := `SELECT *  FROM cygx_activity_signin as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	err = orm.NewOrm().Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+// 修改创建时间,做签到时间使用
+func UpdatedateCygxActivitySignin(item *CygxActivitySignin) (err error) {
+	sql := ` UPDATE cygx_activity_signin SET  create_time= NOW()   WHERE   open_id = ?  AND activity_id = ? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, item.OpenId, item.ActivityId).Exec()
+	return
+}
+
+// 添加
+func AddCygxActivitySignin(item *CygxActivitySignin) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+// 修改
+func UpdateCygxActivitySignin(item *CygxActivitySignin) (err error) {
+	o := orm.NewOrm()
+	updateParams := make(map[string]interface{})
+	updateParams["UserId"] = item.UserId
+	updateParams["Mobile"] = item.Mobile
+	updateParams["Email"] = item.Email
+	updateParams["CompanyId"] = item.CompanyId
+	updateParams["CompanyName"] = item.CompanyName
+	updateParams["BusinessCard"] = item.BusinessCard
+	updateParams["RealName"] = item.RealName
+	updateParams["CountryCode"] = item.CountryCode
+	ptrStructOrTableName := "cygx_activity_signin"
+	whereParam := map[string]interface{}{"id": item.Id}
+	qs := o.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	return
+}
+
+// 添加日志
+func AddCygxActivitySigninLog(item *CygxActivitySigninLog) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+type CygxActivitySigninReq struct {
+	ActivityId   int    `description:"活动id"`
+	CountryCode  string `description:"手机国家区号"`
+	Mobile       string `description:"手机号"`
+	VCode        string `description:"验证码"`
+	CompanyName  string `description:"公司名称"`
+	BusinessCard string `description:"名片"`
+	RealName     string `description:"用户实际名称"`
+	SigninType   int    `description:"签到方式,1:填写手机号/机构名称;2:上传名片"`
+}

+ 5 - 1
models/activity_signup.go

@@ -516,13 +516,17 @@ type CygxActivitySignupList struct {
 	IsMeeting   int    `description:"是否到会 ,1是, 0否"`
 	Operation   bool   `description:"操作按钮,true,到会,false 未到会"`
 	Channel     int    `description:"报名渠道,0 空降、 1小程序报名"`
+	SellerName  string `description:"所属销售"`
+	Mobile      string `description:"手机号"`
+	Email       string `description:"邮箱"`
+	CompanyId   int    `description:"公司id"`
 }
 
 // 获取用户报名列表
 func GetActivitySignupNomeetingCountList(activityId int) (items []*CygxActivitySignupList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-	s.user_id
+	s.*
 FROM
 	cygx_activity_signup AS s
 	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 

+ 53 - 0
models/activity_signup_break.go

@@ -0,0 +1,53 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySignupBreak 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:"公司名称"`
+	RealName    string    `description:"用户实际名称"`
+	SellerName  string    `description:"所属销售"`
+}
+
+// 添加爽约记录
+func AddCygxActivitySignupBreak(item *CygxActivitySignupBreak) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 批量添加
+func AddCygxActivitySignupBreakList(items []*CygxActivitySignupBreak) (lastId int64, err error) {
+	lenitems := len(items)
+	if lenitems == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(1, items)
+	return
+}
+
+// 删除
+func DeleteCygxActivitySignupBreak(uid, activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_signup_break  WHERE user_id=? AND activity_id =? `
+	_, err = o.Raw(sql, uid, activityId).Exec()
+	return
+}
+
+// 删除
+func DeleteCygxActivitySignupBreakById(activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_signup_break  WHERE  activity_id =? `
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}

+ 81 - 0
models/banner.go

@@ -0,0 +1,81 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type CygxBannerResp struct {
+	BannerId       int            `description:"BannerId等于0新增,大于零修改"`
+	ImgId          int            `description:"cygx_banner_img主键ID"`
+	IndexImg       string         `description:"小程序封面图"`
+	ListType       string         `description:"ABC哪一列"`
+	BannerTypeName string         `description:"添加类型名称"`
+	Title          string         `description:"标题"`
+	Link           string         `description:"链接地址"`
+	Subtitle       string         `description:"副标题"`
+	BannerUrlResp  *BannerUrlResp `description:"跳转地址"`
+}
+
+type CygxBannerIdReq struct {
+	BannerId int `description:"BannerId"`
+}
+
+type GetCygxBannerImgRespDetailResp struct {
+	Detail *CygxBannerResp
+}
+
+// 通过ID获取详情
+func GetCygxBannerDetail(banneId int) (item *CygxBannerResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_banner  WHERE banner_id=? `
+	err = o.Raw(sql, banneId).QueryRow(&item)
+	return
+}
+
+// 获取数量
+func GetCygxBannerCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_banner as art WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+// 列表
+func GetCygxBannerList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxBannerResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_banner as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?  `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+type CygxBannerListResp struct {
+	List []*CygxBannerResp
+}
+
+type CygxBannerImgResp struct {
+	ImgId    int    `description:"图片ID"`
+	IndexImg string `description:"小程序封面图"`
+}
+
+type BannerUrlResp struct {
+	ChartPermissionId int    `description:"行业id"`
+	SourceId          int    `description:"资源ID"`
+	Type              int    `description:"类型:1普通文本,2:文章、3:活动、4:产业、5:关于我们、6:产品内测"`
+	Body              string `description:"内容"`
+	Path              string `description:"小程序路径"`
+}
+
+// 列表
+func GetCygxBannerImgList() (items []*CygxBannerImgResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_banner_img as art WHERE 1= 1 `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 29 - 0
models/banner_history.go

@@ -0,0 +1,29 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxBannerHistory struct {
+	Id               int `orm:"column(id);pk"`
+	BannerId         int `description:"BannerId等于0新增,大于零修改"`
+	UserId           int
+	CreateTime       time.Time
+	Mobile           string    `description:"手机号"`
+	Email            string    `description:"邮箱"`
+	CompanyId        int       `description:"公司id"`
+	CompanyName      string    `description:"公司名称"`
+	ModifyTime       time.Time `description:"修改时间"`
+	RealName         string    `description:"用户实际名称"`
+	SellerName       string    `description:"所属销售"`
+	RegisterPlatform int       `description:"来源 1小程序,2:网页"`
+}
+
+// 添加历史信息
+func AddCygxBannerHistory(item *CygxBannerHistory) (lastId int64, err error) {
+	o := orm.NewOrm()
+	item.ModifyTime = time.Now()
+	lastId, err = o.Insert(item)
+	return
+}

+ 26 - 0
models/chart.go

@@ -318,3 +318,29 @@ func GetChartDetailById(chartId, uid int) (item *CygxChartDetail, err error) {
 	err = o.Raw(sql, uid, chartId).QueryRow(&item)
 	return
 }
+
+// 删除
+func DeleteCygxChart(chartId int) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	sql := `DELETE  FROM cygx_chart   WHERE  chart_id=? `
+	_, err = o.Raw(sql, chartId).Exec()
+
+	if err != nil {
+		return err
+	}
+
+	sql = `DELETE  FROM cygx_chart_all   WHERE  chart_id=? `
+	_, err = o.Raw(sql, chartId).Exec()
+	return
+}

+ 1 - 1
models/company.go

@@ -166,7 +166,7 @@ func GetCompanyPermissionByUserZhengShi(companyId int) (permission string, err e
 			WHERE  a.company_id=?
 			AND c.is_suspend=0
             AND b.cygx_auth=1
-			AND c.status IN('正式') `
+			AND a.status IN('正式') `
 	o := orm.NewOrm()
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return

+ 12 - 0
models/company_product.go

@@ -0,0 +1,12 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+// 获取是否属于权益客户
+func GetCountCompanyProductCompanyId(companyId, productId int) (count int, err error) {
+	sql := `SELECT  COUNT(1) AS count FROM company_product WHERE company_id = ?  AND product_id = ?  `
+	err = orm.NewOrm().Raw(sql, companyId, productId).QueryRow(&count)
+	return
+}

+ 14 - 6
models/cygx_user_record.go

@@ -6,23 +6,31 @@ import (
 )
 
 type CygxUserRecord struct {
-	UserRecordId int       `orm:"column(user_record_id);pk" description:"id"`
-	OpenId       string    `description:"用户openid,最大长度:32"`
-	UnionId      string    `description:"用户unionid,最大长度:64"`
-	CreateTime   time.Time `description:"提交建议时间"`
+	UserRecordId  int       `orm:"column(user_record_id);pk" description:"id"`
+	OpenId        string    `description:"用户openid,最大长度:32"`
+	UnionId       string    `description:"用户unionid,最大长度:64"`
+	Subscribe     int       `description:"是否关注,0:未关注,1:已关注"`
+	SubscribeTime string    `description:"关注/取消关注时间"`
+	CreateTime    time.Time `description:"创建时间"`
 }
 
-//添加优化建议
+// 优化建议
 func AddCygxUserRecord(item *CygxUserRecord) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
 	return
 }
 
-//获取数量
+// 获取数量
 func GetCygxUserRecordCount(openId string) (count int, err error) {
 	o := orm.NewOrm()
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_user_record WHERE open_id=? `
 	err = o.Raw(sqlCount, openId).QueryRow(&count)
 	return
 }
+
+func GetCygxUserRecordSubscribe(unionId string) (item *CygxUserRecord, err error) {
+	sql := ` SELECT * FROM cygx_user_record WHERE union_id=?  AND subscribe = 1  limit 1 `
+	err = orm.NewOrm().Raw(sql, unionId).QueryRow(&item)
+	return
+}

+ 6 - 0
models/db.go

@@ -135,12 +135,18 @@ func init() {
 		new(CygxXzsChooseCategory),
 		new(CygxReportSelectionSubjectHistory),
 		new(CygxTacticsTimeLineHistory),
+		new(CygxActivitySignin),
+		new(CygxActivitySigninLog),
+		new(CygxActivityOfflineMeetingDetail),
 		new(CygxProductInteriorHistory),
 		new(CygxMorningMeetingGather),
 		new(CygxArticleCategoryMapping),
 		new(CygxReportMappingCygx),
 		new(CygxReportMappingGroup),
 		new(CygxAboutUsVideoHistory),
+		new(CygxActivitySignupBreak),
+		new(CygxBannerHistory),
+		new(CygxReportHistoryRecordLog),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 18 - 0
models/ik_word_map.go

@@ -0,0 +1,18 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type CygxIkWordMap struct {
+	KeyWord    string `description:"手机号"`
+	KeyWordMap string `description:"地区编码 国内默认为空"`
+}
+
+// 获取详情
+func GetCygxCygxIkWordMapDetail(keyWord string) (item *CygxIkWordMap, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_ik_word_map  WHERE key_word=?  `
+	err = o.Raw(sql, keyWord).QueryRow(&item)
+	return
+}

+ 42 - 13
models/report_history_record.go

@@ -6,24 +6,53 @@ import (
 )
 
 type CygxReportHistoryRecord struct {
-	Id          int `orm:"column(id);pk"`
-	ArticleId   int
-	UserId      int
-	CreateTime  time.Time
-	Mobile      string    `description:"手机号"`
-	Email       string    `description:"邮箱"`
-	CompanyId   int       `description:"公司id"`
-	CompanyName string    `description:"公司名称"`
-	ModifyTime  time.Time `description:"修改时间"`
-	ReportType  string    `description:"报告类型,bgjx:报告精选、bzyjhz:本周研究汇总、szjyhz:上周纪要汇总"`
-	RealName    string    `description:"用户实际名称"`
-	SellerName  string    `description:"所属销售"`
+	Id               int `orm:"column(id);pk"`
+	ArticleId        int
+	UserId           int
+	CreateTime       time.Time
+	Mobile           string    `description:"手机号"`
+	Email            string    `description:"邮箱"`
+	CompanyId        int       `description:"公司id"`
+	CompanyName      string    `description:"公司名称"`
+	ModifyTime       time.Time `description:"修改时间"`
+	ReportType       string    `description:"报告类型,bgjx:报告精选、bzyjhz:本周研究汇总、szjyhz:上周纪要汇总"`
+	RealName         string    `description:"用户实际名称"`
+	SellerName       string    `description:"所属销售"`
+	StopTime         int       `description:"停留时间"`
+	OutType          int       `description:"退出方式,1正常退出,2强制关闭"`
+	RegisterPlatform int       `description:"来源 1小程序,2:网页"`
 }
 
-//添加历史信息
+type CygxReportHistoryRecordLog struct {
+	Id               int `orm:"column(id);pk"`
+	ArticleId        int
+	UserId           int
+	CreateTime       time.Time
+	Mobile           string    `description:"手机号"`
+	Email            string    `description:"邮箱"`
+	CompanyId        int       `description:"公司id"`
+	CompanyName      string    `description:"公司名称"`
+	ModifyTime       time.Time `description:"修改时间"`
+	ReportType       string    `description:"报告类型,bgjx:报告精选、bzyjhz:本周研究汇总、szjyhz:上周纪要汇总"`
+	RealName         string    `description:"用户实际名称"`
+	SellerName       string    `description:"所属销售"`
+	StopTime         int       `description:"停留时间"`
+	OutType          int       `description:"退出方式,1正常退出,2强制关闭"`
+	RegisterPlatform int       `description:"来源 1小程序,2:网页"`
+}
+
+// 添加历史信息
 func AddCygxReportHistoryRecord(item *CygxReportHistoryRecord) (lastId int64, err error) {
 	o := orm.NewOrm()
 	item.ModifyTime = time.Now()
 	lastId, err = o.Insert(item)
 	return
 }
+
+// 添加历史信息
+func AddCygxReportHistoryRecordLog(item *CygxReportHistoryRecordLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	item.ModifyTime = time.Now()
+	lastId, err = o.Insert(item)
+	return
+}

+ 7 - 0
models/report_selection.go

@@ -188,3 +188,10 @@ func GetIndustrialByIds(industrialManagementIds string) (items []*IndustriaRepor
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+type AddReportSelectionStopTimeRep struct {
+	ArticleId int `description:"文章ID"`
+	StopTime  int `description:"停留时间"`
+	OutType   int `description:"退出方式,1正常退出,2强制关闭"`
+	Source    int `description:"来源,1:报告精选、2:本周研究汇总、3:上周纪要汇总"`
+}

+ 31 - 24
models/wx_user.go

@@ -52,7 +52,7 @@ type WxUser struct {
 	TripartiteCode      string    `description:"第三方给过来的用户编码,判断用户是否存在"`
 }
 
-//添加用户信息
+// 添加用户信息
 func AddWxUser(item *WxUser) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
@@ -94,7 +94,7 @@ func GetWxUserItemByUnionid(unionid string) (item *WxUserItem, err error) {
 	return
 }
 
-//根据用户ID获取相关信息
+// 根据用户ID获取相关信息
 func GetWxUserItemByUserId(userId int) (item *WxUserItem, err error) {
 	sql := `SELECT a.*,b.company_name FROM wx_user AS a
 			LEFT JOIN company AS b on a.company_id=b.company_id
@@ -129,7 +129,7 @@ type WxGetUserInfoReq struct {
 	Iv            string `description:"iv"`
 }
 
-//修改用户会话key
+// 修改用户会话key
 func ModifyWxUserSessionKey(sessionKey string, userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE wx_user SET session_key=? WHERE user_id=? `
@@ -137,7 +137,7 @@ func ModifyWxUserSessionKey(sessionKey string, userId int) (err error) {
 	return
 }
 
-//添加用户信息
+// 添加用户信息
 func ModifyWxUserInfo(unionId, nickName, province, city, country, avatar string, gender, userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE wx_user SET union_id=?,unionid=?,nick_name=?,sex=?,province=?,city=?,country=?,headimgurl=? WHERE user_id=? `
@@ -145,7 +145,7 @@ func ModifyWxUserInfo(unionId, nickName, province, city, country, avatar string,
 	return
 }
 
-//修改用户会话key
+// 修改用户会话key
 func DeleteWxUserByUserId(userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `DELETE FROM wx_user WHERE user_id=? `
@@ -188,7 +188,7 @@ type WxGetPhoneNumberResp struct {
 	CountryCode     string `description:"区号"`
 }
 
-//根据用户手机号获取相关信息
+// 根据用户手机号获取相关信息
 func GetWxUserItemByMobile(mobile string) (item *WxUserItem, err error) {
 	sql := `SELECT a.*,b.company_name FROM wx_user AS a
 			LEFT JOIN company AS b on a.company_id=b.company_id
@@ -197,7 +197,7 @@ func GetWxUserItemByMobile(mobile string) (item *WxUserItem, err error) {
 	return
 }
 
-//根据用户手机号获取相关信息
+// 根据用户手机号获取相关信息
 func GetWxUserAouthByMobile(mobile string) (item *WxUserItem, err error) {
 	sql := `SELECT
 			a.*,
@@ -229,7 +229,7 @@ func ModifyReportLastViewTime(uid int) (err error) {
 	return
 }
 
-//变更联系人是否已注册状态
+// 变更联系人是否已注册状态
 func ModifyWxUserRegisterStatus(userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE wx_user SET is_register=?,source=3,register_time=NOW() WHERE user_id = ? `
@@ -237,7 +237,7 @@ func ModifyWxUserRegisterStatus(userId int) (err error) {
 	return
 }
 
-//修改用户是否绑定外呼手机号弹窗
+// 修改用户是否绑定外呼手机号弹窗
 func ModifyWxUserIsMsgOutboundMobile(userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE wx_user SET is_msg_outbound_mobile=1 WHERE user_id=? `
@@ -245,7 +245,7 @@ func ModifyWxUserIsMsgOutboundMobile(userId int) (err error) {
 	return
 }
 
-//列表
+// 列表
 func GetUserListAll() (items []*WxUserItem, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM wx_user  WHERE mobile <>'' AND outbound_mobile = ''`
@@ -253,7 +253,7 @@ func GetUserListAll() (items []*WxUserItem, err error) {
 	return
 }
 
-//修改手机号区号  8位号码+852,9位号码+886,10位号码+1,11位及以上号码+86
+// 修改手机号区号  8位号码+852,9位号码+886,10位号码+1,11位及以上号码+86
 func UPdateUserCountryCode(item *WxUserItem) (err error) {
 	o := orm.NewOrm()
 	if item.CountryCode == "" && len(item.Mobile) >= 11 {
@@ -276,28 +276,28 @@ func UPdateUserCountryCode(item *WxUserItem) (err error) {
 	return
 }
 
-//判断公司下用户名称是否存在
+// 判断公司下用户名称是否存在
 func GetUserCountByName(companyId int, name string) (count int, err error) {
 	sql := `SELECT  COUNT(1) AS count FROM wx_user WHERE company_id = ? AND real_name = ?`
 	err = orm.NewOrm().Raw(sql, companyId, name).QueryRow(&count)
 	return
 }
 
-//判断这个用户是否被设置消息提醒
+// 判断这个用户是否被设置消息提醒
 func GetUserRemind(uid int) (count int, err error) {
 	sql := `SELECT  COUNT(1) AS count FROM cygx_user_remind WHERE user_id = ? `
 	err = orm.NewOrm().Raw(sql, uid).QueryRow(&count)
 	return
 }
 
-//判断公司下用户名称是否存在
+// 判断公司下用户名称是否存在
 func GetUserCountByThirdName(companyId int, name string) (count int, err error) {
 	sql := `SELECT  COUNT(1) AS count FROM wx_user WHERE company_id = ? AND tripartite_code = ?`
 	err = orm.NewOrm().Raw(sql, companyId, name).QueryRow(&count)
 	return
 }
 
-//获取公司下一共有多少用户
+// 获取公司下一共有多少用户
 func GetUserCountByCompanyId(companyId int) (count int, err error) {
 	sql := `SELECT  COUNT(1) AS count FROM wx_user WHERE company_id = ? `
 	err = orm.NewOrm().Raw(sql, companyId).QueryRow(&count)
@@ -311,7 +311,7 @@ func UpdateUserMobile(uid int, mobile string) (err error) {
 	return
 }
 
-//获取公司下用户详情详情详情
+// 获取公司下用户详情详情详情
 func GetUserByName(companyId int, name string) (item *WxUser, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *  FROM wx_user WHERE company_id = ? AND real_name = ? `
@@ -319,7 +319,7 @@ func GetUserByName(companyId int, name string) (item *WxUser, err error) {
 	return
 }
 
-//获取公司下用户详情详情详情
+// 获取公司下用户详情详情详情
 func GetUserByThirdName(companyId int, name string) (item *WxUser, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *  FROM wx_user WHERE company_id = ? AND tripartite_code = ? `
@@ -327,7 +327,7 @@ func GetUserByThirdName(companyId int, name string) (item *WxUser, err error) {
 	return
 }
 
-//获取所有注册的权益用户
+// 获取所有注册的权益用户
 func GetUserRegisterList() (items []*WxUser, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -370,7 +370,7 @@ type UserLabel struct {
 	Label string `description:"标签 多个用  , 隔开"`
 }
 
-//对获取关注的产业
+// 对获取关注的产业
 func GetCygxCompanyUserListSplit(userIds string) (labels string, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -388,7 +388,7 @@ func GetCygxCompanyUserListSplit(userIds string) (labels string, err error) {
 	return
 }
 
-//阅读记录
+// 阅读记录
 type ArticlePvCountResp struct {
 	ArticleId int `description:"文章ID"`
 	Pv        int `description:"Pv"`
@@ -462,7 +462,7 @@ func GetCygxArticleCollectId(uid int, dateTime string) (articleIds string, err e
 	return
 }
 
-//活动标签记录
+// 活动标签记录
 type ActivityLabelCountResp struct {
 	Label string `description:"标签"`
 	Pv    int    `description:"Pv"`
@@ -520,7 +520,7 @@ type CygxUserInteractionNumDetail struct {
 	TryStage            int    `description:"试用客户子标签:0全部、1未分类、2 推进、3 跟踪、4 预备"`
 }
 
-//获取用户的互动量
+// 获取用户的互动量
 func GetCygxCompanyUserUserInteraction(userIds string) (items []*CygxUserInteractionNumDetail, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -532,9 +532,9 @@ func GetCygxCompanyUserUserInteraction(userIds string) (items []*CygxUserInterac
 			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.user_id = u.user_id  ) AS industry_fllow_num,
 			( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.user_id = u.user_id   ) AS department_follow_num,
 			( SELECT COUNT( 1 ) FROM cygx_search_key_word_log AS h WHERE h.user_id = u.user_id  ) AS key_word_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
+			( SELECT COUNT( 1 ) FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
 					 AND t.activity_type = 1  AND h.do_fail_type = 0 ) AS on_line_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
+			( SELECT COUNT( 1 ) FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
 					  AND t.activity_type = 0 AND h.do_fail_type = 0 ) AS office_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_special_trip AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND h.is_cancel = 0 ) AS trip_num,
 						( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h  INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS roadshow_video_num,
@@ -583,3 +583,10 @@ func GetWxUserByMobiles(mobiles []string) (items []*WxUser, err error) {
 	_, err = o.Raw(sql, mobiles).QueryRows(&items)
 	return
 }
+
+func UserSubscribe(subscribeTime string, userId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE wx_user SET cygx_subscribe=1,cygx_subscribe_time=? WHERE user_id = ? `
+	_, err = o.Raw(sql, subscribeTime, userId).Exec()
+	return
+}

+ 45 - 0
routers/commentsRouter.go

@@ -232,6 +232,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivitySignCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivitySignCoAntroller"],
+        beego.ControllerComments{
+            Method: "ByHand",
+            Router: `/byHand`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivitySignCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivitySignCoAntroller"],
+        beego.ControllerComments{
+            Method: "Detail",
+            Router: `/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivitySpecialCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivitySpecialCoAntroller"],
         beego.ControllerComments{
             Method: "SpecialTripAdd",
@@ -367,6 +385,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BannerController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BannerController"],
+        beego.ControllerComments{
+            Method: "History",
+            Router: `/add/history`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BannerController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BannerController"],
+        beego.ControllerComments{
+            Method: "List",
+            Router: `/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseChartController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseChartController"],
         beego.ControllerComments{
             Method: "Patg",
@@ -1033,6 +1069,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"],
+        beego.ControllerComments{
+            Method: "AddStopTime",
+            Router: `/addStopTime`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"],
         beego.ControllerComments{
             Method: "ClickHistory",

+ 10 - 0
routers/router.go

@@ -139,6 +139,11 @@ func init() {
 				&controllers.ReportSelectionController{},
 			),
 		),
+		web.NSNamespace("/activity_signin",
+			web.NSInclude(
+				&controllers.ActivitySignCoAntroller{},
+			),
+		),
 		web.NSNamespace("/product_interior",
 			web.NSInclude(
 				&controllers.ProductInteriorController{},
@@ -149,6 +154,11 @@ func init() {
 				&controllers.MorningMeetingController{},
 			),
 		),
+		web.NSNamespace("/banner",
+			web.NSInclude(
+				&controllers.BannerController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 224 - 40
services/activity.go

@@ -402,16 +402,132 @@ func GetUserType(companyId int) (userType int, permissionStrnew string, err erro
 	return
 }
 
+func GetUserTypeZhengShi(companyId int) (userType int, permissionStrnew, permissionStrZhengShinew string, err error) {
+	var permissionStr, permissionZhengShiStr string
+	if companyId <= 1 {
+		userType = 0
+	} else {
+		total, errs := models.GetCountCompanyDetailByIdGroup(companyId)
+		if errs != nil {
+			err = errs
+			return
+		}
+		if total == 0 {
+			userType = 0
+		} else {
+			companyDetail, errs := models.GetCompanyDetailByIdGroup(companyId)
+			if errs != nil {
+				err = errs
+				return
+			}
+			permissionStr, errs = models.GetCompanyPermission(companyId)
+			if errs != nil {
+				err = errs
+				return
+			}
+			permissionStrnew = permissionStr
+			//大套餐客户,数据库添加标识,
+			companyUserTypeDetail, errs := models.GetCygxCompanyUserType(companyId)
+			if errs != nil && errs.Error() != utils.ErrNoRow() {
+				err = errs
+				return
+			}
+			if companyUserTypeDetail != nil {
+				if companyUserTypeDetail.CustomerTypeId != 0 {
+					userType = companyUserTypeDetail.CustomerTypeId
+					return
+				}
+			}
+			permissionZhengShiStr, errs = models.GetCompanyPermissionByUserZhengShi(companyId)
+			if errs != nil {
+				err = errs
+				return
+			}
+			//1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户、 10: 30W套餐客户
+			//大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
+			if companyDetail.Status == "永续" {
+				userType = 1
+			} else if companyDetail.Status == "试用" {
+				userType = 5
+			} else if companyDetail.Status == "冻结" {
+				userType = 6
+			} else if companyDetail.Status == "流失" {
+				userType = 7
+			}
+			//大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
+			if userType == 0 && companyDetail.Status == "正式" {
+				var permissionZhegnshiNum int
+				if strings.Count(permissionZhengShiStr, "医药") == 2 {
+					permissionZhegnshiNum++
+				}
+				if strings.Count(permissionZhengShiStr, "消费") == 2 {
+					permissionZhegnshiNum++
+				}
+				if strings.Count(permissionZhengShiStr, "科技") == 2 {
+					permissionZhegnshiNum++
+				}
+				if strings.Count(permissionZhengShiStr, "智造") == 2 {
+					permissionZhegnshiNum++
+				}
+				if strings.Count(permissionZhengShiStr, "策略") == 1 {
+					permissionZhegnshiNum++
+				}
+				if strings.Count(permissionZhengShiStr, "路演服务") == 1 {
+					permissionZhegnshiNum++
+				}
+				//if permissionZhegnshiNum == 6 {
+				//	userType = 2
+				//} else
+				//大套餐客户,数据库添加标识,条件大于等于四的都是 30W套餐客户
+				if permissionZhegnshiNum >= 4 {
+					userType = 10
+				} else {
+					userType = 3
+				}
+			}
+		}
+	}
+	permissionStrnew = permissionStr
+	permissionStrZhengShinew = permissionZhengShiStr
+	return
+}
+
 // GetSpecialDetailUserPower 处理用户查看详情的权限
 func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.ActivityDetail) (havePower bool, err error) {
 	var companyDetailStatus string
 	var userTypeStr string
 	//如果是弘则的用户或者宏观的权限不做校验
-	if user.CompanyId == utils.HZ_COMPANY_ID || activityInfo.ChartPermissionName == utils.HONG_GUAN_NAME {
+	if GetBelongingRai(user.Mobile) || activityInfo.ChartPermissionName == utils.HONG_GUAN_NAME {
 		havePower = true
 		return
 	}
-	userType, permissionStr, e := GetUserType(user.CompanyId)
+	//处理决策人可见权限
+	if user.IsMaker == 0 && activityInfo.IsMakerShow == 1 {
+		havePower = false
+		return
+	}
+	// 处理本组可见权限
+	if activityInfo.VisibleRange == 1 {
+		adminIds, e := models.GetSelleridWhichGroup(user.CompanyId, 2)
+		if e != nil {
+			err = errors.New("GetSelleridWhichGroup, Err: " + e.Error())
+			return
+		}
+		haveVisibleRange := false
+		adminIdSlice := strings.Split(adminIds, ",")
+
+		for _, v := range adminIdSlice {
+			if v == strconv.Itoa(activityInfo.AdminId) {
+				haveVisibleRange = true
+			}
+		}
+		if !haveVisibleRange {
+			havePower = false
+			return
+		}
+	}
+
+	userType, permissionStr, permissionStrZhengShi, e := GetUserTypeZhengShi(user.CompanyId)
 	if e != nil {
 		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
 		return
@@ -419,6 +535,11 @@ func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.Ac
 	if permissionStr == "" {
 		return
 	}
+	//如果是易董的活动且属于研选类型,只要开通任何权限就可以查看详情
+	if activityInfo.YidongActivityId != "" && permissionStr != "" && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
+		havePower = true
+		return
+	}
 	if activityInfo.LimitPeopleNum > 0 {
 		mapUserType, e := GetActivityCcustomerTypeList()
 		if e != nil {
@@ -433,6 +554,11 @@ func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.Ac
 				//return
 			}
 		}
+	} else {
+		if strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+			havePower = true
+			return
+		}
 	}
 	//判断管理规模是否满足
 	companyProduct, e := models.GetCompanyProductDetail(user.CompanyId, 2)
@@ -477,9 +603,25 @@ func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.Ac
 	} else if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3 || activityInfo.ActivityTypeId == 4 || activityInfo.ActivityTypeId == 5) && strings.Contains(permissionStr, "专家") {
 		havePower = true
 	}
-	if (strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略") && strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
-		havePower = true
-		return
+
+	fmt.Println(permissionStrZhengShi)
+	//if (strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略") && strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+	//	havePower = true
+	//	return
+	//}
+	if strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略" {
+
+		if strings.Contains(activityInfo.CustomerTypeIds, "5") {
+			if strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+				havePower = true
+				return
+			}
+		} else {
+			if strings.Contains(permissionStrZhengShi, activityInfo.ChartPermissionName) {
+				havePower = true
+				return
+			}
+		}
 	}
 	if activityInfo.ActivityTypeId == 2 || activityInfo.ActivityTypeId == 6 || activityInfo.ActivityTypeId == 7 {
 		if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(主观)") {
@@ -499,11 +641,6 @@ func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.Ac
 		return
 	}
 
-	//如果是易董的活动且属于研选类型,只要开通任何权限就可以查看详情
-	if activityInfo.YidongActivityId != "" && permissionStr != "" && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
-		havePower = true
-	}
-
 	permissionShengji, errs := models.GetCompanyPermissionByUserTrip(user.CompanyId)
 	if errs != nil {
 		err = errs
@@ -663,7 +800,7 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	if err != nil {
 		return
 	}
-	userType, permissionStr, err := GetUserType(user.CompanyId)
+	userType, permissionStr, permissionStrZhengShi, err := GetUserTypeZhengShi(user.CompanyId)
 	if err != nil {
 		return
 	}
@@ -689,6 +826,23 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	permissionNameStr = strings.Replace(permissionNameStr, "(主观)", "", -1)
 	permissionNameStr = strings.Replace(permissionNameStr, "(客观)", "", -1)
 	permissionNameStr = strings.TrimRight(permissionNameStr, ",")
+
+	slicePerZhengShi := strings.Split(permissionStrZhengShi, ",")
+
+	var permissionNameStrZhengShi string
+	for _, v := range slicePerZhengShi {
+		if userType == 1 {
+			//研选权限处理
+			if !strings.Contains(v, utils.CHART_PERMISSION_NAME_YANXUAN) {
+				permissionNameStrZhengShi += "'" + v + "',"
+			}
+		} else {
+			permissionNameStrZhengShi += "'" + v + "',"
+		}
+	}
+	permissionNameStrZhengShi = strings.Replace(permissionNameStrZhengShi, "(主观)", "", -1)
+	permissionNameStrZhengShi = strings.Replace(permissionNameStrZhengShi, "(客观)", "", -1)
+	permissionNameStrZhengShi = strings.TrimRight(permissionNameStrZhengShi, ",")
 	mapUserType, e := GetActivityCcustomerTypeList()
 	if e != nil {
 		err = e
@@ -883,8 +1037,9 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	}
 
 	if adminIds != "" {
+
 		if userType == 3 {
-			conditionAdmin += `  AND art.chart_permission_name  IN (` + permissionNameStr + `) `
+			conditionAdmin += `  AND art.chart_permission_name  IN (` + permissionNameStrZhengShi + `) `
 		}
 		conditionOr += ` OR (  art.customer_type_ids LIKE '%` + userTypeStr + `%' ` + ` AND  art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) `
 		if companyProduct != nil {
@@ -921,7 +1076,7 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 		}
 	}
 	if userType == 3 {
-		condition += `  AND art.chart_permission_name  IN (` + permissionNameStr + `) `
+		condition += `  AND art.chart_permission_name  IN (` + permissionNameStrZhengShi + `) `
 	}
 	conditionActivity = condition + permissionSqlStr + sqlExport + conditionOr
 	return
@@ -984,7 +1139,8 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 				openIpItem, _ := models.GetUserRecordByMobile(4, utils.ActSendMsgMobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
 				}
 			}
 			//给所属销售推送消息
@@ -992,7 +1148,8 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
 				}
 			}
 		}
@@ -1074,7 +1231,8 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sendMobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
 				}
 			}
 			//给销售推送模板消息
@@ -1082,7 +1240,8 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
 				}
 			}
 		}
@@ -1408,10 +1567,15 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 
 // 判断是否加入黑名单
 func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("判断是否加入黑名单记录失败"+err.Error(), 2)
+		}
+	}()
 	total, err := models.GetActivitySignupNomeetingCount(activityId)
 	if err != nil {
-		utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
-		fmt.Println(" Err:", err.Error())
+		err = errors.New("GetActivitySignupNomeetingCount" + err.Error())
 		return err
 	}
 	if total == 0 {
@@ -1422,21 +1586,18 @@ func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
 		for _, v := range mobileList {
 			totalRestrict, err := models.GetRestrictSignupCountByUid(v.UserId)
 			if err != nil {
-				fmt.Println(" Err:", err.Error())
-				utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
+				err = errors.New("GetRestrictSignupCountByUid" + err.Error())
 				return err
 			}
 			totalNomeet, err := models.GetActivitySignupNomeetingCountByUid(v.UserId)
 			if err != nil {
-				fmt.Println(" Err:", err.Error())
-				utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
+				err = errors.New("GetActivitySignupNomeetingCountByUid" + err.Error())
 				return err
 			}
 			if totalRestrict > 0 && totalNomeet < 3 {
 				err = models.DeleteCygxActivityRestrictSignup(v.UserId)
 				if err != nil {
-					fmt.Println(" Err:", err.Error())
-					utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
+					err = errors.New("DeleteCygxActivityRestrictSignup" + err.Error())
 					return err
 				}
 			}
@@ -1445,29 +1606,27 @@ func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
 
 	list, err := models.GetActivitySignupNomeetingCountList(activityId)
 	if err != nil {
-		utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
-		fmt.Println(" 用户限制报名失败 Err:", err.Error())
+		err = errors.New("GetActivitySignupNomeetingCountList" + err.Error())
 		return err
 	}
+	var items []*models.CygxActivitySignupBreak
 	for _, v := range list {
 		totalRestrict, err := models.GetRestrictSignupCountByUid(v.UserId)
 		if err != nil {
-			fmt.Println(" Err:", err.Error())
-			utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
+			err = errors.New("GetRestrictSignupCountByUid" + err.Error())
 			return err
 		}
 		totalNomeet, err := models.GetActivitySignupNomeetingCountByUid(v.UserId)
 		if err != nil {
-			fmt.Println(" Err:", err.Error())
-			utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
+			err = errors.New("GetActivitySignupNomeetingCountByUid" + err.Error())
 			return err
 		}
 		if totalNomeet >= 3 {
 			if totalRestrict == 0 {
 				infoUser, err := models.GetUserAndCompanyNameList(v.UserId)
+				//if err != nil && err.Error() != utils.ErrNoRow() {
 				if err != nil {
-					fmt.Println(" Err:", err.Error())
-					utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
+					err = errors.New("GetUserAndCompanyNameList" + err.Error())
 					return err
 				}
 				if infoUser != nil {
@@ -1481,13 +1640,36 @@ func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
 					item.IsRestrict = 1
 					err = models.AddCygxActivityRestrictSignup(item)
 					if err != nil {
-						fmt.Println(" Err:", err.Error())
-						utils.FileLog.Info("用户限制报名失败,Err:%s,%s", err.Error())
+						err = errors.New("AddCygxActivityRestrictSignup" + err.Error())
 						return err
 					}
 				}
 			}
 		}
+
+		//处理未到会
+		item := new(models.CygxActivitySignupBreak)
+		item.UserId = v.UserId
+		item.ActivityId = v.ActivityId
+		item.CreateTime = time.Now()
+		item.Mobile = v.Mobile
+		item.Email = v.Email
+		item.CompanyId = v.CompanyId
+		item.CompanyName = v.CompanyName
+		item.RealName = v.RealName
+		item.SellerName = v.SellerName
+		items = append(items, item)
+	}
+
+	err = models.DeleteCygxActivitySignupBreakById(activityId)
+	if err != nil {
+		err = errors.New("DeleteCygxActivitySignupBreakById" + err.Error())
+		return
+	}
+	_, err = models.AddCygxActivitySignupBreakList(items)
+	if err != nil {
+		err = errors.New("AddCygxActivitySignupBreakList, Err: " + err.Error())
+		return
 	}
 	return
 }
@@ -1554,8 +1736,8 @@ func ArticleUserRemind(user *models.WxUserItem, articleDetail *models.ArticleDet
 		var keyword1 string
 		var keyword2 string
 
-		keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:", sourceMsg)
-		keyword2 = articleDetail.Title
+		keyword1 = articleDetail.Title
+		keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
 		SendWxMsgWithArticleUserRemind(keyword1, keyword2, openIdList, articleDetail.ArticleId)
 	}
 	return
@@ -1600,8 +1782,8 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 		}
 		var keyword1 string
 		var keyword2 string
-		keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:", sourceMsg)
-		keyword2 = activityDetail.ActivityName
+		keyword1 = activityDetail.ActivityName
+		keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
 		SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
 	}
 	return
@@ -1699,7 +1881,7 @@ func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.Acti
 		return
 	}
 
-	articleDetail.Expert, _ = GetReportContentTextSub(item.Expert)
+	//articleDetail.Expert, _ = GetReportContentTextSub(item.Expert)
 
 	//专家电话会 1
 	if articleDetail.ActivityTypeId == 1 && articleDetail.IsLimitPeople == 0 && (articleDetail.ActiveState == "1" || articleDetail.ActiveState == "2") {
@@ -1979,6 +2161,7 @@ func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (
 				return
 			}
 			keyword1 = activityInfo.VideoName
+			keyword2 = fmt.Sprint("互动:播放视频,", user.RealName, "--", user.CompanyName)
 			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放视频")
 		} else {
 			activityInfo, e := models.GetCygxActivityVoiceByActivityId(activityId)
@@ -1990,6 +2173,7 @@ func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (
 				return
 			}
 			keyword1 = activityInfo.VoiceName
+			keyword2 = fmt.Sprint("互动:播放音频,", user.RealName, "--", user.CompanyName)
 			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放音频")
 		}
 

+ 181 - 0
services/activity_signin.go

@@ -0,0 +1,181 @@
+package services
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"time"
+)
+
+// AddCygxActivitySigninLog 扫码签到日志记录
+func AddCygxActivitySigninLog(item *models.CygxActivitySignin) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("扫码签到日志记录,失败,活动ID:"+strconv.Itoa(item.ActivityId)+err.Error(), 2)
+		}
+	}()
+	//添加日志记录
+	itemLog := new(models.CygxActivitySigninLog)
+	itemLog.ActivityId = item.ActivityId
+	itemLog.UserId = item.UserId
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.RealName = item.RealName
+	itemLog.CompanyName = item.CompanyName
+	itemLog.IsSignup = item.IsSignup
+	itemLog.BusinessCard = item.BusinessCard
+	itemLog.CountryCode = item.CountryCode
+	itemLog.OpenId = item.OpenId
+	itemLog.CreateTime = time.Now()
+	err = models.AddCygxActivitySigninLog(itemLog)
+	if err != nil {
+		return
+	}
+
+	err = models.UpdatedateCygxActivitySignin(item)
+	return
+}
+
+// AddCygxActivityOfflineMeetingDetail 扫码签到日志记录
+func AddCygxActivityOfflineMeetingDetail(activityid, userId int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("扫码签到日志记录,失败,活动ID:"+strconv.Itoa(activityid)+err.Error(), 2)
+		}
+	}()
+
+	var condition string
+	var pars []interface{}
+
+	condition = `  AND activity_id = ?`
+	pars = append(pars, activityid)
+	listOfflineMeeting, err := models.GetOfflineMeetingList(condition, pars)
+	if err != nil {
+		err = errors.New("GetOfflineMeetingList, Err: " + err.Error())
+		return
+	}
+	mapOfflineMeeting := make(map[int]bool)
+	for _, v := range listOfflineMeeting {
+		mapOfflineMeeting[v.UserId] = true
+	}
+	pars = make([]interface{}, 0)
+	condition = ` AND do_fail_type = 0 AND activity_id  = ?`
+	pars = append(pars, activityid)
+	listSignup, e := models.GetActivitySignupList(condition, pars)
+	if e != nil {
+		err = errors.New("GetResourceDataList, Err: " + e.Error())
+		return
+	}
+
+	var items []*models.CygxActivityOfflineMeetingDetail
+	for _, v := range listSignup {
+		if !mapOfflineMeeting[v.UserId] {
+			item := new(models.CygxActivityOfflineMeetingDetail)
+			item.UserId = v.UserId
+			item.ActivityId = v.ActivityId
+			item.CreateTime = v.CreateTime
+			item.Mobile = v.Mobile
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			if userId == v.UserId {
+				item.IsMeeting = 1
+				item.SigninTime = time.Now().Format(utils.FormatDateTime)
+			}
+			items = append(items, item)
+		}
+	}
+
+	//添加线下到会信息记录
+	_, err = models.AddCygxActivityOfflineMeetingDetailList(items)
+	if err != nil {
+		err = errors.New("AddCygxActivityOfflineMeetingDetailList, Err: " + err.Error())
+		return
+	}
+
+	//修改活动是否提交到会状态
+	err = models.UpdateCygxActivitySubmitMeetingByActivityId(activityid)
+	if err != nil {
+		err = errors.New("UpdateCygxActivitySubmitMeetingByActivityId, Err: " + err.Error())
+		return
+	}
+
+	//修改签到时间
+	err = models.UpdateCygxActivityOfflineMeetingDetailSigninTime(activityid, userId)
+	if err != nil {
+		err = errors.New("UpdateCygxActivityOfflineMeetingDetailSigninTime, Err: " + err.Error())
+		return
+	}
+	return
+}
+
+// CygxActivityRestrictSignupByTask 定时任务处理未到会人员的爽约
+func CygxActivityRestrictSignupByTask(cont context.Context) (err error) {
+	//func CygxActivityRestrictSignupByTask() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("判断是否加入黑名单记录失败"+err.Error(), 2)
+		}
+	}()
+	var pars []interface{}
+	var condition string
+	startDate := time.Now().Add(-time.Minute * 120).Format(utils.FormatDateTime)
+	endDate := time.Now().Add(-time.Minute * 105).Format(utils.FormatDateTime)
+	condition = " AND  activity_type_id IN (5,6)  AND signin_img != ''  AND  publish_status = 1  AND activity_time  >= ?  AND  activity_time  <= ? "
+	pars = append(pars, startDate, endDate)
+	activityList, err := models.GetActivityListByCondition(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if len(activityList) == 0 {
+		return
+	}
+	for _, v := range activityList {
+		go AddCygxActivityRestrictSignupByAdmin(v.ActivityId) // 处理爽约限制
+	}
+	for _, v := range activityList {
+		err = models.AddCygxActivityMeetDetailLogOffline(v.ActivityId)
+		if err != nil {
+			return
+		}
+		//修改活动是否提交到会状态
+		err = models.UpdateCygxActivitySubmitMeetingByActivityId(v.ActivityId)
+		if err != nil {
+			err = errors.New("UpdateCygxActivitySubmitMeetingByActivityId, Err: " + err.Error())
+			return
+		}
+		//把报名信息写入签到到会表
+		AddCygxActivityOfflineMeetingDetail(v.ActivityId, 0)
+	}
+	return
+}
+
+func CygxActivityRestrictSignupByuid(uid, activityId int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("判断是否加入黑名单记录失败"+err.Error(), 2)
+		}
+	}()
+
+	err = models.DeleteCygxActivitySignupBreak(uid, activityId)
+	if err != nil {
+		err = errors.New("DeleteCygxActivitySignupBreak" + err.Error())
+		return err
+	}
+	totalNomeet, err := models.GetActivitySignupNomeetingCountByUid(uid)
+	if err != nil {
+		err = errors.New("GetActivitySignupNomeetingCountByUid" + err.Error())
+		return err
+	}
+	if totalNomeet < 3 {
+		err = models.DeleteCygxActivityRestrictSignup(uid)
+	}
+	return
+}

+ 11 - 11
services/activity_signup.go

@@ -58,17 +58,17 @@ func CheckActivitySignUpLimit(user *models.WxUserItem, activityInfo *models.Acti
 			return
 		}
 	}
-	totalRestrict, e := models.GetUserRestrictCount(user.Mobile)
-	if e != nil {
-		err = errors.New("GetUserRestrictCount, Err: " + e.Error())
-		return
-	}
-	if totalRestrict >= 1 {
-		signupStatus = "BreakPromise"
-		popupMsg = "由于爽约次数过多,您暂时被限制报名资格,请联系对口销售"
-		failType = 3
-		return
-	}
+	//totalRestrict, e := models.GetUserRestrictCount(user.Mobile)
+	//if e != nil {
+	//	err = errors.New("GetUserRestrictCount, Err: " + e.Error())
+	//	return
+	//}
+	//if totalRestrict >= 1 {
+	//	signupStatus = "BreakPromise"
+	//	popupMsg = "由于爽约次数过多,您暂时被限制报名资格,请联系对口销售"
+	//	failType = 3
+	//	return
+	//}
 	return
 
 }

+ 4 - 1
services/activity_special.go

@@ -634,7 +634,7 @@ func GetActivitySpecialList(user *models.WxUserItem, currentIndex, pageSize int,
 		pageSizePrepare = pageSize - len(listConfirm)
 	}
 	listPrepare, totalPrepare, e := GetActivitySpecialPrepareList(user, startSizePrepare, pageSizePrepare, keywords)
-	if e != nil {
+	if e != nil && e.Error() != utils.ErrNoRow() {
 		err = errors.New("GetActivityLabelSpecialConfirmList, Err: " + e.Error())
 		return
 	}
@@ -645,6 +645,9 @@ func GetActivitySpecialList(user *models.WxUserItem, currentIndex, pageSize int,
 		if startSizePrepare == 0 {
 			listPrepare[0].Explain = utils.ACtIVITY_SPECIAL_EXPLAIN
 		}
+	} else {
+		err = nil
+		return
 	}
 	total = totalConfirm + totalPrepare
 	//处理封面图片

+ 4 - 3
services/activity_special_trip.go

@@ -178,12 +178,13 @@ func ActivitySpecialUserRmind(user *models.WxUserItem, activityId, TripStatus in
 		}
 		//TripStatus            int    `description:"行程进行状态 1:预报名,2:确定行程"`
 		if TripStatus == 1 {
-			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:专项调研预报名")
+			keyword2 = fmt.Sprint("互动:专项调研预报名,", user.RealName, "--", user.CompanyName)
 		} else {
-			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:活动报名")
+			keyword2 = fmt.Sprint("互动:活动报名,", user.RealName, "--", user.CompanyName)
+
 		}
 		keyword1 = activityInfo.ResearchTheme
-		keyword2 = "__"
+		//keyword2 = "__"
 		remark = "点击查看活动详情"
 		openIdArr := make([]string, 0)
 		for _, v := range openIdList {

+ 1 - 1
services/admin.go

@@ -6,7 +6,7 @@ import (
 )
 
 func GetAdminMobileMap() (mapItem map[string]string, err error) {
-	adminList, e := models.GetAdminByRole()
+	adminList, e := models.GetRaiAdmin()
 	if e != nil {
 		err = e
 		return

+ 9 - 8
services/article.go

@@ -1086,7 +1086,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 								industrialSubjectIdStr += strconv.Itoa(vIndustrial.IndustrialSubjectId) + ","
 								mapManagementForSubject[vIndustrial.IndustryName] += vIndustrial.SubjectName + "/"
 								if vIndustrial.LayoutTime == "0000-00-00 00:00:00" {
-									go models.UpdateIndustrialManagementLayoutTime(v.PublishDate.Format(utils.FormatDateTime), vIndustrial.IndustrialManagementId)
+									go models.UpdateIndustrialManagementLayoutTime(v.PublishDate.AddDate(0, 0, -10).Format(utils.FormatDateTime), vIndustrial.IndustrialManagementId)
 								}
 							}
 
@@ -1328,7 +1328,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	if articleInfo.ReportType == 1 && chartPermissionId != utils.CE_LUE_ID && chartPermissionId != utils.GU_SHOU_ID {
 		for _, item := range openidPowerList {
 			first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
-			keyword1 := "所属赛道:" + articleInfo.SubCategoryName
+			keyword1 := "【" + articleInfo.SubCategoryName + "】有报告发布/更新"
 			openIditem := new(models.OpenIdList)
 			openIditem.OpenId = item.OpenId
 			openIditem.UserId = item.UserId
@@ -1406,9 +1406,9 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 			openIditem.UserId = k
 			openIditem.OpenId = v
 			first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
-			keyword1 := "所属赛道:" + industryName
+			keyword1 := "【" + articleInfo.SubCategoryName + "】有报告发布/更新"
 			mapActivityUserId := make(map[int]string)
-			if articleInfo.IsSummary == 1 {
+			if articleInfo.ReportType == 2 {
 				sliceSubjectId, _ := models.GetSubjectIds(articleId)
 				if sliceSubjectId != "" {
 					appointmentList, err := models.GetCygxAppointmentSummaryBySubjectId(sliceSubjectId)
@@ -1494,9 +1494,10 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 			openIditem.UserId = k
 			openIditem.OpenId = v
 			first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
-			keyword1 := "所属赛道:" + industryName
+			keyword1 := "【" + articleInfo.SubCategoryName + "】有报告发布/更新"
 			mapActivityUserId := make(map[int]string)
-			if articleInfo.IsSummary == 1 {
+			if articleInfo.ReportType == 2 {
+				keyword1 = fmt.Sprint("【", industryName, "】赛道有报告发布/更新")
 				sliceSubjectId, _ := models.GetSubjectIds(articleId)
 				if sliceSubjectId != "" {
 					appointmentList, err := models.GetCygxAppointmentSummaryBySubjectId(sliceSubjectId)
@@ -1518,8 +1519,8 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 							return err
 						}
 						for _, item := range openIdLists {
-							first := "您预约的调研,有关联的纪要发布/更新了"
-							keyword1 := industryName
+							//first := "您预约的调研,有关联的纪要发布/更新了"
+							//keyword1 := industryName
 							openIditem := new(models.OpenIdList)
 							openIditem.OpenId = item.OpenId
 							openIditem.UserId = item.UserId

+ 135 - 0
services/banner.go

@@ -0,0 +1,135 @@
+package services
+
+import (
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// GetBannerUrlBody 处理banner的连接并做跳转处理
+func GetBannerUrlBody(url string) (itemResp *models.BannerUrlResp) {
+	//2:文章详情  https://web.hzinsights.com/material/info/8436  小程序路径:/pageMy/reportDetail/reportDetail?id=
+	//3:活动详情  https://web.hzinsights.com/activity/detail/2701  小程序路径:/activityPages/activityDetail/activityDetail?id=
+	//4:产业详情  https://web.hzinsights.com/indepth/info/20/79  小程序路径:/reportPages/IndustryReport/IndustryReport?id=
+	//5:关于我们  https://clpttest.hzinsights.com/about
+	//6:产品内测 https://clpttest.hzinsights.com/internal/article/29  小程序路径:/reportPages/internalDetials/internalDetials?id=
+	//7:本周研究汇总 https://clpttest.hzinsights.com/summary/2/152  小程序路径:/reportPages/reportSecretDetail/reportSecretDetail?type=2&id=
+	//8:上周研究汇总 https://clpttest.hzinsights.com/summary/3/112 小程序路径:/reportPages/reportSecretDetail/reportSecretDetail?type=3&id=
+	//9:专项调研活动 https://clpttest.hzinsights.com/activity/info/70  小程序路径:/activityPages/specialDetail/specialDetail?id=
+	//10: 重点公司 https://clpttest.hzinsights.com/recent/67  小程序路径:/reportPages/keyCompany/keyCompany
+	//11: 主题详情 https://clpttest.hzinsights.com/community/theme/117  小程序路径:/reportPages/researchTheme/researchTheme?id=
+	//12: 作者详情 https://clpttest.hzinsights.com/community/author/78 小程序路径:/reportPages/authorPages/authorPages?id=
+
+	mapPath := make(map[int]string)
+	mapPath[2] = utils.WX_MSG_PATH_ARTICLE_DETAIL          //文章详情
+	mapPath[3] = utils.WX_MSG_PATH_ACTIVITY_DETAIL         //活动详情
+	mapPath[4] = utils.WX_MSG_PATH_INDUSTRY_DETAIL         //产业详情
+	mapPath[6] = utils.WX_MSG_PATH_PRODUCTINTERIOR_DETAIL  //产品内测
+	mapPath[7] = utils.WX_MSG_PATH_THIS_WEEK_DETAIL        //本周研究汇总
+	mapPath[8] = utils.WX_MSG_PATH_LAST_WEEK_DETAIL        //上周研究汇总
+	mapPath[9] = utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL //专项调研活动
+	mapPath[10] = utils.WX_MSG_PATH_KEY_COMPANY_DETAIL     //重点公司
+	mapPath[11] = utils.WX_MSG_PATH_RESEARCHTHEME_DETAIL   //主题详情
+	mapPath[12] = utils.WX_MSG_PATH_AUTHOR_DETAIL          //作者详情
+
+	material := "material/info"             //2:文章详情
+	activity := "activity/detail"           //3:活动详情
+	activityVideo := "activity/video"       //3:活动视频页,调活动详情
+	indepth := "indepth/info"               //4:产业详情
+	indepthVideo := "indepth/video"         //4:产业视频页,调详情
+	about := "/about"                       //5:关于我们
+	internal := "internal/article"          //6:产品内测
+	thisWeek := "summary/2/"                //7:本周研究汇总
+	lastWeek := "summary/3/"                //8:上周研究汇总
+	activitySpecial := "activity/info"      //9:专项调研活动
+	recent := "/recent/"                    //10:重点公司
+	communityTheme := "/community/theme/"   //11:主题详情
+	communityAuthor := "/community/author/" //12:作者详情
+	item := new(models.BannerUrlResp)
+	item.Body = url
+	urlSlice := strings.Split(url, "/")
+	lenurlSlice := len(urlSlice)
+	sourceId, _ := strconv.Atoi(urlSlice[lenurlSlice-1])
+
+	if strings.Contains(url, material) {
+		item.Type = 2
+	} else if strings.Contains(url, activity) {
+		item.Type = 3
+	} else if strings.Contains(url, activityVideo) {
+		activityVideo, err := models.GetCygxActivityVideoById(sourceId)
+		if err != nil {
+			go utils.SendAlarmMsg("banner链接解析失败"+err.Error()+url, 2)
+		}
+		if activityVideo != nil {
+			sourceId = activityVideo.ActivityId
+			item.Type = 3
+		}
+	} else if strings.Contains(url, indepth) {
+		if lenurlSlice >= 2 {
+			chartPermissionId, _ := strconv.Atoi(urlSlice[lenurlSlice-2])
+			item.ChartPermissionId = chartPermissionId
+		}
+		item.Type = 4
+	} else if strings.Contains(url, indepthVideo) {
+		if lenurlSlice >= 2 {
+			sourceId, _ = strconv.Atoi(urlSlice[lenurlSlice-2])
+		}
+		item.Type = 4
+	} else if strings.Contains(url, about) {
+		item.Type = 5
+	} else if strings.Contains(url, internal) {
+		item.Type = 6
+	} else if strings.Contains(url, thisWeek) {
+		item.Type = 7
+	} else if strings.Contains(url, lastWeek) {
+		item.Type = 8
+	} else if strings.Contains(url, activitySpecial) {
+		item.Type = 9
+	} else if strings.Contains(url, recent) {
+		item.Type = 10
+	} else if strings.Contains(url, communityTheme) {
+		item.Type = 11
+	} else if strings.Contains(url, communityAuthor) {
+		item.Type = 12
+	} else {
+		item.Type = 1
+	}
+	if mapPath[item.Type] != "" {
+		item.Path = "/" + mapPath[item.Type]
+	}
+	item.SourceId = sourceId
+	itemResp = item
+	return
+}
+
+func AddCygxBannerHistory(user *models.WxUserItem, bannerId int) (err error) {
+	if user.UserId == 0 {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("banner点击信息记录失败"+err.Error()+"bannerId"+strconv.Itoa(bannerId)+"userId:"+strconv.Itoa(user.UserId), 2)
+		}
+	}()
+	historyRecord := new(models.CygxBannerHistory)
+	historyRecord.UserId = user.UserId
+	historyRecord.BannerId = bannerId
+	historyRecord.CreateTime = time.Now()
+	historyRecord.Mobile = user.Mobile
+	historyRecord.Email = user.Email
+	historyRecord.CompanyId = user.CompanyId
+	historyRecord.CompanyName = user.CompanyName
+	historyRecord.RegisterPlatform = utils.REGISTER_PLATFORM
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	historyRecord.RealName = user.RealName
+	if sellerItem != nil {
+		historyRecord.SellerName = sellerItem.RealName
+	}
+	_, err = models.AddCygxBannerHistory(historyRecord)
+	return
+}

+ 6 - 1
services/chart.go

@@ -419,7 +419,7 @@ func GetChartDetailByChartId(cont context.Context) (err error) {
 }
 
 //func init() {
-//	GetChartDetailByApi(6159)
+//	GetChartDetailByApi(6370)
 //}
 
 // 同步图表详情
@@ -460,6 +460,11 @@ func GetChartDetailByApi(chartId int) (err error) {
 		return err
 	}
 	v := resultDate.Data
+
+	if v.ChartId == 0 {
+		err = models.DeleteCygxChart(chartId)
+		return
+	}
 	item := new(models.CygxChart)
 	item.ChartId = v.ChartId
 	item.PtagId = v.PtagId

+ 47 - 0
services/init_10.4.go

@@ -0,0 +1,47 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"time"
+)
+
+func init213() {
+	var condition string
+	var pars []interface{}
+	var err error
+	condition += `AND do_fail_type = 0 AND  is_meeting = 0`
+	listSignup, err := models.GetActivitySignuListByUser(condition, pars)
+	if err != nil {
+		fmt.Println(err)
+	}
+	var items []*models.CygxActivitySignupBreak
+	var numk int
+	for _, v := range listSignup {
+		numk++
+		item := new(models.CygxActivitySignupBreak)
+		item.UserId = v.UserId
+		item.ActivityId = v.ActivityId
+		item.CreateTime = time.Now()
+		item.Mobile = v.Mobile
+		item.Email = v.Email
+		item.CompanyId = v.CompanyId
+		item.CompanyName = v.CompanyName
+		item.RealName = v.RealName
+		item.SellerName = v.SellerName
+		items = append(items, item)
+		if numk%5000 == 0 {
+			fmt.Println(v)
+			_, err = models.AddCygxActivitySignupBreakList(items)
+			if err != nil {
+				fmt.Println(err)
+			}
+			items = make([]*models.CygxActivitySignupBreak, 0)
+			numk = 0
+		}
+	}
+	if len(items) > 0 {
+		_, err = models.AddCygxActivitySignupBreakList(items)
+	}
+	fmt.Println(len(listSignup))
+}

+ 4 - 4
services/keyword.go

@@ -8,7 +8,7 @@ import (
 	"time"
 )
 
-//AddSearchKeyWord 记录用户搜索关键词
+// AddSearchKeyWord 记录用户搜索关键词
 func AddSearchKeyWord(user *models.WxUserItem, keyWord string, source int) (err error) {
 	//cacheKey := fmt.Sprint("Search_uid:", user.UserId, "_KeyWord:", keyWord, "_Source:", source)
 	//isExist := utils.Rc.IsExist(cacheKey)
@@ -31,7 +31,7 @@ func AddSearchKeyWord(user *models.WxUserItem, keyWord string, source int) (err
 	keyWordItem.CompanyName = user.CompanyName
 	keyWordItem.RealName = user.RealName
 	_, err = models.AddSearchKeyWord(keyWordItem)
-	//go AddUserSearchLog(user, keyWord, source)
+	go AddUserSearchLog(user, keyWord, source)
 	////一分钟之内的相同搜索词不重复记录
 	//setNX := utils.Rc.SetNX(cacheKey, keyWord, time.Minute*1)
 	//if !setNX {
@@ -40,7 +40,7 @@ func AddSearchKeyWord(user *models.WxUserItem, keyWord string, source int) (err
 	return
 }
 
-//AddUserSearchLog 记录用户搜索关键词的日志
+// AddUserSearchLog 记录用户搜索关键词的日志
 func AddUserSearchLog(user *models.WxUserItem, keyWord string, source int) (err error) {
 	defer func() {
 		if err != nil {
@@ -64,7 +64,7 @@ func AddUserSearchLog(user *models.WxUserItem, keyWord string, source int) (err
 	return
 }
 
-//用户搜索操作操作行为,模板消息推送
+// 用户搜索操作操作行为,模板消息推送
 func SearchKeywordUserRmind(user *models.WxUserItem, keyWord string) (err error) {
 	defer func() {
 		if err != nil {

+ 1 - 1
services/micro_roadshow.go

@@ -705,7 +705,7 @@ func MicroRoadshowVideoUserRmind(user *models.WxUserItem, videoId int) (err erro
 		}
 		first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放微路演详视频")
 		keyword1 = videoInfo.VideoName
-		keyword2 = "--"
+		keyword2 = fmt.Sprint("互动:播放微路演详视频,", user.RealName, "--", user.CompanyName)
 		remark = "点击查看微路演详情"
 		openIdArr := make([]string, 0)
 		for _, v := range openIdList {

+ 17 - 4
services/page_history_record.go

@@ -35,14 +35,27 @@ func AddCygxPageHistoryRecord(user *models.WxUserItem, Ctx *context.Context) {
 		item.PageRouter = pr.PageRouter
 	}
 	if strings.Contains(item.Router, "/api/article/detail") {
-		cacheKey := fmt.Sprint("uid:", user.UserId, "_Parameter:", item.Parameter)
+		//cacheKey := fmt.Sprint("uid:", user.UserId, "_Parameter:", item.Parameter)
+		//isExist := utils.Rc.IsExist(cacheKey)
+		//if !isExist {
+		//	setNX := utils.Rc.SetNX(cacheKey, user.Mobile, time.Second*10)
+		//	if !setNX {
+		//		go utils.SendAlarmMsg("记录用户阅读文章,设置Redis Key 过期时间失败:key"+cacheKey, 3)
+		//	}
+		//	return
+		//}
+
+		sliceParameter := strings.Split(item.Parameter, "&PageRouter=")
+		cacheKey := fmt.Sprint("uid:", user.UserId, "_Parameter:", sliceParameter[0])
 		isExist := utils.Rc.IsExist(cacheKey)
-		if !isExist {
-			setNX := utils.Rc.SetNX(cacheKey, user.Mobile, time.Second*10)
+		if isExist {
+			return
+		}
+		setNX := utils.Rc.SetNX(cacheKey, user.Mobile, time.Second*10)
+		if !setNX {
 			if !setNX {
 				go utils.SendAlarmMsg("记录用户阅读文章,设置Redis Key 过期时间失败:key"+cacheKey, 3)
 			}
-			return
 		}
 	}
 

+ 41 - 0
services/report_history_record.go

@@ -0,0 +1,41 @@
+package services
+
+import (
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+)
+
+// 添加历史信息
+func AddCygxReportHistoryRecord(item *models.CygxReportHistoryRecord) (err error) {
+	//defer func() {
+	//	if err != nil {
+	//		go utils.SendAlarmMsg("产品内测用户浏览信息记录失败"+err.Error(), 2)
+	//	}
+	//}()
+	if item.StopTime >= 5 {
+		_, err = models.AddCygxReportHistoryRecord(item)
+		if err != nil {
+			go utils.SendAlarmMsg("报告精选用户浏览信息记录失败"+err.Error()+"报告类型"+item.ReportType+"报告ID:"+strconv.Itoa(item.ArticleId), 2)
+		}
+	}
+
+	historyRecordLog := new(models.CygxReportHistoryRecordLog)
+	historyRecordLog.UserId = item.UserId
+	historyRecordLog.ArticleId = historyRecordLog.ArticleId
+	historyRecordLog.CreateTime = historyRecordLog.CreateTime
+	historyRecordLog.Mobile = historyRecordLog.Mobile
+	historyRecordLog.Email = historyRecordLog.Email
+	historyRecordLog.CompanyId = historyRecordLog.CompanyId
+	historyRecordLog.CompanyName = historyRecordLog.CompanyName
+	historyRecordLog.StopTime = historyRecordLog.StopTime
+	historyRecordLog.OutType = historyRecordLog.OutType
+	historyRecordLog.ReportType = historyRecordLog.ReportType
+	historyRecordLog.RegisterPlatform = historyRecordLog.RegisterPlatform
+
+	_, err = models.AddCygxReportHistoryRecordLog(historyRecordLog)
+	if err != nil {
+		go utils.SendAlarmMsg("报告精选用户浏览信息日志记录失败"+err.Error()+"报告类型"+item.ReportType+"报告ID:"+strconv.Itoa(item.ArticleId), 2)
+	}
+	return
+}

+ 1 - 0
services/resource_data.go

@@ -233,6 +233,7 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 				}
 			}
 			v.SourceType = 1
+			v.Expert, _ = GetReportContentTextSub(v.Expert)
 			mapItems[fmt.Sprint("activity", v.ActivityId)].Activity = v
 		}
 	}

+ 3 - 0
services/task.go

@@ -108,6 +108,9 @@ func Task() {
 		makeMorningMeetingReviews := task.NewTask("makeMorningMeetingReviews", "0 30 10 * * *", MakeMorningMeetingReviews)
 		task.AddTask("makeMorningMeetingReviews", makeMorningMeetingReviews) //每天10::30定时生成晨会精华汇总
 
+		cygxActivityRestrictSignupByTask := task.NewTask("cygxActivityRestrictSignupByTask", "0 */10 6-23 * * *", CygxActivityRestrictSignupByTask)
+		task.AddTask("cygxActivityRestrictSignupByTask", cygxActivityRestrictSignupByTask) //定时任务处理为到会人员的爽约
+
 	}
 	if utils.RunMode != "release" {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章

+ 21 - 0
services/user.go

@@ -1051,3 +1051,24 @@ func SendEmailAllUserWithCompany() (err error) {
 	os.Remove(downLoadnFilePath)
 	return
 }
+
+// 先关注后登录,更新用户是否关注过查研观向小助手公众号
+func UpdateCygxSubscribe(uid int, unionId string) (err error) {
+	defer func() {
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			go utils.SendAlarmMsg("先关注后登录,更新用户是否关注过查研观向小助手公众号失败"+err.Error()+"uid:"+strconv.Itoa(uid)+"unionId:"+unionId, 2)
+		}
+	}()
+	if unionId == "" {
+		err = errors.New("unionId为空,用户ID:" + strconv.Itoa(uid))
+		return
+	}
+	detail, err := models.GetCygxUserRecordSubscribe(unionId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if detail != nil {
+		err = models.UserSubscribe(detail.SubscribeTime, uid)
+	}
+	return
+}

+ 12 - 10
services/wx_template_msg.go

@@ -234,7 +234,8 @@ func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*mod
 	}
 	var first string
 	first = keyWord1
-	keyword1 := keyWord2
+	//keyword1 := keyWord2
+	//keyword1 := keyWord2
 	remark := "点击查看报告详情"
 	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
 	templateId := utils.WxMsgTemplateIdArticleUserRemind
@@ -243,8 +244,8 @@ func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*mod
 	sendMap["template_id"] = templateId
 	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)}
 	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
-	sendData["keyword2"] = map[string]interface{}{"value": "--", "color": "#173177"}
+	sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
+	sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
 	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
 	sendMap["data"] = sendData
 	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
@@ -271,8 +272,8 @@ func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*mo
 		return
 	}
 	var first string
-	first = keyWord1
-	keyword1 := keyWord2
+	//first = keyWord1
+	//keyword1 := keyWord2
 	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
 	templateId := utils.WxMsgTemplateIdArticleUserRemind
 	sendMap := make(map[string]interface{})
@@ -280,7 +281,8 @@ func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*mo
 	sendMap["template_id"] = templateId
 	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
 	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
+	sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
+	sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
 	sendMap["data"] = sendData
 	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
 	return
@@ -422,11 +424,11 @@ func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, r
 			return
 		}
 	}
-	activityId := itemAct.ArticleId
+	activityId := itemAct.ActivityId
 	//fmt.Println("itemAct.Host", itemAct.Host)
-	if itemAct.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN && itemAct.Host != "" {
-		keyword2 += ",会议主持人:" + itemAct.Host
-	}
+	//if itemAct.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN && itemAct.Host != "" {
+	//	keyword2 += ",会议主持人:" + itemAct.Host
+	//}
 	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
 	sendMap := make(map[string]interface{})
 	sendData := make(map[string]interface{})

+ 0 - 1
utils/common.go

@@ -727,7 +727,6 @@ func StrDateTimeToWeek(strTime string) string {
 		"Sunday":    "周日",
 	}
 	var ctime = StrTimeToTime(strTime).Format("2006-01-02")
-	fmt.Println(ctime)
 	startday, _ := time.Parse("2006-01-02", ctime)
 	staweek_int := startday.Weekday().String()
 	return WeekDayMap[staweek_int]

+ 22 - 2
utils/constants.go

@@ -158,10 +158,30 @@ const (
 // 模板消息地址路由
 const (
 	WX_MSG_PATH_ARTICLE_DETAIL           = "pageMy/reportDetail/reportDetail?id="            //文章详情模板消息地址
+	WX_MSG_PATH_ACTIVITY_DETAIL          = "activityPages/activityDetail/activityDetail?id=" //活动模板消息地址
 	WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL  = "activityPages/specialDetail/specialDetail?id="   //专项调研活动模板消息地址
 	WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT = "reportPages/IndustryReport/IndustryReport?id="   //产业文章列表模板消息地址
-	WX_MSG_PATH_ACTIVITY_DETAIL          = "activityPages/activityDetail/activityDetail?id=" //活动模板消息地址
-)
+
+	WX_MSG_PATH_AUTHOR_DETAIL          = "reportPages/authorPages/authorPages?id="                      //作者详情模板消息地址
+	WX_MSG_PATH_INDUSTRY_DETAIL        = "reportPages/IndustryReport/IndustryReport?id="                //产业详情模板消息地址
+	WX_MSG_PATH_PRODUCTINTERIOR_DETAIL = "reportPages/internalDetials/internalDetials?id="              //产品内测详情模板消息地址
+	WX_MSG_PATH_THIS_WEEK_DETAIL       = "reportPages/reportSecretDetail/reportSecretDetail?type=2&id=" //本周研究汇总详情模板消息地址
+	WX_MSG_PATH_LAST_WEEK_DETAIL       = "reportPages/reportSecretDetail/reportSecretDetail?type=3&id=" //上周纪要汇总详情模板消息地址
+	WX_MSG_PATH_KEY_COMPANY_DETAIL     = "reportPages/keyCompany/keyCompany"                            //重点公司详情模板消息地址
+	WX_MSG_PATH_RESEARCHTHEME_DETAIL   = "reportPages/researchTheme/researchTheme?id="                  //主题详情模板消息地址
+)
+
+//2:文章详情  https://web.hzinsights.com/material/info/8436  小程序路径:/pageMy/reportDetail/reportDetail?id=
+//3:活动详情  https://web.hzinsights.com/activity/detail/2701  小程序路径:/activityPages/activityDetail/activityDetail?id=
+//4:产业详情  https://web.hzinsights.com/indepth/info/20/79  小程序路径:/reportPages/IndustryReport/IndustryReport?id=
+//5:关于我们  https://clpttest.hzinsights.com/about
+//6:产品内测 https://clpttest.hzinsights.com/internal/article/29  小程序路径:/reportPages/internalDetials/internalDetials?id=
+//7:本周研究汇总 https://clpttest.hzinsights.com/summary/2/152  小程序路径:/reportPages/reportSecretDetail/reportSecretDetail?type=2&id=
+//8:上周研究汇总 https://clpttest.hzinsights.com/summary/3/112 小程序路径:/reportPages/reportSecretDetail/reportSecretDetail?type=3&id=
+//9:专项调研活动 https://clpttest.hzinsights.com/activity/info/70  小程序路径:/activityPages/specialDetail/specialDetail?id=
+//10: 重点公司 https://clpttest.hzinsights.com/recent/67  小程序路径:/reportPages/keyCompany/keyCompany
+//11: 主题详情 https://clpttest.hzinsights.com/community/theme/117  小程序路径:/reportPages/researchTheme/researchTheme?id=
+//12: 作者详情 https://clpttest.hzinsights.com/community/author/78 小程序路径:/reportPages/authorPages/authorPages?id=
 
 // 模板消息地址路由
 const (