|
|
- package edi
-
- import (
- "fmt"
- "github.com/pkg/errors"
- "io/ioutil"
- "leit.com/leit_seat_aps/db"
- "leit.com/leit_seat_aps/glog"
- "leit.com/leit_seat_aps/seq"
- "os"
- "regexp"
- "strings"
- "time"
- )
-
- func RunEdiSeqAssignTask(editab db.Edi_oem){
- var err error
-
- for{
- if err = EdiAssignSeq(editab); err != nil{
- return
- }
-
- time.Sleep(2 * time.Second)
- }
-
- }
-
- // 监控G38/18的SEQ inbox,根据项目指定的Key值将两个项目的seq文件筛选出来,而后移到对应的文件夹
- func EdiAssignSeq(editab db.Edi_oem)(err error){
- var(
- rd []os.FileInfo
- fi os.FileInfo
- seq_file string
- matched bool
- seqobj seq.SEQUENCE
- pfid string
- pflist []string
- ediitemtab db.Edi_oem_itemlst
- seq_move_folder string
- errinfo string
- i int
- )
-
- // 读取SEQ目录
- if rd, err = ioutil.ReadDir(editab.Seq_folder + "/inbox"); err != nil {
- err = errors.New(fmt.Sprintf("无法读取SEQ文件夹%s !", editab.Seq_folder))
- return
- }
-
- // 遍历SEQ文件夹内的文件
- for _, fi = range rd {
- if fi.IsDir() {
- continue
- }
- seq_file = editab.Seq_folder + "/inbox" + "/" + fi.Name()
-
- // 判断文件的合规性
- if matched, err = regexp.MatchString(editab.Seq_filename_regexp, fi.Name()); err != nil {
- errinfo = fmt.Sprintf("EDI SEQ文件%s 匹配命名规则%s 出错 %v !", fi.Name(), editab.Seq_filename_regexp, err)
- os.Rename(seq_file, editab.Seq_folder+"/errbox"+"/"+fi.Name())
- // 发送邮件
- if err = EdiSendSeqErrorEmail(editab, errinfo); err != nil {
- return
- }
- continue
- }
- if !matched {
- errinfo = fmt.Sprintf("EDI SEQ文件%s 不符合文件名命名规范%s !", fi.Name(), editab.Seq_filename_regexp)
- os.Rename(seq_file, editab.Seq_folder+"/errbox"+"/"+fi.Name())
- // 发送邮件
- if err = EdiSendSeqErrorEmail(editab, errinfo); err != nil {
- return
- }
- continue
- }
-
- // 解析SEQ文件
- seqobj = seq.SEQUENCE{}
- if err = seq.ParseSeqEdi(seq_file, &seqobj); err != nil {
- errinfo = fmt.Sprintf("解析SEQ文件%s 失败%v !", fi.Name(), err)
- os.Rename(seq_file, editab.Seq_folder+"/errbox"+"/"+fi.Name())
- // 发送邮件
- if err = EdiSendSeqErrorEmail(editab, errinfo); err != nil {
- return
- }
- continue
- }
-
- // 获取SEQ的PF
- pfid = strings.TrimSpace(seqobj.Ftx.PartFamily)
- if pfid == "" {
- errinfo = fmt.Sprintf("SEQ文件%s 的零件族为空 !", fi.Name())
- os.Rename(seq_file, editab.Seq_folder+"/errbox"+"/"+fi.Name())
- // 发送邮件
- if err = EdiSendSeqErrorEmail(editab, errinfo); err != nil {
- return
- }
- continue
- }
-
- // 与SEQ子项比较,适配零件族则转移
- matched = false
- for _, ediitemtab = range editab.Itemlst {
- if strings.TrimSpace(ediitemtab.Itemtype) != "SEQ" {
- continue
- }
- pflist = strings.Split(ediitemtab.Keyval, ",")
- for i = 0; i < len(pflist); i++ {
- if pfid == strings.TrimSpace(pflist[i]) {
- matched = true
- break
- }
- }
- if matched {
- seq_move_folder = strings.TrimSpace(ediitemtab.Inbox_folder)
- break
- }
- }
- if matched {
- os.Rename(seq_file, seq_move_folder+"/inbox"+"/"+fi.Name())
- fmt.Println("成功为SEQ文件",seq_file,"匹配到项目文件夹",seq_move_folder)
- }else{
- errinfo = fmt.Sprintf("没有为SEQ文件%s 找到适配的SEQ项目!", fi.Name())
- os.Rename(seq_file, editab.Seq_folder+"/errbox"+"/"+fi.Name())
- // 发送邮件
- if err = EdiSendSeqErrorEmail(editab, errinfo); err != nil {
- return
- }
- continue
- }
- }
-
- return
- }
-
- func EdiSendSeqErrorEmail(editab db.Edi_oem, errinfo string)(err error){
- var mail db.Sendmailtab
-
- mail.Status = "waiting"
- mail.Body = errinfo
- mail.Subject = "SEQ文件指派项目文件夹错误"
- mail.Name = editab.From_email
- mail.Tomail = editab.Edi_error_to_recievers
- mail.Host = editab.Emailserver_host
- mail.Password = editab.From_pwd
- mail.Username = editab.From_email
- err = mail.Add()
- if err != nil {
- glog.InfoExtln("发送邮件", "err is :", err)
- }
- return
- }
|