|
@@ -1,50 +1,50 @@
|
|
|
package util
|
|
|
|
|
|
import (
|
|
|
- qutil "app.yhyue.com/moapp/jybase/common"
|
|
|
- "app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
|
|
|
- "encoding/json"
|
|
|
- "fmt"
|
|
|
- . "jy/src/jfw/modules/subscribepay/src/config"
|
|
|
- "log"
|
|
|
- "strings"
|
|
|
- "time"
|
|
|
+ qutil "app.yhyue.com/moapp/jybase/common"
|
|
|
+ "app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ . "jy/src/jfw/modules/subscribepay/src/config"
|
|
|
+ "log"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
type MarketAnalysisEntity struct {
|
|
|
- FormatParam AnalysisRequestFormat
|
|
|
+ FormatParam AnalysisRequestFormat
|
|
|
}
|
|
|
|
|
|
// AnalysisRequestFormat 格式化后参数
|
|
|
type AnalysisRequestFormat struct {
|
|
|
- KeysItems []keyWordGroup
|
|
|
- Area, City []string //省份城市
|
|
|
- STime, ETime int64 //开始结束时间
|
|
|
- Industry []string //行业
|
|
|
- BuyerClass []string //采购单位类型
|
|
|
- Buyer string //采购单位
|
|
|
- Winner string //中标单位
|
|
|
- Sort int //排序:默认0:成交时间倒序;1:项目金额倒序
|
|
|
- PageSize int //默认每页10条
|
|
|
- PageNum int //默认当前第一页
|
|
|
+ KeysItems []keyWordGroup
|
|
|
+ Area, City []string //省份城市
|
|
|
+ STime, ETime int64 //开始结束时间
|
|
|
+ Industry []string //行业
|
|
|
+ BuyerClass []string //采购单位类型
|
|
|
+ Buyer string //采购单位
|
|
|
+ Winner string //中标单位
|
|
|
+ Sort int //排序:默认0:成交时间倒序;1:项目金额倒序
|
|
|
+ PageSize int //默认每页10条
|
|
|
+ PageNum int //默认当前第一页
|
|
|
}
|
|
|
|
|
|
// keyWordGroup 订阅词结构体
|
|
|
type keyWordGroup struct {
|
|
|
- A_Key []viewKeyWord `json:"a_key"`
|
|
|
- ItemName string `json:"s_item"`
|
|
|
- UpdateTime int64 `json:"updatetime"`
|
|
|
+ A_Key []viewKeyWord `json:"a_key"`
|
|
|
+ ItemName string `json:"s_item"`
|
|
|
+ UpdateTime int64 `json:"updatetime"`
|
|
|
}
|
|
|
|
|
|
type viewKeyWord struct {
|
|
|
- Keyword []string `json:"key"` //关键词
|
|
|
- Appended []string `json:"appendkey"` //附加词
|
|
|
- Exclude []string `json:"notkey"` //排除词
|
|
|
- MatchWay int `json:"matchway"` //匹配模式
|
|
|
+ Keyword []string `json:"key"` //关键词
|
|
|
+ Appended []string `json:"appendkey"` //附加词
|
|
|
+ Exclude []string `json:"notkey"` //排除词
|
|
|
+ MatchWay int `json:"matchway"` //匹配模式
|
|
|
}
|
|
|
|
|
|
var (
|
|
|
- AnalyzePdfEmailContent = `<div style="width:1200px;background-color:#F5F4FA;padding:15px;">
|
|
|
+ AnalyzePdfEmailContent = `<div style="width:1200px;background-color:#F5F4FA;padding:15px;">
|
|
|
<div style="padding:5px 50px 50px 50px;background-color:#fff;width:1000px;margin:auto;border-top: 5px solid #2cb7ca;">
|
|
|
<img src="https://www.jianyu360.com/images/swordfish/sf_01.png" style="display:block;width:150px;margin: 10px auto 30px auto;">
|
|
|
<div style="padding-bottom: 30px;margin-bottom: 30px;border-bottom: 1px dashed #ddd;">尊敬的剑鱼标讯用户:
|
|
@@ -66,7 +66,7 @@ var (
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>`
|
|
|
- BuyerPdfEmailContent = `<div style="width:1200px;background-color:#F5F4FA;padding:15px;">
|
|
|
+ BuyerPdfEmailContent = `<div style="width:1200px;background-color:#F5F4FA;padding:15px;">
|
|
|
<div style="padding:5px 50px 50px 50px;background-color:#fff;width:1000px;margin:auto;border-top: 5px solid #2cb7ca;">
|
|
|
<img src="https://www.jianyu360.com/images/swordfish/sf_01.png" style="display:block;width:150px;margin: 10px auto 30px auto;">
|
|
|
<div style="padding-bottom: 30px;margin-bottom: 30px;border-bottom: 1px dashed #ddd;">尊敬的剑鱼标讯用户:
|
|
@@ -88,7 +88,7 @@ var (
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>`
|
|
|
- EndPdfEmailContent = `<div style="width:1200px;background-color:#F5F4FA;padding:15px;">
|
|
|
+ EndPdfEmailContent = `<div style="width:1200px;background-color:#F5F4FA;padding:15px;">
|
|
|
<div style="padding:5px 50px 50px 50px;background-color:#fff;width:1000px;margin:auto;border-top: 5px solid #2cb7ca;">
|
|
|
<img src="https://www.jianyu360.com/images/swordfish/sf_01.png" style="display:block;width:150px;margin: 10px auto 30px auto;">
|
|
|
<div style="padding-bottom: 30px;margin-bottom: 30px;border-bottom: 1px dashed #ddd;">尊敬的剑鱼标讯用户:
|
|
@@ -115,154 +115,154 @@ var (
|
|
|
|
|
|
// GetPdfDetail 生成pdf文件程序查询接口
|
|
|
func PdfSendEmail(rData map[string]interface{}) error {
|
|
|
- sEmail := qutil.InterfaceToStr(rData["s_email"])
|
|
|
- pdfUrl := qutil.InterfaceToStr(rData["s_pdfUrl"])
|
|
|
- sType := qutil.InterfaceToStr(rData["type"])
|
|
|
- if !jy.IsEmail(sEmail) {
|
|
|
- return fmt.Errorf("邮箱格式不正确")
|
|
|
- }
|
|
|
- if pdfUrl == "" {
|
|
|
- return fmt.Errorf("无效下载地址")
|
|
|
- }
|
|
|
- pdfUrl = fmt.Sprintf("%s%s", Config.WebDomain, pdfUrl)
|
|
|
- var (
|
|
|
- keyWords []string
|
|
|
- mailContent, packageName, matchingMode, rangeTime, area, industry, buyerClass, entName string
|
|
|
- )
|
|
|
- switch sType {
|
|
|
- case "3":
|
|
|
- packageName = "市场分析定制报告"
|
|
|
- //格式化订阅词
|
|
|
- var (
|
|
|
- mae MarketAnalysisEntity
|
|
|
- )
|
|
|
- if err := json.Unmarshal([]byte(qutil.InterfaceToStr(rData["s_keysItems"])), &mae.FormatParam.KeysItems); err == nil {
|
|
|
- for _, item := range mae.FormatParam.KeysItems {
|
|
|
- var keyGroup []string
|
|
|
- for _, word := range item.A_Key {
|
|
|
- matchWayStr := "(精准)"
|
|
|
- if word.MatchWay == 1 {
|
|
|
- matchWayStr = "(模糊)"
|
|
|
- }
|
|
|
- keyGroup = append(keyGroup, word.Keyword...)
|
|
|
- keyGroup = append(keyGroup, word.Appended...)
|
|
|
- keyGroup = append(keyGroup, matchWayStr)
|
|
|
- }
|
|
|
- keyWords = append(keyWords, strings.Join(keyGroup, " "))
|
|
|
- }
|
|
|
- }
|
|
|
- if keyWords == nil {
|
|
|
- keyWords = append(keyWords, "-")
|
|
|
- }
|
|
|
- matchingMode = qutil.If(qutil.InterfaceToStr(rData["s_matchingMode"]) == "title", "【按标题匹配】", "【按全文匹配】").(string)
|
|
|
- sRangeTime := strings.Split(qutil.InterfaceToStr(rData["s_rangeTime"]), "-")
|
|
|
- var (
|
|
|
- sTime, eTime string
|
|
|
- )
|
|
|
- if sRangeTime[0] != "" && sRangeTime[0] != "0" {
|
|
|
- sTime = time.Unix(qutil.Int64All(sRangeTime[0]), 0).Format("2006-01-02")
|
|
|
- }
|
|
|
- if sRangeTime[1] != "" && sRangeTime[1] != "0" {
|
|
|
- eTime = time.Unix(qutil.Int64All(sRangeTime[1]), 0).Format("2006-01-02")
|
|
|
- }
|
|
|
- rangeTime = fmt.Sprintf("%s至%s", sTime, eTime)
|
|
|
- if areaStr := strings.TrimSpace(qutil.InterfaceToStr(rData["s_area"])); areaStr != "" {
|
|
|
- imap := map[string][]string{}
|
|
|
- if err := json.Unmarshal([]byte(qutil.InterfaceToStr(rData["s_area"])), &imap); err == nil {
|
|
|
- var areas []string
|
|
|
- for name, v := range imap {
|
|
|
- if len(v) == 0 {
|
|
|
- areas = append(areas, name)
|
|
|
- } else {
|
|
|
- areas = append(areas, fmt.Sprintf("%s:%s", name, strings.Join(v, ",")))
|
|
|
- }
|
|
|
- }
|
|
|
- area = strings.Join(areas, ",")
|
|
|
- }
|
|
|
- }
|
|
|
- if area == "" {
|
|
|
- area = "全国"
|
|
|
- }
|
|
|
- sIndustry, _ := rData["s_industry"].(string)
|
|
|
- industryMap := qutil.ObjToMap(sIndustry)
|
|
|
+ sEmail := qutil.InterfaceToStr(rData["s_email"])
|
|
|
+ pdfUrl := qutil.InterfaceToStr(rData["s_pdfUrl"])
|
|
|
+ sType := qutil.InterfaceToStr(rData["type"])
|
|
|
+ if !jy.IsEmail(sEmail) {
|
|
|
+ return fmt.Errorf("邮箱格式不正确")
|
|
|
+ }
|
|
|
+ if pdfUrl == "" {
|
|
|
+ return fmt.Errorf("无效下载地址")
|
|
|
+ }
|
|
|
+ pdfUrl = fmt.Sprintf("%s%s", Config.WebDomain, pdfUrl)
|
|
|
+ var (
|
|
|
+ keyWords []string
|
|
|
+ mailContent, packageName, matchingMode, rangeTime, area, industry, entName string
|
|
|
+ )
|
|
|
+ switch sType {
|
|
|
+ case "3":
|
|
|
+ packageName = "市场分析定制报告"
|
|
|
+ //格式化订阅词
|
|
|
+ var (
|
|
|
+ mae MarketAnalysisEntity
|
|
|
+ )
|
|
|
+ if err := json.Unmarshal([]byte(qutil.InterfaceToStr(rData["s_keysItems"])), &mae.FormatParam.KeysItems); err == nil {
|
|
|
+ for _, item := range mae.FormatParam.KeysItems {
|
|
|
+ var keyGroup []string
|
|
|
+ for _, word := range item.A_Key {
|
|
|
+ matchWayStr := "(精准)"
|
|
|
+ if word.MatchWay == 1 {
|
|
|
+ matchWayStr = "(模糊)"
|
|
|
+ }
|
|
|
+ keyGroup = append(keyGroup, word.Keyword...)
|
|
|
+ keyGroup = append(keyGroup, word.Appended...)
|
|
|
+ keyGroup = append(keyGroup, matchWayStr)
|
|
|
+ }
|
|
|
+ keyWords = append(keyWords, strings.Join(keyGroup, " "))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if keyWords == nil {
|
|
|
+ keyWords = append(keyWords, "-")
|
|
|
+ }
|
|
|
+ matchingMode = qutil.If(qutil.InterfaceToStr(rData["s_matchingMode"]) == "title", "【按标题匹配】", "【按全文匹配】").(string)
|
|
|
+ sRangeTime := strings.Split(qutil.InterfaceToStr(rData["s_rangeTime"]), "-")
|
|
|
+ var (
|
|
|
+ sTime, eTime string
|
|
|
+ )
|
|
|
+ if sRangeTime[0] != "" && sRangeTime[0] != "0" {
|
|
|
+ sTime = time.Unix(qutil.Int64All(sRangeTime[0]), 0).Format("2006-01-02")
|
|
|
+ }
|
|
|
+ if sRangeTime[1] != "" && sRangeTime[1] != "0" {
|
|
|
+ eTime = time.Unix(qutil.Int64All(sRangeTime[1]), 0).Format("2006-01-02")
|
|
|
+ }
|
|
|
+ rangeTime = fmt.Sprintf("%s至%s", sTime, eTime)
|
|
|
+ if areaStr := strings.TrimSpace(qutil.InterfaceToStr(rData["s_area"])); areaStr != "" {
|
|
|
+ imap := map[string][]string{}
|
|
|
+ if err := json.Unmarshal([]byte(qutil.InterfaceToStr(rData["s_area"])), &imap); err == nil {
|
|
|
+ var areas []string
|
|
|
+ for name, v := range imap {
|
|
|
+ if len(v) == 0 {
|
|
|
+ areas = append(areas, name)
|
|
|
+ } else {
|
|
|
+ areas = append(areas, fmt.Sprintf("%s:%s", name, strings.Join(v, ",")))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ area = strings.Join(areas, ",")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if area == "" {
|
|
|
+ area = "全国"
|
|
|
+ }
|
|
|
+ sIndustry, _ := rData["s_industry"].(string)
|
|
|
+ industryMap := qutil.ObjToMap(sIndustry)
|
|
|
|
|
|
- if industryMap == nil {
|
|
|
- industry = "全行业"
|
|
|
- } else {
|
|
|
- var industryArr []string
|
|
|
- for key := range *industryMap {
|
|
|
- //is, _ := i.([]interface{})
|
|
|
- industryArr = append(industryArr, key)
|
|
|
- }
|
|
|
- industry = strings.Join(industryArr, ",")
|
|
|
- }
|
|
|
- if industry == "" {
|
|
|
- industry = "全行业"
|
|
|
- }
|
|
|
- sBuyerClass, _ := rData["s_buyerClass"].(string)
|
|
|
- if sBuyerClass == "" {
|
|
|
- sBuyerClass = "全部"
|
|
|
- }
|
|
|
- mailContent = fmt.Sprintf(AnalyzePdfEmailContent, packageName, pdfUrl,
|
|
|
- fmt.Sprintf("剑鱼标讯-%s-%s.pdf", packageName, time.Unix(qutil.Int64All(rData["l_createTime"]), 0).Format("20060102")),
|
|
|
- packageName, `97%`, strings.Join(keyWords, ","), matchingMode, rangeTime, area, industry, buyerClass)
|
|
|
- case "2", "1":
|
|
|
- entName = qutil.InterfaceToStr(rData["entName"])
|
|
|
- packageName = "业主采购分析报告"
|
|
|
- match, _ := rData["match"].(string)
|
|
|
- matching := "(模糊)"
|
|
|
- if qutil.InterfaceToStr(rData["exactMatch"]) == "1" {
|
|
|
- matching = "(精准)"
|
|
|
- }
|
|
|
- if match != "" {
|
|
|
- keyWords = append(keyWords, fmt.Sprintf("%s %s", match, matching))
|
|
|
- } else {
|
|
|
- keyWords = append(keyWords, "-")
|
|
|
- }
|
|
|
+ if industryMap == nil {
|
|
|
+ industry = "全行业"
|
|
|
+ } else {
|
|
|
+ var industryArr []string
|
|
|
+ for key := range *industryMap {
|
|
|
+ //is, _ := i.([]interface{})
|
|
|
+ industryArr = append(industryArr, key)
|
|
|
+ }
|
|
|
+ industry = strings.Join(industryArr, ",")
|
|
|
+ }
|
|
|
+ if industry == "" {
|
|
|
+ industry = "全行业"
|
|
|
+ }
|
|
|
+ sBuyerClass, _ := rData["s_buyerClass"].(string)
|
|
|
+ if sBuyerClass == "" {
|
|
|
+ sBuyerClass = "全部"
|
|
|
+ }
|
|
|
+ mailContent = fmt.Sprintf(AnalyzePdfEmailContent, packageName, pdfUrl,
|
|
|
+ fmt.Sprintf("剑鱼标讯-%s-%s.pdf", packageName, time.Unix(qutil.Int64All(rData["l_createTime"]), 0).Format("20060102")),
|
|
|
+ packageName, `97%`, strings.Join(keyWords, ","), matchingMode, rangeTime, area, industry, sBuyerClass)
|
|
|
+ case "2", "1":
|
|
|
+ entName = qutil.InterfaceToStr(rData["entName"])
|
|
|
+ packageName = "业主采购分析报告"
|
|
|
+ match, _ := rData["match"].(string)
|
|
|
+ matching := "(模糊)"
|
|
|
+ if qutil.InterfaceToStr(rData["exactMatch"]) == "1" {
|
|
|
+ matching = "(精准)"
|
|
|
+ }
|
|
|
+ if match != "" {
|
|
|
+ keyWords = append(keyWords, fmt.Sprintf("%s %s", match, matching))
|
|
|
+ } else {
|
|
|
+ keyWords = append(keyWords, "-")
|
|
|
+ }
|
|
|
|
|
|
- matchRange, _ := rData["matchRange"].(string)
|
|
|
- var matchingModes []string
|
|
|
- if strings.Contains(matchRange, "purchasing") {
|
|
|
- matchingModes = append(matchingModes, "项目名称/标的物")
|
|
|
- }
|
|
|
- if strings.Contains(matchRange, "agency") {
|
|
|
- matchingModes = append(matchingModes, "招标代理机构")
|
|
|
- }
|
|
|
- if strings.Contains(matchRange, "winner") {
|
|
|
- matchingModes = append(matchingModes, "中标企业")
|
|
|
- }
|
|
|
- if strings.Contains(matchRange, "buyer") {
|
|
|
- matchingModes = append(matchingModes, "采购单位")
|
|
|
- }
|
|
|
- matchingMode = strings.Join(matchingModes, ",")
|
|
|
- timeRange, _ := rData["timeRange"].(string)
|
|
|
- rangeTime = strings.ReplaceAll(timeRange, "_", "至")
|
|
|
- area, _ = rData["area"].(string)
|
|
|
- if area == "" {
|
|
|
- area = "全国"
|
|
|
- }
|
|
|
- industry, _ = rData["scopeClass"].(string)
|
|
|
- if industry == "" {
|
|
|
- industry = "全行业"
|
|
|
- }
|
|
|
+ matchRange, _ := rData["matchRange"].(string)
|
|
|
+ var matchingModes []string
|
|
|
+ if strings.Contains(matchRange, "purchasing") {
|
|
|
+ matchingModes = append(matchingModes, "项目名称/标的物")
|
|
|
+ }
|
|
|
+ if strings.Contains(matchRange, "agency") {
|
|
|
+ matchingModes = append(matchingModes, "招标代理机构")
|
|
|
+ }
|
|
|
+ if strings.Contains(matchRange, "winner") {
|
|
|
+ matchingModes = append(matchingModes, "中标企业")
|
|
|
+ }
|
|
|
+ if strings.Contains(matchRange, "buyer") {
|
|
|
+ matchingModes = append(matchingModes, "采购单位")
|
|
|
+ }
|
|
|
+ matchingMode = strings.Join(matchingModes, ",")
|
|
|
+ timeRange, _ := rData["timeRange"].(string)
|
|
|
+ rangeTime = strings.ReplaceAll(timeRange, "_", "至")
|
|
|
+ area, _ = rData["area"].(string)
|
|
|
+ if area == "" {
|
|
|
+ area = "全国"
|
|
|
+ }
|
|
|
+ industry, _ = rData["scopeClass"].(string)
|
|
|
+ if industry == "" {
|
|
|
+ industry = "全行业"
|
|
|
+ }
|
|
|
|
|
|
- if sType == "1" { //中标企业分析有采购单位类型筛选
|
|
|
- packageName = "企业中标分析报告"
|
|
|
- sBuyerClass, _ := rData["s_buyerClass"].(string)
|
|
|
- if sBuyerClass == "" {
|
|
|
- sBuyerClass = "全部"
|
|
|
- }
|
|
|
- mailContent = fmt.Sprintf(EndPdfEmailContent, packageName, pdfUrl,
|
|
|
- fmt.Sprintf("剑鱼标讯-%s-%s.pdf", packageName, time.Unix(qutil.Int64All(rData["l_createTime"]), 0).Format("20060102")),
|
|
|
- packageName, `97%`, entName, rangeTime, strings.Join(keyWords, ","), matchingMode, area, industry, sBuyerClass)
|
|
|
- } else {
|
|
|
- mailContent = fmt.Sprintf(BuyerPdfEmailContent, packageName, pdfUrl,
|
|
|
- fmt.Sprintf("剑鱼标讯-%s-%s.pdf", packageName, time.Unix(qutil.Int64All(rData["l_createTime"]), 0).Format("20060102")),
|
|
|
- packageName, `97%`, entName, rangeTime, strings.Join(keyWords, ","), matchingMode, area, industry)
|
|
|
- }
|
|
|
- }
|
|
|
- if SendRetryMail(3, sEmail, qutil.If(entName != "", fmt.Sprintf("%s(%s)", packageName, entName), packageName).(string), mailContent, "", nil, GmailAuth) {
|
|
|
- log.Printf("PdfSendEmail SendMailToPayUser %s 邮件%s发送成功!", packageName, sEmail)
|
|
|
- }
|
|
|
- return nil
|
|
|
+ if sType == "1" { //中标企业分析有采购单位类型筛选
|
|
|
+ packageName = "企业中标分析报告"
|
|
|
+ sBuyerClass, _ := rData["s_buyerClass"].(string)
|
|
|
+ if sBuyerClass == "" {
|
|
|
+ sBuyerClass = "全部"
|
|
|
+ }
|
|
|
+ mailContent = fmt.Sprintf(EndPdfEmailContent, packageName, pdfUrl,
|
|
|
+ fmt.Sprintf("剑鱼标讯-%s-%s.pdf", packageName, time.Unix(qutil.Int64All(rData["l_createTime"]), 0).Format("20060102")),
|
|
|
+ packageName, `97%`, entName, rangeTime, strings.Join(keyWords, ","), matchingMode, area, industry, sBuyerClass)
|
|
|
+ } else {
|
|
|
+ mailContent = fmt.Sprintf(BuyerPdfEmailContent, packageName, pdfUrl,
|
|
|
+ fmt.Sprintf("剑鱼标讯-%s-%s.pdf", packageName, time.Unix(qutil.Int64All(rData["l_createTime"]), 0).Format("20060102")),
|
|
|
+ packageName, `97%`, entName, rangeTime, strings.Join(keyWords, ","), matchingMode, area, industry)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if SendRetryMail(3, sEmail, qutil.If(entName != "", fmt.Sprintf("%s(%s)", packageName, entName), packageName).(string), mailContent, "", nil, GmailAuth) {
|
|
|
+ log.Printf("PdfSendEmail SendMailToPayUser %s 邮件%s发送成功!", packageName, sEmail)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
}
|