|
|
- 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
- }
|