Browse Source

Merge branch 'pool/228' into eta/2.1.5

Roc 6 months ago
parent
commit
9034d5bf0c

+ 35 - 0
controllers/data_manage/edb_info.go

@@ -2232,6 +2232,8 @@ func (this *EdbInfoController) EdbInfoList() {
 
 	//获取英文频度
 	edbInfoItem.FrequencyEn = data.GetFrequencyEn(edbInfoItem.Frequency)
+	// 获取是否供应商停更
+	edbInfoItem.IsSupplierStop = data.GetIsSupplierStop(edbInfoItem.Source, edbInfoItem.EdbCode)
 
 	//查询目录
 	classifyList, err, errMsg := data.GetFullClassifyByClassifyId(edbInfoItem.ClassifyId)
@@ -3850,6 +3852,9 @@ func (this *ChartInfoController) EdbInfoData() {
 		return
 	}
 	fullEdb.EdbInfo = edbInfo
+	// 是否供应商停更
+	fullEdb.IsSupplierStop = data.GetIsSupplierStop(edbInfo.Source, edbInfo.EdbCode)
+
 	fullEdb.ClassifyList = classifyList
 
 	var currClassifyItem *data_manage.EdbClassifyIdItems
@@ -5506,12 +5511,42 @@ func (this *EdbInfoController) EdbChartList() {
 				return
 			}
 
+			issSupplierStopIndexCodeMap := make(map[string]bool)
+			{
+				tmpEdbCodeList := make([]string, 0)
+				for _, v := range list {
+					if v.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+						tmpEdbCodeList = append(tmpEdbCodeList, v.EdbCode)
+					}
+				}
+				if len(tmpEdbCodeList) > 0 {
+					notIsSupplierStopIndexList, e := data_manage.GetNotIsSupplierStopIndexByCodeList(tmpEdbCodeList, 1)
+					if e != nil {
+						br.Msg = "获取失败"
+						br.ErrMsg = "获取数据失败,Err:" + e.Error()
+						return
+					}
+
+					// 已被供应商暂停的指标编码
+					for _, v := range notIsSupplierStopIndexList {
+						issSupplierStopIndexCodeMap[v.IndexCode] = true
+					}
+				}
+			}
+
 			for _, v := range list {
 				if currClassify, ok := classifyMap[v.ClassifyId]; ok {
 					v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
 
 					v.Button = data.GetEdbOpButton(sysUser, v.SysUserId, v.EdbType, v.EdbInfoType, v.HaveOperaAuth)
 				}
+
+				// 供应商停用
+				if v.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+					if _, ok := issSupplierStopIndexCodeMap[v.EdbCode]; ok {
+						v.IsSupplierStop = 1
+					}
+				}
 			}
 		}
 

+ 37 - 0
controllers/data_manage/edb_info_refresh.go

@@ -723,6 +723,43 @@ func (c *EdbInfoController) SaveRelationEdbRefreshStatus() {
 		br.ErrMsg = "获取数据失败,Err:" + e.Error()
 		return
 	}
+
+	// 如果是钢联化工,那么需要过滤供应商暂停的指标
+	if req.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+		// 获取未被供应商暂停的指标
+		tmpEdbCodeList := make([]string, 0)
+		for _, v := range edbList {
+			tmpEdbCodeList = append(tmpEdbCodeList, v.EdbCode)
+		}
+		notIsSupplierStopIndexList, e := data_manage.GetNotIsSupplierStopIndexByCodeList(tmpEdbCodeList, 0)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + e.Error()
+			return
+		}
+
+		// 未被供应商暂停的指标编码
+		notIsSupplierStopIndexCodeList := make([]string, 0)
+		for _, v := range notIsSupplierStopIndexList {
+			notIsSupplierStopIndexCodeList = append(notIsSupplierStopIndexCodeList, v.IndexCode)
+		}
+
+		//查询未被供应商暂停的指标信息
+		edbList, err = data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_MYSTEEL_CHEMICAL, notIsSupplierStopIndexCodeList)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+
+		if len(edbList) <= 0 {
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "保存成功"
+			return
+		}
+	}
+
 	fromEdbIdList := make([]int, 0)
 	for _, v := range edbList {
 		if req.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {

+ 2 - 0
models/data_manage/edb_info.go

@@ -73,6 +73,7 @@ type EdbInfoFullClassify struct {
 	CorrelationStr string `description:"相关性系数字符串"`
 	ClassifyList   []*EdbClassifyIdItems
 	HaveOperaAuth  bool `description:"是否有数据权限,默认:false"`
+	IsSupplierStop int  `description:"是否供应商停更:1:停更,0:未停更"`
 }
 
 func AddEdbInfo(item *EdbInfo) (lastId int64, err error) {
@@ -448,6 +449,7 @@ type EdbInfoList struct {
 	NoUpdate         int8                    `description:"是否停止更新,0:继续更新;1:停止更新"`
 	IsJoinPermission int                     `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
 	HaveOperaAuth    bool                    `description:"是否有数据权限,默认:false"`
+	IsSupplierStop   int                     `description:"是否供应商停更:1:停更,0:未停更"`
 }
 
 type EdbDataInsertConfigItem struct {

+ 16 - 5
models/data_manage/edb_info_relation.go

@@ -236,6 +236,7 @@ type BaseRelationEdbInfo struct {
 	SysUserRealName string `description:"创建人姓名"`
 	Frequency       string `description:"频度"`
 	IsStop          int    `description:"是否停更:1:停更,0:未停更"`
+	IsSupplierStop  int    `description:"是否供应商停更:1:停更,0:未停更"`
 	RelationNum     int    `description:"引用次数"`
 	RelationTime    string `description:"引用时间"`
 }
@@ -261,11 +262,16 @@ type BaseRelationEdbInfoDetailResp struct {
 }
 
 // 查询指标引用列表
-func GetEdbInfoRelationList(condition string, pars []interface{}, orderBy string, startSize, pageSize int) (total int, items []*BaseRelationEdbInfo, err error) {
+func GetEdbInfoRelationList(condition string, pars []interface{}, addFieldStr, joinTableStr, orderBy string, startSize, pageSize int) (total int, items []*BaseRelationEdbInfo, err error) {
 	o := orm.NewOrmUsingDB("data")
 	// 数量汇总
 	totalSql := ` SELECT count(1) FROM edb_info e LEFT JOIN (
-SELECT count(edb_info_id) as relation_num, edb_info_id, max(relation_time) as relation_time FROM edb_info_relation GROUP BY edb_info_id) r on e.edb_info_id=r.edb_info_id WHERE 1=1 `
+SELECT count(edb_info_id) as relation_num, edb_info_id, max(relation_time) as relation_time FROM edb_info_relation GROUP BY edb_info_id) r on e.edb_info_id=r.edb_info_id  `
+
+	if joinTableStr != "" {
+		totalSql += joinTableStr
+	}
+	totalSql += ` WHERE 1=1 `
 	if condition != "" {
 		totalSql += condition
 	}
@@ -274,10 +280,15 @@ SELECT count(edb_info_id) as relation_num, edb_info_id, max(relation_time) as re
 		return
 	}
 
+	fieldStr := ` e.edb_info_id, e.classify_id,e.edb_code,e.edb_name,e.sys_user_id,e.sys_user_real_name,e.frequency,e.no_update as is_stop, r.relation_num, r.relation_time ` + addFieldStr
 	// 列表数据
-	sql := ` SELECT e.edb_info_id, e.classify_id,e.edb_code,e.edb_name,e.sys_user_id,e.sys_user_real_name,e.frequency,e.no_update as is_stop, r.relation_num, r.relation_time from edb_info e LEFT JOIN (
-SELECT count(edb_info_id) as relation_num, edb_info_id, max(relation_time) as relation_time FROM edb_info_relation GROUP BY edb_info_id) r on e.edb_info_id=r.edb_info_id WHERE 1=1
- `
+	sql := ` SELECT ` + fieldStr + ` from edb_info e LEFT JOIN (
+SELECT count(edb_info_id) as relation_num, edb_info_id, max(relation_time) as relation_time FROM edb_info_relation GROUP BY edb_info_id) r on e.edb_info_id=r.edb_info_id  `
+	if joinTableStr != "" {
+		sql += joinTableStr
+	}
+	sql += ` WHERE 1=1 `
+
 	if condition != "" {
 		sql += condition
 	}

+ 23 - 0
models/data_manage/mysteel_chemical_index.go

@@ -34,6 +34,7 @@ type BaseFromMysteelChemicalIndex struct {
 	TerminalCode                      string    `description:"终端编码"`
 	IsStop                            int       `description:"是否停更:1:停更,0:未停更"`
 	EndValue                          float64   `description:"指标的最新值"`
+	IsSupplierStop                    int       `description:"是否供应商停更:1:停更,0:未停更"`
 }
 
 type BaseFromMysteelChemicalIndexItem struct {
@@ -190,6 +191,7 @@ type MysteelChemicalList struct {
 	EdbInfoId                         int                `description:"指标库的id"`
 	UpdateTime                        string             `orm:"column(modify_time)"`
 	IsStop                            int                `description:"是否停更:1:停更,0:未停更"`
+	IsSupplierStop                    int                `description:"是否供应商停更:1:停更,0:未停更"`
 	Paging                            *paging.PagingItem `description:"分页数据"`
 	DataList                          []*MysteelChemicalData
 }
@@ -698,3 +700,24 @@ func ModifyMysteelChemicalUpdateStatusByEdbInfoIds(edbInfoIds []int, isStop int,
 
 	return
 }
+
+// GetNotIsSupplierStopIndexByCodeList
+// @Description: 获取未被供应商停更的指标
+// @author: Roc
+// @datetime 2024-08-28 18:15:03
+// @param codeList []string
+// @param isStop int
+// @return items []*BaseFromMysteelChemicalIndex
+// @return err error
+func GetNotIsSupplierStopIndexByCodeList(codeList []string, isStop int) (items []*BaseFromMysteelChemicalIndex, err error) {
+	num := len(codeList)
+	if num <= 0 {
+		return
+	}
+
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_mysteel_chemical_index WHERE is_supplier_stop = ? AND index_code in (` + utils.GetOrmInReplace(num) + `) `
+	_, err = o.Raw(sql, isStop, codeList).QueryRows(&items)
+
+	return
+}

+ 22 - 0
services/data/edb_info.go

@@ -2966,3 +2966,25 @@ func handleByDelEdbInfo(edbInfo *data_manage.EdbInfo) {
 		_ = models.UpdateManualIsJoinEdbStatus(edbInfo.EdbCode, 0)
 	}
 }
+
+// GetIsSupplierStop
+// @Description: 获取是否供应商停更
+// @author: Roc
+// @datetime 2024-08-27 10:28:19
+// @param source int
+// @param edbCode string
+// @return isSupplierStop int
+func GetIsSupplierStop(source int, edbCode string) (isSupplierStop int) {
+	switch source {
+	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL:
+		item, err := data_manage.GetBaseFromMysteelChemicalIndexByCode(edbCode)
+		if err != nil {
+			return
+		}
+		isSupplierStop = item.IsSupplierStop
+	}
+
+	return
+}
+
+//IsSupplierStop  int    `description:"是否供应商停更:1:停更,0:未停更"`

+ 33 - 5
services/data/edb_info_relation.go

@@ -357,12 +357,18 @@ func GetEdbRelationList(source, edbType int, classifyId, sysUserId, frequency, k
 	list = make([]*data_manage.BaseRelationEdbInfo, 0)
 
 	isStop := -1
-	if status == `暂停` {
+	switch status {
+	case `暂停`:
 		isStop = 1
-	} else if status == "启用" {
+	case `启用`:
 		isStop = 0
+	case `供应商停用`:
+		isStop = 3
 	}
 
+	// 关联表语句
+	var addFieldStr, joinTableStr string
+
 	switch source {
 	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL, utils.DATA_SOURCE_WIND:
 		condition += ` AND e.source = ? `
@@ -373,10 +379,32 @@ func GetEdbRelationList(source, edbType int, classifyId, sysUserId, frequency, k
 		condition += ` AND e.edb_type = ? AND e.edb_info_type = 0`
 		pars = append(pars, edbType)
 	}
-
-	if isStop >= 0 {
+	switch isStop {
+	case -1:
+		// 供应商停用
+		if source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			joinTableStr = ` LEFT JOIN base_from_mysteel_chemical_index z ON e.edb_code = z.index_code `
+			addFieldStr = ` ,z.is_supplier_stop `
+		}
+	case 0, 1:
 		condition += " AND e.no_update = ? "
 		pars = append(pars, isStop)
+
+		// 供应商停用
+		if source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			condition += " AND z.is_supplier_stop = ? "
+			pars = append(pars, 0)
+			joinTableStr = ` LEFT JOIN base_from_mysteel_chemical_index z ON e.edb_code = z.index_code `
+			addFieldStr = ` ,z.is_supplier_stop `
+		}
+	case 3:
+		// 供应商停用
+		if source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			condition += " AND z.is_supplier_stop = ? "
+			pars = append(pars, 1)
+			joinTableStr = ` LEFT JOIN base_from_mysteel_chemical_index z ON e.edb_code = z.index_code `
+			addFieldStr = ` ,z.is_supplier_stop `
+		}
 	}
 
 	if classifyId != `` {
@@ -421,7 +449,7 @@ func GetEdbRelationList(source, edbType int, classifyId, sysUserId, frequency, k
 		sortStr = fmt.Sprintf("%s %s,e.edb_info_id desc ", sortParam, sortType)
 	}
 
-	total, list, err = data_manage.GetEdbInfoRelationList(condition, pars, sortStr, startSize, pageSize)
+	total, list, err = data_manage.GetEdbInfoRelationList(condition, pars, addFieldStr, joinTableStr, sortStr, startSize, pageSize)
 
 	return
 }

+ 44 - 166
services/email.go

@@ -12,8 +12,8 @@ import (
 
 func SendEmailToCompany() {
 	// 获取收件人列表
-	//emailCond := " AND enabled = 1 "
-	emailCond := ""
+	emailCond := " AND enabled = 1 AND status in (1,2) "
+	//emailCond := ""
 	emailPars := make([]interface{}, 0)
 	emails, e := models.GetEnglishReportEmailList(emailCond, emailPars, "")
 	if e != nil {
@@ -28,169 +28,47 @@ func SendEmailToCompany() {
 	// TODO:这是HTML模板内容
 	template := `<!DOCTYPE html>
 <html lang="en">
-
-<head>
-    <meta charset="UTF-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover">
-    <title>Horizon Insights x Fastmarkets x FGE: 2024 Macro & Commodities Outlook - Registration Open!</title>
-</head>
-
-<body style="padding:0;margin:0;background-color:#fff">
-<div id="app" style="max-width:1280px;margin:0 auto;font-size:14px;min-height:100vh;">
-    <div class="main-box" style="padding:25px 20px;">
-        <div style="line-height:1.7;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;color:#000000;"
-            class=" __aliyun_node_has_color">
-            <div style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:center;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"
-                class=" __aliyun_node_has_color"><span
-                    style="font-size:18.0px;font-weight:bold;font-style:normal;text-transform:none;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;color:#000000;text-decoration:underline;"
-                    class=" __aliyun_node_has_color">2024 Macro &amp; Commodities Outlook Invite</span></div>
-            <div style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"
-                class=" __aliyun_node_has_color"><span
-                    style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;color:#000000;"
-                    class=" __aliyun_node_has_color"><br></span></div>
-            <div style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"
-                class=" __aliyun_node_has_color"><span
-                    style="font-style:normal;font-weight:400;text-transform:none;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;color:#000000;"
-                    class=" __aliyun_node_has_color">Dear Client,</span></div>
-            <div style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"
-                class=" __aliyun_node_has_color"><span
-                    style="font-style:normal;font-weight:400;text-transform:none;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;color:#000000;"
-                    class=" __aliyun_node_has_color"><br></span></div>
-            <div style="clear:both;">
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"><span
-                        style="font-style:normal;font-weight:400;text-transform:none;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;color:#000000;"
-                        class=" __aliyun_node_has_color">Happy Year-End Holidays!</span></div>
-            </div>
-            <div style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"
-                class=" __aliyun_node_has_color"><span
-                    style="font-style:normal;font-weight:400;text-transform:none;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;color:#000000;"
-                    class=" __aliyun_node_has_color"><br></span></div>
-            <div style="clear:both;">
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"><span
-                        style="color:#000000;font-style:normal;font-weight:400;text-transform:none;border:.0px;font-family:arial;margin:.0px;padding:.0px;outline:.0px;font-size:13.0px;"
-                        class=" __aliyun_node_has_color">As we usher in the new year, Horizon Insights, in collaboration
-                        with Fastmarkets and FGE, is proud to announce</span><span
-                        style="color:#000000;font-style:normal;font-weight:400;text-transform:none;font-family:arial;font-size:13.0px;"
-                        class=" __aliyun_node_has_color">&nbsp;our 2024 Macro &amp; Commodities Outlook which will be
-                        held&nbsp;</span><span
-                        style="font-weight:bold;color:#000000;font-style:normal;text-transform:none;font-family:arial;font-size:13.0px;text-decoration:none;"
-                        class=" __aliyun_node_has_color">virtually</span><span
-                        style="color:#000000;font-style:normal;font-weight:400;text-transform:none;font-family:arial;font-size:13.0px;text-decoration:none;"
-                        class=" __aliyun_node_has_color">&nbsp;on&nbsp;</span><span
-                        style="font-weight:bold;color:#000000;font-style:normal;text-transform:none;font-family:arial;font-size:13.0px;text-decoration:none;"
-                        class=" __aliyun_node_has_color">10 &amp; 11 Jan 2024</span><span
-                        style="color:#000000;font-style:normal;font-weight:400;text-transform:none;font-family:arial;font-size:13.0px;"
-                        class=" __aliyun_node_has_color">,&nbsp;</span><span
-                        style="color:#000000;font-family:arial;font-size:13.0px;font-style:normal;font-weight:bold;text-transform:none;"
-                        class=" __aliyun_node_has_color">5pm - 8pm SGT</span><span
-                        style="color:#000000;font-style:normal;font-weight:400;text-transform:none;font-family:arial;font-size:13.0px;"
-                        class=" __aliyun_node_has_color">&nbsp;(i.e.&nbsp;</span><span
-                        style="color:#000000;font-family:arial;font-size:13.0px;font-style:normal;font-weight:bold;text-transform:none;"
-                        class=" __aliyun_node_has_color">9am - 12pm BST</span><span
-                        style="color:#000000;font-style:normal;font-weight:400;text-transform:none;font-family:arial;font-size:13.0px;"
-                        class=" __aliyun_node_has_color">). Our experienced analysts from Horizon Insights together with
-                        guest speakers from our valued partners will present our views in the fields of Macro, Ferrous
-                        Metals, Base Metals, Energy, as well as Petrochemicals.</span></div>
-            </div>
-            <div style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"
-                class=" __aliyun_node_has_color"><span
-                    style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-size:13.0px;font-family:arial;"><br></span>
-            </div>
-            <div style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;"
-                class=" __aliyun_node_has_color"><span
-                    style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-size:13.0px;font-family:arial;">Please
-                    see below for our event schedule:</span></div>
-            <div
-                style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;">
-                <br></div>
-            <div
-                style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;">
-                <span
-                    style="color:#000000;font-style:normal;font-weight:400;text-transform:none;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-size:13.0px;font-family:arial;"
-                    class=" __aliyun_node_has_color">&nbsp;&nbsp;<img style="vertical-align: bottom; margin: 0px;"
-                        height="3301"
-                        src="https://hzstatic.hzinsights.com/static/images/202312/20231228/KeDTAxIZ3UrZR5DZKKIQLdoIaOVB.png"
-                        width="890"></span></div>
-            <div
-                style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;">
-                <span
-                    style="color:#000000;font-style:normal;font-weight:400;text-transform:none;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-size:13.0px;font-family:arial;"
-                    class=" __aliyun_node_has_color">&nbsp; &nbsp;</span></div>
-            <div
-                style="clear:both;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-variant-ligatures:normal;font-variant-caps:normal;text-align:start;text-indent:.0px;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;">
-                <br></div>
-            <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                class=" __aliyun_node_has_color"><span
-                    style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;"><br></span>
-            </div>
-            <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                class=" __aliyun_node_has_color"><span
-                    style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;">To
-                    register, simply scan the QR code in the posters above to indicate your interest. Alternatively, you
-                    may also&nbsp;</span><span
-                    style="font-weight:bold;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;"><a
-                        href="https://forms.gle/yhPRDcri43P2QyPt8" target="_blank">register here</a></span><span
-                    style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;">.</span>
-            </div>
-            <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                class=" __aliyun_node_has_color"><span
-                    style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;color:#000000;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline;"
-                    class=" __aliyun_node_has_color">Should you encounter any difficulties registering, please contact
-                    Stephanie (stephanie@hzinsights.com).</span></div>
-            <div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"><span
-                        style="font-weight:bold;margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;">The
-                        virtual meeting details will be disseminated to you a few days prior to the event.</span></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"><br></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"><span
-                        style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;">Lastly,
-                        our firm would like to wish all of you a prosperous Happy New Year! We look forward to seeing
-                        everyone on the 10th &amp; 11th.</span></div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"><span
-                        style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;"><br></span>
-                </div>
-                <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;color:#000000;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;text-align:start;text-indent:.0px;text-transform:none;text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;clear:both;"
-                    class=" __aliyun_node_has_color"><span
-                        style="margin:.0px;padding:.0px;border:.0px;outline:.0px;font-family:arial;font-size:13.0px;">Cheers!</span>
-                </div>
-            </div>
-            <div><br></div>
-            <div>
-                <div style="clear:both;"><span style="font-family:arial;font-size:13.0px;color:#000000;"
-                        class=" __aliyun_node_has_color"><br></span></div>
-                <div style="clear:both;">
-                    <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;clear:both;font-variant-caps:normal;text-align:start;text-indent:.0px;"
-                        class="x___aliyun_node_has_color"><br></div>
-                    <div style="margin:.0px;padding:.0px;border:.0px;outline:.0px;clear:both;font-variant-caps:normal;text-align:start;text-indent:.0px;"
-                        class="x___aliyun_node_has_color"></div>
-                </div>
-            </div>
-            <div><br></div>
-            <div><br></div>
-            <div><br></div>
-            <div style="line-height:20.0px;clear:both;"><br></div>
-        </div>
+  <head>
+    <meta charset="UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Document</title>
+  </head>
+  <body>
+    <div>
+      <p>Hello,</p>
+      <p></p>
+      <p> We are pleased to invite you to the launch of our <span style="font-weight: 700;">Mon. Date with HI</span> , a weekly event where we share timely updates and expert analysis on Global Macro, Base Metal, Ferrous Metal, and Energy markets.</p>
+      <h3 style="font-weight: 700;">Event Details:</h3>
+      <ul>
+        <li>Date: August 26th</li>
+        <li>Time: 5:00 PM (Shanghai/Singapore) | 10:00 AM (London)</li>
+        <li>Platform: Zoom (the same link will be used for all future sessions)</li>
+      </ul>
+      <h3 style="font-weight: 700;">Join Zoom Meeting:</h3>
+      <a href="https://us06web.zoom.us/j/84723517075?pwd=3GHNOCHq6sAgBGXsA7qtX9r1PuA1uK.1" target="_blank">https://us06web.zoom.us/j/84723517075?pwd=3GHNOCHq6sAgBGXsA7qtX9r1PuA1uK.1</a>
+      <p>
+        <span style="font-weight: 700;">Meeting ID:</span>
+        <span>847 2351 7075</span>
+      </p>
+      <p>
+        <span style="font-weight: 700;">Passcode:</span>
+        <span>564439</span>
+      </p>
+      <p style="font-weight: 700;">Theme for Today’s Session: Diverging Expectations between Market and Policymakers</p>
+      <p>Our analysts will discuss the impact of the current macro environment on commodity markets, exploring both short-term challenges and longer-term outlooks.<br>This series will be a recurring event every Monday at the same time. </p>
+      <h3 style="font-weight: 700;">Please note:</h3>
+      <ul>
+        <li>This event will be conducted in listen-only mode. However, participants are encouraged to ask questions via the chat function during the Q&A segments.</li>
+        <li>For privacy concerns, you may change your display name upon joining the event.</li>
+      </ul>
+      <p></p>
+      <p>We look forward to your participation.</p>
+      <p></p>
+      <p>Best regards,<br>Horizon Insights</p>
+      <img style="max-width: 375px;width: 100%;" src="https://hzstatic.hzinsights.com/static/images/202408/20240826/z0qJ4cpM5mIaHrHv0BaMsNXYkLKa.jpg" alt="">
     </div>
-</div>
-</body>
-
+  </body>
 </html>`
 
 	// 推送信息
@@ -199,8 +77,8 @@ func SendEmailToCompany() {
 		r := new(EnglishReportSendEmailRequest)
 		r.EmailId = emails[i].Id
 		r.Email = strings.Replace(emails[i].Email, " ", "", -1)
-		r.Subject = "Horizon Insights x Fastmarkets x FGE: 2024 Macro & Commodities Outlook - Registration Open!" // TODO:这是主题
-		r.FromAlias = "Horizon FICC"                                                                              // TODO:这是推送人(中文)
+		r.Subject = "Invitation to Weekly Call with Horizon Insights Analysts: Mon. Date with HI" // TODO:这是主题
+		r.FromAlias = "Horizon FICC"                                                              // TODO:这是推送人(中文)
 
 		r.HtmlBody = template
 		sendData = append(sendData, r)