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.

176 lines
5.0 KiB

package asn
import (
"errors"
"github.com/go-xorm/xorm"
"leit.com/leit_seat_aps/common"
"leit.com/leit_seat_aps/db"
"log"
"path/filepath"
"strconv"
"time"
)
// 接受Grammer 发过来的ASN
// SEQ 缓存数据对象定义
type AsnLandData struct {
Asnfile string // ASN 文件名
Asnlandtab db.Jit_asnhead_landing
}
// 加载并解析ASN文件
func (ald *AsnLandData) ReadAsnData(asnfile string) (err error) {
var (
asn ASN
asnfilename string
ao ASN_ORDER
ap ASN_PACKLABEL
asnitemtab db.Jit_asnitem_landing
asnordertab db.Jit_asnorder_landing
)
// 解析ASN文件
asn = ASN{}
if err = ParseGrammerAsn(asnfile, &asn); err != nil {
log.Printf("Failed to load ASN file: %s due to: %v", asnfile, err)
return
}
// PrintGrammerAsn(&sequence)
// 获取ASN文件名
_, asnfilename = filepath.Split(asnfile)
// 初始化
ald.Asnfile = asnfilename
ald.Asnlandtab = db.Jit_asnhead_landing{}
// 读取头信息
ald.Asnlandtab.Tradepartnerid = asn.Separator.TradePartnerId.Content
ald.Asnlandtab.Senderappid = asn.Separator.SenderAppId.Content
ald.Asnlandtab.Recieverappid = asn.Separator.RecieverAppId.Content
ald.Asnlandtab.Doctype = asn.Separator.DocType.Content
ald.Asnlandtab.Asnnr = asn.Header.AsnNr.Content
ald.Asnlandtab.Asnfile = asnfilename
ald.Asnlandtab.Parsed = 0
ald.Asnlandtab.Asndate = asn.Header.AsnDate.Content
ald.Asnlandtab.Asntime = asn.Header.AsnTime.Content
ald.Asnlandtab.Shipdate = asn.Header.ShipDate.Content
ald.Asnlandtab.Shiptime = asn.Header.ShipTime.Content
ald.Asnlandtab.Shipfromid = asn.Shipment.ShipFromId.Content
ald.Asnlandtab.Shiptoid = asn.Shipment.ShipToId.Content
ald.Asnlandtab.Supplierid = asn.Shipment.SupplierId.Content
ald.Asnlandtab.Dockcode = asn.Shipment.DockCode.Content
// 遍历
ald.Asnlandtab.Itemlst = []db.Jit_asnitem_landing{}
for _, ao = range asn.OrderList {
asnitemtab = db.Jit_asnitem_landing{}
// 更新零件信息
asnitemtab.Asnnr = ald.Asnlandtab.Asnnr
asnitemtab.Partid = ao.CustPartId.Content
asnitemtab.Partdescr = ao.AsnItem.PartDescr.Content
asnitemtab.Shipqty, _ = strconv.Atoi(ao.ShipQty.Content)
asnitemtab.Qtyuom = ao.QtyUom.Content
asnitemtab.Purchaseordernr = ao.PONr.Content
for _, ap = range ao.AsnPackLabellst {
asnordertab = db.Jit_asnorder_landing{}
// 更新订单信息
asnordertab.Asnnr = asnitemtab.Asnnr
asnordertab.Partid = asnitemtab.Partid
asnordertab.Ordernr = ap.OrderNr.Content
asnordertab.Oemordernr = ap.OemOrderNr
asnordertab.Partfamilyid = ap.PartFamily.Content
asnordertab.Supplygroupid = ap.SupplyGroup.Content
asnordertab.Shipqty, _ = strconv.Atoi(ap.ShipQty.Content)
asnordertab.Swetyear = ap.SwetYear
asnitemtab.Orderlst = append(asnitemtab.Orderlst, asnordertab)
}
ald.Asnlandtab.Itemlst = append(ald.Asnlandtab.Itemlst, asnitemtab)
}
return
}
// 保存解析后的ASN结果到数据库
func (ald *AsnLandData) SaveAsnData() (err error) {
var (
asnitemtab db.Jit_asnitem_landing
asnordertab db.Jit_asnorder_landing
asnordercache db.Jit_asnorder_cache
session *xorm.Session
flag bool
)
// 遍历每一条SEQ信息,检查是否存在,如果存在则更新它
session = db.G_DbEngine.NewSession()
defer session.Close()
if err = session.Begin(); err != nil {
return
}
// 查找ASN如果存在先删除
if !ald.Asnlandtab.Delelte(session) {
err = errors.New("删除已有ASN记录失败!")
return
}
// 插入ASN头
ald.Asnlandtab.Finr = db.G_FINR
ald.Asnlandtab.Lastuser = "service"
ald.Asnlandtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = ald.Asnlandtab.Insert(session); err != nil {
session.Rollback()
return
}
// 插入ASN零件行
flag = true
for _, asnitemtab = range ald.Asnlandtab.Itemlst {
// 新建
asnitemtab.Finr = db.G_FINR
asnitemtab.Lastuser = "service"
asnitemtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = asnitemtab.Insert(session); err != nil {
flag = false
break
} else {
for _, asnordertab = range asnitemtab.Orderlst {
asnordertab.Finr = db.G_FINR
asnordertab.Lastuser = "service"
asnordertab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = asnordertab.Insert(session); err != nil {
flag = false
break
}
//添加缓存
asnordercache.Finr = db.G_FINR
asnordercache.Asnnr = asnordertab.Asnnr
asnordercache.Partid = asnordertab.Partid
asnordercache.Ordernr = asnordertab.Ordernr
asnordercache.Oemordernr = asnordertab.Oemordernr
asnordercache.Shipqty = asnordertab.Shipqty
asnordercache.Partfamilyid = asnordertab.Partfamilyid
asnordercache.Supplygroupid = asnordertab.Supplygroupid
asnordercache.Swetyear = asnordertab.Swetyear
asnordercache.Flag = 0
asnordercache.Lastuser = "service"
asnordercache.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
if err = asnordercache.Insert(session); err != nil {
flag = false
break
}
}
}
if !flag {
break
}
}
if flag {
session.Commit()
} else {
session.Rollback()
}
return
}