Forráskód Böngészése

Merge branch 'master' into yb/8.0

hsun 2 éve
szülő
commit
6bd1f9f93b

+ 78 - 0
models/chart_permission.go

@@ -0,0 +1,78 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// ChartPermission 报告权限表
+type ChartPermission struct {
+	ChartPermissionId   int       `orm:"column(chart_permission_id);pk" description:"问题ID"`
+	ChartPermissionName string    `description:"名称"`
+	PermissionName      string    `description:"权限名"`
+	Sort                int       `description:"排序"`
+	Enabled             int       `description:"是否可用"`
+	CreatedTime         time.Time `description:"创建时间"`
+	LastUpdatedTime     time.Time `description:"更新时间"`
+	TeleconferenceSort  int       `description:"电话会类型排序"`
+	Remark              string    `description:"备注"`
+	ClassifyName        string    `description:"分类名称"`
+	ProductName         string    `description:"产品名称"`
+	ProductID           int       `description:"产品ID"`
+	ImageURL            string    `description:"图片地址"`
+	ShowType            int       `description:"1:查研观向小程序展示"`
+	IsOther             int       `description:"是否是其他,用于查研观向小程序后台展示"`
+	IsReport            int       `description:"是否是报告,用于查研观向小程序前台报告展示"`
+	CygxAuth            int       `description:"是否是权限,用于查研观向小程序前台权限校验"`
+	YbImgUrl            string    `description:"研报小程序报告列表icon"`
+	PriceDrivenState    int       `description:"品种价格驱动开启状态 0-关闭 1-开启"`
+}
+
+// GetChartPermissionById 主键获取权限
+func GetChartPermissionById(permissionId int) (item *ChartPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_permission WHERE chart_permission_id = ? LIMIT 1`
+	err = o.Raw(sql, permissionId).QueryRow(&item)
+	return
+}
+
+// Update 更新
+func (chartPermissionInfo *ChartPermission) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(chartPermissionInfo, cols...)
+	return
+}
+
+// YbChartPermissionFirst 研报一级品种分类
+type YbChartPermissionFirst struct {
+	Id           int
+	ClassifyName string `description:"权限一级分类名称,与chart_permission的classify_name一致"`
+	YbIndexShow  int    `description:"是否展示在研报小程序首页页面  1-展示;0-不展示"`
+	YbIndexName  string `description:"研报小程序首页简称"`
+	YbIndexSort  string `description:"研报小程序首页排序"`
+	YbIndexIcon  string `description:"研报小程序首页图标地址"`
+}
+
+// GetYbChartPermissionFirst 获取研报一级品种分类
+func GetYbChartPermissionFirst() (list []*YbChartPermissionFirst, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_permission_first ORDER BY yb_index_sort ASC`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// GetPermissionByProductIdAndClassifyName 获取子分类
+func GetPermissionByProductIdAndClassifyName(productId int, classifyName string) (items []*ChartPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_permission WHERE enabled = 1 AND product_id = ? AND classify_name = ? AND permission_type = 0 ORDER BY sort ASC`
+	_, err = o.Raw(sql, productId, classifyName).QueryRows(&items)
+	return
+}
+
+// GetYbChartPermissionFirstByName 根据分类名称获取一级分类
+func GetYbChartPermissionFirstByName(classifyName string) (item *YbChartPermissionFirst, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_permission_first WHERE classify_name = ? LIMIT 1`
+	err = o.Raw(sql, classifyName).QueryRow(&item)
+	return
+}

+ 15 - 0
models/data_manage/ppt_v2_save_log.go

@@ -0,0 +1,15 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func DeletePPTLogByDate(date string) (err error) {
+	sql := `DELETE FROM ppt_v2_save_log WHERE create_time<%s `
+	sql = fmt.Sprintf(sql, date)
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Raw(sql, date).Exec()
+
+	return
+}

+ 15 - 0
models/data_manage/report_save_log.go

@@ -0,0 +1,15 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func DeleteReportLogByDate(date string) (err error) {
+	sql := `DELETE FROM report_save_log WHERE create_time<%s `
+	sql = fmt.Sprintf(sql, date)
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Raw(sql, date).Exec()
+
+	return
+}

+ 20 - 0
models/data_manage/user_record.go

@@ -0,0 +1,20 @@
+package data_manage
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func GetUnSubUserOpenid(openIdstr string) (items []string, err error){
+	sql := `SELECT open_id FROM user_record 
+          WHERE open_id IS NOT NULL AND subscribe=0 AND create_platform=1 `
+	sql += ` AND open_id in (` + openIdstr + `) `
+	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	return
+}
+
+func UpdateSubStatus(unSubIds string) (err error){
+	sql := "UPDATE user_record SET subscribe=1,subscribe_time=NOW() WHERE create_platform=1 "
+	sql += ` AND open_id in (` + unSubIds + `) `
+	_, err = orm.NewOrm().Raw(sql).Exec()
+	return
+}

+ 2 - 0
models/db.go

@@ -66,6 +66,7 @@ func init() {
 		new(UserViewStatistics),
 		new(roadshow.RsReportRecord), //路演记录
 		new(CompanyReportRecord),
+		new(ChartPermission),     // 权限表
 	)
 
 	// 注册客户信息 数据表
@@ -131,6 +132,7 @@ func initYbTable() {
 		new(yb.ActivityVoice),    //研报活动语音表
 		new(yb.ActivityRegister), //研报活动报名表
 		new(yb.Speaker),          //研报主持人表
+		new(yb.PriceDriven),		// 研报价格驱动表
 		new(yb.ComeinEvent),      //进门会议表
 		new(yb.ComeinEventUser),  //进门会议用户表
 		new(yb.CommunityVideo),	  //研报视频社区

+ 2 - 2
models/wechat.go

@@ -3,9 +3,9 @@ package models
 import (
 	"encoding/json"
 	"fmt"
-	"hongze/hongze_task/utils"
-	"github.com/rdlucklib/rdluck_tools/http"
 	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_task/utils"
 	"strings"
 	"time"
 )

+ 61 - 0
models/yb/price_driven.go

@@ -0,0 +1,61 @@
+package yb
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// PriceDriven 价格驱动表
+type PriceDriven struct {
+	PriceDrivenId       int       `orm:"column(price_driven_id);pk" description:"价格驱动ID"`
+	ChartPermissionId   int       `json:"chart_permission_id" description:"品种权限ID"`
+	MainVariable        string    `json:"main_variable" description:"关键变量"`
+	CoreDrivenType      int       `json:"core_driven_type" description:"核心驱动类型 0-多 1-空"`
+	CoreDrivenContent   string    `json:"core_driven_content" description:"核心驱动内容"`
+	CoreContent         string    `json:"core_content" description:"核心内容"`
+	LastUpdateAdminId   int       `json:"last_update_admin_id" description:"最后更新人ID"`
+	LastUpdateAdminName string    `json:"last_update_admin_name" description:"最后更新人名称"`
+	LastThsMsgTime      time.Time `json:"last_ths_msg_time" description:"最后推送同花顺客群消息时间"`
+	LastTemplateMsgTime time.Time `json:"last_template_msg_time" description:"最后推送模板消息时间"`
+	CreateTime          time.Time `json:"create_time" description:"创建时间"`
+	ModifyTime          time.Time `json:"modify_time" description:"更新时间"`
+}
+
+// TableName 表名变更
+func (priceDrivenInfo *PriceDriven) TableName() string {
+	return "yb_price_driven"
+}
+
+// Add 新增
+func (priceDrivenInfo *PriceDriven) Add() (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(priceDrivenInfo)
+	if err != nil {
+		return
+	}
+	priceDrivenInfo.PriceDrivenId = int(id)
+	return
+}
+
+// Update 更新
+func (priceDrivenInfo *PriceDriven) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(priceDrivenInfo, cols...)
+	return
+}
+
+// GetPriceDrivenByChartPermissionId 通过品种获取价格驱动
+func GetPriceDrivenByChartPermissionId(chartPermissionId int) (item *PriceDriven, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM yb_price_driven WHERE chart_permission_id = ? LIMIT 1`
+	err = o.Raw(sql, chartPermissionId).QueryRow(&item)
+	return
+}
+
+// GetPriceDrivenById 主键获取价格驱动
+func GetPriceDrivenById(priceDrivenId int) (item *PriceDriven, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM yb_price_driven WHERE price_driven_id = ? LIMIT 1`
+	err = o.Raw(sql, priceDrivenId).QueryRow(&item)
+	return
+}

+ 50 - 0
services/report_push.go

@@ -171,6 +171,11 @@ func SendToThs(sendDetailId, reportId int, reportType string) (err error) {
 		if tmpErr != nil {
 			err = tmpErr
 		}
+	case "研报价格驱动":
+		tmpErr := SendYbPriceDrivenToThs(reportId)
+		if tmpErr != nil {
+			err = tmpErr
+		}
 	default:
 		err = errors.New("异常类型")
 	}
@@ -467,6 +472,51 @@ func SendReportMiniToThs(reportId int) (err error) {
 	return
 }
 
+
+// SendYbPriceDrivenToThs 推送研报小程序价格驱动客群消息
+func SendYbPriceDrivenToThs(priceDrivenId int) (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("SendYbPriceDrivenToThs-延时任务发送报告至同花顺失败, PriceDrivenId:"+strconv.Itoa(priceDrivenId)+", ErrMsg:"+err.Error(), 3)
+		}
+	}()
+	priceDriven, e := yb.GetPriceDrivenById(priceDrivenId)
+	if e != nil {
+		err = errors.New("获取价格驱动信息失败, Err:" + e.Error())
+		return
+	}
+	chartPermissionId := priceDriven.ChartPermissionId
+	if chartPermissionId <= 0 {
+		err = errors.New("价格驱动品种ID有误")
+		return
+	}
+	secondPermission, e := models.GetChartPermissionById(chartPermissionId)
+	if e != nil {
+		err = errors.New("获取品种权限信息失败, Err: " + e.Error())
+		return
+	}
+	permissionName := secondPermission.PermissionName
+	firstClassify, e := models.GetYbChartPermissionFirstByName(secondPermission.ClassifyName)
+	if e != nil {
+		err = errors.New("获取品种权限父级信息失败, Err: " + e.Error())
+		return
+	}
+	if permissionName == "" {
+		err = errors.New("客群标签为空, 不可推送")
+		return
+	}
+	if permissionName == "宏观经济" {
+		permissionName = "宏观"
+	}
+	title := fmt.Sprintf("%s价格驱动", permissionName)
+	jumpUrl := fmt.Sprintf("pages/pricedriven/pricedriven?default_classify_first=%d&default_classify_sub=%d", firstClassify.Id, chartPermissionId)
+	logoUrl := `https://hongze.oss-cn-shanghai.aliyuncs.com/hzyj.png`
+	// 推送至同花顺
+	dataType := "2"
+	err = SendThs(title, permissionName, title, jumpUrl, logoUrl, dataType)
+	return
+}
+
 // SendYbCommunityVideoToThs 推送研报小程序视频社区客群消息
 func SendYbCommunityVideoToThs(videoId int) (err error) {
 	defer func() {

+ 28 - 0
services/save_log.go

@@ -0,0 +1,28 @@
+package services
+
+import (
+	"context"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/services/alarm_msg"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+func DeleteLog(cont context.Context) (err error) {
+	date := time.Now().AddDate(0,-1,0).Format(utils.FormatDateTime)
+	go func() {
+		err = data_manage.DeletePPTLogByDate(date)
+		if err != nil {
+			alarm_msg.SendAlarmMsg("DeletePPTLogByDate ErrMsg:"+err.Error(), 3)
+		}
+	}()
+
+	go func() {
+		err = data_manage.DeleteReportLogByDate(date)
+		if err != nil {
+			alarm_msg.SendAlarmMsg("DeleteReportLogByDate ErrMsg:"+err.Error(), 3)
+		}
+	}()
+
+	return
+}

+ 10 - 0
services/task.go

@@ -109,6 +109,16 @@ func Task() {
 	syncComeinMeeting := task.NewTask("SyncComeinMeeting", "0 1 */1 * * * ", SyncComeinMeeting)
 	task.AddTask("SyncComeinMeeting", syncComeinMeeting)
 
+	//同步user_record中的关注状态
+	syncSubStatus := task.NewTask("syncSubStatus", "0 0 2 * * *", SyncSubStatus)
+	task.AddTask("syncSubStatus", syncSubStatus)
+
+
+	//删除日志 report_save_log,ppt_v2_save_log,保留一个月的
+	deleteLog := task.NewTask("syncSubStatus", "0 0 2 1 * *", DeleteLog)
+	task.AddTask("deleteLog", deleteLog)
+
+
 	task.StartTask()
 
 	fmt.Println("task end")

+ 38 - 0
services/user_record.go

@@ -0,0 +1,38 @@
+package services
+
+import (
+	"context"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/services/alarm_msg"
+	"hongze/hongze_task/utils"
+	"strings"
+)
+
+//同步user_record表中的关注状态
+func SyncSubStatus(cont context.Context) (err error) {
+	openIdstr := models.WxUsersGet()
+	var items []string
+	if openIdstr != "''"{
+		items, err = data_manage.GetUnSubUserOpenid(openIdstr)
+		if err != nil {
+			utils.FileLog.Info("SyncSubStatus select Err:%s" + err.Error())
+			go alarm_msg.SendAlarmMsg("SyncSubStatus 查询open_id失败 ErrMsg:"+err.Error(), 3)
+			return err
+		}
+	}
+
+	unSubIds := strings.Join(items, "','")
+	unSubIds = "'" + unSubIds + "'"
+
+	if unSubIds != "''" {
+		err = data_manage.UpdateSubStatus(unSubIds)
+		if err != nil {
+			utils.FileLog.Info("SyncSubStatus update Err:%s" + err.Error())
+			go alarm_msg.SendAlarmMsg("SyncSubStatus 更新关注状态失败 ErrMsg:"+err.Error(), 3)
+			return err
+		}
+	}
+
+	return
+}