|
|
- 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
- }
|