|
|
- package seq
-
- import (
- "github.com/go-xorm/xorm"
- "leit.com/leit_seat_aps/common"
- "leit.com/leit_seat_aps/db"
- "log"
- "path/filepath"
- "time"
- )
-
- // SEQ 解析的数据对象
- type BL_Seq struct {
- Custordernr string // 系统内部客户订单号
- Oemordernr string // 客户订单号
- Projnr string // 项目号
- SeqType int // 3=新建;1=变更;2=取消
- Edifile string // EDI 文件名
- Vin string // 车身号
- Swet string // 交付时间
- Oemseq string // 排序号(10位)
- Partfamilyid string // 零件族
- Assemblyline string // 客户装配线
- Unloadingpoint string // 客户卸货点
- Seqdatatab db.Pln_seqdata_landing
- }
-
- // SEQ 缓存数据对象定义
- type SeqLandData struct {
- Projnr string // 项目号
- Edifile string // EDI 文件名
- Bl_SeqDict map[string]BL_Seq // 解析的SEQ订单对象
- Seqlandtab []db.Pln_seqdata_landing // 排序版本消息
- }
-
- // 加载SEQ文件并将文件中的客户订单数据解析到客户订单字典
- func (bls *SeqLandData) ReadSeqData(seq_file string) (err error) {
- var (
- sequence SEQUENCE
- seq SEQ
- bl_seq BL_Seq
- ediFile string
- )
-
- // 解析EDI文件
- sequence = SEQUENCE{}
- if err = ParseSeqEdi(seq_file, &sequence); err != nil {
- log.Printf("Failed to load SEQ file: %s due to: %v", seq_file, err)
- return
- }
- // PrintSeqEdi(&sequence)
-
- // 获取SEQ文件名
- _, ediFile = filepath.Split(seq_file)
-
- // 初始化
- bls.Bl_SeqDict = make(map[string]BL_Seq)
-
- // 遍历
- for _, seq = range sequence.SeqList {
- bl_seq = BL_Seq{}
- bl_seq.Oemordernr = seq.Gir.CustOrderNr
- bl_seq.SeqType = seq.SeqType
- bl_seq.Edifile = ediFile
- bl_seq.Projnr = bls.Projnr
- bl_seq.Oemseq = seq.SeqNum
- bl_seq.Vin = seq.Gir.Vin
- bl_seq.Partfamilyid = sequence.Ftx.PartFamily
- bl_seq.Assemblyline = seq.Loc44.AssemblyLine
- bl_seq.Unloadingpoint = seq.Loc83.UnloadingPoint
- bl_seq.Swet = common.Date(seq.Dtm.MsgTime.Unix(), "YYYYMMDDHHmmss")
- bls.Bl_SeqDict[bl_seq.Oemordernr] = bl_seq
- }
-
- return
- }
-
- // 保存SEQ解析数据
- func (bls *SeqLandData) SaveSeqData() (err error) {
- var (
- bl_seq BL_Seq
- version int
- seqlandtab db.Pln_seqdata_landing
- session *xorm.Session
- flag bool
- )
- // 遍历每一条SEQ信息,检查是否存在,如果存在则更新它
- session = db.G_DbEngine.NewSession()
- defer session.Close()
- flag = true
- for _, bl_seq = range bls.Bl_SeqDict {
- // 新建
- seqlandtab = db.Pln_seqdata_landing{}
- seqlandtab.Finr = db.G_FINR
- seqlandtab.Oemordernr = bl_seq.Oemordernr
- seqlandtab.Vin = bl_seq.Vin
- seqlandtab.Partfamilyid = bl_seq.Partfamilyid
- seqlandtab.Projnr = bl_seq.Projnr
- // 基于OEM订单号和零件组获取SEQ数据最新版本号
- if version, err = seqlandtab.GetLatestVersionBySession(session); err != nil {
- flag = false
- break
- }
- seqlandtab.Version = version + 1
- seqlandtab.Seqmode = bl_seq.SeqType
- seqlandtab.Oemseq= common.ValueToFloat(bl_seq.Oemseq,0.0)
- if seqlandtab.Oemseq <= 0 {
- seqlandtab.Oemseq = 9999999999
- }
- seqlandtab.Swet = bl_seq.Swet
-
- seqlandtab.Assemblyline = bl_seq.Assemblyline
- seqlandtab.Unloadingpoint = bl_seq.Unloadingpoint
- seqlandtab.Parsed = 0 // 默认未解析
- seqlandtab.Edifile = bl_seq.Edifile
- seqlandtab.Lastuser = "service"
- seqlandtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
- if _, err = session.Insert(seqlandtab); err != nil {
- flag = false
- break
- }
- }
- if flag {
- session.Commit()
- } else {
- session.Rollback()
- }
-
- return
- }
|