Преглед изворни кода

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into crm_14.7

xingzai пре 1 година
родитељ
комит
ef9ab12933

+ 9 - 7
controllers/activity.go

@@ -2617,13 +2617,15 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 			br.ErrMsg = "获取失败,Err:" + err.Error()
 			return
 		}
-		if leftPx > rightPx {
-			speciaItem.Position = 2
-		} else {
-			speciaItem.Position = 1
-		}
-		if len(speciaItem.List) > 0 {
-			itemsNew = append(itemsNew, speciaItem)
+		if speciaItem != nil {
+			if leftPx > rightPx {
+				speciaItem.Position = 2
+			} else {
+				speciaItem.Position = 1
+			}
+			if len(speciaItem.List) > 0 {
+				itemsNew = append(itemsNew, speciaItem)
+			}
 		}
 		//}
 	}

+ 2 - 2
controllers/banner.go

@@ -136,8 +136,8 @@ func (this *BannerController) ListYx() {
 			&models.BannerUrlYxResp{IndexImg: "https://hzstatic.hzinsights.com/banner/yx/2.png", Path: "pages-purchaser/survey/surveySubmit"},
 		}
 		listB = []*models.BannerUrlYxResp{
-			&models.BannerUrlYxResp{IndexImg: "https://hzstatic.hzinsights.com/banner/yx/4_short.png", Path: "pages-purchaser/specialColumn/specialColumn"},
-			//&models.BannerUrlYxResp{IndexImg: "https://hzstatic.hzinsights.com/banner/yx/3.png", Path: "pages-purchaser/researchList/researchList"},
+			//&models.BannerUrlYxResp{IndexImg: "https://hzstatic.hzinsights.com/banner/yx/4_short.png", Path: "pages-purchaser/specialColumn/specialColumn"},
+			&models.BannerUrlYxResp{IndexImg: "https://hzstatic.hzinsights.com/banner/yx/3.png", Path: "pages-purchaser/researchList/researchList"},
 		}
 	}
 

+ 5 - 5
controllers/report_billboard.go

@@ -81,11 +81,11 @@ func (this *ReportBillboardController) FllowList() {
 		condition += ` AND man.industrial_management_id IN (` + utils.GetOrmInReplace(activeIndustryLen) + `)`
 		pars = append(pars, activeIndustryIds)
 	}
-	nowTime := time.Now().Local()
-	startTime := nowTime.AddDate(0, -1, 0)
-	endTime := nowTime.AddDate(0, 0, -1)
-	condition += ` AND idf.create_time BETWEEN ? AND ?`
-	pars = append(pars, startTime, endTime)
+	//nowTime := time.Now().Local()
+	//startTime := nowTime.AddDate(0, -1, 0)
+	//endTime := nowTime.AddDate(0, 0, -1)
+	//condition += ` AND idf.create_time BETWEEN ? AND ?`
+	//pars = append(pars, startTime, endTime)
 
 	// 查询近一个月至昨日关注度最高的15个产业(不再指定行业, chartPermissionId可筛选行业)
 	list, e := models.GetTopIndustryFollowData(0, topNum, condition, pars)

+ 11 - 0
controllers/user.go

@@ -1028,6 +1028,17 @@ func (this *UserController) ApplyTryOut() {
 		}
 		title = ProductInteriorDetail.Title
 		source = "productinterior"
+	} else if tryType == "YanxuanSpecial" {
+		// 研选专栏
+		YanxuanSpecialBySpeciaDetail, e := models.GetYanxuanSpecialBySpecialId(detailId)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "产品内测信息有误, 不存在的detailId: " + strconv.Itoa(detailId)
+			return
+		}
+		title = YanxuanSpecialBySpeciaDetail.Title
+		source = "yanxuanspecial"
+		isResearch = true
 	}
 
 	//缓存校验

+ 18 - 1
controllers/yanxuan_special.go

@@ -211,7 +211,20 @@ func (this *YanxuanSpecialController) Detail() {
 	resp.ExamineStatus = item.Status
 	if item.UserId != sysUser.UserId && item.Status != 3 && !strings.Contains(cnf.ConfigValue, sysUser.Mobile) {
 		resp.CygxYanxuanSpecialItem = *new(models.CygxYanxuanSpecialItem) // 如果内容不可见,就把内容置空
-		resp.HasPermission = 2
+		//resp.HasPermission = 2
+	}
+
+	//如果是用户本人写的专栏,那么就不做校验
+	if item.UserId == sysUser.UserId || sysUser.UserId == 0 {
+		resp.HasPermission = 1
+	} else {
+		hasPermission, err := services.GetUserRaiPermissionYanXuanInfo(sysUser)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败, Err:" + err.Error()
+			return
+		}
+		resp.HasPermission = hasPermission
 	}
 
 	//如果在web端有样式或者上传了文件,小程序就禁止编辑修改内容
@@ -227,6 +240,10 @@ func (this *YanxuanSpecialController) Detail() {
 		resp.ContentHasStyle = true
 	}
 
+	if resp.HasPermission != 1 || sysUser.UserId == 0 {
+		resp.Content = services.AnnotationHtml(resp.Content)
+	}
+
 	br.Data = resp
 	br.Ret = 200
 	br.Success = true

+ 8 - 0
models/activity.go

@@ -1293,3 +1293,11 @@ func UpdateJmcjActivityIdGroup(items map[int]string) (err error) {
 	}
 	return
 }
+
+// UpdateActivityVmpRobotMeetingId 建立活动跟上海那边机器人助手参会信息的关联
+func UpdateActivityVmpRobotMeetingId(vmpRobotMeetingId, activityId int) (err error) {
+	sql := ` UPDATE cygx_activity SET   vmp_robot_meeting_id = ?  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, vmpRobotMeetingId, activityId).Exec()
+	return
+}

+ 3 - 7
models/industry_fllow.go

@@ -186,19 +186,15 @@ func GetCountCygxIndustryFllowByUidAndChartPermissionId(userId, ChartPermissionI
 // GetTopIndustryFollowData 获取关注度最高的产业关注数据
 func GetTopIndustryFollowData(startSize, pageSize int, condition string, pars []interface{}) (list []*IndustrialManagement, err error) {
 	sql := `SELECT
-				COUNT(1) AS one_month_follow_num,
 				man.*
 			FROM
-				cygx_industry_fllow AS idf
-			JOIN cygx_industrial_management AS man ON idf.industrial_management_id = man.industrial_management_id
+                cygx_industrial_management AS man 
 			WHERE 1 = 1 `
 	if condition != "" {
 		sql += condition
 	}
-	sql += ` GROUP BY
-				idf.industrial_management_id
-			ORDER BY
-				one_month_follow_num DESC
+	sql += ` ORDER BY
+				one_month_follow_num DESC , man.industrial_management_id DESC 
 			LIMIT ?,?`
 	_, err = orm.NewOrm().Raw(sql, pars, startSize, pageSize).QueryRows(&list)
 	return

+ 15 - 0
models/seller.go

@@ -75,3 +75,18 @@ func GetSelleridWhichGroup(companyId, productId int) (adminId string, err error)
 	err = o.Raw(sql, companyId, productId).QueryRow(&adminId)
 	return
 }
+
+func GetSellerByAdminMobile(mobile string) (item *AdminItem, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := ` SELECT * FROM admin WHERE mobile=?  `
+	err = o.Raw(sql, mobile).QueryRow(&item)
+	return
+}
+
+// GetAdminListByGroupId 根据分组id获取系统用户列表
+func GetAdminListByGroupId(groupId int) (items []*Admin, err error) {
+	sql := `SELECT * FROM admin WHERE group_id=? and enabled=1 `
+	o := orm.NewOrmUsingDB("weekly_report")
+	_, err = o.Raw(sql, groupId).QueryRows(&items)
+	return
+}

+ 24 - 18
services/activity.go

@@ -638,11 +638,12 @@ func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.Ac
 	}
 	// 处理本组可见权限
 	if activityInfo.VisibleRange == 1 {
-		adminIds, e := models.GetSelleridWhichGroup(user.CompanyId, 2)
-		if e != nil {
-			err = errors.New("GetSelleridWhichGroup, Err: " + e.Error())
-			return
-		}
+		//adminIds, e := models.GetSelleridWhichGroup(user.CompanyId, 2)
+		//if e != nil {
+		//	err = errors.New("GetSelleridWhichGroup, Err: " + e.Error())
+		//	return
+		//}
+		adminIds := GetSelleridWhichGroup(user.CompanyId, 2, user.Mobile)
 		haveVisibleRange := false
 		adminIdSlice := strings.Split(adminIds, ",")
 
@@ -856,11 +857,12 @@ func GetShareNoPowe(activityInfo *models.ActivityDetail, permissionStr string, u
 func CheckUserPowerByActivityChoose(user *models.WxUserItem, activityInfo *models.ActivityDetail) (noPower bool, err error) {
 	//处理 见范围 1,仅本组可见 、2,全部客户可见
 	if activityInfo.VisibleRange == 1 {
-		adminIds, errAdmin := models.GetSelleridWhichGroup(user.CompanyId, 2)
-		if errAdmin != nil {
-			err = errAdmin
-			return
-		}
+		//adminIds, errAdmin := models.GetSelleridWhichGroup(user.CompanyId, 2)
+		//if errAdmin != nil {
+		//	err = errAdmin
+		//	return
+		//}
+		adminIds := GetSelleridWhichGroup(user.CompanyId, 2, user.Mobile)
 		sliceAdminIds := strings.Split(adminIds, ",")
 		var haveAdminId bool
 		for _, v := range sliceAdminIds {
@@ -932,10 +934,12 @@ func GetHavePower(activityInfo *models.ActivityDetail, permissionStr, companyDet
 // @Param   ikType   query   int  false       "联想词类型 , 1不做联想,2,做除初始词的联想,3所有联想"
 func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermissionIds, whichDay, activeState, label string, isPower, source int, keyWord string, playBack, ikType int) (conditionActivity string, err error) {
 	keyWordNoIk := keyWord
-	adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
-	if err != nil {
-		return
-	}
+	//adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
+	//if err != nil {
+	//	return
+	//}
+
+	adminIds := GetSelleridWhichGroup(user.CompanyId, 2, user.Mobile)
 	userType, permissionStr, permissionStrZhengShi, err := GetUserTypeZhengShi(user.CompanyId)
 	if err != nil {
 		return
@@ -1236,10 +1240,12 @@ func ActivityConditioninitSql(user *models.WxUserItem, condition string, isPower
 	if (GetBelongingRaiIt(user.Mobile) && user.CompanyId == utils.HZ_COMPANY_ID) || user.UserId == 0 {
 		return
 	}
-	adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
-	if err != nil {
-		return
-	}
+	//adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
+	//if err != nil {
+	//	return
+	//}
+	adminIds := GetSelleridWhichGroup(user.CompanyId, 2, user.Mobile)
+
 	userType, permissionStr, permissionStrZhengShi, err := GetUserTypeZhengShi(user.CompanyId)
 	if err != nil {
 		return

+ 3 - 4
services/activity_special_trip.go

@@ -197,7 +197,6 @@ func CheckTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *mod
 			} // 如果对应行业有剩余次数,或者是属于大套餐且有次数,那么校验也通过
 		}
 	}
-	errMsg = msgTemplate
 	return
 
 }
@@ -235,7 +234,7 @@ func DeductTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *model
 	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
 	if chartPermissionName != utils.CE_LUE_NAME {
 		pars = make([]interface{}, 0)
-		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?   AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+		condition = " AND  company_id  = ?  AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
 		pars = append(pars, companyId, activityInfo.ChartPermissionId)
 	}
 	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
@@ -275,7 +274,7 @@ func RebateTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *model
 	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
 	if chartPermissionName != utils.CE_LUE_NAME {
 		pars = make([]interface{}, 0)
-		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?   LIMIT 1   "
+		condition = " AND  company_id  = ? AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )    LIMIT 1   "
 		pars = append(pars, companyId, activityInfo.ChartPermissionId)
 	} else {
 		lastTripBill, e := models.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, user.UserId)
@@ -285,7 +284,7 @@ func RebateTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *model
 		}
 
 		pars = make([]interface{}, 0)
-		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?    LIMIT 1   "
+		condition = " AND  company_id  = ? AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )   LIMIT 1   "
 		pars = append(pars, companyId, lastTripBill.ChartPermissionId)
 	}
 	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)

+ 176 - 0
services/activity_task.go

@@ -0,0 +1,176 @@
+package services
+
+import (
+	"context"
+	"crypto/tls"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"io/ioutil"
+	"net/http"
+	"strings"
+	"time"
+)
+
+//专门处理活动定时任务相关的业务逻辑
+
+type VmpRobotMeeting struct {
+	ModeID            int    `json:"mode_id"`
+	PhoneNumber       string `json:"phone_number"`
+	MeetingPassword   string `json:"meeting_password"`
+	MeetingStartTime  string `json:"meeting_start_time"`
+	MeetingTitle      string `json:"meeting_title"`
+	MeetingTypeID     int    `json:"meeting_type_id"`
+	ParsingMethodID   int    `json:"parsing_method_id"`
+	IndustryID        int    `json:"industry_id"`
+	FieldID           int    `json:"field_id"`
+	Stock             string `json:"stock"`
+	Remark            string `json:"remark"`
+	ProjectID         int    `json:"project_id"`
+	AuthorPhoneNumber int64  `json:"author_phone_number"`
+	ExecutionStatusID int    `json:"execution_status_id"`
+	ParsingID         int    `json:"parsing_id"`
+	SerialNumber      string `json:"serial_number"`
+	ChannelID         int    `json:"channel_id"`
+	IsActive          int    `json:"is_active"`
+}
+
+type VmpRobotMeetingDataResult struct {
+	Code int                   `json:"code"`
+	Msg  string                `json:"msg"`
+	Data VmpRobotMeetingResult `json:"data"`
+}
+
+type VmpRobotMeetingResult struct {
+	ModeID            int    `json:"mode_id"`
+	PhoneNumber       string `json:"phone_number"`
+	MeetingPassword   string `json:"meeting_password"`
+	MeetingStartTime  string `json:"meeting_start_time"`
+	MeetingTitle      string `json:"meeting_title"`
+	MeetingTypeID     int    `json:"meeting_type_id"`
+	ParsingMethodID   int    `json:"parsing_method_id"`
+	IndustryID        int    `json:"industry_id"`
+	FieldID           int    `json:"field_id"`
+	Stock             string `json:"stock"`
+	Remark            string `json:"remark"`
+	ProjectID         int    `json:"project_id"`
+	AuthorPhoneNumber int64  `json:"author_phone_number"`
+	ExecutionStatusID int    `json:"execution_status_id"`
+	ParsingID         int    `json:"parsing_id"`
+	SerialNumber      string `json:"serial_number"`
+	ChannelID         int    `json:"channel_id"`
+	IsActive          int    `json:"is_active"`
+	VmpRobotMeetinId  int    `json:"id"`
+}
+
+//func init() {
+//	PushVmpRobotMeeting()
+//}
+
+// 研选活动会前15分钟推送给上海那边的机器人
+func PushVmpRobotMeeting(cont context.Context) (err error) {
+	//func PushVmpRobotMeeting() (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("15分钟会议消息提醒失败", 2)
+			fmt.Println("发送失败,Err:", err.Error())
+		}
+	}()
+
+	postUrl := "https://vmp.hzinsights.com/v2api/meeting"
+	authorization := "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNTAwMDEyMzA1NiIsInBob25lX251bWJlciI6IjE1MDAwMTIzMDU2IiwibmFtZSI6IumrmOS6puaWhyIsImVudHJhbmNlIjoicGFzc3d3b3JkIiwiaWF0IjoxNzAzODM1OTc4LCJleHAiOjE3MDM4Mzk1Nzh9.qX6EFkVPn2R0SqIQXJ4tyub--iiqKqrJnz9lbdcVetw"
+	var condition string
+	var pars []interface{}
+	endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
+	condition = ` AND activity_time <= ? AND activity_time >= NOW()  AND  publish_status = 1  AND   chart_permission_id  = ? AND  vmp_robot_meeting_id = 0 AND active_state = 1  AND  mainland_tell != ''  `
+	pars = append(pars, endDate, utils.CHART_PERMISSION_ID_YANXUAN)
+	listActivity, e := models.GetCygxActivityList(condition, pars, 0, 10)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivityList, Err: " + e.Error())
+		return
+	}
+	//fmt.Println(len(listActivity))
+
+	//return
+	if len(listActivity) == 0 {
+		return
+	}
+	for _, v := range listActivity {
+		item := new(VmpRobotMeeting)
+		item.ModeID = 2
+		item.PhoneNumber = utils.GetArabicNumbers(v.MainlandTell)
+		item.MeetingPassword = utils.GetArabicNumbers(v.ParticipationCode) + "#" // 业务需求,必须带有一个#
+		item.MeetingStartTime = v.ActivityTime
+		item.MeetingTitle = v.ActivityName
+		item.MeetingTypeID = 1
+		item.ParsingMethodID = 0
+		item.IndustryID = 13
+		item.FieldID = 0
+		item.Stock = ""
+		item.Remark = v.Remarks // 处理HTML格式样式
+		item.ProjectID = 1
+		item.AuthorPhoneNumber = 15000123056 // 高亦文 手机号
+		item.ExecutionStatusID = 0
+		item.ParsingID = 0
+		item.SerialNumber = ""
+		item.ChannelID = -1
+		item.IsActive = 1
+		jsonBody, e := json.Marshal(item)
+		if e != nil {
+			err = errors.New("json.Marshal, Err: " + e.Error())
+			fmt.Println("json.Marshal Err:" + err.Error())
+			return
+		}
+		//fmt.Println(item)
+		//return
+		tr := &http.Transport{
+			TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+		}
+		client := &http.Client{Transport: tr}
+		req, e := http.NewRequest("POST", postUrl, strings.NewReader(string(jsonBody)))
+		if e != nil {
+			err = e
+			return
+		}
+		req.Header.Set("Content-Type", "application/json")
+		req.Header.Set("Authorization", authorization)
+		resp, e := client.Do(req)
+		if e != nil {
+			err = errors.New("client.Do Err: " + e.Error())
+			fmt.Println("client.Do Err:" + err.Error())
+			return
+		}
+		//fmt.Println(resp)
+		defer resp.Body.Close()
+		body, e := ioutil.ReadAll(resp.Body)
+		if e != nil {
+			fmt.Println("err:" + err.Error())
+			err = e
+			return
+		}
+		result := new(VmpRobotMeetingDataResult)
+		e = json.Unmarshal(body, &result)
+		if e != nil {
+			fmt.Println(" json.Unmarshal Err:" + err.Error())
+			err = errors.New("json.Unmarshal Err: " + e.Error())
+			return
+		}
+		vmpRobotMeetinId := result.Data.VmpRobotMeetinId
+		e = models.UpdateActivityVmpRobotMeetingId(vmpRobotMeetinId, v.ActivityId)
+		if e != nil {
+			fmt.Println("UpdateActivityVmpRobotMeetingId  Err:" + err.Error())
+			err = errors.New("UpdateActivityVmpRobotMeetingId  Err: " + e.Error())
+			return
+		}
+		itemlog := new(models.CygxShanghaiCompanyLog)
+		itemlog.CreateTime = time.Now()
+		itemlog.Url = postUrl
+		itemlog.Body = string(jsonBody)
+		itemlog.Result = string(body)
+		go models.AddCygxShanghaiCompanyLog(itemlog)
+	}
+
+	return
+}

+ 42 - 0
services/admin.go

@@ -1,8 +1,12 @@
 package services
 
 import (
+	"errors"
+	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
+	"strconv"
+	"strings"
 )
 
 func GetAdminMobileMap() (mapItem map[string]string, err error) {
@@ -115,3 +119,41 @@ func GetAdminCheckUserMobileMap(user *models.WxUserItem) (mapItem map[string]str
 	mapItem = mapMobile
 	return
 }
+
+// 获取本组的销售ID
+func GetSelleridWhichGroup(companyId, productId int, mobile string) (adminIds string) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("获取本组的销售ID GetSelleridWhichGroup失败 ErrMsg:"+err.Error(), 2)
+		}
+	}()
+
+	adminIds, e := models.GetSelleridWhichGroup(companyId, productId)
+	if e != nil {
+		err = errors.New("GetSelleridWhichGroup, Err: " + e.Error())
+		return
+	}
+
+	if mobile != "" && adminIds != "" {
+		adminUser, e := models.GetSellerByAdminMobile(mobile)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+			return
+		}
+		if adminUser != nil {
+			adminList, e := models.GetAdminListByGroupId(adminUser.GroupId)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("models GetAdminListByGroupId, Err: " + e.Error())
+				return
+			}
+			var adminIdArr []string
+			for _, v := range adminList {
+				adminIdArr = append(adminIdArr, strconv.Itoa(v.AdminId))
+			}
+			adminIds += "," + strings.Join(adminIdArr, ",")
+		}
+	}
+	return
+}

+ 4 - 0
services/company_permission.go

@@ -135,7 +135,10 @@ func GetUserHasPermissionArticle(user *models.WxUserItem) (hasPermission int, se
 					sellerMobile = sellerItemQy.RealName
 				}
 			}
+		} else {
+			hasPermission = 3
 		}
+		hasPermission = 3 //弹窗逻辑变更,状态强制改为3
 	}
 	popupMsg = "需要升级行业套餐权限才可查看此报告,请联系对口销售"
 	return
@@ -187,6 +190,7 @@ func GetUserHasPermissionActivity(user *models.WxUserItem, activityInfo *models.
 					hasPermission = 3
 				}
 			}
+			err = nil
 			hasPermission = hasPermission
 			if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
 				popupMsg = "暂无<b>买方研选</b>权限<br/>您可申请开通试用"

+ 8 - 2
services/cygx_yanxuan_special_company.go

@@ -93,6 +93,12 @@ func AddSpecialRecord(user *models.WxUserItem, specialId, stopTime int) (err err
 			return
 		}
 
+		detail, e := models.GetYanxuanSpecialBySpecialId(specialId)
+		if e != nil {
+			err = errors.New("GetYanxuanSpecialBySpecialId, Err: " + e.Error())
+			return
+		}
+
 		item := new(models.CygxYanxuanSpecialRecord)
 		item.UserId = user.UserId
 		item.Mobile = user.Mobile
@@ -122,7 +128,7 @@ func AddSpecialRecord(user *models.WxUserItem, specialId, stopTime int) (err err
 			}
 
 			//专栏作者Pv数量进行加一
-			e = models.UpdateCygxYanxuanSpecialAuthorPv(user.UserId)
+			e = models.UpdateCygxYanxuanSpecialAuthorPv(detail.UserId)
 			if e != nil {
 				err = errors.New("UpdateCygxYanxuanSpecialAuthorPv, Err: " + e.Error())
 				return
@@ -137,7 +143,7 @@ func AddSpecialRecord(user *models.WxUserItem, specialId, stopTime int) (err err
 				}
 
 				//专栏作者Uv数量进行加一
-				e = models.UpdateCygxYanxuanSpecialAuthorUv(user.UserId)
+				e = models.UpdateCygxYanxuanSpecialAuthorUv(detail.UserId)
 				if e != nil {
 					err = errors.New("UpdateCygxYanxuanSpecialAuthorUv, Err: " + e.Error())
 					return

+ 5 - 2
services/task.go

@@ -35,7 +35,7 @@ func Task() {
 		getChartListByApi := task.NewTask("getChartListByApi", "0 */10 * * * *", GetChartDetailByChartId) //同步图表
 		task.AddTask("getChartListByApi", getChartListByApi)
 
-		getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */60 * * * *", GetYiDongActivityMeeting) //同步易董的活动信息
+		getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */60 * * * *", GetYiDongActivityMeeting) //同步易董的活动到会信息
 		task.AddTask("getYiDongActivityMeeting", getYiDongActivityMeeting)
 
 		yiDongSignAppointmentsForThird := task.NewTask("yiDongSignAppointmentsForThird", "0 */10 * * * *", YiDongSignAppointmentsForThird) //会前一小时将,报名信息同步到易董
@@ -43,6 +43,9 @@ func Task() {
 
 		getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息
 		task.AddTask("getYiDongActivity", getYiDongActivity)
+
+		pushVmpRobotMeeting := task.NewTask("pushVmpRobotMeeting", "0 */10 6-23 * * *", PushVmpRobotMeeting) //研选活动会前15分钟推送给上海那边的机器人
+		task.AddTask("pushVmpRobotMeeting", pushVmpRobotMeeting)
 	}
 
 	if utils.IsTask {
@@ -93,7 +96,7 @@ func Task() {
 		reportBillboardUpdate := task.NewTask("reportBillboardUpdate", "0 10 0 * * *", ReportBillboardUpdate) //报告榜单更新
 		task.AddTask("reportBillboardUpdate", reportBillboardUpdate)
 
-		doActivityOnenIdWxTemplateMsg := task.NewTask("doActivityOnenIdWxTemplateMsg", "0 30 16 * * 1", DoActivityOnenIdWxTemplateMsg) //周日下午四点半推送全部活动
+		doActivityOnenIdWxTemplateMsg := task.NewTask("doActivityOnenIdWxTemplateMsg", "0 30 16 * * 0", DoActivityOnenIdWxTemplateMsg) //周日下午四点半推送全部活动
 		task.AddTask("doActivityOnenIdWxTemplateMsg", doActivityOnenIdWxTemplateMsg)
 
 		updateCygxActivitySpecialSignupNum := task.NewTask("updateCygxActivitySpecialSignupNum", "0 25 0 * * *", UpdateCygxActivitySpecialSignupNum) //修改专项调研,用户与公司的参与数量

+ 1 - 1
services/user.go

@@ -1104,7 +1104,7 @@ func SendPermissionApplyTemplateMsgAdmin(req models.ApplyTryReq, usermobile, app
 	var configCode string
 	//如果是研选的就推送给汪洋跟王芳,否则就推送给王芳
 	if isResearch {
-		configCode = utils.TPL_MSG_WANG_FANG_WANG_YANG
+		configCode = utils.TPL_MSG_WANG_YANG
 	} else {
 		configCode = utils.TPL_MSG
 	}

+ 24 - 0
services/user_permission.go

@@ -85,3 +85,27 @@ func GetUserRaiPermissionInfo(userId, companyId int) (authInfo models.UserPermis
 	permissionArr = strings.Split(permissions, ",")
 	return
 }
+
+// 查询研选的权限状态
+func GetUserRaiPermissionYanXuanInfo(user *models.WxUserItem) (hasPermission int, err error) {
+	var condition string
+	var pars []interface{}
+	condition = " AND company_id = ?  AND status  IN ('正式','试用')  AND chart_permission_id = ?   ORDER BY company_report_permission_id DESC LIMIT 1  "
+	pars = append(pars, user.CompanyId, utils.CHART_PERMISSION_ID_YANXUAN)
+	companyReportPermissionDetail, e := models.GetCompanyReportPermissionDetailByCondition(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyReportPermissionDetailByCondition, Err: " + e.Error())
+		return
+	}
+	//如果用户没有研选权限,那么就获取他对应的状态码
+	if companyReportPermissionDetail == nil {
+		hasPermission, _, _, _, e = GetUserHasPermissionArticle(user)
+		if e != nil {
+			err = errors.New("GetUserHasPermissionArticle, Err: " + e.Error())
+			return
+		}
+	} else {
+		hasPermission = 1
+	}
+	return
+}

+ 28 - 0
utils/common.go

@@ -20,6 +20,7 @@ import (
 	"strconv"
 	"strings"
 	"time"
+	"unicode"
 )
 
 // 随机数种子
@@ -954,3 +955,30 @@ func GetHtmlContentText(content string) (contentSub string, err error) {
 	contentSub = body
 	return
 }
+
+// 富文本字符串截取指定长度
+func InterceptHtmlLength(body string, length int) (newbody string) {
+	content := html.UnescapeString(body)
+	doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
+	if err != nil {
+		fmt.Println("create doc err:", err.Error())
+		return
+	}
+	bodyText := doc.Text()
+	if len(bodyText) < length {
+		length = len(bodyText)
+	}
+	newbody = bodyText[0:length]
+	return
+}
+
+// 获取字符串中的阿拉伯数字,并返回字符串
+func GetArabicNumbers(str string) string {
+	var numbers []rune
+	for _, char := range str {
+		if unicode.IsDigit(char) {
+			numbers = append(numbers, char)
+		}
+	}
+	return string(numbers)
+}