|
|
@ -27,7 +27,6 @@ func ParseTodNew() { |
|
|
|
projtablst []db.Me_project |
|
|
|
todland TodLandData |
|
|
|
todProj service.TodProject |
|
|
|
order_ver db.Pln_custorder_ver |
|
|
|
rd []os.FileInfo |
|
|
|
fi os.FileInfo |
|
|
|
edi_file string |
|
|
@ -106,26 +105,8 @@ func ParseTodNew() { |
|
|
|
glog.InfoExtln("tod解析", "Failed to ReadTodData for project is :", err) |
|
|
|
continue |
|
|
|
} |
|
|
|
//删除状态为9的数据
|
|
|
|
if err = order_ver.DelCustorderVer(); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
|
if err = todland.SaveTodData(&todProj); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to SaveTodData for project! is :", err) |
|
|
|
//删除状态为9的数据
|
|
|
|
if err = order_ver.DelCustorderVer(); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
|
//把状态为9的数据更新为0
|
|
|
|
if err = order_ver.UpCustorderVer(); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
@ -143,20 +124,20 @@ func ParseTodCustorderNew() { |
|
|
|
for { |
|
|
|
fmt.Println("TOD解析创建生产订单监听中!") |
|
|
|
var ( |
|
|
|
err error |
|
|
|
projtab db.Me_project |
|
|
|
projtablst []db.Me_project |
|
|
|
mesprojtab db.Prod_project |
|
|
|
todProj service.TodProject |
|
|
|
covtab db.Pln_custorder_ver |
|
|
|
vcovlst []db.VCustorderVer |
|
|
|
bl_co service.BL_CustOrder |
|
|
|
cust db.Pln_custorder |
|
|
|
err error |
|
|
|
projtab db.Me_project |
|
|
|
projtablst []db.Me_project |
|
|
|
mesprojtab db.Prod_project |
|
|
|
todProj service.TodProject |
|
|
|
covtab db.Pln_custorder_ver |
|
|
|
vcovlst []db.VCustorderVer |
|
|
|
bl_co service.BL_CustOrder |
|
|
|
cust db.Pln_custorder |
|
|
|
mailsubject, mailbody string |
|
|
|
verr service.BL_VerifyError |
|
|
|
i, j int |
|
|
|
bRet bool |
|
|
|
session *xorm.Session |
|
|
|
verr service.BL_VerifyError |
|
|
|
i, j int |
|
|
|
bRet bool |
|
|
|
session *xorm.Session |
|
|
|
) |
|
|
|
|
|
|
|
projtab = db.Me_project{} |
|
|
@ -211,6 +192,37 @@ func ParseTodCustorderNew() { |
|
|
|
|
|
|
|
// 加载客户订单进行校验
|
|
|
|
for j, _ = range vcovlst { |
|
|
|
if bl_co.SeqType == 1 { |
|
|
|
//判断是否存在前一个版本,
|
|
|
|
//如果存在前一个版本,判断是否解析
|
|
|
|
if vcovlst[j].Pln_custorder_ver.Version > 1 { |
|
|
|
perInfo := new(db.Pln_custorder_ver) |
|
|
|
perInfo.Finr = vcovlst[j].Pln_custorder_ver.Finr |
|
|
|
perInfo.Custordernr = vcovlst[j].Pln_custorder_ver.Custordernr |
|
|
|
perInfo.Version = vcovlst[j].Pln_custorder_ver.Version |
|
|
|
res := perInfo.SelectInfo() |
|
|
|
glog.InfoExtln("tod","Custordernr", vcovlst[j].Pln_custorder_ver.Custordernr) |
|
|
|
glog.InfoExtln("tod","Version",vcovlst[j].Pln_custorder_ver.Version) |
|
|
|
glog.InfoExtln("tod","上一版本Version",perInfo.Version) |
|
|
|
glog.InfoExtln("tod","result",res) |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("TOD解析创建生产订单", "err is:", err) |
|
|
|
return |
|
|
|
} |
|
|
|
if res { |
|
|
|
//添加邮件预警
|
|
|
|
mailsubject = "客户订单上一版本没有解析" |
|
|
|
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 客户订单上一版本没有解析!" |
|
|
|
if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { |
|
|
|
glog.InfoExtln("发送邮件", "err is :", err) |
|
|
|
} |
|
|
|
glog.InfoExtln("tod","result:",mailsubject) |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* 获取锁 */ |
|
|
|
LOOP: |
|
|
|
err = etcd.G_jobLock.TryLock("lock") |
|
|
@ -222,13 +234,14 @@ func ParseTodCustorderNew() { |
|
|
|
|
|
|
|
fmt.Println("tod groutine lock success!") |
|
|
|
bl_co = service.BL_CustOrder{} |
|
|
|
bl_co.Custordernr = vcovlst[j].Pln_custorder.Custordernr |
|
|
|
bl_co.Oemordernr = vcovlst[j].Pln_custorder.Oemordernr |
|
|
|
bl_co.Projnr = vcovlst[j].Pln_custorder.Projnr |
|
|
|
bl_co.Partfamilyid = vcovlst[j].Pln_custorder_ver.Partfamilyid |
|
|
|
bl_co.SeqType = vcovlst[j].Pln_custorder_ver.Seqmode |
|
|
|
bl_co.Edifile = vcovlst[j].Pln_custorder_ver.Edifile |
|
|
|
bl_co.Custordertab = vcovlst[j].Pln_custorder |
|
|
|
bl_co.Custordernr = vcovlst[j].Pln_custorder.Custordernr |
|
|
|
bl_co.Oemordernr = vcovlst[j].Pln_custorder.Oemordernr |
|
|
|
bl_co.Projnr = vcovlst[j].Pln_custorder.Projnr |
|
|
|
bl_co.Partfamilyid = vcovlst[j].Pln_custorder_ver.Partfamilyid |
|
|
|
bl_co.SeqType = vcovlst[j].Pln_custorder_ver.Seqmode |
|
|
|
bl_co.Edifile = vcovlst[j].Pln_custorder_ver.Edifile |
|
|
|
bl_co.Custordertab = vcovlst[j].Pln_custorder |
|
|
|
bl_co.Parsed = vcovlst[j].Pln_custorder_ver.Parsed |
|
|
|
|
|
|
|
// 初始化客户订单的错误清单
|
|
|
|
bl_co.Bl_verrdict = make(map[string]service.BL_VerifyError) |
|
|
@ -254,15 +267,15 @@ func ParseTodCustorderNew() { |
|
|
|
|
|
|
|
//添加邮件预警
|
|
|
|
mailsubject = "客户订单号重复错误" |
|
|
|
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 半年内重复!" |
|
|
|
if err = SendTodErrorEmail(projtablst[i],mailsubject, mailbody); err != nil { |
|
|
|
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 半年内重复!" |
|
|
|
if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { |
|
|
|
glog.InfoExtln("发送邮件", "err is :", err) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 如果是指定供应组的SEQ+1发邮件预警
|
|
|
|
AlertForCustOrderUpdateTodByRule(projtablst[i], bl_co, vcovlst[j] ) |
|
|
|
AlertForCustOrderUpdateTodByRule(projtablst[i], bl_co, vcovlst[j]) |
|
|
|
|
|
|
|
// 查询获得客户订单的供应组的零件清单
|
|
|
|
if err = bl_co.GetSupplyGroupPartList(&todProj); err != nil { |
|
|
@ -359,7 +372,7 @@ func ParseTodCustorderNew() { |
|
|
|
if bl_co.SeqType == 1 && bl_co.Custordertab.Status >= common.CO_STATUS_RELEASED { |
|
|
|
//添加邮件预警
|
|
|
|
mailsubject = "SEQ+1的客户订单已下达" |
|
|
|
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 已下达,SEQ+1更新出错!" |
|
|
|
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 已下达,SEQ+1更新出错!" |
|
|
|
if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { |
|
|
|
glog.InfoExtln("发送邮件", "err is :", err) |
|
|
|
} |
|
|
@ -379,7 +392,7 @@ func ParseTodCustorderNew() { |
|
|
|
|
|
|
|
//添加邮件预警
|
|
|
|
mailsubject = "客户订单取消" |
|
|
|
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+2请求,取消!" |
|
|
|
mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+2请求,取消!" |
|
|
|
if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { |
|
|
|
glog.InfoExtln("发送邮件", "err is :", err) |
|
|
|
} |
|
|
@ -398,10 +411,13 @@ func ParseTodCustorderNew() { |
|
|
|
if err = bl_co.Custordertab.UpdateFields(session, "handlestatus,lastmodif"); err != nil { |
|
|
|
bRet = false |
|
|
|
} |
|
|
|
session.Commit() |
|
|
|
session.Close() |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
continue |
|
|
|
if bl_co.SeqType != 3 { |
|
|
|
glog.InfoExtln("tod","Custordernr:",bl_co.Custordertab.Custordernr) |
|
|
|
session.Commit() |
|
|
|
session.Close() |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
bl_co.Custordertab.Handlestatus = common.CO_PARSE_STATUS_OK |
|
|
@ -425,7 +441,7 @@ func ParseTodCustorderNew() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if bRet { |
|
|
|
if bRet || bl_co.Parsed == 2{ |
|
|
|
session.Commit() |
|
|
|
session.Close() |
|
|
|
} else { |
|
|
@ -448,7 +464,6 @@ func ReadTodXlsx() { |
|
|
|
projtab db.Me_project |
|
|
|
projtablst []db.Me_project |
|
|
|
todland TodLandData |
|
|
|
order_ver db.Pln_custorder_ver |
|
|
|
todProj service.TodProject |
|
|
|
rd []os.FileInfo |
|
|
|
fi os.FileInfo |
|
|
@ -602,26 +617,8 @@ func ReadTodXlsx() { |
|
|
|
glog.InfoExtln("tod Close", "Failed Close is :", err) |
|
|
|
return |
|
|
|
} |
|
|
|
//删除状态为9的数据
|
|
|
|
if err = order_ver.DelCustorderVer(); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
|
if err = todland.SaveTodData(&todProj); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to SaveTodData for project! is :", err) |
|
|
|
//删除状态为9的数据
|
|
|
|
if err = order_ver.DelCustorderVer(); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
|
//把状态为9的数据更新为0
|
|
|
|
if err = order_ver.UpCustorderVer(); err != nil { |
|
|
|
glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) |
|
|
|
os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) |
|
|
|
continue |
|
|
|
} |
|
|
@ -638,17 +635,17 @@ func ReadTodXlsx() { |
|
|
|
} |
|
|
|
|
|
|
|
// 发送TOD解析错误或警示邮件
|
|
|
|
func SendTodErrorEmail(projtab db.Me_project, subject, errinfo string)(err error){ |
|
|
|
var mail db.Sendmailtab |
|
|
|
|
|
|
|
mail.Status = "waiting" |
|
|
|
mail.Body = errinfo |
|
|
|
mail.Subject = projtab.Projectid + "-->" + subject |
|
|
|
mail.Name = projtab.From_email |
|
|
|
mail.Tomail = projtab.Tod_error_to_recievers |
|
|
|
mail.Host = projtab.Emailserver_host + ":" + common.ValueToString(projtab.Emailserver_port, "") |
|
|
|
mail.Password = projtab.From_pwd |
|
|
|
mail.Username = projtab.From_email |
|
|
|
func SendTodErrorEmail(projtab db.Me_project, subject, errinfo string) (err error) { |
|
|
|
var mail db.Sendmailtab |
|
|
|
|
|
|
|
mail.Status = "waiting" |
|
|
|
mail.Body = errinfo |
|
|
|
mail.Subject = projtab.Projectid + "-->" + subject |
|
|
|
mail.Name = projtab.From_email |
|
|
|
mail.Tomail = projtab.Tod_error_to_recievers |
|
|
|
mail.Host = projtab.Emailserver_host + ":" + common.ValueToString(projtab.Emailserver_port, "") |
|
|
|
mail.Password = projtab.From_pwd |
|
|
|
mail.Username = projtab.From_email |
|
|
|
err = mail.Add() |
|
|
|
if err != nil { |
|
|
|
glog.InfoExtln("发送邮件", "err is :", err) |
|
|
@ -657,14 +654,14 @@ func SendTodErrorEmail(projtab db.Me_project, subject, errinfo string)(err error |
|
|
|
} |
|
|
|
|
|
|
|
// 为项目指定的供应组发送SEQ+1的预警邮件(基于指定供应组)
|
|
|
|
func AlertForCustOrderUpdateTodByRule(projtab db.Me_project, bl_co service.BL_CustOrder, vcov db.VCustorderVer ){ |
|
|
|
var( |
|
|
|
err error |
|
|
|
idx,seqtype,k int |
|
|
|
todrule,v,mailsubject,mailbody string |
|
|
|
kvlst,rulelst []string |
|
|
|
sgdict map[string]string |
|
|
|
exist bool |
|
|
|
func AlertForCustOrderUpdateTodByRule(projtab db.Me_project, bl_co service.BL_CustOrder, vcov db.VCustorderVer) { |
|
|
|
var ( |
|
|
|
err error |
|
|
|
idx, seqtype, k int |
|
|
|
todrule, v, mailsubject, mailbody string |
|
|
|
kvlst, rulelst []string |
|
|
|
sgdict map[string]string |
|
|
|
exist bool |
|
|
|
) |
|
|
|
|
|
|
|
// 获取项目指定的TOD邮件规则
|
|
|
@ -693,7 +690,7 @@ func AlertForCustOrderUpdateTodByRule(projtab db.Me_project, bl_co service.BL_Cu |
|
|
|
} |
|
|
|
if exist { |
|
|
|
mailsubject = "SEQ+1提醒" |
|
|
|
mailbody = "项目号: " + bl_co.Custordertab.Projnr + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+1请求,取消!" |
|
|
|
mailbody = "项目号: " + bl_co.Custordertab.Projnr + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+1请求,取消!" |
|
|
|
if err = SendTodErrorEmail(projtab, mailsubject, mailbody); err != nil { |
|
|
|
glog.InfoExtln("发送邮件", "err is :", err) |
|
|
|
} |
|
|
|