|
|
- package calloff
-
- import (
- "github.com/go-xorm/xorm"
- "leit.com/leit_seat_aps/common"
- "leit.com/leit_seat_aps/db"
- "leit.com/leit_seat_aps/service"
- "path/filepath"
- "strconv"
- "time"
- )
-
- // Calloff 解析的数据对象
- type BL_Calloff struct {
- Custordernr string // 系统内部客户订单号
- Oemordernr string // 客户订单号
- Calloffnr int
- Seqmode int
- Checksequence int
- Projnr string
- Partfamilyid string
- Msgtime string // 消息时间
- Swet string // 上线装配时间
- Consigneeplant int
- Consigneecompany int
- Consumecompany int
- Consumeplant int
- Unloadingplace string
- Vehicleidset string
- Vehicleid string
- Edifile string
- Calloffsortnr int
- Handlestatus string
- Cflandtab db.Pln_calloffdata_landing
- }
-
- // Calloff 缓存数据对象定义
- type CalloffLandData struct {
- Projnr string // 项目号
- Edifile string // EDI 文件名
- Bl_CalloffDict map[string]BL_Calloff // 解析的Calloff对象
- cflandtablst []db.Pln_calloffdata_landing // 发运版本消息
- }
-
- // 加载Calloff文件并将文件中的发运数据解析到字典
- func (cfld *CalloffLandData) ReadCalloffData(calloff_file string) (err error) {
- var (
- calloff CALLOFF
- bl_cf BL_Calloff
- seq SEQ
- ediFile string
- )
-
- // 解析EDI文件
- calloff = CALLOFF{}
- if err = ParseCalloffEdi(calloff_file, &calloff); err != nil {
- return
- }
- // PrintCalloffEdi(&calloff)
-
- // 获取SEQ文件名
- _, ediFile = filepath.Split(calloff_file)
-
- // 初始化
- cfld.Bl_CalloffDict = make(map[string]BL_Calloff)
-
- // 遍历
- for _, seq = range calloff.SeqList {
- bl_cf = BL_Calloff{}
- bl_cf.Calloffnr, _ = strconv.Atoi(calloff.RffCF.CallOffNum)
- bl_cf.Checksequence, _ = strconv.Atoi(calloff.Bgm.CheckSequence)
- bl_cf.Partfamilyid = calloff.RffPF.PartFamily
- bl_cf.Projnr = cfld.Projnr
- bl_cf.Msgtime = common.Date(calloff.DtmMsg.MsgTime.Unix(), "YYYYMMDDHHmmss")
- bl_cf.Swet = common.Date(calloff.DtmDelivery.MsgTime.Unix(), "YYYYMMDDHHmmss")
- bl_cf.Consigneecompany = calloff.Nad.ConsigneeCompany
- bl_cf.Consigneeplant = calloff.Nad.ConsigneePlant
- bl_cf.Consumecompany = calloff.Loc.ConsumeCompany
- bl_cf.Consumeplant = calloff.Loc.ConsumePlant
- bl_cf.Unloadingplace = calloff.Loc.UnloadingPlace
- bl_cf.Seqmode = seq.SeqType
- bl_cf.Oemordernr = seq.Gir.CustOrderNr
- bl_cf.Vehicleidset = seq.Gir.VehicleIdSet
- bl_cf.Vehicleid = seq.Gir.VehicleId
- bl_cf.Edifile = ediFile
- cfld.Bl_CalloffDict[bl_cf.Oemordernr] = bl_cf
- }
-
- return
- }
-
- // 保存SEQ解析数据
- func (cfld *CalloffLandData) SaveCalloffData() (err error) {
- var (
- bl_cf BL_Calloff
- cflandtab db.Pln_calloffdata_landing
- session *xorm.Session
- calloffsortnr string
- flag bool
- )
- session = db.G_DbEngine.NewSession()
- defer session.Close()
- flag = true
- // 遍历每一条CALLOFF信息,检查是否存在,如果存在则更新它
- for _, bl_cf = range cfld.Bl_CalloffDict {
- // 新建
- cflandtab = db.Pln_calloffdata_landing{}
- cflandtab.Finr = db.G_FINR
- cflandtab.Oemordernr = bl_cf.Oemordernr
- cflandtab.Partfamilyid = bl_cf.Partfamilyid
- if calloffsortnr, err = service.SN_GetNextSnrBySession("SORTNR", session); err != nil {
- return
- }
- cflandtab.Calloffsortnr = common.ValueToInt(calloffsortnr, 0)
- cflandtab.Calloffnr = bl_cf.Calloffnr
- cflandtab.Projnr = bl_cf.Projnr
- cflandtab.Seqmode = bl_cf.Seqmode
- cflandtab.Swet = bl_cf.Swet
- cflandtab.Msgtime = bl_cf.Msgtime
- cflandtab.Checksequence = bl_cf.Checksequence
- cflandtab.Consigneecompany = bl_cf.Consigneecompany
- cflandtab.Consigneeplant = bl_cf.Consigneeplant
- cflandtab.Consumecompany = bl_cf.Consumecompany
- cflandtab.Consumeplant = bl_cf.Consumeplant
- cflandtab.Unloadingplace = bl_cf.Unloadingplace
- cflandtab.Vehicleidset = bl_cf.Vehicleidset
- cflandtab.Vehicleid = bl_cf.Vehicleid
- cflandtab.Parsed = 0 // 默认未解析
- cflandtab.Edifile = bl_cf.Edifile
- cflandtab.Handlestatus = "IT"
- cflandtab.Lastuser = "service"
- cflandtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
- if _, err = session.Insert(cflandtab); err != nil {
- cferror := db.Pln_calloff_errorlst{}
- cferror.Finr = db.G_FINR
- cferror.Calloffnr = cflandtab.Calloffnr
- cferror.Errortype = common.CALLOFF_CHECK_SEQUENCE
- cferror.Consumeplant = cflandtab.Consumeplant
- cferror.Partfamilyid = cflandtab.Partfamilyid
- cferror.Oemordernr = cflandtab.Oemordernr
- cferror.Errorstatus = "O"
- cferror.Errorinfo = err.Error()
- cferror.Lastmodif = common.TimeFormat(time.Now(), "yyyyMMddHHmmss")
- cferror.Credatuz = common.TimeFormat(time.Now(), "yyyyMMddHHmmss")
- cferror.Add()
- flag = false
- break
- }
- }
- if flag {
- session.Commit()
- } else {
- session.Rollback()
- }
-
- return
- }
|