|
|
@ -214,9 +214,19 @@ func ParseCalloffOrder() { |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 判断客户订单是否存在
|
|
|
|
/* 获取锁 */ |
|
|
|
LOOP: |
|
|
|
err = etcd.G_jobLock.TryLock("lock") |
|
|
|
if err != nil { |
|
|
|
fmt.Println("calloff groutine lock fail!") |
|
|
|
time.Sleep(5 * time.Millisecond) |
|
|
|
goto LOOP |
|
|
|
} |
|
|
|
fmt.Println("calloff groutine lock success!") |
|
|
|
bl_co = service.BL_CustOrder{Projnr: cflandtablst[j].Projnr, Oemordernr: cflandtablst[j].Oemordernr, Partfamilyid: cflandtablst[j].Partfamilyid} |
|
|
|
if exist, err = bl_co.GetCalloffOemorder(); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "Failed to get custorder for oemorder due to: ", cflandtablst[j].Oemordernr, err) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
if !exist { |
|
|
@ -236,6 +246,12 @@ func ParseCalloffOrder() { |
|
|
|
} |
|
|
|
|
|
|
|
glog.InfoExtln("CALLOFF-Debug", "获取客户订单:", bl_co.Custordertab.Custordernr, "生产工单数:", len(bl_co.Custordertab.Wotablst)) |
|
|
|
// 如果没有生产工单,则不再处理
|
|
|
|
if len(bl_co.Custordertab.Wotablst) <= 0 { |
|
|
|
fmt.Println("获取客户订单:", bl_co.Custordertab.Custordernr, "生产工单数:", len(bl_co.Custordertab.Wotablst)) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
prevCS, _ = cfProj.Pfcsdict[cflandtablst[j].Partfamilyid] |
|
|
|
prevOemord = "" |
|
|
@ -248,23 +264,27 @@ func ParseCalloffOrder() { |
|
|
|
// 获取前序calloff的所有记录
|
|
|
|
if cftablst, err = cftab.GetByProjectOemorder(); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "查询项目客户订单的calloff记录失败:", cftab.Projnr, cftab.Oemordernr, err) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
// 获取前序客户订单
|
|
|
|
bl_prevco = service.BL_CustOrder{Projnr: cfProj.Projectid, Oemordernr: cflandtablst2[0].Oemordernr, Partfamilyid: cflandtablst2[0].Partfamilyid} |
|
|
|
if exist, err = bl_prevco.GetCalloffOemorder(); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "获取前序客户订单失败:", cflandtablst2[0].Oemordernr, err) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
// 校验客户订单的零件族是否齐全
|
|
|
|
sgdict = make(map[string]string) |
|
|
|
if sgdict, err = bl_prevco.GetOemorderModelSpecPfdict(); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "查询项目客户订单的车型规格字典记录失败:", bl_co.Custordertab.Projnr, bl_co.Custordertab.Custordernr, err) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
if len(sgdict) != len(cftablst) { |
|
|
|
// 整车副缺零件族
|
|
|
|
glog.InfoExtln("CALLOFF-Debug", "整车副缺零件族len(cftablst):", len(cftablst), "整车副缺零件族len(sgdict):", len(sgdict)) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
continue |
|
|
|
} |
|
|
|
// 校验是否解析有错误
|
|
|
@ -280,6 +300,7 @@ func ParseCalloffOrder() { |
|
|
|
} |
|
|
|
if stop { |
|
|
|
fmt.Println("前序未完成处理,跳过!") |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
@ -306,6 +327,7 @@ func ParseCalloffOrder() { |
|
|
|
if projtablst[i].Calloff_verify_orderspec > 0 { |
|
|
|
if audit, err = bl_co.IsCarmodelSpecAudited(); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "获取客户订单规格失败 :", bl_co.Custordernr) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} else { |
|
|
|
if !audit { |
|
|
@ -328,13 +350,17 @@ func ParseCalloffOrder() { |
|
|
|
// 如果有错,则停下不解析
|
|
|
|
if len(errorlst) > 0 { |
|
|
|
session = db.G_DbEngine.NewSession() |
|
|
|
defer session.Close() |
|
|
|
if err = session.Begin(); err != nil { |
|
|
|
session.Close() |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
//保存错误
|
|
|
|
if err = cferror.InsertList(session, errorlst); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "插入Calloff解析错误记录失败 :", err) |
|
|
|
session.Rollback() |
|
|
|
session.Close() |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
@ -360,9 +386,13 @@ func ParseCalloffOrder() { |
|
|
|
if err = cflandtablst[j].UpdateFields(session, "parsed,handlestatus,lastmodif"); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "更新Calloff解析记录失败 :", err) |
|
|
|
session.Rollback() |
|
|
|
session.Close() |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
session.Commit() |
|
|
|
session.Close() |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
@ -371,21 +401,15 @@ func ParseCalloffOrder() { |
|
|
|
// 获取同项目OEMORDER的Calloff判断解析状态
|
|
|
|
if exist, err = cflandtab.ExistUnParsedCfByProjectOemorderPf(cfProj.Projectid, cflandtablst[j].Oemordernr, "SITKD1"); err != nil { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "获取项目客户订单零件族的calloff记录失败 :", cfProj.Projectid, cflandtablst[j].Oemordernr, cflandtablst[j].Partfamilyid, err) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
return |
|
|
|
} |
|
|
|
if exist { |
|
|
|
glog.InfoExtln("读取Calloff信息并生成发运包装", "408行 exist is false :", err) |
|
|
|
etcd.G_jobLock.UnLock() |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
/* 获取锁 */ |
|
|
|
LOOP: |
|
|
|
err = etcd.G_jobLock.TryLock("lock") |
|
|
|
if err != nil { |
|
|
|
fmt.Println("calloff groutine lock fail!") |
|
|
|
time.Sleep(5 * time.Millisecond) |
|
|
|
goto LOOP |
|
|
|
} |
|
|
|
fmt.Println("calloff groutine lock success!") |
|
|
|
|
|
|
|
session = db.G_DbEngine.NewSession() |
|
|
|
if err = session.Begin(); err != nil { |
|
|
|