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.

157 lines
4.7 KiB

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
}