package reorder
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"leit.com/leit_seat_aps/common"
|
|
"leit.com/leit_seat_aps/db"
|
|
"leit.com/leit_seat_aps/glog"
|
|
"os"
|
|
"regexp"
|
|
"time"
|
|
)
|
|
|
|
func Reorder() {
|
|
for {
|
|
var (
|
|
err error
|
|
projtab db.Me_project
|
|
projtablst []db.Me_project
|
|
rd []os.FileInfo
|
|
fi os.FileInfo
|
|
edi_file string
|
|
reoland ReorderLandData
|
|
mail db.Sendmailtab
|
|
matched bool
|
|
)
|
|
|
|
projtab = db.Me_project{}
|
|
if projtablst, err = projtab.GetAllActive(); err != nil {
|
|
glog.InfoExtln("Reorder解析", "Failed to get project list!")
|
|
return
|
|
}
|
|
|
|
for i, _ := range projtablst {
|
|
// 加载项目数据
|
|
|
|
// 读取文件夹内的文件并解析
|
|
if rd, err = ioutil.ReadDir(projtablst[i].Reorder_folder + "/inbox"); err != nil {
|
|
return
|
|
}
|
|
for _, fi = range rd {
|
|
if fi.IsDir() {
|
|
continue
|
|
}
|
|
|
|
edi_file = projtablst[i].Reorder_folder + "/inbox" + "/" + fi.Name()
|
|
fmt.Println(edi_file)
|
|
|
|
// 判断文件的合规性
|
|
if matched, err = regexp.MatchString(projtablst[i].Reorder_filename_regexp, fi.Name()); err != nil {
|
|
glog.InfoExtln("Reorder解析", "Failed to match EDI file name: due to: ", fi.Name(), err)
|
|
return
|
|
}
|
|
if !matched {
|
|
glog.InfoExtln("Reorder解析", "The specified EDI file: doesn't match the required name specification!", fi.Name())
|
|
os.Rename(edi_file, projtablst[i].Reorder_folder+"/errbox"+"/"+fi.Name())
|
|
return
|
|
}
|
|
|
|
// 解析REORDER文件到字典
|
|
fmt.Println("Ready to read reorder data......")
|
|
reoland = ReorderLandData{}
|
|
reoland.Projnr = projtablst[i].Projectid
|
|
reoland.Edifile = edi_file
|
|
if err = reoland.ReadReorderData(edi_file); err != nil {
|
|
glog.InfoExtln("Reorder解析", "Failed to parse REORDER file due to: ", err)
|
|
os.Rename(edi_file, projtablst[i].Reorder_folder+"/errbox"+"/"+fi.Name())
|
|
return
|
|
}
|
|
|
|
// 保存REORDER字典到临时缓存表
|
|
if err = reoland.SaveReorderData(); err != nil {
|
|
glog.InfoExtln("Reorder解析", "Failed to save REORDER parse result due to: ", err)
|
|
return
|
|
}
|
|
|
|
// 将文件移到outbox
|
|
os.Rename(edi_file, projtablst[i].Reorder_folder+"/outbox"+"/"+fi.Name())
|
|
//添加邮件预警
|
|
host := projtablst[i].Emailserver_host + ":" + common.ValueToString(projtablst[i].Emailserver_port, "")
|
|
body := "项目号: " + reoland.Bl_Reorder.Projnr + "\r\nReordernr单号: " + reoland.Bl_Reorder.Reordernr + "\r\nRejectionnr :" + reoland.Bl_Reorder.Rejectionnr + "\r\nPartfamilyid :" + reoland.Bl_Reorder.Partfamilyid + "\r\nMsgtime :" + common.TimeFormat(reoland.Bl_Reorder.Msgtime, "yyyy-MM-dd HH:mm:ss")
|
|
mail.Status = "waiting"
|
|
mail.Body = body
|
|
mail.Subject = "Reorder的消息的更新"
|
|
mail.Name = projtablst[i].From_email
|
|
mail.Tomail = projtablst[i].Reorder_error_to_recievers
|
|
mail.Host = host
|
|
mail.Password = projtablst[i].From_pwd
|
|
mail.Username = projtablst[i].From_email
|
|
err = mail.Add()
|
|
if err != nil {
|
|
glog.InfoExtln("发送邮件", "err is :", err)
|
|
}
|
|
}
|
|
}
|
|
//等待十秒
|
|
time.Sleep(10 * time.Second)
|
|
}
|
|
}
|