|
@@ -19,7 +19,7 @@ import (
|
|
|
// SendReportToThs(report)
|
|
|
//}
|
|
|
|
|
|
-// SendWaitReport 定时向同花顺推送报告
|
|
|
+// SendWaitReport 定时向同花顺推送报告(定时任务)
|
|
|
func SendWaitReport(cont context.Context) (err error) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
@@ -40,6 +40,87 @@ func SendWaitReport(cont context.Context) (err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+// SyncWxGroupEveryDay 每日定时向同花顺同步客户时间
|
|
|
+func SyncWxGroupEveryDay(cont context.Context) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "同步微信群组信息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "同步微信群组信息至同花顺失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ //查询校验当天数据是否已经生成
|
|
|
+ _, err = models.GetCompanyEndDate(time.Now().Format(utils.FormatDate))
|
|
|
+ if err == nil || err.Error() != utils.ErrNoRow() {
|
|
|
+ err = errors.New(fmt.Sprint(time.Now().Format(utils.FormatDate), "当天数据已经同步"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //永续、正式、试用、冻结
|
|
|
+ list, err := models.GetAllCompanyProduct()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ timeLoc, _ := time.LoadLocation("Asia/Shanghai")
|
|
|
+ //需要入库的数据
|
|
|
+ companyEndDateMap := make(map[string]*models.CompanyEndDate)
|
|
|
+ //实际需要推送的数据
|
|
|
+ companyEndDatePushMap := make(map[string]*models.CompanyEndDate)
|
|
|
+
|
|
|
+ //微信群组开放编号code
|
|
|
+ companyProductOpenCode := make(map[string]string)
|
|
|
+ for _, companyProduct := range list {
|
|
|
+ key := fmt.Sprint(companyProduct.CompanyId, "_", companyProduct.ProductId)
|
|
|
+
|
|
|
+ endDate, _ := time.ParseInLocation(utils.FormatDate, companyProduct.EndDate, timeLoc)
|
|
|
+ if companyProduct.Status == "冻结" {
|
|
|
+ endDate = time.Now().AddDate(0, 0, -1)
|
|
|
+ }
|
|
|
+ tmpCompanyEndDate := &models.CompanyEndDate{
|
|
|
+ CompanyId: companyProduct.CompanyId,
|
|
|
+ ProductId: companyProduct.ProductId,
|
|
|
+ Status: companyProduct.Status,
|
|
|
+ EndDate: endDate,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ }
|
|
|
+ companyEndDateMap[key] = tmpCompanyEndDate
|
|
|
+ companyEndDatePushMap[key] = tmpCompanyEndDate
|
|
|
+
|
|
|
+ companyProductOpenCode[key] = companyProduct.OpenCode
|
|
|
+ }
|
|
|
+
|
|
|
+ startDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
|
|
|
+ endDate := time.Now().Format(utils.FormatDate)
|
|
|
+ endDateList, err := models.GetAllCompanyProductEndDate(startDate, endDate)
|
|
|
+ for _, endDate := range endDateList {
|
|
|
+ key := fmt.Sprint(endDate.CompanyId, "_", endDate.ProductId)
|
|
|
+ if companyEndDate, ok := companyEndDatePushMap[key]; ok {
|
|
|
+ if companyEndDate.Status == "冻结" {
|
|
|
+ //获取当天的零点时间
|
|
|
+ endDateStr := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
|
|
|
+ companyEndDate.EndDate, _ = time.ParseInLocation(utils.FormatDate, endDateStr, timeLoc)
|
|
|
+ }
|
|
|
+ if companyEndDate.EndDate.Equal(endDate.EndDate) {
|
|
|
+ delete(companyEndDatePushMap, key)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, companyEndDate := range companyEndDatePushMap {
|
|
|
+ fmt.Println("待推送数据:", companyEndDate)
|
|
|
+ key := fmt.Sprint(companyEndDate.CompanyId, "_", companyEndDate.ProductId)
|
|
|
+ //同步至同花顺
|
|
|
+ if openCode, ok := companyProductOpenCode[key]; ok {
|
|
|
+ SyncWxGroup(openCode, companyEndDate.EndDate.Format(utils.FormatDate))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, companyEndDate := range companyEndDateMap {
|
|
|
+ models.AddCompanyEndDate(companyEndDate)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
var permissionMap map[string]string = map[string]string{
|
|
|
"化里化外日评": "原油,PTA,MEG,织造终端,甲醇,聚烯烃,沥青,橡胶,苯乙烯,玻璃纯碱",
|
|
|
"股债日评": "宏观,利率债,原油,PTA,MEG,织造终端,甲醇,聚烯烃,沥青,橡胶,苯乙烯,玻璃纯碱,钢材,铁矿,双焦(焦煤、焦炭),有色(铜、铝),有色(锌、铅),镍+不锈钢",
|
|
@@ -62,12 +143,13 @@ var permissionMap map[string]string = map[string]string{
|
|
|
"黑色百家谈": "钢材,铁矿,双焦(焦煤、焦炭)",
|
|
|
}
|
|
|
|
|
|
-//同花顺返回信息
|
|
|
+//TshResult 同花顺返回信息
|
|
|
type TshResult struct {
|
|
|
ErrorCode int `json:"error" description:"错误状态码"`
|
|
|
Message string `json:"message" description:"提示信息"`
|
|
|
}
|
|
|
|
|
|
+//
|
|
|
func SendToThs(sendDetailId, reportId int, reportType string) (err error) {
|
|
|
switch reportType {
|
|
|
case "日度点评":
|
|
@@ -226,3 +308,55 @@ func SendThs(title, labelStr, abstract, jumpBaseUrl, logoUrl string) (err error)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// SyncWxGroup 同步同花顺 微信群信息
|
|
|
+func SyncWxGroup(openCompanyCode, deadline string) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ //fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "同步同花顺微信群信息失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "同步同花顺微信群信息失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ pubKey := utils.THS_PubKey
|
|
|
+ sendUrl := utils.THS_SyncWxGroupUrl
|
|
|
+
|
|
|
+ openCompanyCode, err = gorsa.PublicEncrypt(openCompanyCode, pubKey)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ deadline, err = gorsa.PublicEncrypt(deadline, pubKey)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //开始发送
|
|
|
+ client := http.Client{}
|
|
|
+ form := url.Values{}
|
|
|
+ form.Add("thirdWechatGroupId", openCompanyCode)
|
|
|
+ form.Add("deadline", deadline)
|
|
|
+
|
|
|
+ utils.FileLog.Info("SendThs parms:%s", form.Encode())
|
|
|
+ resp, err := client.PostForm(sendUrl, form)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+
|
|
|
+ body, _ := ioutil.ReadAll(resp.Body)
|
|
|
+
|
|
|
+ fmt.Println(string(body))
|
|
|
+ utils.FileLog.Info("ThsResult parms:%s", string(body))
|
|
|
+
|
|
|
+ //同花顺接口返回数据
|
|
|
+ var tshResult TshResult
|
|
|
+ err = json.Unmarshal(body, &tshResult)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New(fmt.Sprint("同花顺接口返回数据转换成结构体异常,Err:", err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if tshResult.ErrorCode != 1 {
|
|
|
+ err = errors.New(fmt.Sprint("发送数据到同花顺接口异常,result:", string(body)))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|