Browse Source

Merge branch 'feature/eta_1.0.6' of eta_server/eta_api into master

xyxie 1 year ago
parent
commit
9f55a13a54

+ 1 - 1
models/ppt_english/ppt_english_grant.go

@@ -97,7 +97,7 @@ type PptEnglishInfoGrantItem struct {
 	ReportId      int       `description:"关联的报告ID"`
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
-
+	PublishTime   time.Time `description:"发布时间"`
 	//GrantId      int64     `orm:"column(grant_id);pk;auto" description:"自增序号"`
 	//PptId        int64     `description:"ppt ID"`
 	//DepartmentId int64     `description:"授权部门id"`

+ 4 - 0
models/ppt_english/ppt_english_group.go

@@ -206,6 +206,8 @@ type RespGroupPptNameListItem struct {
 	ReportId      int    `description:"关联的报告ID"`
 	ReportCode    string `description:"关联的报告code"`
 	PptCreateTime string `description:"ppt创建时间"`
+	PptModifyTime string `description:"ppt修改时间"`
+	PublishTime   string `description:"发布时间"`
 	PptPage       int    `description:"PPT总页数"`
 	IsReceived    int8   `description:"是否收到的共享,0:不是,1:是"`
 	IsGrant       int8   `description:"是否分配了权限,0:不是,1:是"`
@@ -218,6 +220,7 @@ type RespGroupPptListItem struct {
 	BackgroundImg string `description:"背景图片"`
 	Title         string `description:"标题"`
 	PptCreateTime string `description:"ppt创建时间"`
+	PptModifyTime string `description:"ppt修改时间"`
 	AdminId       int    `description:"移动ppt到该目录的系统用户id"`
 	AdminRealName string `description:"系统用户名称"`
 	PptVersion    int8   `description:"是否ppt的旧版本;1:旧的,2:新的"`
@@ -225,6 +228,7 @@ type RespGroupPptListItem struct {
 	PptxUrl       string `description:"pptx下载地址"`
 	ReportId      int    `description:"关联的报告ID"`
 	ReportCode    string `description:"关联的报告code"`
+	PublishTime   string `description:"发布时间"`
 }
 
 func (p RespGroupPptList) Len() int {

+ 1 - 0
models/ppt_v2_grant.go

@@ -97,6 +97,7 @@ type PptV2InfoGrantItem struct {
 	ReportId      int       `description:"关联的报告ID"`
 	ReportCode    string    `description:"关联的报告code"`
 	IsShare       int8      `description:"是否分享,0:不分享,1:分享"`
+	PublishTime   time.Time `description:"发布时间"`
 
 	//GrantId      int64     `orm:"column(grant_id);pk;auto" description:"自增序号"`
 	//PptId        int64     `description:"ppt ID"`

+ 4 - 0
models/ppt_v2_group.go

@@ -206,6 +206,8 @@ type RespGroupPptNameListItem struct {
 	ReportId      int    `description:"关联的报告ID"`
 	ReportCode    string `description:"关联的报告code"`
 	PptCreateTime string `description:"ppt创建时间"`
+	PptModifyTime string `description:"ppt修改时间"`
+	PublishTime   string `description:"发布时间"`
 	PptPage       int    `description:"PPT总页数"`
 	IsReceived    int8   `description:"是否收到的共享,0:不是,1:是"`
 	IsGrant       int8   `description:"是否分配了权限,0:不是,1:是"`
@@ -218,6 +220,7 @@ type RespGroupPptListItem struct {
 	BackgroundImg string `description:"背景图片"`
 	Title         string `description:"标题"`
 	PptCreateTime string `description:"ppt创建时间"`
+	PptModifyTime string `description:"ppt修改时间"`
 	AdminId       int    `description:"移动ppt到该目录的系统用户id"`
 	AdminRealName string `description:"系统用户名称"`
 	PptVersion    int8   `description:"是否ppt的旧版本;1:旧的,2:新的"`
@@ -225,6 +228,7 @@ type RespGroupPptListItem struct {
 	PptxUrl       string `description:"pptx下载地址"`
 	ReportId      int    `description:"关联的报告ID"`
 	ReportCode    string `description:"关联的报告code"`
+	PublishTime   string `description:"发布时间"`
 }
 
 func (p RespGroupPptList) Len() int {

+ 15 - 0
services/ppt/ppt_english_group.go

@@ -424,13 +424,16 @@ func GetGroupPptEnglishList(groupId int64, adminId int) (ret ppt_english.RespGro
 							AdminRealName: pptV.AdminRealName,
 							IsSingleShare: 0,
 							PptCreateTime: pptInfo.CreateTime.Format(utils.FormatDateTime),
+							PptModifyTime: pptInfo.ModifyTime.Format(utils.FormatDateTime),
 							PptxUrl:       pptInfo.PptxUrl,
 							ReportId:      pptInfo.ReportId,
 							ReportCode:    pptInfo.ReportCode,
+							PublishTime:   utils.DealDateTimeZero(pptInfo.PublishTime, utils.FormatDateTime),
 						}
 						if pptV.ChildGroupPptId > 0 {
 							tmp.IsSingleShare = 1
 						}
+
 						list = append(list, tmp)
 						hasPpt[pptInfo.PptId] = struct{}{}
 					}
@@ -955,6 +958,8 @@ func GetEnglishGroupsByAdminId(adminId int) (ret ppt_english.RespGroupList, err
 				ReportId:      i.ReportId,
 				ReportCode:    i.ReportCode,
 				PptCreateTime: i.CreateTime.Format(utils.FormatDateTime),
+				PptModifyTime: i.ModifyTime.Format(utils.FormatDateTime),
+				PublishTime:   utils.DealDateTimeZero(i.PublishTime, utils.FormatDateTime),
 				PptPage:       pptPage,
 			}
 
@@ -1009,6 +1014,8 @@ func GetEnglishGroupsByAdminId(adminId int) (ret ppt_english.RespGroupList, err
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 			PptPage:       pptPage,
 		}
 		publicPptList = append(publicPptList, tmpV)
@@ -1083,6 +1090,8 @@ func GetEnglishGroupsByAdminId(adminId int) (ret ppt_english.RespGroupList, err
 				ReportId:      v.ReportId,
 				ReportCode:    v.ReportCode,
 				PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+				PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
+				PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 				PptPage:       pptPage,
 			}
 
@@ -1211,12 +1220,14 @@ func GetMyPptEnglishList(adminId int, keyword string) (ret ppt_english.RespGroup
 			BackgroundImg: v.BackgroundImg,
 			Title:         v.Title,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
 			AdminId:       v.AdminId,
 			AdminRealName: v.AdminRealName,
 			IsSingleShare: v.IsShare,
 			PptxUrl:       v.PptxUrl,
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 		}
 		list = append(list, tmpV)
 	}
@@ -1266,12 +1277,14 @@ func GetSharePptEnglishList(adminId int, keyword string, isPrivate bool) (ret pp
 			BackgroundImg: v.BackgroundImg,
 			Title:         v.Title,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
 			AdminId:       v.AdminId,
 			AdminRealName: v.AdminRealName,
 			IsSingleShare: v.IsShare,
 			PptxUrl:       v.PptxUrl,
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 		}
 		list = append(list, tmpV)
 	}
@@ -1324,6 +1337,7 @@ func GetGrantPptEnglishList(adminId int, keyword, sourceType string) (ret ppt_en
 			BackgroundImg: v.BackgroundImg,
 			Title:         v.Title,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
 			AdminId:       v.AdminId,
 			AdminRealName: v.AdminRealName,
 			PptVersion:    v.PptVersion,
@@ -1331,6 +1345,7 @@ func GetGrantPptEnglishList(adminId int, keyword, sourceType string) (ret ppt_en
 			PptxUrl:       v.PptxUrl,
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 		}
 		list = append(list, tmpV)
 	}

+ 14 - 0
services/ppt/ppt_group.go

@@ -612,10 +612,12 @@ func GetGroupPptList(groupId int64, adminId int) (ret models.RespGroupPptList, e
 							AdminRealName: pptV.AdminRealName,
 							IsSingleShare: 0,
 							PptCreateTime: pptInfo.CreateTime.Format(utils.FormatDateTime),
+							PptModifyTime: pptInfo.ModifyTime.Format(utils.FormatDateTime),
 							PptxUrl:       pptInfo.PptxUrl,
 							PptVersion:    pptInfo.PptVersion,
 							ReportId:      pptInfo.ReportId,
 							ReportCode:    pptInfo.ReportCode,
+							PublishTime:   utils.DealDateTimeZero(pptInfo.PublishTime, utils.FormatDateTime),
 						}
 						if pptV.ChildGroupPptId > 0 {
 							tmp.IsSingleShare = 1
@@ -1291,6 +1293,8 @@ func GetGroupsByAdminIdV2(IsNewPpt, adminId int) (ret models.RespGroupList, err
 				ReportId:      i.ReportId,
 				ReportCode:    i.ReportCode,
 				PptCreateTime: i.CreateTime.Format(utils.FormatDateTime),
+				PptModifyTime: i.ModifyTime.Format(utils.FormatDateTime),
+				PublishTime:   utils.DealDateTimeZero(i.PublishTime, utils.FormatDateTime),
 				PptPage:       pptPage,
 			}
 
@@ -1346,6 +1350,8 @@ func GetGroupsByAdminIdV2(IsNewPpt, adminId int) (ret models.RespGroupList, err
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 			PptPage:       pptPage,
 		}
 		publicPptList = append(publicPptList, tmpV)
@@ -1420,6 +1426,8 @@ func GetGroupsByAdminIdV2(IsNewPpt, adminId int) (ret models.RespGroupList, err
 				ReportId:      v.ReportId,
 				ReportCode:    v.ReportCode,
 				PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+				PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
+				PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 				PptPage:       pptPage,
 			}
 			//如果只展示新版ppt,则过滤旧版的Ppt
@@ -1556,6 +1564,7 @@ func GetMyPptList(adminId int, keyword string) (ret models.RespGroupPptList, err
 			BackgroundImg: v.BackgroundImg,
 			Title:         v.Title,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
 			AdminId:       v.AdminId,
 			AdminRealName: v.AdminRealName,
 			PptVersion:    v.PptVersion,
@@ -1563,6 +1572,7 @@ func GetMyPptList(adminId int, keyword string) (ret models.RespGroupPptList, err
 			PptxUrl:       v.PptxUrl,
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 		}
 		list = append(list, tmpV)
 	}
@@ -1612,6 +1622,7 @@ func GetSharePptList(adminId int, keyword string, isPrivate bool) (ret models.Re
 			BackgroundImg: v.BackgroundImg,
 			Title:         v.Title,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
 			AdminId:       v.AdminId,
 			AdminRealName: v.AdminRealName,
 			PptVersion:    v.PptVersion,
@@ -1619,6 +1630,7 @@ func GetSharePptList(adminId int, keyword string, isPrivate bool) (ret models.Re
 			PptxUrl:       v.PptxUrl,
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 		}
 		list = append(list, tmpV)
 	}
@@ -1671,6 +1683,7 @@ func GetGrantPptList(adminId int, keyword, sourceType string) (ret models.RespGr
 			BackgroundImg: v.BackgroundImg,
 			Title:         v.Title,
 			PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
 			AdminId:       v.AdminId,
 			AdminRealName: v.AdminRealName,
 			PptVersion:    v.PptVersion,
@@ -1678,6 +1691,7 @@ func GetGrantPptList(adminId int, keyword, sourceType string) (ret models.RespGr
 			PptxUrl:       v.PptxUrl,
 			ReportId:      v.ReportId,
 			ReportCode:    v.ReportCode,
+			PublishTime:   utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
 		}
 		list = append(list, tmpV)
 	}

+ 61 - 19
services/sms.go

@@ -2,6 +2,7 @@ package services
 
 import (
 	"encoding/json"
+	"eta/eta_api/models"
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/utils"
 	"fmt"
@@ -27,8 +28,25 @@ func SendSmsCode(mobile, vCode, tplId string) (flag bool) {
 			go alarm_msg.SendAlarmMsg(tips, 2)
 		}
 	}()
-
-	result, e := sendSms(mobile, tplId, vCode)
+	// 获取配置好的短信模版
+	smsCond := ` AND conf_key = ? `
+	smsPars := make([]interface{}, 0)
+	smsPars = append(smsPars, "SmsJhgnAppKey")
+	conf := new(models.BusinessConf)
+	conf, e := conf.GetItemByCondition(smsCond, smsPars)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			err = fmt.Errorf("请先配置聚合短信Appkey")
+			return
+		}
+		err = fmt.Errorf("获取聚合短信配置信息失败, Err: %s", e.Error())
+		return
+	}
+	if conf.ConfVal == "" {
+		err = fmt.Errorf("请先配置聚合短信Appkey")
+		return
+	}
+	result, e := sendSms(conf.ConfVal, mobile, tplId, vCode)
 	if e != nil {
 		err = fmt.Errorf("send sms err: %s", e.Error())
 		return
@@ -58,7 +76,7 @@ func SendSmsCode(mobile, vCode, tplId string) (flag bool) {
 }
 
 // sendSms 发送国内短信
-func sendSms(mobile, tplId, code string) (rs []byte, err error) {
+func sendSms(jhGnAppKey, mobile, tplId, code string) (rs []byte, err error) {
 	var Url *url.URL
 	apiURL := "http://v.juhe.cn/sms/send"
 	//初始化参数
@@ -67,8 +85,8 @@ func sendSms(mobile, tplId, code string) (rs []byte, err error) {
 	param.Set("mobile", mobile) //接受短信的用户手机号码
 	param.Set("tpl_id", tplId)  //您申请的短信模板ID,根据实际情况修改
 	tplVal := fmt.Sprintf(`#code#=%s&#m#=%d`, code, utils.VerifyCodeExpireMinute)
-	param.Set("tpl_value", tplVal)     //您设置的模板变量,根据实际情况
-	param.Set("key", utils.JhGnAppKey) //应用APPKEY(应用详细页查询)
+	param.Set("tpl_value", tplVal) //您设置的模板变量,根据实际情况
+	param.Set("key", jhGnAppKey)   //应用APPKEY(应用详细页查询)
 
 	Url, err = url.Parse(apiURL)
 	if err != nil {
@@ -87,9 +105,34 @@ func sendSms(mobile, tplId, code string) (rs []byte, err error) {
 }
 
 // SendSmsCodeGj 发送国际短信
-func SendSmsCodeGj(mobile, vCode, areaNum string) bool {
-	flag := false
-	result, err := sendSmsGj(mobile, vCode, areaNum)
+func SendSmsCodeGj(mobile, vCode, areaNum, tplId string) bool {
+	var err error
+	defer func() {
+		if err != nil {
+			tips := fmt.Sprintf("短信验证码发送失败, Err: %s", err.Error())
+			utils.FileLog.Info("%s", tips)
+			go alarm_msg.SendAlarmMsg(tips, 2)
+		}
+	}()
+	// 获取配置好的短信模版
+	smsCond := ` AND conf_key = ? `
+	smsPars := make([]interface{}, 0)
+	smsPars = append(smsPars, "SmsJhgjAppKey")
+	conf := new(models.BusinessConf)
+	conf, e := conf.GetItemByCondition(smsCond, smsPars)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			err = fmt.Errorf("请先配置聚合短信Appkey")
+			return false
+		}
+		err = fmt.Errorf("获取聚合短信配置信息失败, Err: %s", e.Error())
+		return false
+	}
+	if conf.ConfVal == "" {
+		err = fmt.Errorf("请先配置聚合短信Appkey")
+		return false
+	}
+	result, err := sendSmsGj(conf.ConfVal, mobile, vCode, areaNum, tplId)
 	if err != nil {
 		fmt.Println("发送短信失败")
 		return false
@@ -98,34 +141,33 @@ func SendSmsCodeGj(mobile, vCode, areaNum string) bool {
 	var netReturn map[string]interface{}
 	err = json.Unmarshal(result, &netReturn)
 	if err != nil {
-		//go SendEmail("短信验证码发送失败", "err:"+err.Error()+" result"+string(result), utils.EmailSendToUsers)
-		go alarm_msg.SendAlarmMsg("短信验证码发送失败, Err:"+err.Error()+";Result:"+string(result), 2)
-		flag = false
+		err = fmt.Errorf("短信验证码发送失败, Err:" + err.Error() + ";Result:" + string(result))
+		return false
 	}
 	if netReturn["error_code"].(float64) == 0 {
 		fmt.Printf("接口返回result字段是:\r\n%v", netReturn["result"])
-		flag = true
+		return true
 	} else {
 		// 忽略错误的手机号码这种错误
 		if netReturn["error_code"].(float64) != 205401 {
-			go alarm_msg.SendAlarmMsg("短信验证码发送失败, Result:"+string(result), 2)
+			err = fmt.Errorf("短信验证码发送失败, Result:" + string(result))
 		}
-		flag = false
+		return false
 	}
-	return flag
 }
 
 // sendSmsGj 发送国际短信
-func sendSmsGj(mobile, code, areaNum string) (rs []byte, err error) {
+func sendSmsGj(jhGjAppKey, mobile, code, areaNum, tplId string) (rs []byte, err error) {
 	var Url *url.URL
 	apiURL := "http://v.juhe.cn/smsInternational/send.php"
 	//初始化参数
 	param := url.Values{}
 	//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
-	param.Set("mobile", mobile)           //接受短信的用户手机号码
-	param.Set("tplId", "10054")           //您申请的短信模板ID,根据实际情况修改
+	param.Set("mobile", mobile) //接受短信的用户手机号码
+	//param.Set("tplId", "10054")           //您申请的短信模板ID,根据实际情况修改
+	param.Set("tplId", tplId)             //您申请的短信模板ID,根据实际情况修改
 	param.Set("tplValue", "#code#="+code) //您设置的模板变量,根据实际情况
-	param.Set("key", utils.JhGjAppKey)    //应用APPKEY(应用详细页查询)
+	param.Set("key", jhGjAppKey)          //应用APPKEY(应用详细页查询)
 	param.Set("areaNum", areaNum)         //应用APPKEY(应用详细页查询)
 
 	Url, err = url.Parse(apiURL)

+ 61 - 9
services/user_login.go

@@ -27,12 +27,43 @@ func SendAdminMobileVerifyCode(source int, mobile, areaCode string) (ok bool, er
 		err = fmt.Errorf("新增验证码记录失败, Err: %s", e.Error())
 		return
 	}
+	// 获取配置好的短信模版
+	smsCond := ` AND conf_key in (?,?) `
+	smsPars := make([]interface{}, 0)
+	smsPars = append(smsPars, "LoginSmsTpId", "LoginSmsGjTpId")
+	conf := new(models.BusinessConf)
+	confList, e := conf.GetItemsByCondition(smsCond, smsPars, []string{"conf_key", "conf_val"}, "")
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			err = fmt.Errorf("请先配置短信模版")
+			return
+		}
+		err = fmt.Errorf("获取短信模版失败, Err: %s", e.Error())
+		return
+	}
+
+	tplId := ""
+	gjTplId := ""
+	for _, v := range confList {
+		if v.ConfKey == "LoginSmsTpId" {
+			tplId = v.ConfVal
+		} else if v.ConfKey == "LoginSmsGjTpId" {
+			gjTplId = v.ConfVal
+		}
+	}
 
-	tplId := utils.SmsNewLoginTplId
+	if tplId == "" {
+		err = fmt.Errorf("请先配置短信模版")
+		return
+	}
 	if areaCode == "86" {
 		ok = SendSmsCode(mobile, verifyCode, tplId)
 	} else {
-		ok = SendSmsCodeGj(mobile, verifyCode, areaCode)
+		if gjTplId == "" {
+			err = fmt.Errorf("请先配置国际短信模版")
+			return
+		}
+		ok = SendSmsCodeGj(mobile, verifyCode, areaCode, gjTplId)
 	}
 	record.SendStatus = system.AdminVerifyCodeRecordStatusSuccess
 	if !ok {
@@ -79,24 +110,45 @@ func SendAdminEmailVerifyCode(source int, email string) (ok bool, err error) {
 	}
 
 	// 获取邮箱模板
-	confKey := "admin_verify_code_email_tmp"
-	confTmp, e := company.GetConfigDetailByCode(confKey)
+	// 获取配置好的短信模版
+	cond := ` AND (conf_key = ? OR conf_key = ?)`
+	pars := make([]interface{}, 0)
+	pars = append(pars, "LoginEmailTemplateSubject", "LoginEmailTemplateContent")
+	busiConf := new(models.BusinessConf)
+	emailConfList, e := busiConf.GetItemsByCondition(cond, pars, []string{"conf_key, conf_val"}, "")
 	if e != nil {
-		err = fmt.Errorf("获取邮件模板失败, Err: %s", e.Error())
+		if e.Error() == utils.ErrNoRow() {
+			err = fmt.Errorf("请先配置邮件模版")
+			return
+		}
+		err = fmt.Errorf("获取邮件模版失败, Err: %s", e.Error())
+		return
+	}
+	var emaiContent, emailSubject string
+	for _, v := range emailConfList {
+		if v.ConfKey == "LoginEmailTemplateContent" {
+			emaiContent = v.ConfVal
+		} else if v.ConfKey == "LoginEmailTemplateSubject" {
+			emailSubject = v.ConfVal
+		}
+	}
+	if emailSubject == "" {
+		err = fmt.Errorf("请先配置邮件模版主题")
 		return
 	}
-	if confTmp.ConfigValue == `` {
-		err = fmt.Errorf("邮件模板为空, 不可推送")
+	if emaiContent == "" {
+		err = fmt.Errorf("请先配置邮件模版内容")
 		return
 	}
 
 	req := new(EnglishReportSendEmailRequest)
-	req.Subject = "弘则研究登录验证"
+	req.Subject = emailSubject
 	req.Email = email
+	// todo 发信人昵称
 	req.FromAlias = conf.FromAlias
 	// 填充模板
 	t := time.Now().Format("2006年01月02日")
-	ct := confTmp.ConfigValue
+	ct := emaiContent
 	ct = strings.Replace(ct, "{{VERIFY_CODE}}", verifyCode, 1)
 	ct = strings.Replace(ct, "{{EXPIRED_MINUTE}}", strconv.Itoa(utils.VerifyCodeExpireMinute), 1)
 	ct = strings.Replace(ct, "{{DATE_TIME}}", t, 1)

+ 7 - 0
utils/common.go

@@ -2134,3 +2134,10 @@ func FormatTableDataShowValue(x float64) (res string) {
 	}
 	return
 }
+
+func DealDateTimeZero(t time.Time, format string) (timeStr string) {
+	if !t.IsZero() {
+		timeStr = t.Format(format)
+	}
+	return
+}