SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.5 KiB

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
}