package seq
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/go-xorm/xorm"
|
|
"leit.com/leit_seat_aps/common"
|
|
"leit.com/leit_seat_aps/db"
|
|
"leit.com/leit_seat_aps/glog"
|
|
"leit.com/leit_seat_aps/service"
|
|
"time"
|
|
)
|
|
|
|
// 从消息表获取 类型为 CARMODEl的开口消息,基于消息对象ID (OEM订单号)解析OEM订单对应的车型
|
|
// 解析成功则关闭该消息,并将OEM订单对应的解析车型信息进行记录
|
|
|
|
func RunCarmodelParser(projnr string) (err error) {
|
|
var (
|
|
bl_proj service.BL_Project
|
|
bl_cm service.BL_Carmodel
|
|
bl_ordmsg service.BL_Ordmsg
|
|
bl_cmspec service.BL_Carmodel_Spec
|
|
msgtab db.Order_msg
|
|
msgtablst []db.Order_msg
|
|
cotab db.Pln_custorder
|
|
cotablst []db.Pln_custorder
|
|
cocmvtab, delmvtab db.Pln_custorder_carmodelver
|
|
i int
|
|
ok, match, isnew, alert bool
|
|
cmid, alertinfo string
|
|
version int
|
|
createtime time.Time
|
|
dura time.Duration
|
|
session *xorm.Session
|
|
)
|
|
|
|
bl_proj.Projectid = projnr
|
|
// 第一步:加载项目的相关数据和已有车型规格
|
|
if err = bl_proj.GetCarModelList(); err != nil {
|
|
glog.InfoExtln("解析车型", "GetCarModelList is:", err)
|
|
return
|
|
}
|
|
fmt.Println("加载项目:", projnr, "的车型主数据成功!")
|
|
glog.InfoExtln("解析车型", "加载项目:", projnr)
|
|
// 第二步:加载项目的零件数据
|
|
if err = bl_proj.GetPartList(); err != nil {
|
|
return
|
|
}
|
|
fmt.Println("加载项目:", projnr, "的零件主数据成功!")
|
|
|
|
// 第三步:加载项目的属性数据
|
|
if err = bl_proj.GetAttributeList(common.ATCOD_TYPE_PART); err != nil {
|
|
return
|
|
}
|
|
fmt.Println("加载项目:", projnr, "的属性主数据成功!")
|
|
|
|
fmt.Println("加载项目的开口车型消息......")
|
|
msgtab = db.Order_msg{}
|
|
if msgtablst, err = msgtab.GetProjectOpenCarmodelMessages(projnr); err != nil {
|
|
return
|
|
}
|
|
for i = 0; i < len(msgtablst); i++ {
|
|
// 消息创建时间超过10分钟以上再处理(等客户订单的多个SEQ文件凑齐)
|
|
if createtime, err = common.DateParse(msgtablst[i].Credatuz, "YmdHis"); err != nil {
|
|
fmt.Println("消息", msgtablst[i].Msgid, "的创建时间无法解析!")
|
|
continue
|
|
}
|
|
dura = time.Now().Sub(createtime)
|
|
if dura.Seconds() < 10*60 {
|
|
// 只处理创建时间超过10分钟的消息
|
|
continue
|
|
}
|
|
|
|
bl_ordmsg = service.BL_Ordmsg{Ordmsgtab: msgtablst[i]}
|
|
// 基于消息对象ID获取OEM订单完整数据
|
|
cotab = db.Pln_custorder{}
|
|
if cotablst, err = cotab.GetDataForCarmodelByOemorder(msgtablst[i].Msgobjid, msgtablst[i].Msg_cpara1); err != nil {
|
|
return
|
|
}
|
|
|
|
// 如果客户订单有报错不处理
|
|
ok = true
|
|
for _, cotab = range cotablst {
|
|
if cotab.Handlestatus != common.CO_PARSE_STATUS_OK {
|
|
ok = false
|
|
break
|
|
}
|
|
}
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
// 是否满足车型要求
|
|
if match, cmid = bl_proj.IsMatchWithCarModel(cotablst); !match {
|
|
// 判断消息开口是否超过指定时长,超过则报警
|
|
if alert, alertinfo, err = bl_ordmsg.IsNeedToAlert(3600 * 24); err != nil {
|
|
return
|
|
}
|
|
if alert {
|
|
// 报警
|
|
fmt.Println(alertinfo)
|
|
}
|
|
continue
|
|
}
|
|
if bl_cm, ok = bl_proj.Carmodeldict[cmid]; !ok {
|
|
// 判断消息开口是否超过指定时长,超过则报警
|
|
if alert, alertinfo, err = bl_ordmsg.IsNeedToAlert(3600 * 24); err != nil {
|
|
return
|
|
}
|
|
if alert {
|
|
// 报警
|
|
fmt.Println(alertinfo)
|
|
}
|
|
//continue
|
|
}
|
|
|
|
session = db.G_DbEngine.NewSession()
|
|
defer session.Close()
|
|
if err = session.Begin(); err != nil {
|
|
return
|
|
}
|
|
|
|
// 满足车型要求,查看是否是已存在规格
|
|
if isnew, version = bl_cm.IsNewSpecToThisModel(cotablst); isnew {
|
|
// 新版本,新增
|
|
if bl_cmspec, err = bl_cm.CreateNewCarmodel(cotablst, &bl_proj, session); err != nil {
|
|
session.Rollback()
|
|
session.Close()
|
|
return
|
|
} else {
|
|
// 更新项目的车型规格库
|
|
bl_cm.SpecDict[bl_cmspec.Version] = bl_cmspec
|
|
bl_proj.Carmodeldict[bl_cm.Carmodelid] = bl_cm
|
|
version = bl_cmspec.Version
|
|
}
|
|
}
|
|
//删掉对应的车型
|
|
delmvtab = db.Pln_custorder_carmodelver{Finr: db.G_FINR}
|
|
delmvtab.Oemordernr = msgtablst[i].Msgobjid
|
|
delmvtab.Projnr = msgtablst[i].Msg_cpara1
|
|
res := delmvtab.DelSession(session)
|
|
if !res {
|
|
session.Rollback()
|
|
session.Close()
|
|
return
|
|
}
|
|
// 更新OEM订单的车型规格表
|
|
cocmvtab = db.Pln_custorder_carmodelver{Finr: db.G_FINR}
|
|
cocmvtab.Carmodelid = bl_cm.Carmodelid
|
|
cocmvtab.Version = version
|
|
cocmvtab.Oemordernr = msgtablst[i].Msgobjid
|
|
cocmvtab.Projnr = msgtablst[i].Msg_cpara1
|
|
cocmvtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
|
|
cocmvtab.Lastuser = "cm_service"
|
|
if err = cocmvtab.Insert(session); err != nil {
|
|
session.Rollback()
|
|
session.Close()
|
|
return
|
|
}
|
|
|
|
// 关闭消息
|
|
if err = bl_ordmsg.Close(); err != nil {
|
|
session.Rollback()
|
|
session.Close()
|
|
return
|
|
}
|
|
|
|
session.Commit()
|
|
session.Close()
|
|
}
|
|
return
|
|
}
|