瀏覽代碼

Merge remote-tracking branch 'origin/feature/eta2.3.4_business_user'

Roc 2 月之前
父節點
當前提交
a9dc4d165c

+ 256 - 0
controllers/eta_forum/eta_forum.go

@@ -0,0 +1,256 @@
+package eta_forum
+
+import (
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/eta_forum"
+	"eta/eta_api/utils"
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+type EtaForumController struct {
+	controllers.BaseAuthController
+}
+
+// UserChartList
+// @Title 查询用户在eta社区中有权限查看的图表列表
+// @Description 查询用户在eta社区中有权限查看的图表列表
+// @Param	request	body data_manage.SetChartInfoImageReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /chart_list [get]
+func (this *EtaForumController) UserChartList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	keyword := this.GetString("Keyword")
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	businessCode := utils.BusinessCode
+	userMobile := sysUser.Mobile
+	telAreaCode := sysUser.TelAreaCode
+	if businessCode == "" {
+		br.Msg = "商户号未配置"
+		return
+	}
+
+	if userMobile == "" {
+		br.Msg = "请先绑定手机号"
+		return
+	}
+	if telAreaCode == "" {
+		telAreaCode = utils.TelAreaCodeHome
+	}
+
+	resp, err, _ := eta_forum.GetUserChartList(businessCode, userMobile, telAreaCode, keyword, currentIndex, pageSize)
+	if err != nil {
+		/*br.Msg = errMsg
+		br.ErrMsg = err.Error()*/
+		page := paging.GetPaging(currentIndex, pageSize, 0)
+		resp = eta_forum.UserChartListRespItem{
+			ChartInfoList: make([]*data_manage.ChartInfo, 0),
+			Paging:        page,
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "保存成功"
+		br.Data = resp
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+}
+
+// UserCollectChartClassifyList
+// @Title 查询社区中用户收藏的分类列表
+// @Description 查询社区中用户收藏的分类列表
+// @Param	request	body data_manage.SetChartInfoImageReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /collect/chart_classify [get]
+func (this *EtaForumController) UserCollectChartClassifyList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	businessCode := utils.BusinessCode
+	userMobile := sysUser.Mobile
+	telAreaCode := sysUser.TelAreaCode
+	if businessCode == "" {
+		br.Msg = "商户号未配置"
+		return
+	}
+
+	if userMobile == "" {
+		br.Msg = "请先绑定手机号"
+		return
+	}
+	if telAreaCode == "" {
+		telAreaCode = utils.TelAreaCodeHome
+	}
+
+	resp, err, _ := eta_forum.GetUserCollectChartClassifyList(businessCode, userMobile, telAreaCode)
+	if err != nil {
+		resp = eta_forum.UserCollectChartClassifyListItem{
+			List:     make([]*eta_forum.ChartCollectClassifyItem, 0),
+			Language: "CN",
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "保存成功"
+		br.Data = resp
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+}
+
+// UserCollectChartList
+// @Title 查询社区中用户收藏的图表列表
+// @Description 查询社区中用户收藏的图表列表
+// @Param	request	body data_manage.SetChartInfoImageReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /collect/chart [get]
+func (this *EtaForumController) UserCollectChartList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	businessCode := utils.BusinessCode
+	userMobile := sysUser.Mobile
+	telAreaCode := sysUser.TelAreaCode
+	if businessCode == "" {
+		br.Msg = "商户号未配置"
+		return
+	}
+
+	if userMobile == "" {
+		br.Msg = "请先绑定手机号"
+		return
+	}
+	if telAreaCode == "" {
+		telAreaCode = utils.TelAreaCodeHome
+	}
+
+	collectClassifyIds := this.GetString("CollectClassifyIds")
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	keyword := this.GetString("Keyword")
+
+	resp, err, _ := eta_forum.GetUserCollectChartList(businessCode, userMobile, telAreaCode, keyword, collectClassifyIds, currentIndex, pageSize)
+	if err != nil {
+		page := paging.GetPaging(currentIndex, pageSize, 0)
+		resp = eta_forum.UserCollectChartListRespItem{
+			List:   make([]*eta_forum.ChartCollectView, 0),
+			Paging: page,
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "保存成功"
+		br.Data = resp
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+}
+
+// CommonChartInfoDetailFromUniqueCode
+// @Title 根据编码获取图表详情
+// @Description 根据编码获取图表详情接口
+// @Param   UniqueCode   query   int  true       "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
+// @Param   IsCache   query   bool  true       "是否走缓存,默认false"
+// @Success 200 {object} data_manage.ChartInfoDetailFromUniqueCodeResp
+// @router /chart/from_unique_code [get]
+func (this *EtaForumController) CommonChartInfoDetailFromUniqueCode() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	uniqueCode := this.GetString("UniqueCode")
+	if uniqueCode == "" {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,uniqueCode is empty"
+		return
+	}
+
+	//是否走缓存
+	isCache, _ := this.GetBool("IsCache")
+	resp := new(data_manage.ChartInfoDetailFromUniqueCodeResp)
+	status := true
+	forumResp, err, _ := eta_forum.GeChartFromUniqueCode(uniqueCode, isCache)
+	if err != nil {
+		endInfoList := make([]*data_manage.ChartEdbInfoMapping, 0)
+		resp.EdbInfoList = endInfoList
+		resp.ChartInfo = nil
+		resp.Status = false
+
+		br.Data = resp
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
+	chartInfo := forumResp.ChartInfo
+	if chartInfo == nil {
+		endInfoList := make([]*data_manage.ChartEdbInfoMapping, 0)
+		resp.EdbInfoList = endInfoList
+		resp.ChartInfo = nil
+		resp.Status = false
+
+		br.Data = resp
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
+	resp.ChartInfo = chartInfo
+	resp.Status = status
+	resp.DataResp = forumResp.DataResp
+	resp.EdbInfoList = forumResp.EdbInfoList
+	resp.XDataList = forumResp.XDataList
+	resp.YDataList = forumResp.YDataList
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 4 - 1
controllers/sys_department.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services/eta_forum"
 	"eta/eta_api/utils"
 	"fmt"
 	"strings"
@@ -64,6 +65,7 @@ func (this *SysDepartmentController) Add() {
 		syncData.DepartmentId = int(departmentId)
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_DEPARTMENT, syncData)
 	}
+	go eta_forum.DepartmentSave(int(departmentId))
 
 	br.Ret = 200
 	br.Success = true
@@ -123,6 +125,7 @@ func (this *SysDepartmentController) Edit() {
 		syncData.DepartmentId = req.DepartmentId
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_DEPARTMENT, syncData)
 	}
+	go eta_forum.DepartmentSave(req.DepartmentId)
 
 	br.Ret = 200
 	br.Success = true
@@ -166,7 +169,7 @@ func (this *SysDepartmentController) Delete() {
 		syncData.DepartmentId = req.DepartmentId
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_DEPARTMENT, syncData)
 	}
-
+	go eta_forum.DepartmentDelete(req.DepartmentId)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "删除成功"

+ 9 - 2
controllers/sys_group.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services/eta_forum"
 	"eta/eta_api/utils"
 	"strings"
 	"time"
@@ -42,6 +43,7 @@ func (this *SysGroupController) Add() {
 		return
 	}
 	groupNameArr := strings.Split(req.GroupName, ",")
+	groupIds := make([]int, 0)
 	for _, v := range groupNameArr {
 		count, err := system.GetSysGroupCount(req.DepartmentId, v)
 		if err != nil {
@@ -68,8 +70,11 @@ func (this *SysGroupController) Add() {
 				syncData.GroupId = int(groupId)
 				_ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
 			}
+			groupIds = append(groupIds, int(groupId))
 		}
 	}
+
+	go eta_forum.GroupSave(groupIds)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "新增成功"
@@ -128,7 +133,9 @@ func (this *SysGroupController) Edit() {
 		syncData.GroupId = req.GroupId
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
 	}
-
+	groupIds := make([]int, 0)
+	groupIds = append(groupIds, req.GroupId)
+	go eta_forum.GroupSave(groupIds)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "修改成功"
@@ -177,7 +184,7 @@ func (this *SysGroupController) Delete() {
 		syncData.GroupId = req.GroupId
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
 	}
-
+	go eta_forum.GroupDelete(req.GroupId)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "删除成功"

+ 5 - 2
controllers/sys_role.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services"
+	"eta/eta_api/services/eta_forum"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -70,6 +71,8 @@ func (this *SysRoleController) Add() {
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_ROLE, syncData)
 	}
 
+	go eta_forum.RoleSave(int(roleId))
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "新增成功"
@@ -138,7 +141,7 @@ func (this *SysRoleController) Edit() {
 		syncData.RoleId = item.RoleId
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_ROLE, syncData)
 	}
-
+	go eta_forum.RoleSave(item.RoleId)
 	br.Ret = 200
 	br.Success = true
 	br.IsAddLog = true
@@ -194,7 +197,7 @@ func (this *SysRoleController) Delete() {
 		syncData.RoleId = role.RoleId
 		_ = utils.Rc.LPush(utils.CACHE_SYNC_ROLE, syncData)
 	}
-
+	go eta_forum.RoleDelete(role.RoleId)
 	br.Ret = 200
 	br.Success = true
 	br.IsAddLog = true

+ 9 - 0
models/system/sys_group.go

@@ -1,6 +1,7 @@
 package system
 
 import (
+	"eta/eta_api/utils"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
@@ -130,6 +131,14 @@ func GetSysGroupByGroupId(groupId int) (items []*SysGroupList, err error) {
 	return
 }
 
+// GetSysGroupByGroupIds 销售主管用,查找销售主管所在大组的名称
+func GetSysGroupByGroupIds(groupIds []int) (items []*SysGroup, err error) {
+	sql := `SELECT * FROM sys_group WHERE group_id in (` + utils.GetOrmInReplace(len(groupIds)) + `) ORDER BY sort ASC, create_time ASC`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, groupIds).QueryRows(&items)
+	return
+}
+
 // GetChildSysGroupByGroupId 通过上级分组id获取下级的分组id
 func GetChildSysGroupByGroupId(groupId int) (items []*SysGroup, err error) {
 	sql := `SELECT * FROM sys_group WHERE parent_id=? ORDER BY sort ASC, create_time ASC`

+ 8 - 0
models/system/sys_role.go

@@ -18,6 +18,7 @@ type SysRole struct {
 	RoleName     string    `description:"角色名称"`
 	RoleType     string    `description:"角色类型"`
 	RoleTypeCode string    `description:"角色类型编码"`
+	RoleLevel    int       `description:"角色等级:0-表示一级角色,每个账号只能绑定一个一级角色 ,1-表示二级角色,每个账号可以绑定多个二级 角色"`
 	CreateTime   time.Time `description:"创建时间"`
 	ModifyTime   time.Time
 }
@@ -57,6 +58,13 @@ func GetSysRoleById(roleId int) (item *SysRoleItem, err error) {
 	return
 }
 
+func GetRoleInfoById(roleId int) (item *SysRole, err error) {
+	sql := `SELECT * FROM sys_role WHERE role_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, roleId).QueryRow(&item)
+	return
+}
+
 func GetSysRoleByName(roleName string) (item *SysRoleItem, err error) {
 	sql := `SELECT * FROM sys_role WHERE role_name=? `
 	o := orm.NewOrm()

+ 36 - 0
routers/commentsRouter.go

@@ -8125,6 +8125,42 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"],
+        beego.ControllerComments{
+            Method: "CommonChartInfoDetailFromUniqueCode",
+            Router: `/chart/from_unique_code`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"],
+        beego.ControllerComments{
+            Method: "UserChartList",
+            Router: `/chart_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"],
+        beego.ControllerComments{
+            Method: "UserCollectChartList",
+            Router: `/collect/chart`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/eta_forum:EtaForumController"],
+        beego.ControllerComments{
+            Method: "UserCollectChartClassifyList",
+            Router: `/collect/chart_classify`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/eta_trial:EtaTrialController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/eta_trial:EtaTrialController"],
         beego.ControllerComments{
             Method: "QuestionnaireCommit",

+ 6 - 0
routers/router.go

@@ -27,6 +27,7 @@ import (
 	"eta/eta_api/controllers/document_manage"
 	"eta/eta_api/controllers/edb_monitor"
 	"eta/eta_api/controllers/english_report"
+	"eta/eta_api/controllers/eta_forum"
 	"eta/eta_api/controllers/eta_trial"
 	"eta/eta_api/controllers/fe_calendar"
 	"eta/eta_api/controllers/material"
@@ -438,6 +439,11 @@ func init() {
 				&residual_analysis.ResidualAnalysisController{},
 			),
 		),
+		web.NSNamespace("/eta_forum",
+			web.NSInclude(
+				&eta_forum.EtaForumController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 217 - 0
services/eta_forum/chart_collect.go

@@ -0,0 +1,217 @@
+package eta_forum
+
+import (
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
+)
+
+type UserChartListReq struct {
+	Keyword         string `description:"搜索关键词"`
+	PageSize        int
+	CurrentIndex    int
+	UserMobile      string `description:"用户手机号"`
+	BusinessCode    string `description:"商户号"`
+	UserTelAreaCode string `description:"手机号区号"`
+}
+
+type UserChartListResp struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        *UserChartListRespItem
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+
+type UserChartListRespItem struct {
+	ChartInfoList []*data_manage.ChartInfo
+	Paging        *paging.PagingItem `description:"分页数据"`
+}
+
+type UserCollectChartClassifyListResp struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        *UserCollectChartClassifyListItem
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+
+type UserCollectChartClassifyListItem struct {
+	List     []*ChartCollectClassifyItem
+	Language string `description:"指标的展示语言,CN:中文,EN:英文"`
+}
+
+// ChartCollectClassifyItem 我的图表分类信息
+type ChartCollectClassifyItem struct {
+	CollectClassifyId int    `description:"分类ID"`
+	ClassifyName      string `description:"分类名称"`
+	UserId            int    `description:"创建人id"`
+	ChartNum          int    `description:"分类下的图表数量"`
+}
+
+type UserCollectChartListResp struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        *UserCollectChartListRespItem
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+type UserCollectChartListRespItem struct {
+	Paging *paging.PagingItem
+	List   []*ChartCollectView
+}
+
+type ChartCollectView struct {
+	ChartCollectId    int
+	ChartInfoId       int       `description:"图表id"`
+	UserId            int       `description:"用户id"`
+	CreateTime        time.Time `description:"创建时间"`
+	CollectTime       time.Time `description:"收藏时间"`
+	CollectClassifyId int
+	ChartName         string `description:"来源名称"`
+	ChartNameEn       string `description:"英文图表名称"`
+	ChartImage        string `description:"图表图片"`
+	UniqueCode        string `description:"图表唯一编码"`
+}
+
+type ChartFromUniqueCodeResp struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        *ChartFromUniqueCodeRespItem
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+
+type ChartFromUniqueCodeRespItem struct {
+	ChartInfo   *data_manage.ChartInfoView
+	EdbInfoList []*data_manage.ChartEdbInfoMapping
+	XEdbIdValue []int               `description:"柱方图的x轴数据,指标id"`
+	YDataList   []data_manage.YData `description:"柱方图的y轴数据"`
+	XDataList   []data_manage.XData `description:"商品价格曲线的X轴数据"`
+	//BarChartInfo BarChartInfoReq `description:"柱方图的配置"`
+	//CorrelationChartInfo *CorrelationInfo `description:"相关性图表信息"`
+	DataResp  interface{} `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
+	WaterMark string      `description:"水印"`
+}
+
+// GetUserChartList 查询社区中对用户可见的图表列表
+func GetUserChartList(businessCode, userMobile, telAreaCode, keyword string, currentIndex, pageSize int) (resp UserChartListRespItem, err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			msg := fmt.Sprintf("查询社区中对用户可见的图表列表 GetUserChartList:Err:%v,ErrMsg:%s", err, errMsg)
+			utils.FileLog.Info(msg)
+			go alarm_msg.SendAlarmMsg(msg, 3)
+		}
+	}()
+	urlQuery := fmt.Sprintf("BusinessCode=%s&UserMobile=%s&UserTelAreaCode=%s&Keyword=%s&CurrentIndex=%d&PageSize=%d", businessCode, userMobile, telAreaCode, keyword, currentIndex, pageSize)
+	result, err := GetUserChartListLib(urlQuery)
+	if err != nil {
+		errMsg = "查询失败"
+		err = fmt.Errorf("查询失败,Err:" + err.Error())
+		return
+	}
+	if result.Ret != 200 {
+		errMsg = "查询失败"
+		err = fmt.Errorf(result.Msg + result.ErrMsg)
+		return
+	}
+	resp.Paging = result.Data.Paging
+	resp.ChartInfoList = result.Data.ChartInfoList
+
+	return
+}
+
+// GetUserCollectChartClassifyList 查询社区中用户收藏的分类列表
+func GetUserCollectChartClassifyList(businessCode, userMobile, telAreaCode string) (resp UserCollectChartClassifyListItem, err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			msg := fmt.Sprintf("查询社区中用户收藏的分类列表 GetUserCollectChartClassifyList:Err:%v,ErrMsg:%s", err, errMsg)
+			utils.FileLog.Info(msg)
+			go alarm_msg.SendAlarmMsg(msg, 3)
+		}
+	}()
+	urlQuery := fmt.Sprintf("BusinessCode=%s&UserMobile=%s&UserTelAreaCode=%s", businessCode, userMobile, telAreaCode)
+	result, err := getUserCollectChartClassifyLib(urlQuery)
+	if err != nil {
+		errMsg = "查询失败"
+		err = fmt.Errorf("查询失败,Err:" + err.Error())
+		return
+	}
+	if result.Ret != 200 {
+		errMsg = "查询失败"
+		err = fmt.Errorf(result.Msg + result.ErrMsg)
+		return
+	}
+	resp.List = result.Data.List
+	resp.Language = result.Data.Language
+
+	return
+}
+
+// GetUserCollectChartList 查询社区中对用户收藏的图表列表
+func GetUserCollectChartList(businessCode, userMobile, telAreaCode, keyword, collectClassifyIds string, currentIndex, pageSize int) (resp UserCollectChartListRespItem, err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			msg := fmt.Sprintf("查询社区中对用户收藏的图表列表 GetUserCollectChartList:Err:%v,ErrMsg:%s", err, errMsg)
+			utils.FileLog.Info(msg)
+			go alarm_msg.SendAlarmMsg(msg, 3)
+		}
+	}()
+	urlQuery := fmt.Sprintf("BusinessCode=%s&UserMobile=%s&UserTelAreaCode=%s&Keyword=%s&CollectClassifyIds=%s&CurrentIndex=%d&PageSize=%d", businessCode, userMobile, telAreaCode, keyword, collectClassifyIds, currentIndex, pageSize)
+	result, err := getUserCollectChartListLib(urlQuery)
+	if err != nil {
+		errMsg = "查询失败"
+		err = fmt.Errorf("查询失败,Err:" + err.Error())
+		return
+	}
+	if result.Ret != 200 {
+		errMsg = "查询失败"
+		err = fmt.Errorf(result.Msg + result.ErrMsg)
+		return
+	}
+	resp.Paging = result.Data.Paging
+	resp.List = result.Data.List
+
+	return
+}
+
+// GeChartFromUniqueCode 社区中根据唯一编码查询图表
+func GeChartFromUniqueCode(uniqueCode string, isCache bool) (resp ChartFromUniqueCodeRespItem, err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			msg := fmt.Sprintf("查询社区中对用户可见的图表列表 GeChartFromUniqueCode:Err:%v,ErrMsg:%s", err, errMsg)
+			utils.FileLog.Info(msg)
+			go alarm_msg.SendAlarmMsg(msg, 3)
+		}
+	}()
+	urlQuery := fmt.Sprintf("UniqueCode=%s&isCache=%v", uniqueCode, isCache)
+	result, err := getChartFromUniqueCodeLib(urlQuery)
+	if err != nil {
+		errMsg = "查询失败"
+		err = fmt.Errorf("查询失败,Err:" + err.Error())
+		return
+	}
+	if result.Ret != 200 {
+		errMsg = "查询失败"
+		err = fmt.Errorf(result.Msg + result.ErrMsg)
+		return
+	}
+	resp = *result.Data
+
+	return
+}

+ 147 - 0
services/eta_forum/eta_forum_hub_lib.go

@@ -80,6 +80,115 @@ func ChartThemeTypeSaveLib(req string) (resp *models.BaseResponse, err error) {
 	return
 }
 
+// GetUserChartListLib 查询有权限的图表列表
+func GetUserChartListLib(req string) (resp *UserChartListResp, err error) {
+	_, resultByte, err := get(req, "/v1/chart/user/chart_list")
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// getUserCollectChartClassifyLib 查询收藏的分类列表
+func getUserCollectChartClassifyLib(req string) (resp *UserCollectChartClassifyListResp, err error) {
+	_, resultByte, err := get(req, "/v1/chart_collect/classify/list")
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// getUserCollectChartListLib 查询收藏的图表列表
+func getUserCollectChartListLib(req string) (resp *UserCollectChartListResp, err error) {
+	_, resultByte, err := get(req, "/v1/chart_collect/chart/list")
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// getChartFromUniqueCodeLib 根据唯一编码查询图表
+func getChartFromUniqueCodeLib(req string) (resp ChartFromUniqueCodeResp, err error) {
+	_, resultByte, err := get(req, "/v1/chart/common/from_unique_code")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// RoleSaveLib 上传角色信息
+func RoleSaveLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/system/role/save")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// RoleDeleteLib 删除角色信息
+func RoleDeleteLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/system/role/delete")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// DepartmentSaveLib 上传部门信息
+func DepartmentSaveLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/system/department/save")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// DepartmentDeleteLib 删除部门信息
+func DepartmentDeleteLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/system/department/delete")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// GroupSaveLib 上传分组信息
+func GroupSaveLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/system/group/save")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// GroupDeleteLib 删除分组
+func GroupDeleteLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/system/group/delete")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
 // post
 func post(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
 	if utils.ETA_FORUM_HUB_URL == "" {
@@ -122,3 +231,41 @@ func HttpPost(url, postData string, params ...string) ([]byte, error) {
 	utils.FileLog.Debug("HttpPost:" + string(b))
 	return b, err
 }
+
+// get
+func get(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
+	if utils.ETA_FORUM_HUB_URL == "" {
+		err = fmt.Errorf("ETA社区桥接服务地址为空")
+		return
+	}
+	urlStr = urlStr + "?" + paramStr
+	getUrl := utils.ETA_FORUM_HUB_URL + urlStr
+	result, err = HttpGet(getUrl)
+	if err != nil {
+		err = fmt.Errorf("调用ETA社区桥接服务接口失败 error:%s", err.Error())
+		return
+	}
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+func HttpGet(url string) ([]byte, error) {
+	client := &http.Client{}
+	req, err := http.NewRequest("GET", url, nil)
+	if err != nil {
+		return nil, err
+	}
+	req.Header.Set("authorization", utils.MD5(utils.ETA_FORUM_HUB_NAME_EN+utils.ETA_FORUM_HUB_MD5_KEY))
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Debug("HttpPost:" + string(b))
+	return b, err
+}

+ 295 - 0
services/eta_forum/eta_trial.go

@@ -0,0 +1,295 @@
+package eta_forum
+
+import (
+	"encoding/json"
+	"eta/eta_api/models"
+	"eta/eta_api/models/eta_trial"
+	"eta/eta_api/services/alarm_msg"
+	"fmt"
+)
+
+// EtaTrialUserReq 更新试用客户最后登录时间和次数请求体
+type EtaTrialUserReq struct {
+	Mobile string `description:"手机号"`
+}
+
+// UpdateEtaTrialUserLogin eta_forum_hub服务-更新试用客户最后登录时间和次数
+func UpdateEtaTrialUserLogin(pars EtaTrialUserReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("GetEtaTrialMobileCount, 新增试用客户手工录入权限失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_login")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}
+
+// GetEtaTrialUserReq 获取试用客户请求体
+type GetEtaTrialUserReq struct {
+	Mobile string `description:"手机号"`
+}
+
+type EtaTrialUserResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    eta_trial.EtaTrialUserItem
+	Success bool `description:"true 执行成功,false 执行失败"`
+}
+
+// GetEtaTrialUser eta_forum_hub服务-获取试用客户信息
+func GetEtaTrialUser(pars GetEtaTrialUserReq) (res eta_trial.EtaTrialUserItem, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("GetEtaTrialUser, 获取试用客户信息, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/mobile_fetch")
+	resp := new(EtaTrialUserResp)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = resp.Data
+	return
+}
+
+// DisableEtaTrialUser eta_forum_hub服务-禁用试用客户
+func DisableEtaTrialUser(pars EtaTrialUserReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("DisableEtaTrialUser eta_forum_hub服务-禁用试用客户, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/disable")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}
+
+// RemoveEtaTrialUser eta_forum_hub服务-删除试用客户
+func RemoveEtaTrialUser(pars EtaTrialUserReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("RemoveEtaTrialUser eta_forum_hub服务-删除试用客户失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/remove")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}
+
+// EtaTrialUserEditReq 更新用户信息请求体
+type EtaTrialUserEditReq struct {
+	RealName string `description:"姓名"`
+	Position string `description:"职务"`
+	Mobile   string `description:"手机号"`
+	Enabled  int    `description:"禁启用"`
+}
+
+// EditEtaTrialUser eta_forum_hub服务-编辑试用客户
+func EditEtaTrialUser(pars EtaTrialUserEditReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("EditEtaTrialUser eta_forum_hub服务-编辑试用客户失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/edit")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}
+
+// UpdateUserIndexNum eta_forum_hub服务-更新用户累计新增指标数
+func UpdateUserIndexNum(pars EtaTrialUserReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf(" UpdateUserIndexNum eta_forum_hub服务-更新用户累计新增指标数失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_index_num")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}
+
+// UpdateUserChartNum eta_forum_hub服务-更新用户累计新增图表数
+func UpdateUserChartNum(pars EtaTrialUserReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("UpdateUserChartNum eta_forum_hub服务-更新用户累计新增图表数失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_chart_num")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}
+
+// UpdateEtaTrialUserActiveTimeReq 更新试用客户活跃时长请求体
+type UpdateEtaTrialUserActiveTimeReq struct {
+	Mobile     string `description:"手机号"`
+	UserName   string `description:"用户姓名"`
+	ActiveTime int    `description:"活跃时长, 单位秒"`
+	Part       string `description:"活跃板块"`
+}
+
+// UpdateEtaTrialUserActiveTime eta_forum_hub服务-更新试用客户活跃时长
+func UpdateEtaTrialUserActiveTime(pars UpdateEtaTrialUserActiveTimeReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("UpdateEtaTrialUserActiveTime eta_forum_hub服务-更新试用客户活跃时长失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_active_time")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}
+
+// UpdateEtaTrialUserLoginDurationReq 更新试用客户登录时长请求体
+type UpdateEtaTrialUserLoginDurationReq struct {
+	Mobile     string `description:"手机号"`
+	UserName   string `description:"用户姓名"`
+	ActiveTime int    `description:"活跃时长, 单位秒"`
+}
+
+// UpdateEtaTrialUserLoginDuration eta_forum_hub服务-更新试用客户登录时长
+func UpdateEtaTrialUserLoginDuration(pars UpdateEtaTrialUserLoginDurationReq) (res bool, err error) {
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("UpdateEtaTrialUserLoginDuration eta_forum_hub服务-更新试用客户登录时长失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_login_duration")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	res = true
+	return
+}

+ 231 - 0
services/eta_forum/system.go

@@ -0,0 +1,231 @@
+package eta_forum
+
+import (
+	"encoding/json"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
+	"fmt"
+)
+
+type RoleSaveReq struct {
+	RoleId       int    `description:"角色ID"`
+	RoleName     string `description:"角色名称"`
+	RoleType     string `description:"角色类型"`
+	RoleTypeCode string `description:"角色类型编码"`
+	RoleLevel    int    `description:"角色等级:0-表示一级角色,每个账号只能绑定一个一级角色 ,1-表示二级角色,每个账号可以绑定多个二级 角色"`
+	CreateTime   string `description:"创建时间"`
+	ModifyTime   string
+	BusinessCode string `description:"商家编码"`
+}
+
+// 上传角色信息
+func RoleSave(roleId int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+	//查询用户信息
+	roleInfo, err := system.GetRoleInfoById(roleId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			err = fmt.Errorf("用户不存在")
+			return
+		}
+		err = fmt.Errorf("获取用户信息失败,Err:" + err.Error())
+		return
+	}
+	var req RoleSaveReq
+	req.RoleId = roleInfo.RoleId
+	req.RoleName = roleInfo.RoleName
+	req.RoleTypeCode = roleInfo.RoleTypeCode
+	req.RoleType = roleInfo.RoleType
+	req.RoleLevel = roleInfo.RoleLevel
+	req.CreateTime = roleInfo.CreateTime.Format(utils.FormatDateTime)
+	req.ModifyTime = roleInfo.ModifyTime.Format(utils.FormatDateTime)
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := RoleSaveLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("上传角色信息失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("上传角色信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}
+
+type RoleDeleteReq struct {
+	RoleId       int
+	BusinessCode string `description:"商家编码"`
+}
+
+// 删除角色信息
+func RoleDelete(roleId int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+	var req RoleDeleteReq
+	req.RoleId = roleId
+	req.BusinessCode = utils.BusinessCode
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := RoleDeleteLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("删除角色信息失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("删除角色信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}
+
+type SysDepartmentAddReq struct {
+	DepartmentId   int    `description:"部门Id"`
+	DepartmentName string `description:"部门名称"`
+	Sort           int    `description:"排序"`
+	CreateTime     string `description:"创建时间"`
+}
+
+// 上传部门信息
+func DepartmentSave(id int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+	//查询用户信息
+	info, err := system.GetSysDepartmentById(id)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			err = fmt.Errorf("用户不存在")
+			return
+		}
+		err = fmt.Errorf("获取用户信息失败,Err:" + err.Error())
+		return
+	}
+	var req SysDepartmentAddReq
+	req.DepartmentId = info.DepartmentId
+	req.DepartmentName = info.DepartmentName
+	req.Sort = info.Sort
+	req.CreateTime = info.CreateTime.Format(utils.FormatDateTime)
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := DepartmentSaveLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("上传角色信息失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("上传角色信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}
+
+type DepartmentDeleteReq struct {
+	DepartmentId int    `description:"部门Id"`
+	BusinessCode string `description:"商家编码"`
+}
+
+// 删除部门信息
+func DepartmentDelete(id int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+	var req DepartmentDeleteReq
+	req.DepartmentId = id
+	req.BusinessCode = utils.BusinessCode
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := DepartmentDeleteLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("删除角色信息失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("删除角色信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}
+
+type SysGroupAddReq struct {
+	List []*system.SysGroup
+}
+
+// 新增分组信息
+func GroupSave(ids []int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+	//查询用户信息
+	if len(ids) == 0 {
+		return
+	}
+	list, err := system.GetSysGroupByGroupIds(ids)
+	if err != nil {
+		err = fmt.Errorf("获取分组信息失败,Err:" + err.Error())
+		return
+	}
+
+	var req SysGroupAddReq
+	req.List = list
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := GroupSaveLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("上传角色信息失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("上传角色信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}
+
+type GroupDeleteReq struct {
+	GroupId      int    `description:"分组ID"`
+	BusinessCode string `description:"商家编码"`
+}
+
+// 删除分组信息
+func GroupDelete(id int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+	var req GroupDeleteReq
+	req.GroupId = id
+	req.BusinessCode = utils.BusinessCode
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := GroupDeleteLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("删除角色信息失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("删除角色信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}

+ 189 - 382
services/eta_trial/user.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models/eta_trial"
+	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/utils"
 	"fmt"
 	"io/ioutil"
@@ -16,57 +17,28 @@ type EtaTrialUserReq struct {
 	Mobile string `description:"手机号"`
 }
 
-// UpdateEtaTrialUserLogin CRM_ETA服务-更新试用客户最后登录时间和次数
+// UpdateEtaTrialUserLogin eta_forum_hub服务-更新试用客户最后登录时间和次数
 func UpdateEtaTrialUserLogin(pars EtaTrialUserReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/update_login")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("GetEtaTrialMobileCount, 新增试用客户手工录入权限失败, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_login")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
 	res = true
@@ -79,185 +51,89 @@ type GetEtaTrialUserReq struct {
 }
 
 type EtaTrialUserResp struct {
-	Code   int                        `json:"code" description:"状态码"`
-	Msg    string                     `json:"msg" description:"提示信息"`
-	Data   eta_trial.EtaTrialUserItem `json:"data" description:"返回数据"`
-	ErrMsg string                     `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    eta_trial.EtaTrialUserItem
+	Success bool `description:"true 执行成功,false 执行失败"`
 }
 
-// GetEtaTrialUser CRM_ETA服务-获取试用客户信息
+// GetEtaTrialUser eta_forum_hub服务-获取试用客户信息
 func GetEtaTrialUser(pars GetEtaTrialUserReq) (res eta_trial.EtaTrialUserItem, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/mobile_fetch")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("GetEtaTrialUser, 获取试用客户信息, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	//result := new(models.ResultData)
-	result := new(EtaTrialUserResp)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/mobile_fetch")
+	resp := new(EtaTrialUserResp)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	utils.FileLog.Info("%s", string(b))
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
-	res = result.Data
-	//r, ok := result.Data.(eta_trial.EtaTrialUserResp)
-	//if !ok {
-	//	err = fmt.Errorf("result data err")
-	//	return
-	//}
-	//res = r
+	res = resp.Data
 	return
 }
 
-// DisableEtaTrialUser CRM_ETA服务-禁用试用客户
+// DisableEtaTrialUser eta_forum_hub服务-禁用试用客户
 func DisableEtaTrialUser(pars EtaTrialUserReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/disable")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("DisableEtaTrialUser eta_forum_hub服务-禁用试用客户, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/disable")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
 	res = true
 	return
 }
 
-// RemoveEtaTrialUser CRM_ETA服务-删除试用客户
+// RemoveEtaTrialUser eta_forum_hub服务-删除试用客户
 func RemoveEtaTrialUser(pars EtaTrialUserReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/remove")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("RemoveEtaTrialUser eta_forum_hub服务-删除试用客户失败, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/remove")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
 	res = true
@@ -272,171 +148,81 @@ type EtaTrialUserEditReq struct {
 	Enabled  int    `description:"禁启用"`
 }
 
-// EditEtaTrialUser CRM_ETA服务-编辑试用客户
+// EditEtaTrialUser eta_forum_hub服务-编辑试用客户
 func EditEtaTrialUser(pars EtaTrialUserEditReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/edit")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("EditEtaTrialUser eta_forum_hub服务-编辑试用客户失败, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/edit")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
 	res = true
 	return
 }
 
-// UpdateUserIndexNum CRM_ETA服务-更新用户累计新增指标数
+// UpdateUserIndexNum eta_forum_hub服务-更新用户累计新增指标数
 func UpdateUserIndexNum(pars EtaTrialUserReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/update_index_num")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf(" UpdateUserIndexNum eta_forum_hub服务-更新用户累计新增指标数失败, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_index_num")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
 	res = true
 	return
 }
 
-// UpdateUserChartNum CRM_ETA服务-更新用户累计新增图表数
+// UpdateUserChartNum eta_forum_hub服务-更新用户累计新增图表数
 func UpdateUserChartNum(pars EtaTrialUserReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/update_chart_num")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("UpdateUserChartNum eta_forum_hub服务-更新用户累计新增图表数失败, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_chart_num")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
 	res = true
@@ -451,57 +237,27 @@ type UpdateEtaTrialUserActiveTimeReq struct {
 	Part       string `description:"活跃板块"`
 }
 
-// UpdateEtaTrialUserActiveTime CRM_ETA服务-更新试用客户活跃时长
+// UpdateEtaTrialUserActiveTime eta_forum_hub服务-更新试用客户活跃时长
 func UpdateEtaTrialUserActiveTime(pars UpdateEtaTrialUserActiveTimeReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/update_active_time")
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
-		return
-	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
-		return
-	}
-
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
-	}
 	defer func() {
-		_ = resp.Body.Close()
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("UpdateEtaTrialUserActiveTime eta_forum_hub服务-更新试用客户活跃时长失败, ErrMsg: %s", err.Error()), 3)
+		}
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
-		return
-	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
-	}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_active_time")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
 	res = true
@@ -515,59 +271,110 @@ type UpdateEtaTrialUserLoginDurationReq struct {
 	ActiveTime int    `description:"活跃时长, 单位秒"`
 }
 
-// UpdateEtaTrialUserLoginDuration CRM_ETA服务-更新试用客户登录时长
+// UpdateEtaTrialUserLoginDuration eta_forum_hub服务-更新试用客户登录时长
 func UpdateEtaTrialUserLoginDuration(pars UpdateEtaTrialUserLoginDurationReq) (res bool, err error) {
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/eta_trial/user/update_login_duration")
-	params, e := json.Marshal(pars)
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg(fmt.Sprintf("UpdateEtaTrialUserLoginDuration eta_forum_hub服务-更新试用客户登录时长失败, ErrMsg: %s", err.Error()), 3)
+		}
+	}()
+	reqJson, e := json.Marshal(pars)
 	if e != nil {
 		err = fmt.Errorf("data json marshal err: %s", e.Error())
 		return
 	}
 
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
+	_, resultByte, err := post(string(reqJson), "/v1/eta_trial/user/update_login_duration")
+	resp := new(models.BaseResponse)
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("result: %s, errmsg: %s", resp.Msg, resp.ErrMsg)
 		return
 	}
+	res = true
+	return
+}
 
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
-	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
+// post
+func post(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
+	if utils.ETA_FORUM_HUB_URL == "" {
+		err = fmt.Errorf("ETA社区桥接服务地址为空")
 		return
 	}
-	defer func() {
-		_ = resp.Body.Close()
-	}()
-	b, e := ioutil.ReadAll(resp.Body)
-	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
+	postUrl := utils.ETA_FORUM_HUB_URL + urlStr
+	result, err = HttpPost(postUrl, paramStr, "application/json")
+	if err != nil {
+		err = fmt.Errorf("调用ETA社区桥接服务接口失败 error:%s", err.Error())
 		return
 	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
+
+	return
+}
+
+func HttpPost(url, postData string, params ...string) ([]byte, error) {
+	body := ioutil.NopCloser(strings.NewReader(postData))
+	client := &http.Client{}
+	req, err := http.NewRequest("POST", url, body)
+	if err != nil {
+		return nil, err
 	}
+	contentType := "application/x-www-form-urlencoded;charset=utf-8"
+	if len(params) > 0 && params[0] != "" {
+		contentType = params[0]
+	}
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("authorization", utils.MD5(utils.ETA_FORUM_HUB_NAME_EN+utils.ETA_FORUM_HUB_MD5_KEY))
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Debug("HttpPost:" + string(b))
+	return b, err
+}
 
-	result := new(models.ResultData)
-	if e = json.Unmarshal(b, &result); e != nil {
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+// get
+func get(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
+	if utils.ETA_FORUM_HUB_URL == "" {
+		err = fmt.Errorf("ETA社区桥接服务地址为空")
 		return
 	}
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s", string(b))
+	urlStr = urlStr + "?" + paramStr
+	getUrl := utils.ETA_FORUM_HUB_URL + urlStr
+	result, err = HttpGet(getUrl)
+	if err != nil {
+		err = fmt.Errorf("调用ETA社区桥接服务接口失败 error:%s", err.Error())
 		return
 	}
-	res = true
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
 	return
 }
+
+func HttpGet(url string) ([]byte, error) {
+	client := &http.Client{}
+	req, err := http.NewRequest("GET", url, nil)
+	if err != nil {
+		return nil, err
+	}
+	req.Header.Set("authorization", utils.MD5(utils.ETA_FORUM_HUB_NAME_EN+utils.ETA_FORUM_HUB_MD5_KEY))
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Debug("HttpPost:" + string(b))
+	return b, err
+}

+ 17 - 0
services/ppt.go

@@ -11,6 +11,7 @@ import (
 	"eta/eta_api/utils"
 	"fmt"
 	"sort"
+	"strings"
 	"time"
 )
 
@@ -236,9 +237,25 @@ func pptContent2Html(content string, isEnglish bool) (htm string, err error) {
 				case ElementsTypeChart:
 					if isEnglish {
 						// 英文研报图表src多加一个fromPage=en, 表格暂时没有区分
+						if strings.HasPrefix(v.ChartId, "isETAForumChart_") {
+							chartIdInfo := strings.Split(v.ChartId, "_")
+							if len(chartIdInfo) == 2 {
+								v.ChartId = chartIdInfo[1]
+							}
+							htmlContent += fmt.Sprintf(`<iframe src="%s/chartshow?code=%s&fromPage=en&isETAForumChart=true" width="100%%" height="350" style="border-width:0px; min-height:350px;"></iframe>`, chartRoot, v.ChartId)
+							break
+						}
 						htmlContent += fmt.Sprintf(`<iframe src="%s/chartshow?code=%s&fromPage=en" width="100%%" height="350" style="border-width:0px; min-height:350px;"></iframe>`, chartRoot, v.ChartId)
 						break
 					}
+					if strings.HasPrefix(v.ChartId, "isETAForumChart_") {
+						chartIdInfo := strings.Split(v.ChartId, "_")
+						if len(chartIdInfo) == 2 {
+							v.ChartId = chartIdInfo[1]
+						}
+						htmlContent += fmt.Sprintf(`<iframe src="%s/chartshow?code=%s&isETAForumChart=true" width="100%%" height="350" style="border-width:0px; min-height:350px;"></iframe>`, chartRoot, v.ChartId)
+						break
+					}
 					htmlContent += fmt.Sprintf(`<iframe src="%s/chartshow?code=%s" width="100%%" height="350" style="border-width:0px; min-height:350px;"></iframe>`, chartRoot, v.ChartId)
 				case ElementsTypeSheet:
 					htmlContent += fmt.Sprintf(`<iframe src="%s/sheetshow?code=%s" class="iframe%s" width="100%%" height="%s" style="border-width:0px;"></iframe>`, chartRoot, v.SheetId, v.SheetId, v.SheetHeight)