Browse Source

规则代码优化

xiziwen 4 months ago
parent
commit
82e43ce39c
2 changed files with 30 additions and 38 deletions
  1. 28 17
      services/pcsg/mail.go
  2. 2 21
      utils/mail/imap.go

+ 28 - 17
services/pcsg/mail.go

@@ -22,6 +22,8 @@ import (
 
 // 同步用户锁,防止重复同步,不管是全量还是增量,都是同一时间只能一个同步
 var lockListenEmail sync.Mutex
+// 邮件改名规则
+var ruleList []report.MailRule
 
 func ListenMail() {
 	var err error
@@ -41,6 +43,21 @@ func ListenMail() {
 
 	//fmt.Println(len(mailMessageChan))
 
+	// 获取规则
+	ruleList = []report.MailRule{}
+	ruleJson, e := eta.GetBusinessConfByKey("MailCheckRule")
+	if e != nil {
+		err = e
+		global.FILE_LOG.Error("获取规则配置失败:%v", err)
+		return
+	}
+
+	err = json.Unmarshal([]byte(ruleJson.ConfVal), &ruleList)
+	if err != nil {
+		global.FILE_LOG.Error("解析规则配置失败:%v", err)
+		return
+	}
+
 	// 邮件监听后的处理函数
 	go afterByListen(mailMessageChan, mailMessageDoneChan)
 
@@ -200,23 +217,6 @@ func handleMailMessage(emailMessage mail.MailMessage) (err error) {
 		}
 	}
 
-	ruleJson, err := eta.GetBusinessConfByKey("MailCheckRule")
-	if err != nil {
-		global.FILE_LOG.Error("获取规则配置失败:%v", err)
-		return
-	}
-	var ruleList []report.MailRule
-	err = json.Unmarshal([]byte(ruleJson.ConfVal), &ruleList)
-	if err != nil {
-		global.FILE_LOG.Error("解析规则配置失败:%v", err)
-		return
-	}
-	ruleMap := make(map[string]report.MailRule)
-	for _, v := range ruleList {
-		ruleMap[v.Rule] = v
-	}
-
-
 	reportUpdateTime := emailMessage.Date
 	if reportUpdateTime.IsZero() {
 		reportUpdateTime = time.Now()
@@ -252,6 +252,17 @@ func handleMailMessage(emailMessage mail.MailMessage) (err error) {
 				return
 			}
 			reportInfo.ClassifyName = classify.ClassifyName
+
+			// 特殊规则
+			if strings.Contains(reportInfo.Title, "海外分公司市场信息月报") || strings.Contains(reportInfo.Title, "区域市场信息月报"){
+				if emailMessage.From == "report.pcanalyst00@petrochina-usa.com" {
+					reportInfo.SysUserName = "PCI"
+					break
+				} else {
+					v.Author = emailMessage.From
+				}
+			}
+
 			if strings.Contains(v.Author, "@") {
 				sysUser, tmpErr := eta.GetSysUserByEmail(v.Author)
 				if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {

+ 2 - 21
utils/mail/imap.go

@@ -152,20 +152,6 @@ func ListenMail(mailAddress, folder, userName, password string, readBatchSize, f
 		}
 		// 获取邮件内容 End
 
-		// 获取规则
-		ruleJson, e := eta.GetBusinessConfByKey("MailCheckRule")
-		if e != nil {
-			err = e
-			global.FILE_LOG.Error("获取规则配置失败:%v", err)
-			return
-		}
-		var ruleList []report.MailRule
-		err = json.Unmarshal([]byte(ruleJson.ConfVal), &ruleList)
-		if err != nil {
-			global.FILE_LOG.Error("解析规则配置失败:%v", err)
-			return
-		}
-
 		//log.Println("开始读取邮件内容")
 		for msg := range messages {
 			// 如果需要终止,那么就不处理了
@@ -173,7 +159,7 @@ func ListenMail(mailAddress, folder, userName, password string, readBatchSize, f
 				continue
 			}
 
-			emailMessage, isRead, tmpErr := readEveryMsg(ruleList, msg)
+			emailMessage, isRead, tmpErr := readEveryMsg(msg)
 			if tmpErr != nil {
 				// 移除本地文件
 				{
@@ -217,7 +203,7 @@ func ListenMail(mailAddress, folder, userName, password string, readBatchSize, f
 }
 
 // document link: https://github.com/emersion/go-imap/wiki/Fetching-messages
-func readEveryMsg(ruleList []report.MailRule, msg *imap.Message) (emailMessage MailMessage, ok bool, err error) {
+func readEveryMsg(msg *imap.Message) (emailMessage MailMessage, ok bool, err error) {
 	ok = true
 	defer func() {
 		if err != nil {
@@ -294,11 +280,6 @@ func readEveryMsg(ruleList []report.MailRule, msg *imap.Message) (emailMessage M
 	}
 	emailMessage.Title = subject
 
-	if !RuleCheck(ruleList, emailMessage) {
-		ok = false
-		return
-	}
-
 	// 过滤
 	if isIgnore(emailMessage) {
 		ok = false