Browse Source

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

xingzai 1 năm trước cách đây
mục cha
commit
ed4832eff8

+ 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
+}

+ 0 - 26
models/user_yanxuan_permission.go

@@ -42,20 +42,6 @@ type CygxUserYanxuanPermissionLog struct {
 	ModifyTime              time.Time `description:"修改时间"`
 }
 
-// 添加
-func AddCygxUserYanxuanPermission(item *CygxUserYanxuanPermission) (lastId int64, err error) {
-	o := orm.NewOrm()
-	lastId, err = o.Insert(item)
-	return
-}
-
-// 添加日志记录
-func AddCygxUserYanxuanPermissionLog(item *CygxUserYanxuanPermissionLog) (lastId int64, err error) {
-	o := orm.NewOrm()
-	lastId, err = o.Insert(item)
-	return
-}
-
 // 根据用户ID获取是否开通过研选权限
 func GetCygxUserYanxuanPermissionCountByUserId(userId int) (count int, err error) {
 	o := orm.NewOrm()
@@ -64,18 +50,6 @@ func GetCygxUserYanxuanPermissionCountByUserId(userId int) (count int, err error
 	return
 }
 
-// 将研选权限状态改为未开通
-func UpdateCygxUserYanxuanPermissionClose(userId int) (err error) {
-	o := orm.NewOrm()
-	sql := ` UPDATE cygx_user_yanxuan_permission
-			SET
-			  status ='未开通',
-			  modify_time = ?
-			WHERE user_id = ? `
-	_, err = o.Raw(sql, time.Now(), userId).Exec()
-	return
-}
-
 // 列表
 func GetCygxUserYanxuanPermissionList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxUserYanxuanPermission, err error) {
 	o := orm.NewOrm()

+ 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
+}

+ 3 - 0
services/task.go

@@ -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 {

+ 6 - 0
services/user_permission.go

@@ -88,6 +88,12 @@ func GetUserRaiPermissionInfo(userId, companyId int) (authInfo models.UserPermis
 
 // 查询研选的权限状态
 func GetUserRaiPermissionYanXuanInfo(user *models.WxUserItem) (hasPermission int, err error) {
+	//判断用户是否开通了个人研选权限
+	mfyxUserPermissionTotal := GetMfyxUserPermissionTotal(user.UserId)
+	if mfyxUserPermissionTotal == 1 {
+		hasPermission = 1
+		return
+	}
 	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  "

+ 12 - 0
utils/common.go

@@ -20,6 +20,7 @@ import (
 	"strconv"
 	"strings"
 	"time"
+	"unicode"
 )
 
 // 随机数种子
@@ -970,3 +971,14 @@ func InterceptHtmlLength(body string, length int) (newbody string) {
 	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)
+}