package reorder
|
|
|
|
import (
|
|
"github.com/go-xorm/xorm"
|
|
"leit.com/leit_seat_aps/common"
|
|
"leit.com/leit_seat_aps/db"
|
|
"log"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// REORDER 解析的数据对象
|
|
type BL_Reorder struct {
|
|
Reordernr string // Reorder订单号
|
|
Rejectionnr string
|
|
Projnr string // 项目号
|
|
Edifile string // EDI 文件名
|
|
Partfamilyid string // 零件族
|
|
Plantsitecode int // 客户车间号
|
|
Consigee string
|
|
Msgid string
|
|
Msgtime time.Time
|
|
Reorderlandtab db.Pln_reorderdata_landing // Reorder消息
|
|
SgDict map[string]BL_ReorderSupplygroup
|
|
}
|
|
|
|
type BL_ReorderSupplygroup struct {
|
|
Reordernr string // Reorder订单号
|
|
Oemordernr string // 客户订单号
|
|
SeqType int // 3=新建;1=变更;2=取消
|
|
Partfamilyid string // 零件族
|
|
Supplygroupid string // 供应组
|
|
PartDict map[string]BL_ReorderPart
|
|
}
|
|
|
|
type BL_ReorderPart struct {
|
|
Reordernr string // Reorder订单号
|
|
Oemordernr string // 客户订单号
|
|
Supplygroupid string // 供应组
|
|
Partid string
|
|
Partqty int
|
|
}
|
|
|
|
// Reorder 缓存数据对象定义
|
|
type ReorderLandData struct {
|
|
Projnr string // 项目号
|
|
Edifile string // EDI 文件名
|
|
Bl_Reorder BL_Reorder // 解析的REORDER订单对象
|
|
Reorderlandtablst []db.Pln_reorderdata_landing // Reorder消息
|
|
}
|
|
|
|
// 加载Reorder文件并将文件中的Reorder订单数据解析到Reorder订单字典
|
|
func (rld *ReorderLandData) ReadReorderData(reorder_file string) (err error) {
|
|
var (
|
|
reorder REORDER
|
|
seq SEQ
|
|
bl_reorder BL_Reorder
|
|
bl_reosg BL_ReorderSupplygroup
|
|
bl_reopart BL_ReorderPart
|
|
ediFile string
|
|
i int
|
|
)
|
|
|
|
// 解析EDI文件
|
|
reorder = REORDER{}
|
|
if err = ParseReorderEdi(reorder_file, &reorder); err != nil {
|
|
log.Printf("Failed to load REORDER file: %s due to: %v", reorder_file, err)
|
|
return
|
|
}
|
|
PrintReorderEdi(&reorder)
|
|
|
|
// 获取SEQ文件名
|
|
_, ediFile = filepath.Split(reorder_file)
|
|
|
|
// 遍历
|
|
bl_reorder = BL_Reorder{}
|
|
bl_reorder.Reordernr = reorder.Bgm.ReorderNum
|
|
bl_reorder.Rejectionnr = reorder.Ftx.RejectionNum
|
|
bl_reorder.Edifile = ediFile
|
|
bl_reorder.Projnr = rld.Projnr
|
|
bl_reorder.Partfamilyid = reorder.Rff.PartFamily
|
|
bl_reorder.Plantsitecode = reorder.Nad.ConsigneePlant
|
|
bl_reorder.Consigee = reorder.Nad.Consignee
|
|
bl_reorder.Msgid = reorder.Unh.MsgId
|
|
bl_reorder.Msgtime = reorder.Dtm.MsgTime
|
|
bl_reorder.SgDict = make(map[string]BL_ReorderSupplygroup)
|
|
for _, seq = range reorder.SeqList {
|
|
bl_reosg = BL_ReorderSupplygroup{}
|
|
bl_reosg.Reordernr = reorder.Bgm.ReorderNum
|
|
bl_reosg.Partfamilyid = reorder.Rff.PartFamily
|
|
bl_reosg.Oemordernr = strings.TrimSpace(seq.Gir.CustOrderNr)
|
|
bl_reosg.Supplygroupid = seq.Gir.SupplyGroup
|
|
bl_reosg.SeqType = seq.SeqType
|
|
bl_reosg.PartDict = make(map[string]BL_ReorderPart)
|
|
for i = 0; i < len(seq.LinList); i++ {
|
|
bl_reopart = BL_ReorderPart{}
|
|
bl_reopart.Reordernr = reorder.Bgm.ReorderNum
|
|
bl_reopart.Oemordernr = strings.TrimSpace(seq.Gir.CustOrderNr)
|
|
bl_reopart.Supplygroupid = seq.Gir.SupplyGroup
|
|
bl_reopart.Partid = seq.LinList[i].PartNr + "-" + seq.LinList[i].Pia.Ai // 零件号
|
|
bl_reopart.Partqty = seq.LinList[i].Qty.Qty
|
|
bl_reosg.PartDict[bl_reopart.Partid] = bl_reopart
|
|
}
|
|
bl_reorder.SgDict[bl_reosg.Supplygroupid] = bl_reosg
|
|
}
|
|
rld.Bl_Reorder = bl_reorder
|
|
|
|
return
|
|
}
|
|
|
|
// 保存REORDER解析数据
|
|
func (rld *ReorderLandData) SaveReorderData() (err error) {
|
|
var (
|
|
bl_reosg BL_ReorderSupplygroup
|
|
bl_reopart BL_ReorderPart
|
|
reolandtab db.Pln_reorderdata_landing
|
|
reosgtab db.Pln_reordersupplygroup_landing
|
|
reoparttab db.Pln_reorderpart_landing
|
|
session *xorm.Session
|
|
flag bool
|
|
)
|
|
// 遍历每一条SEQ信息,检查是否存在,如果存在则更新它
|
|
session = db.G_DbEngine.NewSession()
|
|
defer session.Close()
|
|
// 新建
|
|
reolandtab = db.Pln_reorderdata_landing{}
|
|
reolandtab.Finr = db.G_FINR
|
|
reolandtab.Reordernr = rld.Bl_Reorder.Reordernr
|
|
reolandtab.Rejectionnr = rld.Bl_Reorder.Rejectionnr
|
|
reolandtab.Partfamilyid = rld.Bl_Reorder.Partfamilyid
|
|
reolandtab.Projnr = rld.Bl_Reorder.Projnr
|
|
reolandtab.Consignee = rld.Bl_Reorder.Consigee
|
|
reolandtab.Consigneeplant = rld.Bl_Reorder.Plantsitecode
|
|
reolandtab.Parsed = 0 // 默认未解析
|
|
reolandtab.Edifile = rld.Bl_Reorder.Edifile
|
|
reolandtab.Msgid = rld.Bl_Reorder.Msgid
|
|
reolandtab.Msgtime = common.Date(rld.Bl_Reorder.Msgtime.Unix(), "YYYYMMDDHHmmss")
|
|
reolandtab.Lastuser = "service"
|
|
reolandtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
|
|
reolandtab.Lastmodif = reolandtab.Credatuz
|
|
if _, err = session.Insert(reolandtab); err != nil {
|
|
session.Rollback()
|
|
return
|
|
}
|
|
|
|
flag = true
|
|
for _, bl_reosg = range rld.Bl_Reorder.SgDict {
|
|
reosgtab = db.Pln_reordersupplygroup_landing{}
|
|
reosgtab.Finr = db.G_FINR
|
|
reosgtab.Reordernr = bl_reosg.Reordernr
|
|
reosgtab.Oemordernr = bl_reosg.Oemordernr
|
|
reosgtab.Supplygroupid = bl_reosg.Supplygroupid
|
|
reosgtab.Seqmode = bl_reosg.SeqType
|
|
reosgtab.Lastuser = "service"
|
|
reosgtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
|
|
reosgtab.Lastmodif = reosgtab.Credatuz
|
|
if _, err = session.Insert(reosgtab); err != nil {
|
|
flag = false
|
|
break
|
|
}
|
|
|
|
for _, bl_reopart = range bl_reosg.PartDict {
|
|
reoparttab = db.Pln_reorderpart_landing{}
|
|
reoparttab.Finr = db.G_FINR
|
|
reoparttab.Reordernr = bl_reopart.Reordernr
|
|
reoparttab.Oemordernr = bl_reopart.Oemordernr
|
|
reoparttab.Supplygroupid = bl_reopart.Supplygroupid
|
|
reoparttab.Partid = bl_reopart.Partid
|
|
reoparttab.Partqty = bl_reopart.Partqty
|
|
reoparttab.Lastuser = "service"
|
|
reoparttab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
|
|
reoparttab.Lastmodif = reoparttab.Credatuz
|
|
if _, err = session.Insert(reoparttab); err != nil {
|
|
flag = false
|
|
break
|
|
}
|
|
}
|
|
if !flag {
|
|
break
|
|
}
|
|
}
|
|
|
|
if flag {
|
|
session.Commit()
|
|
} else {
|
|
session.Rollback()
|
|
}
|
|
|
|
return
|
|
}
|