Browse Source

Merge branch 'cygx4.2.0' of hongze/hongze_cygx into master

hongze 3 years ago
parent
commit
668f4293d3

+ 8 - 21
controllers/article.go

@@ -1,16 +1,7 @@
 package controllers
 
 import (
-	//"bufio"
-	//"io"
-	//"path"
-	//"rdluck_tools/http"
-
 	"bufio"
-	"io"
-	"io/ioutil"
-
-	//"bufio"
 	"encoding/json"
 	"fmt"
 	"github.com/medivhzhan/weapp/v2"
@@ -18,17 +9,11 @@ import (
 	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
 	"html"
-	"rdluck_tools/http"
-
-	//"rdluck_tools/http"
-
-	//"io"
+	"io"
+	"io/ioutil"
 	nhttp "net/http"
 	"os"
-	//"rdluck_tools/http"
-
-	//"path"
-	//"rdluck_tools/http"
+	"rdluck_tools/http"
 	"regexp"
 	"strconv"
 	"strings"
@@ -422,7 +407,8 @@ func (this *ArticleController) InterviewApply() {
 			}
 			sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
 			if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" {
-				openIpItem, _ := models.GetUserRecordByUserId(sellerItem.UserId, 1)
+				openIpItem, _ := models.GetUserRecordByUserIdByXzs(sellerItem.Mobile, 4)
+				fmt.Println(openIpItem)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					go services.SendInterviewApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId)
 				}
@@ -444,7 +430,8 @@ func (this *ArticleController) InterviewApply() {
 			}
 			sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
 			if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" {
-				openIpItem, _ := models.GetUserRecordByUserId(sellerItem.UserId, 1)
+				openIpItem, _ := models.GetUserRecordByUserIdByXzs(sellerItem.Mobile, 4)
+				fmt.Println(openIpItem)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					go services.SendInterviewApplyCancelTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId)
 				}
@@ -744,7 +731,7 @@ func (this *ArticleController) AskAdd() {
 		return
 	}
 	var mobile string
-	if utils.WxMsgTemplateIdAskMsgMobile == "" {
+	if utils.RunMode == "release" {
 		//mobile = utils.WxMsgTemplateIdAskMsgMobileAll + "," + companyItem.Mobile
 		mobile = utils.WxMsgTemplateIdAskMsgMobileAll
 	} else {

+ 121 - 100
controllers/report.go

@@ -123,60 +123,45 @@ func (this *ReportController) IndustryList() {
 		condition += ` AND is_deep_label = ` + isDeepLabel
 	}
 	if keyWord != "" {
-		keyWordArr, err := services.GetIndustryMapNameSliceV2(keyWord)
-		if err != nil {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-			return
-		}
-		var conditionkeyWord string
-		conditionkeyWord += ` subject_names LIKE '%` + keyWord + `%'`
-		keyWordArr = services.RemoveDuplicatesAndEmpty(keyWordArr)
-		keyWordLen := len(keyWordArr)
-		if keyWordLen <= 0 {
-			keyWordArr = append(keyWordArr, keyWord)
-			keyWordLen = len(keyWordArr)
-		}
-		for _, v := range keyWordArr {
-			conditionkeyWord += ` OR subject_names LIKE '%` + v + `%'`
-		}
-		industrialManagementIds, err := models.GetIndustrialManagementIdsBykeyWord(conditionkeyWord)
-		if err != nil {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
-			return
-		}
-		if industrialManagementIds == "" {
-			br.Ret = 200
-			br.Success = true
-			br.Msg = "获取成功"
-			br.Data = resp
-			return
-		}
-		condition += ` AND man.industrial_management_id IN (` + industrialManagementIds + `)`
+		//keyWordArr, err := services.GetIndustryMapNameSliceV2(keyWord)
+		//if err != nil {
+		//	br.Msg = "获取信息失败"
+		//	br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+		//	return
+		//}
+		//var conditionkeyWord string
+		//conditionkeyWord += ` subject_names LIKE '%` + keyWord + `%'`
+		//keyWordArr = services.RemoveDuplicatesAndEmpty(keyWordArr)
+		//keyWordLen := len(keyWordArr)
+		//if keyWordLen <= 0 {
+		//	keyWordArr = append(keyWordArr, keyWord)
+		//	keyWordLen = len(keyWordArr)
+		//}
+		//for _, v := range keyWordArr {
+		//	conditionkeyWord += ` OR subject_names LIKE '%` + v + `%'`
+		//}
+		//industrialManagementIds, err := models.GetIndustrialManagementIdsBykeyWord(conditionkeyWord)
+		//if err != nil {
+		//	br.Msg = "获取信息失败"
+		//	br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+		//	return
+		//}
+		//if industrialManagementIds == "" {
+		//	br.Ret = 200
+		//	br.Success = true
+		//	br.Msg = "获取成功"
+		//	br.Data = resp
+		//	return
+		//}
+		//condition += ` AND man.industrial_management_id IN (` + industrialManagementIds + `)`
+		condition += ` AND  subject_names LIKE '%` + keyWord + `%'`
 	}
 	var sqlChartPermissionId string
 	if ChartPermissionId > 0 {
 		sqlChartPermissionId += ` AND man_g.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_management WHERE chart_permission_id = ` + strconv.Itoa(ChartPermissionId) + ` ) `
 		condition += ` AND man.chart_permission_id IN (` + strconv.Itoa(ChartPermissionId) + `)`
 	}
-
-	//var total int
 	var list []*models.IndustrialManagement
-	//totalTopList, errTop := models.GetIndustrialManagemenCountTop(sqlChartPermissionId, uid, condition)
-	//totalTop := len(totalTopList)
-	//if errTop != nil {
-	//	br.Msg = "获取信息失败"
-	//	br.ErrMsg = "获取品种信息失败,Err:" + errTop.Error()
-	//	return
-	//}
-	//totalNoTopList, errNoTop := models.GetIndustrialManagemenCountNoTop(sqlChartPermissionId, uid, condition)
-	//totalNoTop := len(totalNoTopList)
-	//if errNoTop != nil {
-	//	br.Msg = "获取信息失败"
-	//	br.ErrMsg = "获取品种信息失败,Err:" + errNoTop.Error()
-	//	return
-	//}
 	total, err := models.GetIndustrialManagementAllCount(condition)
 	if err != nil {
 		br.Msg = "获取信息失败"
@@ -192,45 +177,6 @@ func (this *ReportController) IndustryList() {
 	} else {
 		orderSrt = "man.recommended_index DESC,update_time DESC"
 	}
-	//全部都是置顶
-	//if totalTop >= currentIndex*pageSize {
-	//	listTop, err := models.GetIndustrialManagementTopAll(uid, condition, startSize, pageSize)
-	//	for k, _ := range listTop {
-	//		listTop[k].IsTop = true
-	//	}
-	//	if err != nil {
-	//		br.Msg = "获取信息失败"
-	//		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-	//		return
-	//	}
-	//	list = listTop
-	//} else if totalTop < (currentIndex-1)*pageSize { //全部都是不置顶
-	//	listNoTop, err := models.GetIndustrialManagementAll(uid, condition, orderSrt, startSize-totalTop, pageSize)
-	//	if err != nil {
-	//		br.Msg = "获取信息失败"
-	//		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-	//		return
-	//	}
-	//	list = listNoTop
-	//} else { //部分置顶,部分不置顶
-	//	listTop, err := models.GetIndustrialManagementTopAll(uid, condition, startSize, pageSize)
-	//	if err != nil {
-	//		br.Msg = "获取信息失败"
-	//		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-	//		return
-	//	}
-	//	for k, _ := range listTop {
-	//		listTop[k].IsTop = true
-	//	}
-	//	listNoTop, err := models.GetIndustrialManagementAll(uid, condition, orderSrt, 0, pageSize-len(listTop))
-	//	if err != nil {
-	//		br.Msg = "获取信息失败"
-	//		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-	//		return
-	//	}
-	//	list = append(listTop, listNoTop...)
-	//}
-
 	if ChartPermissionId == 0 {
 		ChartPermissionId = 20
 	}
@@ -248,13 +194,6 @@ func (this *ReportController) IndustryList() {
 		return
 	}
 	for k, v := range list {
-		//var analystStr string
-		//analystList, err := models.GetIndustrialAnalystAll(v.IndustrialManagementId)
-		//if err != nil {
-		//	br.Msg = "获取信息失败"
-		//	br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-		//	return
-		//}
 		industrialSubjectList, err := models.GetIndustrialSubjectAll(v.IndustrialManagementId)
 		if err != nil {
 			br.Msg = "获取信息失败"
@@ -262,13 +201,6 @@ func (this *ReportController) IndustryList() {
 			return
 		}
 		list[k].IndustrialSubjectList = industrialSubjectList
-		//if len(analystList) > 0 {
-		//	for _, v2 := range analystList {
-		//		analystStr += v2.AnalystName + "/"
-		//	}
-		//	analystStr = strings.TrimRight(analystStr, "/")
-		//}
-		//list[k].Analyst = analystStr
 		list[k].LayoutTime = utils.TimeRemoveHms(v.LayoutTime)
 		newArtinfo, err := models.GetIndustrialNewArticleDetail(v.IndustrialManagementId)
 		if err != nil {
@@ -1671,3 +1603,92 @@ Loop:
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 产业文章列表接口
+// @Description 获取产业文章列表接口
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Success 200 {object} models.CygxIndustrySearchList
+// @router /industryAndArticle/list [get]
+func (this *ReportController) IndustryAndArticleList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	uid := user.UserId
+	keyWord := this.GetString("KeyWord")
+	orderSrt := "update_time DESC"
+	condition := ` AND  subject_names LIKE '%` + keyWord + `%'`
+	list, err := models.GetIndustrialManagementAll(uid, condition, orderSrt, 0, 100)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+		return
+	}
+	for k, v := range list {
+		industrialSubjectList, err := models.GetIndustrialSubjectAll(v.IndustrialManagementId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+			return
+		}
+		list[k].IndustrialSubjectList = industrialSubjectList
+		//list[k].LayoutTime = utils.TimeRemoveHms(v.LayoutTime)
+		newArtinfo, err := models.GetIndustrialNewArticleDetail(v.IndustrialManagementId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+			return
+		}
+		list[k].UpdateTime = utils.TimeRemoveHms(newArtinfo.PublishDate)
+	}
+	artList, err := models.GetCygxIndustryAndArticleList(keyWord)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	for k2, v2 := range artList {
+		subjectNames, err := models.GetSubjectNames(v2.ArticleId)
+		if err != nil {
+			br.Msg = "获取失败" + strconv.Itoa(v2.ArticleId)
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		var subjectNamesNew string
+		if len(subjectNames) > 0 {
+			slice := strings.Split(subjectNames, "/")
+			for k3, v3 := range slice {
+				if k3 < 4 {
+					subjectNamesNew += v3 + "/"
+				}
+			}
+		}
+		industryName, err := models.GetIndustrialNames(v2.ArticleId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败" + strconv.Itoa(v2.ArticleId)
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		subjectNamesNew = strings.TrimRight(subjectNamesNew, "/")
+		artList[k2].SubjectName = subjectNamesNew
+		if subjectNamesNew == "" {
+			artList[k2].IndustryName = industryName
+		} else {
+			artList[k2].IndustryName = industryName + "-" + subjectNamesNew
+		}
+	}
+	resp := new(models.CygxIndustrySearchList)
+	resp.ArtList = artList
+	resp.IndList = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 50 - 3
controllers/user.go

@@ -828,7 +828,7 @@ func (this *UserController) ApplyTryOut() {
 		return
 	}
 
-	if applyCount > 0 {
+	if applyCount < 0 {
 		br.Msg = "您已提交申请,请耐心等待。"
 		br.IsSendEmail = false
 		return
@@ -926,14 +926,16 @@ func (this *UserController) ApplyTryOut() {
 
 	cnf, _ := models.GetConfigByCode("tpl_msg")
 	if cnf != nil {
-		openIpItem, _ := models.GetUserRecordByMobile(1, cnf.ConfigValue)
+		if req.ApplyMethod == 1 && sellerItem != nil {
+			cnf.ConfigValue = sellerItem.Mobile
+		}
+		openIpItem, _ := models.GetUserRecordByMobile(4, cnf.ConfigValue)
 		if openIpItem != nil && openIpItem.OpenId != "" {
 			fmt.Println("推送消息", req.RealName, req.CompanyName, mobile, openIpItem.OpenId, applyMethod)
 			utils.FileLog.Info("推送消息 %s %s,%s,%s,%s", req.RealName, req.CompanyName, mobile, openIpItem.OpenId, applyMethod)
 			go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, openIpItem.OpenId, applyMethod)
 		}
 	}
-
 	err = models.AddApplyRecord(&req, user.Mobile, user.CompanyName, uid, user.CompanyId)
 	if err != nil {
 		br.Msg = "申请失败"
@@ -1251,3 +1253,48 @@ func (this *UserController) WhiteUser() {
 	br.Success = true
 	br.Msg = "获取成功"
 }
+
+// @Title 获取我的提问
+// @Description 获取我的提问列表
+// @Success 200 {object} models.CygxAskListResp
+// @router /ask/list [get]
+func (this *UserController) AskList() {
+	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
+	}
+	userId := this.User.UserId
+	listActcivity, err := models.GetActivityAskList(userId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取活动问题失败,Err:" + err.Error()
+		return
+	}
+	for _, v := range listActcivity {
+		v.AskType = "Activity"
+	}
+	listArticle, err := models.GetArticleAskList(userId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取文章问题失败,Err:" + err.Error()
+		return
+	}
+	for _, v := range listArticle {
+		v.AskType = "Report"
+		listActcivity = append(listActcivity, v)
+	}
+	resp := new(models.CygxAskListResp)
+	resp.List = listActcivity
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = resp
+}

+ 95 - 1
controllers/wechat.go

@@ -182,11 +182,40 @@ func (this *WechatCommonController) WechatLogin() {
 		br.ErrMsg = "获取用户信息失败,code:" + strconv.Itoa(wxInfo.ErrCode) + ",msg:" + wxInfo.ErrMSG
 		return
 	}
+	//wxToken, err := services.WxGetToken()
+	//if err != nil {
+	//	br.Msg = "获取用户信息失败"
+	//	br.ErrMsg = "获取access_token失败,err:" + err.Error()
+	//	return
+	//}
+	//if wxToken.AccessToken == "" {
+	//	br.Msg = "获取用户信息失败"
+	//	br.ErrMsg = "access_token 为空,"
+	//	return
+	//}
+	//getWxUserInfo, err := services.WxGetUserInfo(wxInfo.OpenID, wxToken.AccessToken)
+	//if err != nil {
+	//	br.Msg = "获取用户信息失败"
+	//	br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//if getWxUserInfo.Errcode != 0 {
+	//	userInfoJson, _ := json.Marshal(getWxUserInfo)
+	//	br.Msg = "登录失败"
+	//	br.ErrMsg = "获取用户信息失败,err:" + string(userInfoJson)
+	//	return
+	//}
 
 	wxUserInfo := new(services.WxUserInfo)
 	wxUserInfo.Unionid = wxInfo.UnionID
 	wxUserInfo.Openid = wxInfo.OpenID
-	wxUserInfo.Unionid = wxInfo.UnionID
+	//wxUserInfo.Nickname = getWxUserInfo.Nickname
+	//wxUserInfo.Headimgurl = getWxUserInfo.Headimgurl
+	//wxUserInfo.City = getWxUserInfo.City
+	//wxUserInfo.Province = getWxUserInfo.Province
+	//wxUserInfo.Country = getWxUserInfo.Country
+	//wxUserInfo.Sex = getWxUserInfo.Sex
+	//wxUserInfo.SubscribeScene = getWxUserInfo.SubscribeScene
 	wxUserInfo.Errcode = wxInfo.ErrCode
 	wxUserInfo.Errmsg = wxInfo.ErrMSG
 	wxUserInfo.SessionKey = wxInfo.SessionKey
@@ -640,3 +669,68 @@ func (this *WechatController) UpdateWxAccesstoken() {
 	br.Ret = 200
 	br.Success = true
 }
+
+// @Title 微信登录小助手接口
+// @Description 微信登录小助手接口
+// @Param   Code   query   string  true       "微信唯一编码code"
+// @Success 200 {object} models.WxLoginResp
+// @router /loginByxzs [get]
+func (this *WechatCommonController) WechatLoginByxzs() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	code := this.GetString("Code")
+	if code == "" {
+		br.Msg = "参数错误"
+		br.ErrMsg = "Code 为空"
+		return
+	}
+
+	item, err := services.WxGetUserOpenIdByCodeXzs(code)
+	if err != nil {
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
+		return
+	}
+	if item.Errcode != 0 {
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "获取access_token 失败 errcode:" + strconv.Itoa(item.Errcode) + " ;errmsg:" + item.Errmsg
+		return
+	}
+	openId := item.Openid
+	if openId == "" {
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "获取openid失败,openid:" + item.Openid
+		return
+	}
+	unionId := item.Unionid
+	if unionId == "" {
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "获取unionid失败,unionid:" + item.Openid
+		return
+	}
+	total, err := models.GetCygxUserRecordCount(openId)
+	if err != nil {
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "查询数量失败,Err:" + err.Error()
+		return
+	}
+	if total == 0 {
+		items := new(models.CygxUserRecord)
+		items.OpenId = openId
+		items.UnionId = unionId
+		items.CreateTime = time.Now()
+		_, err = models.AddCygxUserRecord(items)
+		if err != nil {
+			br.Msg = "获取用户信息失败"
+			br.ErrMsg = "添加openid失败,Err:" + err.Error()
+			return
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = item
+}

+ 6 - 4
models/activity.go

@@ -301,18 +301,19 @@ func GetActivitySendMsgListAll(endDate string) (items []*WxMsgCygxActivityList,
 	sql := `SELECT
 	s.id,
 	s.fail_type,
-	c.open_id,
+	cr.open_id,
 	a.*
 FROM
 	cygx_activity AS a
 	INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id
 	INNER   JOIN user_record AS c ON c.bind_account = s.mobile 
+	INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id 
 WHERE
 	1 = 1 
 	AND s.is_send_wx_msg = 0 
 	AND s.do_fail_type = 0 
 	AND a.publish_status = 1 
-	AND c.create_platform = 1
+	AND c.create_platform = 4
 	AND a.activity_time <= ? AND a.activity_time >= NOW() 
 	AND s.is_cancel = 0
 	AND( a.activity_type_id IN (4,5,6) OR (a.activity_type_id = 3 AND a.is_limit_people = 1 )) 	GROUP BY s.id`
@@ -325,19 +326,20 @@ func GetActivitySendMsgListAllMeeting(endDate string) (items []*WxMsgCygxActivit
 	o := orm.NewOrm()
 	sql := `SELECT
 	m.id,
-	c.open_id,
+	cr.open_id,
 	a.* 
 FROM
 	cygx_activity AS a
 	INNER JOIN cygx_activity_meeting_reminder AS m ON m.activity_id = a.activity_id
 	INNER JOIN user_record AS c ON c.bind_account = m.mobile 
+	INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id 
 WHERE
 	1 = 1 
 	AND m.is_send_wx_msg = 0 
 	AND a.publish_status = 1 
 	AND a.activity_time <= ? AND a.activity_time >= NOW() 
 	AND m.is_cancel = 0 
-	AND c.create_platform = 1
+	AND c.create_platform = 4
 	AND (
 	a.activity_type_id IN ( 1, 2 ) 
 	OR ( a.activity_type_id = 3 AND a.is_limit_people = 0 ))

+ 48 - 0
models/activity_help_ask.go

@@ -28,3 +28,51 @@ type AddCygxActivityHelpAsk struct {
 	ActivityId int    `description:"活动id"`
 	Content    string `description:"内容"`
 }
+
+type CygxAskList struct {
+	ReportOrActivityId int    ` description:"对应的文章或者活动Id"`
+	Title              string `description:"标题"`
+	Content            string `description:"内容"`
+	AskType            string `description:"类型 Activity 活动 、Report 文章报告"`
+	CreateTime         string `description:"创建时间"`
+}
+
+type CygxAskListResp struct {
+	List []*CygxAskList
+}
+
+//report_or_activity_id
+
+//主题列表
+func GetActivityAskList(userId int) (items []*CygxAskList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			k.activity_id as report_or_activity_id,
+			k.content,
+			k.create_time,
+			a.activity_name as title
+		FROM
+			cygx_activity_help_ask AS k
+			INNER JOIN cygx_activity AS a ON a.activity_id = k.activity_id 
+		WHERE
+			user_id = ? ORDER BY k.ask_id DESC`
+	_, err = o.Raw(sql, userId).QueryRows(&items)
+	return
+}
+
+//列表
+func GetArticleAskList(userId int) (items []*CygxAskList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			k.article_id as report_or_activity_id,
+			k.content,
+			k.create_time,
+			a.title as title
+		FROM
+			cygx_article_ask AS k
+			INNER JOIN cygx_article AS a ON a.article_id = k.article_id 
+		WHERE
+			user_id = ? ORDER BY k.ask_id DESC`
+	_, err = o.Raw(sql, userId).QueryRows(&items)
+	return
+}

+ 28 - 0
models/cygx_user_record.go

@@ -0,0 +1,28 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+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:"提交建议时间"`
+}
+
+//添加优化建议
+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
+}

+ 1 - 0
models/db.go

@@ -64,5 +64,6 @@ func init() {
 		new(CygxReportHistoryRecord),
 		new(CygxActivityMeetDetailLog),
 		new(CygxArticleAuthor),
+		new(CygxUserRecord),
 	)
 }

+ 35 - 0
models/report.go

@@ -253,3 +253,38 @@ func GetReportRoadshowDetailById(articleId int) (item *ReportDetailRoadshow, err
 	err = o.Raw(sql, articleId).QueryRow(&item)
 	return
 }
+
+type CygxIndustryAndArticleList struct {
+	ArticleId    int    `orm:"column(article_id);pk"description:"报告id"`
+	Title        string `description:"标题"`
+	PublishDate  string `description:"发布时间"`
+	IndustryName string `description:"产业名称"`
+	SubjectName  string `description:"标的名称"`
+}
+
+type CygxIndustrySearchList struct {
+	ArtList []*CygxIndustryAndArticleList `description:"文章列表"`
+	IndList []*IndustrialManagement       `description:"产业列表"`
+}
+
+//列表
+func GetCygxIndustryAndArticleList(keyWord string) (items []*CygxIndustryAndArticleList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			art.title,
+			art.article_id,
+			art.publish_date
+		FROM
+			cygx_article AS art
+			INNER JOIN cygx_industrial_article_group_subject AS sg ON sg.article_id = art.article_id
+			INNER JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = mg.article_id
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id 
+		WHERE
+		category_name LIKE '%研选%'
+		AND art.article_id IN ( SELECT article_id FROM cygx_industrial_article_group_subject AS sg WHERE sg.industrial_subject_id IN ( SELECT industrial_subject_id FROM cygx_industrial_subject WHERE subject_name LIKE '%` + keyWord + `%' ) GROUP BY sg.article_id ) 
+		OR ( art.article_id IN ( SELECT article_id FROM cygx_industrial_article_group_management AS mg WHERE mg.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_management WHERE industry_name LIKE '%` + keyWord + `%' ) GROUP BY mg.article_id ) AND category_name LIKE '%研选%' )
+		GROUP BY
+			art.article_id`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 18 - 1
models/user_record.go

@@ -46,6 +46,21 @@ func GetUserRecordByUserId(userId, platform int) (item *UserRecord, err error) {
 	return
 }
 
+//根据用户id和平台id获取用户关系
+func GetUserRecordByUserIdByXzs(mobile string, platform int) (item *UserRecord, err error) {
+	sql := `SELECT
+			cr.open_id 
+		FROM
+			wx_user AS u
+			INNER JOIN user_record AS r ON r.user_id = u.user_id
+			INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id 
+		WHERE
+			u.mobile = ? 
+			AND create_platform = ?`
+	err = orm.NewOrm().Raw(sql, mobile, platform).QueryRow(&item)
+	return
+}
+
 //添加用户关系
 func AddUserRecord(record *UserRecord) (recordId int64, err error) {
 	o := orm.NewOrm()
@@ -87,7 +102,9 @@ func ModifyUserRecordSessionKey(openId, sessionKey string) (err error) {
 
 //根据用户id和平台id获取用户关系
 func GetUserRecordByMobile(platform int, bindAccount string) (item *UserRecord, err error) {
-	sql := `SELECT * FROM user_record WHERE create_platform=? AND bind_account = ?`
+	sql := `SELECT cr.open_id FROM user_record  as u 
+			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
+			WHERE create_platform=? AND bind_account = ?`
 	err = orm.NewOrm().Raw(sql, platform, bindAccount).QueryRow(&item)
 	return
 }

+ 35 - 0
models/wechat.go

@@ -81,6 +81,41 @@ func GetWxToken() (item *WxAccessToken, err error) {
 	return
 }
 
+func GetWxAccessTokenByXzs() (accessTokenStr string, err error) {
+	//缓存校验
+	cacheKey := "xygxxzs_wxtoken"
+	accessTokenStr, _ = utils.Rc.RedisString(cacheKey)
+	if accessTokenStr != "" {
+		return
+	} else {
+		WxAccessToken, errWx := GetWxTokenByXzs()
+		if errWx != nil {
+			err = errWx
+			return
+		}
+		accessTokenStr = WxAccessToken.AccessToken
+		utils.Rc.Put(cacheKey, WxAccessToken.AccessToken, time.Second*7000)
+	}
+	return
+}
+
+//获取小助手的微信Token
+func GetWxTokenByXzs() (item *WxAccessToken, err error) {
+	getUrl := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + utils.WxPublicIdXzs + "&secret=" + utils.WxPublicSecretXzs
+	result, err := http.Get(getUrl)
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(result, &item)
+	if err != nil {
+		fmt.Println("GetWxToken Unmarshal Err:%s", err.Error())
+		return
+	}
+	if item.Errmsg != "" {
+	}
+	return
+}
+
 type WxAccessToken struct {
 	AccessToken  string `json:"access_token"`
 	ExpiresIn    int    `json:"expires_in"`

+ 3 - 1
models/wx_template_msg.go

@@ -37,7 +37,9 @@ func GetWxOpenIdList() (items []*OpenIdList, err error) {
 
 func GetWxOpenIdByMobileList(mobile string) (items []*OpenIdList, err error) {
 	//sql := `SELECT * FROM user_record WHERE bind_account IN (` + utils.WxMsgTemplateIdAskMsgMobile + `) AND create_platform = 1`
-	sql := `SELECT * FROM user_record WHERE bind_account IN (` + mobile + `) AND create_platform = 1`
+	sql := `SELECT cr.* FROM user_record  as c
+			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
+			WHERE bind_account IN (` + mobile + `) AND create_platform = 4`
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
 	return
 }

+ 30 - 29
services/activity.go

@@ -20,10 +20,8 @@ func UpdateActivitySattus(cont context.Context) (err error) {
 			fmt.Println("同步失败,Err:", err.Error())
 		}
 	}()
-	fmt.Println("修改状态6661")
 	go models.UpdateActivitySattusToHaveInHand()
 	go models.UpdateActivitySattusToComplete()
-	fmt.Println("修改状态完成")
 	return
 }
 
@@ -34,7 +32,7 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 			fmt.Println("发送失败,Err:", err.Error())
 		}
 	}()
-	endDate := time.Now().Add(+time.Minute * 60).Format("2006-01-02 15:04:05")
+	endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
 	listActivity, err := models.GetActivitySendMsgListAll(endDate)
 	fmt.Println(len(listActivity))
 	if err != nil {
@@ -73,7 +71,7 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 	err = models.UPdateSendedMsgStatus(signupIds)
 	if err != nil {
 		var msg string
-		go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+		go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 		utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
 	}
 	return
@@ -86,9 +84,8 @@ func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
 			fmt.Println("发送失败,Err:", err.Error())
 		}
 	}()
-	endDate := time.Now().Add(+time.Minute * 15).Format("2006-01-02 15:04:05")
+	endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
 	listActivity, err := models.GetActivitySendMsgListAllMeeting(endDate)
-	fmt.Println(len(listActivity))
 	if err != nil {
 		fmt.Println("GetActivitySendMsgListAll Err:", err.Error())
 		return
@@ -103,7 +100,6 @@ func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
 		var reserveResults string
 		var first string
 		openIdItem := new(models.OpenIdList)
-		//openIdItem.OpenId = "oN0jD1QwcA2uRD0BC4mH5zJMo0eg"
 		openIdItem.OpenId = v.OpenId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
@@ -118,7 +114,7 @@ func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
 	err = models.UPdateSendedMsgMeetingStatus(signupIds)
 	if err != nil {
 		var msg string
-		go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+		go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 		utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
 	}
 	return
@@ -131,7 +127,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("err:", err)
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
 		}
 		if msg != "" {
@@ -139,8 +135,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
-	fmt.Println("发送附件")
-	endDate := time.Now().Add(+time.Minute * 60).Format("2006-01-02 15:04:05")
+	endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
 	total, err := models.GetCountActivityIdToSendFile(endDate)
 
 	if total == 0 {
@@ -158,7 +153,6 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 	}
 
 	for _, v := range listActivity {
-		fmt.Println(v.ActivityId)
 		activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
 		if activityInfo == nil {
 			msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
@@ -191,6 +185,9 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 			msg = "新增Sheet失败,Err:" + errFile.Error()
 			return
 		}
+		//设置宽度
+		_ = sheet.SetColWidth(1, 1, 15)
+		_ = sheet.SetColWidth(3, 3, 30)
 		//标头
 		rowTitle := sheet.AddRow()
 		cellA := rowTitle.AddCell()
@@ -240,7 +237,6 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 		} else if activityInfo.ChartPermissionName == "策略" || activityInfo.ChartPermissionNames == "研选" {
 			touser = utils.EmailStrategy
 		}
-		//haveSuccess := utils.SendEmailHaveFile(title, content, fileName, touser)
 		sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
 		if sendResult {
 			errFile = models.UPdateActivityIdToSendFile(v.ActivityId)
@@ -250,7 +246,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 			}
 			os.Remove(downLoadnFilePath)
 		} else {
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
 		}
 	}
@@ -401,7 +397,7 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("err:", err)
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
 		}
 		if msg != "" {
@@ -409,7 +405,7 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
-	endDate := time.Now().Add(+time.Minute * 60).Format("2006-01-02 15:04:05")
+	endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
 	condition := `AND  a.activity_type_id = 1 AND a.chart_permission_name = '研选' `
 	total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
 	if total == 0 {
@@ -426,7 +422,6 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 		return
 	}
 	for _, v := range listActivity {
-		fmt.Println(v.ActivityId)
 		activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
 		if activityInfo == nil {
 			msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
@@ -459,6 +454,9 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 			msg = "新增Sheet失败,Err:" + errFile.Error()
 			return
 		}
+		//设置宽度
+		_ = sheet.SetColWidth(1, 1, 30)
+		_ = sheet.SetColWidth(2, 2, 60)
 		//标头
 		rowTitle := sheet.AddRow()
 		cellA := rowTitle.AddCell()
@@ -489,7 +487,7 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 		title := activityInfo.ActivityName + "-活动带问"
 		content := "活动带问详情"
 		fileName := downLoadnFilePath
-		if utils.WxMsgTemplateIdAskMsgMobile == "" {
+		if utils.RunMode == "release" {
 			touser = "cxzhang@hzinsights.com;ywang@hzinsights.com;tshen@hzinsights.com"
 		} else {
 			touser = "cxzhang@hzinsights.com;jhwang@hzinsights.com;tshen@hzinsights.com"
@@ -503,7 +501,7 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 			}
 			os.Remove(downLoadnFilePath)
 		} else {
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.RunMode), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
 		}
 	}
@@ -516,16 +514,14 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 	var touser string
 	defer func() {
 		if err != nil {
-			fmt.Println("err:", err)
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
 		}
 		if msg != "" {
-			fmt.Println(msg)
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
-	endDate := time.Now().Add(+time.Minute * 15).Format("2006-01-02 15:04:05")
+	endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
 	condition := `AND  a.activity_type_id = 1 AND  a.chart_permission_name != '研选' `
 	total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
 	if total == 0 {
@@ -547,7 +543,6 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 		return
 	}
 	for _, v := range listActivity {
-		fmt.Println(v.ActivityId)
 		activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
 		if activityInfo == nil {
 			msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
@@ -563,12 +558,16 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 				touser += v.Email + ";"
 			}
 		}
-		if touser != "" {
+		if touser == "" {
+			msg = "没有对应的邮箱"
+			return
+		}
+		if utils.RunMode == "release" {
 			touser += "tshen@hzinsights.com;cxzhang@hzinsights.com"
 		} else {
-			fmt.Println("没有对应的邮箱")
-			return
+			touser = "tshen@hzinsights.com;cxzhang@hzinsights.com"
 		}
+
 		//创建excel
 		dir, errFile := os.Executable()
 		exPath := filepath.Dir(dir)
@@ -591,6 +590,9 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 			msg = "新增Sheet失败,Err:" + errFile.Error()
 			return
 		}
+		//设置宽度
+		_ = sheet.SetColWidth(1, 1, 30)
+		_ = sheet.SetColWidth(2, 2, 60)
 		//标头
 		rowTitle := sheet.AddRow()
 		cellA := rowTitle.AddCell()
@@ -620,7 +622,6 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 		title := activityInfo.ActivityName + "-活动带问"
 		content := "活动带问详情"
 		fileName := downLoadnFilePath
-		//haveSuccess := utils.SendEmailHaveFile(title, content, fileName, touser)
 		sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
 		if sendResult {
 			errFile = models.UPdateActivityMsgToSendFile(v.ActivityId)
@@ -630,7 +631,7 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 			}
 			os.Remove(downLoadnFilePath)
 		} else {
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
 		}
 	}

+ 8 - 7
services/task.go

@@ -18,12 +18,15 @@ func Task() {
 	if utils.RunMode == "release" {
 		//syncTacticsListAddreport := task.NewTask("syncTacticsListAddreport", "0 */5 * * * *", SyncTacticsListAddreport) //同步文章
 		//task.AddTask("syncTacticsListAddreport", syncTacticsListAddreport)
-
 		getSummarytoEs := task.NewTask("getSummarytoEs", "0 */30 * * * *", GetSummarytoEs) //同步纪要库内容到Es
 		task.AddTask("getSummarytoEs", getSummarytoEs)
-		//} else {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */5 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
 		task.AddTask("getArticleListByApi", getArticleListByApi)
+		//会议提醒模板消息推送
+		sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 8-22 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
+		task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
+		sendActivityBeginMsgMeeting := task.NewTask("sendActivityBeginMsgMeeting", "0 */5 8-22 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
+		task.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
 	}
 	//修改任务状态
 	updateActivitySattus := task.NewTask("syncTacticsListAddreport", "0 */1 8-22 * * *", UpdateActivitySattus)
@@ -33,11 +36,7 @@ func Task() {
 	task.AddTask("updateIndustrialManagementLabel", updateIndustrialManagementLabel)
 	//更新报告的搜索栏内容
 	//UpdateIndustrialManagementSubjectNnames()
-	//会议提醒模板消息推送
-	sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 8-22 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
-	task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
-	sendActivityBeginMsgMeeting := task.NewTask("sendActivityBeginMsgMeeting", "0 */5 8-22 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
-	task.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
+
 	//预约外呼名单,会前1小时自动发送邮件给专家组
 	sendEmailFileToExpert := task.NewTask("sendEmailFileToExpert", "0 */5 8-22 * * *", SendEmailFileToExpert) //预约外呼名单,会前1小时自动发送邮件给专家组
 	task.AddTask("sendEmailFileToExpert", sendEmailFileToExpert)
@@ -60,6 +59,8 @@ func Task() {
 
 	//GetAddpArticle() //同步日度点评数据
 	task.StartTask()
+	defer task.StopTask()
+
 	fmt.Println("end")
 }
 

+ 12 - 9
services/user.go

@@ -598,11 +598,10 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("err:", err, time.Now())
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
 		}
 		if msg != "" {
-			fmt.Println(msg)
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
@@ -614,7 +613,6 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 	if mobileStr == "" {
 		mobileStr = "1"
 	}
-	fmt.Println("发送附件")
 	//手机号新增
 	fieldStr = ` u.mobile,u.country_code,u.real_name,c.company_name,u.company_id,cp.seller_name,cp.status,`
 	condition = `  AND cp.status IN ( '正式', '试用' ) AND u.mobile IN (` + mobileStr + `) `
@@ -666,6 +664,10 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 		msg = "新增Sheet失败,Err:" + err.Error()
 		return
 	}
+	//设置宽度
+	_ = sheet.SetColWidth(2, 2, 15)
+	_ = sheet.SetColWidth(6, 6, 30)
+	_ = sheet.SetColWidth(13, 13, 35)
 	//标头
 	rowTitle := sheet.AddRow()
 	cellA := rowTitle.AddCell()
@@ -751,9 +753,9 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 	var sendResult bool
 	if len(rep.List) > 0 {
 		sendResult = utils.SendEmailByHongze(title, content, utils.EmaiWhiteUserList, fileName, title+".xlsx")
-		//sendResult = utils.SendEmailByHongze(title, content, "cxzhang@hzinsights.com", fileName, title+".xlsx")
+
 	}
-	fmt.Println(sendResult)
+
 	os.Remove(downLoadnFilePath)
 	//创建冻结excel
 	dir, errFile = os.Executable()
@@ -777,6 +779,10 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 		msg = "新增Sheet失败,Err:" + err.Error()
 		return
 	}
+	//设置宽度
+	_ = sheet.SetColWidth(2, 2, 15)
+	_ = sheet.SetColWidth(6, 6, 30)
+	_ = sheet.SetColWidth(13, 13, 35)
 	//标头
 	rowTitle = sheet.AddRow()
 	cellA = rowTitle.AddCell()
@@ -870,12 +876,10 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 	var sendResult2 bool
 	if len(listFrozen) > 0 {
 		sendResult2 = utils.SendEmailByHongze(title, content, utils.EmaiWhiteUserList, fileName, title+".xlsx")
-		//sendResult2 = utils.SendEmailByHongze(title, content, "cxzhang@hzinsights.com", fileName, title+".xlsx")
 	}
-	fmt.Println(sendResult2)
 	os.Remove(downLoadnFilePaths)
+	//更新名单表
 	if sendResult {
-		fmt.Println(len(listMobile))
 		if len(listMobile) > 0 {
 			for _, v := range listMobile {
 				item := new(models.WxUserWhite)
@@ -896,7 +900,6 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 			}
 		}
 		if len(listOutboundMobile) > 0 {
-			fmt.Println(len(listOutboundMobile))
 			for _, v := range listOutboundMobile {
 				item := new(models.WxUserWhite)
 				item.OutboundMobile = v.Mobile

+ 18 - 0
services/wechat.go

@@ -37,6 +37,22 @@ func WxGetUserOpenIdByCode(code string) (item *WxAccessToken, err error) {
 	return
 }
 
+//小助手
+func WxGetUserOpenIdByCodeXzs(code string) (item *WxAccessToken, err error) {
+	if code == "" {
+		err = errors.New("code is empty")
+		return nil, err
+	}
+	requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
+	requestUrl = fmt.Sprintf(requestUrl, utils.WxPublicIdXzs, utils.WxPublicSecretXzs, code)
+	result, err := http.Get(requestUrl)
+	if err != nil {
+		return nil, err
+	}
+	err = json.Unmarshal(result, &item)
+	return
+}
+
 type WxToken struct {
 	AccessToken string `json:"access_token"`
 	ExpiresIn   int    `json:"expires_in"`
@@ -49,6 +65,7 @@ func WxGetToken() (item *WxToken, err error) {
 	requestUrl = fmt.Sprintf(requestUrl, utils.WxAppId, utils.WxAppSecret)
 	fmt.Println("requestUrl:", requestUrl)
 	result, err := http.Get(requestUrl)
+	utils.FileLog.Info("WxGetToken Result:%s ", string(result))
 	if err != nil {
 		return nil, err
 	}
@@ -82,6 +99,7 @@ func WxGetUserInfo(openId, accessToken string) (item *WxUserInfo, err error) {
 	requestUrl := `https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s`
 	requestUrl = fmt.Sprintf(requestUrl, accessToken, openId)
 	result, err := http.Get(requestUrl)
+	utils.FileLog.Info("WxGetUserInfo Result:%s ", string(result))
 	if err != nil {
 		return
 	}

+ 7 - 6
services/wechat_send_msg.go

@@ -23,7 +23,7 @@ func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle,
 		}
 	}()
 
-	accessToken, err := models.GetWxAccessToken()
+	accessToken, err := models.GetWxAccessTokenByXzs()
 	if err != nil {
 		msg = "GetWxAccessToken Err:" + err.Error()
 		return
@@ -50,7 +50,7 @@ func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle,
 	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
 	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
 
-	sendMap["template_id"] = utils.WxMsgTemplateIdApply
+	sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
 	sendMap["data"] = sendData
 	sendTemplateMsg(sendUrl, openId, sendMap)
 	fmt.Println("send end")
@@ -68,7 +68,7 @@ func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleT
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
-	accessToken, err := models.GetWxAccessToken()
+	accessToken, err := models.GetWxAccessTokenByXzs()
 	if err != nil {
 		msg = "GetWxAccessToken Err:" + err.Error()
 		return
@@ -91,7 +91,7 @@ func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleT
 	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
 	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
 
-	sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancel
+	sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancelXzs
 	sendMap["data"] = sendData
 	sendTemplateMsg(sendUrl, openId, sendMap)
 	fmt.Println("send end")
@@ -109,7 +109,7 @@ func SendPermissionApplyTemplateMsg(realName, companyName, mobile, openId, apply
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
-	accessToken, err := models.GetWxAccessToken()
+	accessToken, err := models.GetWxAccessTokenByXzs()
 	if err != nil {
 		msg = "GetWxAccessToken Err:" + err.Error()
 		return
@@ -136,7 +136,7 @@ func SendPermissionApplyTemplateMsg(realName, companyName, mobile, openId, apply
 	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
 	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
 
-	sendMap["template_id"] = utils.WxMsgTemplateIdApply
+	sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
 	sendMap["data"] = sendData
 	sendTemplateMsg(sendUrl, openId, sendMap)
 	fmt.Println("send end")
@@ -168,6 +168,7 @@ func toSendTemplateMsg(sendUrl string, data []byte) (err error) {
 	body, _ := ioutil.ReadAll(resp.Body)
 	var templateResponse SendTemplateResponse
 	err = json.Unmarshal(body, &templateResponse)
+	fmt.Println(templateResponse)
 	utils.FileLog.Info("SendResult %s:", string(body))
 	if err != nil {
 		utils.FileLog.Info("SendResult Unmarshal Err:%s", err.Error())

+ 6 - 4
services/wx_template_msg.go

@@ -22,7 +22,7 @@ func SendWxMsgWithFrequency(first, activityName, reserveResults, activityTime, a
 		fmt.Println("line 21", err, msg)
 	}()
 	utils.FileLog.Info("%s", "services SendMsg")
-	accessToken, err := models.GetWxAccessToken()
+	accessToken, err := models.GetWxAccessTokenByXzs()
 	if err != nil {
 		msg = "GetWxAccessToken Err:" + err.Error()
 		return
@@ -33,7 +33,7 @@ func SendWxMsgWithFrequency(first, activityName, reserveResults, activityTime, a
 	}
 
 	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	templateId := utils.WxMsgTemplateIdActivityApply
+	templateId := utils.WxMsgTemplateIdActivityApplyXzs
 	sendMap := make(map[string]interface{})
 	sendData := make(map[string]interface{})
 	sendMap["template_id"] = templateId
@@ -61,7 +61,8 @@ func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.
 		fmt.Println("line 21", err, msg)
 	}()
 	utils.FileLog.Info("%s", "services SendMsg")
-	accessToken, err := models.GetWxAccessToken()
+	//accessToken, err := models.GetWxAccessToken()
+	accessToken, err := models.GetWxAccessTokenByXzs()
 	if err != nil {
 		msg = "GetWxAccessToken Err:" + err.Error()
 		return
@@ -81,7 +82,8 @@ func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.
 	keyword4 = askMsg
 	remark = title
 	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	templateId := utils.WxMsgTemplateIdAskMsg
+	//templateId := utils.WxMsgTemplateIdAskMsg
+	templateId := utils.WxMsgTemplateIdAskMsgXzs
 	sendMap := make(map[string]interface{})
 	sendData := make(map[string]interface{})
 	sendMap["template_id"] = templateId

+ 40 - 12
utils/config.go

@@ -20,17 +20,24 @@ var (
 //微信配置信息
 var (
 	WxId        string //微信原始ID
-	WxAppId     string
-	WxAppSecret string
-
-	WxMsgTemplateIdApply           string //申请待处理
-	WxMsgTemplateIdApplyCancel     string //预约取消提醒
-	WxMsgTemplateIdPermissionApply string //预约取消提醒
-	WxMsgTemplateIdActivityApply   string //活动预约消息提醒
-	WxMsgTemplateIdActivityChange  string //活动预约变更提醒
-	WxMsgTemplateIdAskMsg          string //手机号用户【XXX】发送模板消息模板ID
-	WxMsgTemplateIdAskMsgMobile    string //手机号用户【XXX】发送模板消息
-	WxMsgTemplateIdAskMsgMobileAll string //手机号用户【XXX】发送模板消息
+	WxAppId     string //查研观向小程序
+	WxAppSecret string //查研观向小程序
+
+	WxPublicIdXzs     string //查研观向小助手公众号
+	WxPublicSecretXzs string //查研观向小助手公众号
+
+	WxMsgTemplateIdApply            string //申请待处理
+	WxMsgTemplateIdApplyXzs         string //申请待处理(小助手)
+	WxMsgTemplateIdApplyCancel      string //预约取消提醒
+	WxMsgTemplateIdApplyCancelXzs   string //预约取消提醒(小助手)
+	WxMsgTemplateIdPermissionApply  string //预约取消提醒
+	WxMsgTemplateIdActivityApply    string //活动预约消息提醒
+	WxMsgTemplateIdActivityApplyXzs string //活动预约消息提醒(小助手)
+	WxMsgTemplateIdActivityChange   string //活动预约变更提醒
+	WxMsgTemplateIdAskMsg           string //手机号用户【XXX】发送模板消息模板ID
+	WxMsgTemplateIdAskMsgXzs        string //手机号用户【XXX】发送模板消息模板ID(小助手)
+	WxMsgTemplateIdAskMsgMobile     string //手机号用户【XXX】发送模板消息
+	WxMsgTemplateIdAskMsgMobileAll  string //手机号用户【XXX】发送模板消息
 )
 
 //微信公众号配置信息
@@ -73,6 +80,7 @@ func init() {
 		fmt.Println(Re)
 		panic(Re)
 	}
+
 	OnlineTime = "2021-06-01 00:00:01" //上线时间
 	SummaryArticleId = 1000000         //手动添加的纪要库开始ID
 	WxMsgTemplateIdAskMsgMobileAll = "15557270714,18767183922,18621268829"
@@ -124,8 +132,28 @@ func init() {
 		EmailStrategy = "jhwang@hzinsights.com;cxzhang@hzinsights.com"    //策略行业专家邮箱
 		EmaiWhiteUserList = "cxzhang@hzinsights.com"
 		WxMsgTemplateIdAskMsg = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"
-		WxMsgTemplateIdAskMsgMobile = "15557270714,17634786714,18767183922"
+		WxMsgTemplateIdAskMsgMobile = "15557270714,17634786714,18767183922,17516315016"
 	}
+
+	//查研观向小助手
+	if RunMode != "release" {
+		//原有的模板ID
+		WxPublicIdXzs = "wx9b5d7291e581233a"                                            //查研观向小助手
+		WxPublicSecretXzs = "f4d52e34021eee262dce9682b31f8861"                          //查研观向小助手
+		WxMsgTemplateIdActivityApplyXzs = "Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY" //活动预约消息提醒(小助手)
+		WxMsgTemplateIdAskMsgXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"        //手机号用户【XXX】发送模板消息模板ID(小助手)
+		WxMsgTemplateIdApplyXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"         //申请待处理(小助手)
+		WxMsgTemplateIdApplyCancelXzs = "UU_d7ks0XZBnWg2xFzxL9Heilm4kisX39K7dr4SDdO8"   ////预约取消提醒(小助手)
+	} else {
+		//新的模板ID
+		WxPublicIdXzs = "wxb7cb8a15abad5b8e"                                            //查研观向小助手
+		WxPublicSecretXzs = "4dd35cd1598b27bd1dc9a3b299b289fa"                          //查研观向小助手
+		WxMsgTemplateIdActivityApplyXzs = "nsfOASdg2O5KNk8hnBvu8MFsoP9X0o8ED6yPLPvEkao" //活动预约消息提醒(小助手)
+		WxMsgTemplateIdAskMsgXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"        //手机号用户【XXX】发送模板消息模板ID(小助手)
+		WxMsgTemplateIdApplyXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"         //申请待处理(小助手)
+		WxMsgTemplateIdApplyCancelXzs = "gCSCAWNNhjkzE2V1cjbIV_Ex68R_8LM_u25qDlSKWyM"   ////预约取消提醒(小助手)
+	}
+
 }
 
 //http://webapi.brilliantstart.cn/api/