Ver código fonte

Merge branch 'master' into yb/3.0

# Conflicts:
#	utils/constants.go
hsun 3 anos atrás
pai
commit
4bb0c731d7

+ 7 - 2
controller/activity/activity.go

@@ -172,16 +172,21 @@ func GetActivityVoices(c *gin.Context) {
 // @Router /activity/getActivityShareImg [get]
 func GetActivityShareImg(c *gin.Context)  {
 	reqActivityId := c.DefaultQuery("activity_id", "0")
-	if reqActivityId == "0" {
+	activityId, _ := strconv.Atoi(reqActivityId)
+	if activityId <= 0 {
 		response.Fail("参数异常", c)
 		return
 	}
-	activityId, _ := strconv.Atoi(reqActivityId)
 	activityInfo, err := yb_activity.GetDetailById(activityId)
 	if err != nil {
 		if err == utils.ErrNoRow {
 			response.Fail("获取活动信息失败", c)
 		}
+		response.FailMsg("获取活动信息失败", "GetActivityShareImg: 获取活动信息失败" + err.Error(), c)
+		return
+	}
+	if activityInfo == nil {
+		response.FailMsg("获取活动信息失败", "GetActivityShareImg: 活动不存在", c)
 		return
 	}
 

+ 12 - 9
controller/chart/chart_info.go

@@ -405,18 +405,21 @@ func RefreshChartInfo(c *gin.Context)  {
 	}
 
 	// 刷新图表
-	err = chart.RefreshChartInfo(chartInfo.ChartInfoId)
-	if err != nil {
-		{
-			errContent := fmt.Sprint("ErrMsg: 刷新图表关联指标信息失败, " + err.Error())
-			if global.CONFIG.Serve.RunMode == "release" {
-				go services.SendEmail("弘则研报小程序-release-刷新图表报错", errContent, utils.EmailSendToUsers)
-			} else {
-				global.LOG.Info(errContent)
-			}
+	if err = chart.RefreshChart(chartInfo.ChartInfoId); err != nil {
+		errContent := fmt.Sprint("ErrMsg: 刷新图表关联指标信息失败, " + err.Error())
+		if global.CONFIG.Serve.RunMode == "release" {
+			go services.SendEmail("弘则研报小程序-release-刷新图表报错", errContent, utils.EmailSendToUsers)
+		} else {
+			global.LOG.Info(errContent)
 		}
 	}
 
+	//清除图表缓存
+	{
+		key := utils.HZ_CHART_LIB_DETAIL + chartInfo.UniqueCode
+		_ = global.Redis.Del(context.TODO(), key)
+	}
+
 	response.OkData("刷新成功", "", c)
 }
 

+ 1 - 1
models/tables/admin/query.go

@@ -12,6 +12,6 @@ func GetByAdminId(adminId int) (item *Admin, err error) {
 
 // GetAdminByMobile 通过手机号获取系统用户信息
 func GetAdminByMobile(mobile string) (item *Admin, err error) {
-	err = global.DEFAULT_MYSQL.Model(Admin{}).Where("mobile = ?", mobile).First(&item).Error
+	err = global.DEFAULT_MYSQL.Model(Admin{}).Where("mobile = ? AND enabled = 1", mobile).First(&item).Error
 	return
 }

+ 4 - 0
models/tables/edb_data/query.go

@@ -62,6 +62,10 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_calculate_ljztbpj"
 	case utils.DATA_SOURCE_LT:
 		tableName = "edb_data_lt"
+	case utils.DATA_SOURCE_COAL:
+		tableName = "edb_data_coal"
+	case utils.DATA_SOURCE_PYTHON:
+		tableName = "edb_data_python"
 	default:
 		tableName = ""
 	}

+ 126 - 1
services/chart/chart_info.go

@@ -1,6 +1,7 @@
 package chart
 
 import (
+	"errors"
 	"fmt"
 	"hongze/hongze_yb/global"
 	chartEdbMappingModel "hongze/hongze_yb/models/tables/chart_edb_mapping"
@@ -11,6 +12,7 @@ import (
 	"hongze/hongze_yb/models/tables/my_chart_classify"
 	"hongze/hongze_yb/models/tables/yb_chart_daily_visit_log"
 	"hongze/hongze_yb/models/tables/yb_chart_visit_log"
+	"hongze/hongze_yb/services"
 	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/utils"
 	"sort"
@@ -642,4 +644,127 @@ func SaveChartVisitLog(userInfo user.UserInfo, chartInfo *chartInfoModel.ChartIn
 	}
 
 	return
-}
+}
+
+// RefreshChart 图表刷新
+func RefreshChart(chartInfoId int) (err error) {
+	var errMsg string
+	defer func() {
+		if err != nil {
+			if global.CONFIG.Serve.RunMode == "release" {
+				go services.SendEmail(utils.APPNAME+"【"+global.CONFIG.Serve.RunMode+"】"+"失败提醒", "RefreshChart:"+errMsg, utils.EmailSendToUsers)
+			}
+			fmt.Println("RefreshChart Err:" + errMsg)
+		}
+	}()
+
+	// 获取需要刷新的指标
+	baseEdbInfoArr, calculateInfoArr, err := GetChartInfoRefreshData(chartInfoId)
+	if err != nil {
+		errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
+		return
+	}
+
+	newBaseEdbInfoArr := make([]*edbInfoModel.EdbInfo, 0)
+	baseMap := make(map[int]*edbInfoModel.EdbInfo)
+	for _, bv := range baseEdbInfoArr {
+		if _, ok := baseMap[bv.EdbInfoId]; !ok {
+			newBaseEdbInfoArr = append(newBaseEdbInfoArr, bv)
+		}
+		baseMap[bv.EdbInfoId] = bv
+	}
+	newCalculateInfoArr := make([]*edbInfoModel.EdbInfo, 0)
+	calculateMap := make(map[int]*edbInfoModel.EdbInfo)
+	var calculateArr []int
+	for _, bv := range calculateInfoArr {
+		if _, ok := calculateMap[bv.EdbInfoId]; !ok {
+			newCalculateInfoArr = append(newCalculateInfoArr, bv)
+			calculateArr = append(calculateArr, bv.EdbInfoId)
+		}
+		calculateMap[bv.EdbInfoId] = bv
+	}
+	sort.Ints(calculateArr)
+
+	// 刷新指标
+	var startDate string
+	for _, bv := range newBaseEdbInfoArr {
+		source := bv.Source
+		edbInfoId := bv.EdbInfoId
+		edbCode := bv.EdbCode
+		startDate = bv.StartDate.Format(utils.FormatDate)
+		frequency := bv.Frequency
+		if startDate == "0000-00-00" {
+			continue
+		}
+		sTime := bv.EndDate
+
+		var limitDay int
+		startDate := ""
+		switch frequency {
+		case "日度":
+			limitDay = utils.DATA_START_REFRESH_LIMIT
+		case "周度":
+			limitDay = utils.DATA_START_REFRESH_LIMIT * 7
+		case "月度":
+			limitDay = utils.DATA_START_REFRESH_LIMIT * 30
+		case "季度":
+			limitDay = utils.DATA_START_REFRESH_LIMIT * 90
+		case "年度":
+			limitDay = utils.DATA_START_REFRESH_LIMIT * 365
+		default:
+			limitDay = utils.DATA_START_REFRESH_LIMIT
+		}
+		startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
+
+		fmt.Println("source:", source)
+		respItem, err := RefreshEdbData(edbInfoId, source, edbCode, startDate)
+		if err != nil {
+			errMsg = errors.New("RefreshEdbData Err:" + err.Error()).Error()
+			return err
+		}
+		if respItem.Ret != 200 {
+			errMsg = errors.New(respItem.ErrMsg + ";EdbCode:" + edbCode).Error()
+			return err
+		}
+
+		maxAndMinItem, err := edbDataModel.GetEdbInfoMaxAndMinInfo(source, edbCode)
+		if err != nil {
+			return err
+		}
+		if maxAndMinItem != nil {
+			err = edbDataModel.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
+			if err != nil {
+				return err
+			}
+		}
+	}
+
+	// 刷新计算指标
+	for _, v := range calculateArr {
+		edbInfo := calculateMap[v]
+		if edbInfo == nil {
+			return err
+		}
+		startDate = edbInfo.StartDate.Format(utils.FormatDate)
+		source := edbInfo.Source
+
+		if source == utils.DATA_SOURCE_CALCULATE {
+			sTime := edbInfo.EndDate
+			startDate = sTime.Format(utils.FormatDate)
+		}
+
+		result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
+		if err != nil {
+			fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
+			errMsg = "RefreshEdbCalculateData Err:" + err.Error()
+			return err
+		}
+		if result.Ret != 200 {
+			fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
+			errMsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
+			return fmt.Errorf("刷新失败")
+		}
+	}
+
+	return
+}

+ 113 - 0
services/chart/edb_data.go

@@ -3674,3 +3674,116 @@ func RefreshAllCalculateLjztbpj(edbInfo *edbInfoModel.EdbInfo) (err error) {
 	}
 	return
 }
+
+type RefreshResponse struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        interface{}
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+
+// RefreshEdbData 刷新指标数据
+func RefreshEdbData(edbInfoId, source int, edbCode, startDate string) (resp *RefreshResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = edbCode
+	param["EdbInfoId"] = edbInfoId
+	param["StartDate"] = startDate
+	urlStr := ``
+	switch source {
+	case utils.DATA_SOURCE_THS:
+		urlStr = "/ths/refresh"
+	case utils.DATA_SOURCE_WIND:
+		urlStr = "/wind/refresh"
+	case utils.DATA_SOURCE_PB:
+		urlStr = "/pb/refresh"
+	case utils.DATA_SOURCE_MANUAL:
+		urlStr = "/manual/refresh"
+	case utils.DATA_SOURCE_LZ:
+		urlStr = "/lz/refresh"
+	case utils.DATA_SOURCE_YS:
+		urlStr = "/smm/refresh"
+	case utils.DATA_SOURCE_GL:
+		urlStr = "/mysteel/refresh"
+	case utils.DATA_SOURCE_ZZ:
+		urlStr = "/zz/refresh"
+	case utils.DATA_SOURCE_DL:
+		urlStr = "/dl/refresh"
+	case utils.DATA_SOURCE_SH:
+		urlStr = "/sh/refresh"
+	case utils.DATA_SOURCE_CFFEX:
+		urlStr = "/cffex/refresh"
+	case utils.DATA_SOURCE_SHFE:
+		urlStr = "/shfe/refresh"
+	case utils.DATA_SOURCE_GIE:
+		urlStr = "/gie/refresh"
+	case utils.DATA_SOURCE_LT:
+		urlStr = "/lt/refresh"
+	case utils.DATA_SOURCE_COAL:
+		urlStr = "/coal/refresh"
+	}
+	if urlStr == "" {
+		err = fmt.Errorf(fmt.Sprint("source:", source, ";未实现该指标的刷新接口,请联系管理员"))
+		return
+	}
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}
+
+// postRefreshEdbData 请求刷新指标数据
+func postRefreshEdbData(param map[string]interface{}, urlStr string) (resp *RefreshResponse, err error) {
+	edbLibUrl := ""
+	if global.CONFIG.Serve.RunMode == "release" {
+		edbLibUrl = "http://172.19.173.232:8300/edbapi/"
+	} else {
+		edbLibUrl = "http://8.136.199.33:8300/edbapi/"
+	}
+	postUrl := edbLibUrl + urlStr
+	postData, err := json.Marshal(param)
+	if err != nil {
+		return
+	}
+	result, err := EdbLibHttpPost(postUrl, string(postData), "application/json")
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+	return resp, nil
+}
+
+// EdbLibHttpPost post请求edb库
+func EdbLibHttpPost(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.APP_EDB_LIB_NAME_EN+utils.EDB_LIB_Md5_KEY))
+	resp, err := client.Do(req)
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	fmt.Println("HttpPost:" + string(b))
+	return b, err
+}
+
+// RefreshEdbCalculateData 刷新计算指标数据请求
+func RefreshEdbCalculateData(edbInfoId int, edbCode, startDate string) (resp *RefreshResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = edbCode
+	param["EdbInfoId"] = edbInfoId
+	param["StartDate"] = startDate
+	resp, err = postRefreshEdbData(param, "/calculate/refresh")
+	return
+}

+ 16 - 0
services/company/permission.go

@@ -196,6 +196,14 @@ func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permiss
 			return
 		}
 
+		// 查询用户是否为弘则研究已禁用的联系人
+		if companyId == 16 {
+			if wxUser.Enabled != 1 {
+				permissionCheckInfo.Type = "apply"
+				return
+			}
+		}
+
 		//客户信息
 		companyInfo, tmpErr := company.GetByCompanyId(companyId)
 		if tmpErr != nil {
@@ -489,6 +497,14 @@ func CheckUserChartPermission(companyId int64, userId int) (ok bool, permissionC
 			return
 		}
 
+		// 查询用户是否为弘则研究已禁用的联系人
+		if companyId == 16 {
+			if wxUser.Enabled != 1 {
+				permissionCheckInfo.Type = "apply"
+				return
+			}
+		}
+
 		// 客户信息
 		companyInfo, tmpErr := company.GetByCompanyId(companyId)
 		if tmpErr != nil {

+ 2 - 2
services/user/user.go

@@ -296,9 +296,9 @@ QUERY_WX_USER:
 				if platformUser.CountryCode != "" {
 					countryCode, _ = strconv.Atoi(platformUser.CountryCode)
 				}
-				tempToken, tempUser, tempErr, _ := BindWxUser(openId, platformUser.Mobile, platformUser.Email, "", 3, countryCode, 1)
+				tempToken, tempUser, tempErr, errMsg := BindWxUser(openId, platformUser.Mobile, platformUser.Email, "", 3, countryCode, 1)
 				if tempErr != nil {
-					err = errors.New("自动绑定公众号用户失败,Err:" + tempErr.Error())
+					err = errors.New("自动绑定公众号用户失败,Err:" + tempErr.Error() + ", errMsg:" + errMsg)
 					return
 				}
 				token = tempToken

+ 3 - 1
services/user/user_bind.go

@@ -58,6 +58,7 @@ func BindWxUser(openid, mobile, email, code string, bindType, areaNum, registerP
 		if errMsg == `` {
 			errMsg = "绑定失败:" + err.Error()
 		}
+		err = errors.New("BindWxUser绑定失败: " + err.Error())
 		return
 	}
 
@@ -93,9 +94,10 @@ func BindWxUser(openid, mobile, email, code string, bindType, areaNum, registerP
 		token = sessionItem.AccessToken
 		_ = sessionItem.UpdateSession(int64(userInfo.UserID), time.Now().AddDate(0, 1, 0))
 	}
+	err = nil
 
 	tmpErr := wx_user.ModifyFirstLogin(userInfo.UserID)
-	if err != nil {
+	if tmpErr != nil {
 		fmt.Println("变更联系人是否第一次登录失败,ERR:", tmpErr)
 		return
 	}

+ 3 - 3
utils/constants.go

@@ -68,7 +68,8 @@ const (
 	DATA_SOURCE_CALCULATE_ZJPJ                  //直接拼接->23
 	DATA_SOURCE_CALCULATE_LJZTBPJ               //累计值同比拼接->24
 	DATA_SOURCE_LT                              //路透->25
-
+	DATA_SOURCE_COAL                            //中国煤炭网->26
+	DATA_SOURCE_PYTHON                          //python代码->27
 )
 
 const (
@@ -88,6 +89,7 @@ const (
 //数据刷新频率
 const (
 	DATA_REFRESH        = 7 //7个单位,日/周/月/季度/年
+	DATA_START_REFRESH_LIMIT = 7 //7个单位,日/周/月/季度/年
 	DATA_END_DATE_LIMIT = 4 //数据结束日期为,当前日期,加上4年时间
 )
 
@@ -111,7 +113,6 @@ const (
 	ES_INDEX_RDDP_REPORT = "research_report_v1"                //报告
 )
 
-
 //EDB_LIB
 var (
 	APP_EDB_LIB_NAME_EN = "hongze_edb_lib"
@@ -121,4 +122,3 @@ var (
 const ALIYUN_YBIMG_HOST = "https://hzstatic.hzinsights.com/static/yb_wx/"
 
 const HZPHONE = "057187186319"    //弘则电话
-