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.

191 lines
5.9 KiB

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
}