Browse Source

Merge remote-tracking branch 'origin/CRM6.0' into debug

# Conflicts:
#	utils/common.go
Roc 3 years ago
parent
commit
7679e8f6af

+ 4 - 0
controllers/roadshow/calendar.go

@@ -8,6 +8,7 @@ import (
 	"hongze/hongze_mobile_admin/models/roadshow"
 	"hongze/hongze_mobile_admin/models/tables/admin"
 	"hongze/hongze_mobile_admin/services"
+	roadshowService "hongze/hongze_mobile_admin/services/roadshow"
 	"hongze/hongze_mobile_admin/utils"
 	"strconv"
 	"strings"
@@ -220,6 +221,9 @@ func (this *CalendarController) Refuse() {
 		return
 	}
 
+	// 拒绝后需要删除上海的日程
+	go roadshowService.DeleteSHCalendar(req.RsCalendarResearcherId)
+
 	//模板消息通知
 	{
 

+ 1 - 0
go.sum

@@ -171,6 +171,7 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc=
 github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=

+ 51 - 0
models/roadshow/rs_calendar_relation.go

@@ -0,0 +1,51 @@
+package roadshow
+
+import (
+	"github.com/rdlucklib/rdluck_tools/orm"
+	"time"
+)
+
+// RsCalendarRelation 自系统路演与第三方路演关系表
+type RsCalendarRelation struct {
+	RelationId       int       `orm:"column(relation_id);pk" description:"关系id"`
+	CalendarType     int8      `description:"日历类型;1:路演;2:事项"`
+	SelfCalendarId   int       `description:"系统内部的日历id,可以是研究员与路演活动的关系id,也可以是事项id"`
+	ThirdCalendarId  int       `description:"第三方路演id"`
+	UserId           int       `description:"关系id"`
+	UserPhone        string    `description:"创建人手机号"`
+	UserName         string    `description:"创建人昵称"`
+	ProjectName      string    `description:"活动名称"`
+	ProjectId        int       `description:"活动id"`
+	CustomerId       int       `description:"客户id"`
+	CustomerName     string    `description:"客户名称"`
+	CustomerSocial   string    `description:"客户社会信用码"`
+	ProjectType      int       `description:"活动类型:1=沙龙,2=路演,3=专家需求,4=研究需求,5=电话,6=面谈,7=专题需求,8=线下沙龙,9=公司调研"`
+	ProjectFormType  int       `description:"服务形式:1=沙龙,2=路演,3=专家需求,4=研究需求,5=电话,6=面谈,7=专题需求"`
+	Room             int       `description:"会议室id"`
+	StartTime        int       `description:"开始时间戳"`
+	EndTime          int       `description:"结束时间戳"`
+	Content          string    `description:"活动内容"`
+	FeedExpert       string    `description:"邀请的专家"`
+	Title            string    `description:"日历显示的标题"`
+	ResearcherMobile string    `description:"研究员+协同人员手机号(多个使用逗号拼接)"`
+	ModifyTime       time.Time `description:"更新时间"`
+	CreateTime       time.Time `description:"关系建立时间"`
+}
+
+func GetRelationByPars(condition string, pars []interface{}) (items *RsCalendarRelation, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM rs_calendar_relation WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&items)
+	return
+}
+
+// DeleteRsCalendarRelation 删除关联表
+func DeleteRsCalendarRelation(relationIdd int) (err error) {
+	sql := `DELETE FROM rs_calendar_relation WHERE relation_id=? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, relationIdd).Exec()
+	return
+}

+ 71 - 0
models/roadshow/shanghai_calendar.go

@@ -0,0 +1,71 @@
+package roadshow
+
+type GetTokenResp struct {
+	Code      int       `json:"code"`
+	Msg       string    `json:"msg"`
+	Time      int       `json:"time"`
+	TokenData TokenData `json:"data"`
+}
+
+type TokenData struct {
+	AccessToken string `json:"access_token"`
+	ExpireIn    int    `json:"expire_in"`
+}
+
+type UserCalendarList struct {
+	Code int            `json:"code"`
+	Msg  string         `json:"msg"`
+	Time int            `json:"time"`
+	Data []UserCalendar `json:"data"`
+}
+
+//type UserCalendar struct {
+//	ID int `json:"id"`
+//	UserId int `json:"user_id"`
+//	ProjectName string `json:"project_name"`
+//	ProjectID int `json:"project_id"`
+//	CustomerID string `json:"customer_id"`
+//	ProjectType int `json:"project_type"`
+//	ProjectFormType int `json:"project_form_type"`
+//	Room int `json:"room"`
+//	StartTime int `json:"start_time"`
+//	EndTime int `json:"end_time"`
+//	Content string `json:"content"`
+//	FeedExpert interface{} `json:"feed_expert"`
+//	Title string `json:"title"`
+//	Start string `json:"start"`
+//	End string `json:"end"`
+//	BackgroundColor string `json:"backgroundColor"`
+//	BorderColor string `json:"borderColor"`
+//	TextColor string `json:"textColor"`
+//}
+type UserCalendar struct {
+	ID               int    `json:"id" description:"关系id" `
+	UserId           int    `json:"user_id" description:"创建人id" `
+	UserPhone        string `json:"user_phone" description:"创建人手机号" `
+	UserName         string `json:"user_name" description:"创建人昵称" `
+	ProjectName      string `json:"project_name" description:"活动名称" `
+	ProjectId        int    `json:"project_id" description:"活动id" `
+	CustomerId       string `json:"customer_id" description:"客户id" `
+	CustomerName     string `json:"customer_name" description:"客户名称" `
+	CustomerSocial   string `json:"customer_social" description:"客户社会信用码" `
+	ProjectType      int    `json:"project_type" description:"活动类型:1=沙龙,2=路演,3=专家需求,4=研究需求,5=电话,6=面谈,7=专题需求,8=线下沙龙,9=公司调研"`
+	ProjectFormType  int    `json:"project_form_type" description:"服务形式:1=沙龙,2=路演,3=专家需求,4=研究需求,5=电话,6=面谈,7=专题需求"`
+	Room             int    `json:"room" description:"会议室id"`
+	StartTime        int    `json:"start_time" description:"开始时间戳"`
+	EndTime          int    `json:"end_time" description:"结束时间戳"`
+	Content          string `json:"content" description:"活动内容"`
+	FeedExpert       string `json:"feed_expert" description:"邀请的专家"`
+	Title            string `json:"title" description:"日历显示的标题"`
+	ResearcherMobile string `json:"researcher_mobile" description:"研究员+协同人员手机号(多个使用逗号拼接)"`
+}
+
+type CreatSHCalendarResp struct {
+	Code int      `json:"code"`
+	Msg  string   `json:"msg"`
+	Time int      `json:"time"`
+	Data Calendar `json:"data"`
+}
+type Calendar struct {
+	CalendarID string `json:"calendar_id"`
+}

+ 108 - 0
services/roadshow/calendar.go

@@ -0,0 +1,108 @@
+package roadshow
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_mobile_admin/models/roadshow"
+	"hongze/hongze_mobile_admin/utils"
+	"io/ioutil"
+	netHttp "net/http"
+	"net/url"
+	"time"
+)
+
+// getAccessToken token内部请求接口
+func getAccessToken() (tokenData roadshow.TokenData, err error) {
+	getUrl := fmt.Sprintf(utils.CRM_OPEN_API_URL+"/v1/auth/getAccessToken?app_key=%s&app_secret=%s", utils.CRM_OPEN_API_APP_KEY, utils.CRM_OPEN_API_APP_SECRET)
+	body, err := http.Get(getUrl)
+	if err != nil {
+		err = errors.New("NewRequest Err:" + err.Error())
+		return
+	}
+
+	var tokenResp roadshow.GetTokenResp
+	err = json.Unmarshal(body, &tokenResp)
+	if err != nil {
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if tokenResp.Code != 1 {
+		err = errors.New("getAccessToken err:" + tokenResp.Msg)
+		return
+	}
+	tokenData = tokenResp.TokenData
+	return
+	//return tokenResp.TokenData.AccessToken, err
+}
+
+// GetAccessToken 获取accessToken
+func GetAccessToken() (token string, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APPNAME+"获取上海的token失败:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	token, err = utils.Rc.RedisString("SH_ACCESS_TOKEN")
+	//如果从redis中accessToken 获取失败或者token为空了,那么重新获取accessToken
+	if err != nil || token == `` {
+		tokenInfo, tmpErr := getAccessToken()
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		token = tokenInfo.AccessToken
+		if !utils.Rc.SetNX("SH_ACCESS_TOKEN", token, time.Duration(tokenInfo.ExpireIn-600)*time.Second) {
+			err = errors.New("set Redis err")
+		}
+	}
+	return
+}
+
+// DeleteSHCalendar 删除上海日历活动
+func DeleteSHCalendar(rsCalendarResearcherId int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APPNAME+"删除上海日历活动失败:"+time.Now().Format("2006-01-02 15:04:05"), fmt.Sprint("关系id:", rsCalendarResearcherId, ";err:", err.Error()), utils.EmailSendToUsers)
+		}
+	}()
+	token, err := GetAccessToken()
+	finalUrl := utils.CRM_OPEN_API_URL + "/v1/Calendar/delete?access_token=" + token
+
+	var condition string
+	var pars []interface{}
+	condition = ` AND self_calendar_id = ? `
+	pars = append(pars, rsCalendarResearcherId)
+	relationItem, err := roadshow.GetRelationByPars(condition, pars)
+	if err != nil {
+		err = errors.New("GetRelationByPars err" + err.Error())
+		return
+	}
+	resp, err := netHttp.PostForm(finalUrl, url.Values{"user_phone": {relationItem.UserPhone}, "calendar_id": {fmt.Sprintf("%v", relationItem.ThirdCalendarId)}})
+	if err != nil {
+		err = errors.New("NewRequest Err:" + err.Error())
+		return
+	}
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println("reponse error", err)
+		return
+	}
+	//解析resp判断请求结果是否成功
+	var calendarResp roadshow.CreatSHCalendarResp
+	err = json.Unmarshal(body, &calendarResp)
+	if calendarResp.Code != 1 {
+		err = errors.New("Update SHCalendar err:" + calendarResp.Msg)
+		return
+	}
+	//删除活动表及事项表
+	err = roadshow.DeleteRsCalendarRelation(relationItem.RelationId)
+	if err != nil {
+		err = errors.New("DeleteRsCalendarRelation err:" + err.Error())
+		return
+	}
+	return
+}

+ 9 - 0
utils/common.go

@@ -725,3 +725,12 @@ func GetLocalIP() (ip string, err error) {
 	}
 	return
 }
+
+// Implode php中的implode(用来将int型的切片转为string)
+func Implode(idIntList []int) (str string) {
+	for _, id := range idIntList {
+		str += fmt.Sprint(id, ",")
+	}
+	str = str[:len(str)-1]
+	return
+}

+ 38 - 0
utils/config.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"github.com/beego/beego/v2/core/logs"
 	"github.com/beego/beego/v2/server/web"
+	"github.com/rdlucklib/rdluck_tools/cache"
 	"github.com/rdlucklib/rdluck_tools/log"
 )
 
@@ -11,6 +12,10 @@ var (
 	RunMode        string //运行模式
 	MYSQL_URL      string //数据库连接
 	MYSQL_URL_RDDP string //数据库连接
+
+	REDIS_CACHE string       //缓存地址
+	Rc          *cache.Cache //redis缓存
+	Re          error        //redis错误
 )
 
 //微信配置信息
@@ -43,6 +48,13 @@ var ApiLog *log.Log
 // LibreOfficePath LibreOfficePath的地址
 var LibreOfficePath string
 
+// 上海crm开放api配置
+var (
+	CRM_OPEN_API_URL        string
+	CRM_OPEN_API_APP_KEY    string
+	CRM_OPEN_API_APP_SECRET string
+)
+
 var (
 	Bucketname       string = "hongze"
 	Endpoint         string
@@ -88,6 +100,16 @@ func init() {
 	MYSQL_URL = config["mysql_url"]
 	MYSQL_URL_RDDP = config["mysql_url_rddp"]
 
+	REDIS_CACHE = config["beego_cache"]
+	if len(REDIS_CACHE) <= 0 {
+		panic("redis链接参数没有配置")
+	}
+	Rc, Re = cache.NewCache(REDIS_CACHE) //初始化缓存
+	if Re != nil {
+		fmt.Println(Re)
+		panic(Re)
+	}
+
 	//小程序appid配置
 	WxAppId2 = `wx67b68e39913e511e`
 	WxId2 = `wx67b68e39913e511e`
@@ -145,6 +167,22 @@ func init() {
 	} else {
 		ApiLog = log.Init("20060102.api")
 	}
+
+	//上海crm开放api配置
+	CrmOpenApiConfig()
+}
+
+// CrmOpenApiConfig 上海crm开放api配置
+func CrmOpenApiConfig() {
+	if RunMode == "release" {
+		CRM_OPEN_API_URL = "http://crm.hzinsights.com/openapi"
+		CRM_OPEN_API_APP_KEY = "26945134"
+		CRM_OPEN_API_APP_SECRET = "b99cb2bdec70d20156000f664ec5ac30"
+	} else {
+		CRM_OPEN_API_URL = "http://106.15.192.100:8100/openapi"
+		CRM_OPEN_API_APP_KEY = "26945134"
+		CRM_OPEN_API_APP_SECRET = "b99cb2bdec70d20156000f664ec5ac30"
+	}
 }
 
 //http://webapi.brilliantstart.cn/api/