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.

1280 lines
33 KiB

package msg
import (
"fmt"
"leit.com/leit_seat_aps/common"
"leit.com/leit_seat_aps/db"
"leit.com/leit_seat_aps/service"
"os"
"strconv"
"strings"
"time"
)
type SNF_Separator struct {
RecordType SNF_FieldContent // **
TradePartnerId SNF_FieldContent
DocType SNF_FieldContent
SenderApp SNF_FieldContent
ReceiverApp SNF_FieldContent
GroupSenderId SNF_FieldContent
GroupReceiverId SNF_FieldContent
InterchangeNr SNF_FieldContent
GroupControlNr SNF_FieldContent
DocControlNr SNF_FieldContent
}
type SNF_01Header struct {
RecordType SNF_FieldContent // 01
TradePartnerBillTo SNF_FieldContent
TradePartnerConsignee SNF_FieldContent
ContractNr SNF_FieldContent
TradePartnerShipTo SNF_FieldContent
SchedStartDate SNF_FieldContent
SchedEndDate SNF_FieldContent
ReleaseDate SNF_FieldContent
Issue SNF_FieldContent
SchedQty SNF_FieldContent
Filler2 SNF_FieldContent
PurchaseOrderNr SNF_FieldContent
Filler3 SNF_FieldContent
PurposeCode SNF_FieldContent
ReferenceNr SNF_FieldContent
ReleaseId SNF_FieldContent
SchedTypeQualifier SNF_FieldContent
TradePartnerShipFrom SNF_FieldContent
TradePartnerSupplier SNF_FieldContent
Filler4 SNF_FieldContent
DocCode SNF_FieldContent
PurchaseOrderDate SNF_FieldContent
}
type SNF_11HeaderComment struct {
RecordType SNF_FieldContent // 11
CommentType SNF_FieldContent
Comment SNF_FieldContent
}
type SNF_13Seq struct {
RecordType SNF_FieldContent // 13
TypeCode SNF_FieldContent
ActionRequest SNF_FieldContent
VehicleIdNr SNF_FieldContent
CustomerSeqNo SNF_FieldContent
DockCode SNF_FieldContent
Filler0 SNF_FieldContent
SjjDeliveryTime SNF_FieldContent
Filler1 SNF_FieldContent
Filler2 SNF_FieldContent
Filler3 SNF_FieldContent
BbaOrderNr SNF_FieldContent
BbaPartFamily SNF_FieldContent
BbaSupplyGroup SNF_FieldContent
Filler4 SNF_FieldContent
BbaSwetTime SNF_FieldContent
}
type SNF_30Item struct {
RecordType SNF_FieldContent // 30
TpDestination SNF_FieldContent
CustReferenceNr SNF_FieldContent
TpShipTo SNF_FieldContent
DockNr SNF_FieldContent
InternalContract SNF_FieldContent
EngChangeLevel SNF_FieldContent
LineFeed SNF_FieldContent
ModelYear SNF_FieldContent
Filler2 SNF_FieldContent
ContractNr SNF_FieldContent
Position SNF_FieldContent
ZZ SNF_FieldContent
LinePR SNF_FieldContent
CustPartNr SNF_FieldContent
PurchaseOrderNr SNF_FieldContent
Filler3 SNF_FieldContent
Filler4 SNF_FieldContent
PartReleaseStatus SNF_FieldContent
Uom SNF_FieldContent
ReleaseNr SNF_FieldContent
ReserveLineFeed SNF_FieldContent
UnitPrice SNF_FieldContent
ShipFrom SNF_FieldContent
OrderQty SNF_FieldContent
PackQty SNF_FieldContent
ReturnableContainer SNF_FieldContent
SupplierId SNF_FieldContent
VendorPartNo SNF_FieldContent
PartDescription SNF_FieldContent
}
type SNF_50Forecast struct {
RecordType SNF_FieldContent // 50
SchedStartDate SNF_FieldContent
SchedEndDate SNF_FieldContent
FcstBucketCode SNF_FieldContent
FcstSchedQualifier SNF_FieldContent
Filler2 SNF_FieldContent
SchedQty SNF_FieldContent
DatetimeQualifier SNF_FieldContent
SchedTime SNF_FieldContent
Filler4 SNF_FieldContent
ScheduleDate SNF_FieldContent
ReferenceNr SNF_FieldContent
Carrier SNF_FieldContent
TransportCode SNF_FieldContent
RouteCode SNF_FieldContent
DeliveryDate SNF_FieldContent
DeliveryTime SNF_FieldContent
TimeZone SNF_FieldContent
ShipOrderStatusCode SNF_FieldContent
}
type SNF_FieldContent struct {
Content string
StartPos int
EndPos int
Width int
}
// 将变量转换成字符返回
func (sf *SNF_FieldContent) ToString() string {
length := len(strings.TrimSpace(sf.Content))
if sf.Width >= length {
return strings.TrimSpace(sf.Content) + strings.Repeat(" ", sf.Width-length)
} else {
return sf.Content[:sf.Width]
}
}
func (ss *SNF_Separator) ToString() string {
/**fmt.Println(len(ss.RecordType.ToString()),">",ss.RecordType.ToString(),"<")
fmt.Println(len(ss.TradePartnerId.ToString()),">",ss.TradePartnerId.ToString(),"<")
fmt.Println(len(ss.DocType.ToString()),">",ss.DocType.ToString(),"<")
fmt.Println(len(ss.SenderApp.ToString()),">",ss.SenderApp.ToString(),"<")
fmt.Println(len(ss.ReceiverApp.ToString()),">",ss.ReceiverApp.ToString(),"<")
fmt.Println(len(ss.GroupSenderId.ToString()),">",ss.GroupSenderId.ToString(),"<")
fmt.Println(len(ss.GroupReceiverId.ToString()),">",ss.GroupReceiverId.ToString(),"<")
fmt.Println(len(ss.InterchangeNr.ToString()),">",ss.InterchangeNr.ToString(),"<")**/
return ss.RecordType.ToString() +
ss.TradePartnerId.ToString() +
ss.DocType.ToString() +
ss.SenderApp.ToString() +
ss.ReceiverApp.ToString() +
ss.GroupSenderId.ToString() +
ss.GroupReceiverId.ToString() +
ss.InterchangeNr.ToString() +
ss.GroupControlNr.ToString() +
ss.DocControlNr.ToString()
}
func (ss *SNF_Separator) Init() {
ss.RecordType.Content = "**"
ss.RecordType.StartPos = 1
ss.RecordType.EndPos = 2
ss.RecordType.Width = 2
ss.TradePartnerId.Content = ""
ss.TradePartnerId.StartPos = 3
ss.TradePartnerId.EndPos = 22
ss.TradePartnerId.Width = 20
ss.DocType.Content = ""
ss.DocType.StartPos = 23
ss.DocType.EndPos = 32
ss.DocType.Width = 10
ss.SenderApp.Content = ""
ss.SenderApp.StartPos = 33
ss.SenderApp.EndPos = 52
ss.SenderApp.Width = 20
ss.ReceiverApp.Content = ""
ss.ReceiverApp.StartPos = 53
ss.ReceiverApp.EndPos = 72
ss.ReceiverApp.Width = 20
ss.GroupSenderId.Content = ""
ss.GroupSenderId.StartPos = 73
ss.GroupSenderId.EndPos = 92
ss.GroupSenderId.Width = 20
ss.GroupReceiverId.Content = ""
ss.GroupReceiverId.StartPos = 93
ss.GroupReceiverId.EndPos = 112
ss.GroupReceiverId.Width = 20
ss.InterchangeNr.Content = ""
ss.InterchangeNr.StartPos = 113
ss.InterchangeNr.EndPos = 122
ss.InterchangeNr.Width = 10
ss.GroupControlNr.Content = ""
ss.GroupControlNr.StartPos = 123
ss.GroupControlNr.EndPos = 132
ss.GroupControlNr.Width = 10
ss.DocControlNr.Content = ""
ss.DocControlNr.StartPos = 133
ss.DocControlNr.EndPos = 142
ss.DocControlNr.Width = 10
}
func (ss *SNF_Separator) Print(edi_sn string) (rowdata string, err error) {
var (
stdeftab db.Stdeftab
stdeftablst []db.Stdeftab
i int
)
// 初始化
ss.Init()
stdeftab = db.Stdeftab{}
if stdeftablst, err = stdeftab.GetStandardList("SNF_SEP"); err != nil {
return
}
// 获取内置数据
for i = 0; i < len(stdeftablst); i++ {
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
switch stdeftablst[i].Statid {
case "TradePID":
ss.TradePartnerId.Content = stdeftablst[i].Bez
case "SendAppId":
ss.SenderApp.Content = stdeftablst[i].Bez
case "RecAppId":
ss.ReceiverApp.Content = stdeftablst[i].Bez
case "GrpCtrlNr":
ss.GroupControlNr.Content = stdeftablst[i].Bez
case "IntChgCtrlNr":
ss.InterchangeNr.Content = edi_sn
case "DocCtrlNr":
ss.DocControlNr.Content = stdeftablst[i].Bez
case "GrpSendId":
ss.GroupSenderId.Content = stdeftablst[i].Bez
case "GrpRecId":
ss.GroupReceiverId.Content = stdeftablst[i].Bez
case "DocType":
ss.DocType.Content = stdeftablst[i].Bez
}
}
rowdata = ss.ToString()
return
}
func (sh *SNF_01Header) ToString() string {
return sh.RecordType.ToString() +
sh.TradePartnerBillTo.ToString() +
sh.TradePartnerConsignee.ToString() +
sh.ContractNr.ToString() +
sh.TradePartnerShipTo.ToString() +
sh.SchedStartDate.ToString() +
sh.SchedEndDate.ToString() +
sh.ReleaseDate.ToString() +
sh.Issue.ToString() +
sh.SchedQty.ToString() +
sh.Filler2.ToString() +
sh.PurchaseOrderNr.ToString() +
sh.Filler3.ToString() +
sh.PurposeCode.ToString() +
sh.ReferenceNr.ToString() +
sh.ReleaseId.ToString() +
sh.SchedTypeQualifier.ToString() +
sh.TradePartnerShipFrom.ToString() +
sh.TradePartnerSupplier.ToString() +
sh.Filler4.ToString() +
sh.DocCode.ToString() +
sh.PurchaseOrderDate.ToString()
}
func (sh *SNF_01Header) Init() {
sh.RecordType.Content = "01"
sh.RecordType.StartPos = 1
sh.RecordType.EndPos = 2
sh.RecordType.Width = 2
sh.TradePartnerBillTo.Content = ""
sh.TradePartnerBillTo.StartPos = 3
sh.TradePartnerBillTo.EndPos = 22
sh.TradePartnerBillTo.Width = 20
sh.TradePartnerConsignee.Content = ""
sh.TradePartnerConsignee.StartPos = 23
sh.TradePartnerConsignee.EndPos = 42
sh.TradePartnerConsignee.Width = 20
sh.ContractNr.Content = ""
sh.ContractNr.StartPos = 43
sh.ContractNr.EndPos = 72
sh.ContractNr.Width = 30
sh.TradePartnerShipTo.Content = ""
sh.TradePartnerShipTo.StartPos = 73
sh.TradePartnerShipTo.EndPos = 92
sh.TradePartnerShipTo.Width = 20
sh.SchedStartDate.Content = ""
sh.SchedStartDate.StartPos = 93
sh.SchedStartDate.EndPos = 102
sh.SchedStartDate.Width = 10
sh.SchedEndDate.Content = ""
sh.SchedEndDate.StartPos = 103
sh.SchedEndDate.EndPos = 112
sh.SchedEndDate.Width = 10
sh.ReleaseDate.Content = ""
sh.ReleaseDate.StartPos = 113
sh.ReleaseDate.EndPos = 122
sh.ReleaseDate.Width = 10
sh.Issue.Content = ""
sh.Issue.StartPos = 123
sh.Issue.EndPos = 142
sh.Issue.Width = 20
sh.SchedQty.Content = ""
sh.SchedQty.StartPos = 143
sh.SchedQty.EndPos = 143
sh.SchedQty.Width = 1
sh.Filler2.Content = ""
sh.Filler2.StartPos = 144
sh.Filler2.EndPos = 151
sh.Filler2.Width = 8
sh.PurchaseOrderNr.Content = ""
sh.PurchaseOrderNr.StartPos = 152
sh.PurchaseOrderNr.EndPos = 173
sh.PurchaseOrderNr.Width = 22
sh.Filler3.Content = ""
sh.Filler3.StartPos = 174
sh.Filler3.EndPos = 182
sh.Filler3.Width = 9
sh.PurposeCode.Content = ""
sh.PurposeCode.StartPos = 183
sh.PurposeCode.EndPos = 192
sh.PurposeCode.Width = 10
sh.ReferenceNr.Content = ""
sh.ReferenceNr.StartPos = 193
sh.ReferenceNr.EndPos = 222
sh.ReferenceNr.Width = 30
sh.ReleaseId.Content = ""
sh.ReleaseId.StartPos = 223
sh.ReleaseId.EndPos = 252
sh.ReleaseId.Width = 30
sh.SchedTypeQualifier.Content = ""
sh.SchedTypeQualifier.StartPos = 253
sh.SchedTypeQualifier.EndPos = 262
sh.SchedTypeQualifier.Width = 10
sh.TradePartnerShipFrom.Content = ""
sh.TradePartnerShipFrom.StartPos = 263
sh.TradePartnerShipFrom.EndPos = 282
sh.TradePartnerShipFrom.Width = 20
sh.TradePartnerSupplier.Content = ""
sh.TradePartnerSupplier.StartPos = 283
sh.TradePartnerSupplier.EndPos = 302
sh.TradePartnerSupplier.Width = 20
sh.Filler4.Content = ""
sh.Filler4.StartPos = 303
sh.Filler4.EndPos = 312
sh.Filler4.Width = 10
sh.DocCode.Content = ""
sh.DocCode.StartPos = 313
sh.DocCode.EndPos = 342
sh.DocCode.Width = 30
sh.PurchaseOrderDate.Content = ""
sh.PurchaseOrderDate.StartPos = 343
sh.PurchaseOrderDate.EndPos = 352
sh.PurchaseOrderDate.Width = 10
}
func (sh *SNF_01Header) Print(edi_sn string) (rowdata string, err error) {
var (
stdeftab db.Stdeftab
stdeftablst []db.Stdeftab
i int
)
// 初始化
sh.Init()
stdeftab = db.Stdeftab{}
if stdeftablst, err = stdeftab.GetStandardList("SNF_HEAD"); err != nil {
return
}
// 获取内置数据
for i = 0; i < len(stdeftablst); i++ {
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
switch stdeftablst[i].Statid {
case "DockCode":
sh.DocCode.Content = stdeftablst[i].Bez
case "Filler2":
sh.Filler2.Content = stdeftablst[i].Bez
case "Filler3":
sh.Filler3.Content = stdeftablst[i].Bez
case "PurposeCode":
sh.PurposeCode.Content = stdeftablst[i].Bez
case "SchedTypeQualifier":
sh.SchedTypeQualifier.Content = stdeftablst[i].Bez
case "RefNr":
if stdeftablst[i].Bez == "EDI_SN" {
sh.ReferenceNr.Content = edi_sn
}
case "ReleaseDate":
if stdeftablst[i].Bez == "DATE()" {
sh.ReleaseDate.Content = common.Date(time.Now().Unix(), "YYYYMMDD")
} else {
sh.ReleaseDate.Content = stdeftablst[i].Bez
}
case "ReleaseId":
if stdeftablst[i].Bez == "EDI_SN" {
sh.ReleaseId.Content = edi_sn
}
case "SchedEndDate":
if stdeftablst[i].Bez == "DATE()" {
sh.SchedEndDate.Content = common.Date(time.Now().Unix(), "YYYYMMDD")
} else {
sh.SchedEndDate.Content = stdeftablst[i].Bez
}
case "SchedStartDate":
if stdeftablst[i].Bez == "DATE()" {
sh.SchedStartDate.Content = common.Date(time.Now().Unix(), "YYYYMMDD")
} else {
sh.SchedStartDate.Content = stdeftablst[i].Bez
}
case "TPMaterial":
sh.Issue.Content = stdeftablst[i].Bez
case "TPShipFrom":
sh.TradePartnerShipFrom.Content = stdeftablst[i].Bez
case "TPSupplier":
sh.TradePartnerSupplier.Content = stdeftablst[i].Bez
case "TradShipTo":
sh.TradePartnerShipTo.Content = stdeftablst[i].Bez
}
}
rowdata = sh.ToString()
return
}
func (sh *SNF_11HeaderComment) ToString() string {
return sh.RecordType.ToString() +
sh.CommentType.ToString() +
sh.Comment.ToString()
}
func (sh *SNF_11HeaderComment) Init() {
sh.RecordType.Content = "11"
sh.RecordType.StartPos = 1
sh.RecordType.EndPos = 2
sh.RecordType.Width = 2
sh.CommentType.Content = ""
sh.CommentType.StartPos = 3
sh.CommentType.EndPos = 5
sh.CommentType.Width = 3
sh.Comment.Content = ""
sh.Comment.StartPos = 6
sh.Comment.EndPos = 85
sh.Comment.Width = 80
}
func (sh *SNF_11HeaderComment) Print() (rowdata string, err error) {
var (
stdeftab db.Stdeftab
stdeftablst []db.Stdeftab
i int
)
// 初始化
sh.Init()
// 获取内置数据
stdeftab = db.Stdeftab{}
if stdeftablst, err = stdeftab.GetStandardList("SNF_HEAD"); err != nil {
return
}
// 获取内置数据
for i = 0; i < len(stdeftablst); i++ {
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
switch stdeftablst[i].Statid {
case "CommentType":
sh.CommentType.Content = stdeftablst[i].Bez
case "Comment":
sh.Comment.Content = stdeftablst[i].Bez
}
}
rowdata = sh.ToString()
return
}
func (ss *SNF_13Seq) ToString() string {
return ss.RecordType.ToString() +
ss.TypeCode.ToString() +
ss.ActionRequest.ToString() +
ss.VehicleIdNr.ToString() +
ss.CustomerSeqNo.ToString() +
ss.DockCode.ToString() +
ss.Filler0.ToString() +
ss.SjjDeliveryTime.ToString() +
ss.Filler1.ToString() +
ss.Filler2.ToString() +
ss.Filler3.ToString() +
ss.BbaOrderNr.ToString() +
ss.BbaPartFamily.ToString() +
ss.BbaSupplyGroup.ToString() +
ss.Filler4.ToString() +
ss.BbaSwetTime.ToString()
}
func (ss *SNF_13Seq) Init() {
ss.RecordType.Content = "13"
ss.RecordType.StartPos = 1
ss.RecordType.EndPos = 2
ss.RecordType.Width = 2
ss.TypeCode.Content = ""
ss.TypeCode.StartPos = 3
ss.TypeCode.EndPos = 4
ss.TypeCode.Width = 2
ss.ActionRequest.Content = ""
ss.ActionRequest.StartPos = 5
ss.ActionRequest.EndPos = 21
ss.ActionRequest.Width = 17
ss.VehicleIdNr.Content = ""
ss.VehicleIdNr.StartPos = 22
ss.VehicleIdNr.EndPos = 56
ss.VehicleIdNr.Width = 35
ss.CustomerSeqNo.Content = ""
ss.CustomerSeqNo.StartPos = 57
ss.CustomerSeqNo.EndPos = 91
ss.CustomerSeqNo.Width = 35
ss.DockCode.Content = ""
ss.DockCode.StartPos = 92
ss.DockCode.EndPos = 126
ss.DockCode.Width = 35
ss.Filler0.Content = ""
ss.Filler0.StartPos = 127
ss.Filler0.EndPos = 161
ss.Filler0.Width = 35
ss.SjjDeliveryTime.Content = ""
ss.SjjDeliveryTime.StartPos = 162
ss.SjjDeliveryTime.EndPos = 180
ss.SjjDeliveryTime.Width = 19
ss.Filler1.Content = ""
ss.Filler1.StartPos = 181
ss.Filler1.EndPos = 182
ss.Filler1.Width = 2
ss.Filler2.Content = ""
ss.Filler2.StartPos = 183
ss.Filler2.EndPos = 191
ss.Filler2.Width = 9
ss.Filler3.Content = ""
ss.Filler3.StartPos = 192
ss.Filler3.EndPos = 193
ss.Filler3.Width = 2
ss.BbaOrderNr.Content = ""
ss.BbaOrderNr.StartPos = 194
ss.BbaOrderNr.EndPos = 218
ss.BbaOrderNr.Width = 25
ss.BbaPartFamily.Content = ""
ss.BbaPartFamily.StartPos = 219
ss.BbaPartFamily.EndPos = 253
ss.BbaPartFamily.Width = 35
ss.BbaSupplyGroup.Content = ""
ss.BbaSupplyGroup.StartPos = 254
ss.BbaSupplyGroup.EndPos = 274
ss.BbaSupplyGroup.Width = 21
ss.Filler4.Content = ""
ss.Filler4.StartPos = 275
ss.Filler4.EndPos = 295
ss.Filler4.Width = 21
ss.BbaSwetTime.Content = ""
ss.BbaSwetTime.StartPos = 296
ss.BbaSwetTime.EndPos = 316
ss.BbaSwetTime.Width = 21
}
func (si *SNF_30Item) ToString() string {
return si.RecordType.ToString() +
si.TpDestination.ToString() +
si.CustReferenceNr.ToString() +
si.TpShipTo.ToString() +
si.DockNr.ToString() +
si.InternalContract.ToString() +
si.EngChangeLevel.ToString() +
si.LineFeed.ToString() +
si.ModelYear.ToString() +
si.Filler2.ToString() +
si.ContractNr.ToString() +
si.Position.ToString() +
si.ZZ.ToString() +
si.LinePR.ToString() +
si.CustPartNr.ToString() +
si.PurchaseOrderNr.ToString() +
si.Filler3.ToString() +
si.Filler4.ToString() +
si.PartReleaseStatus.ToString() +
si.Uom.ToString() +
si.ReleaseNr.ToString() +
si.ReserveLineFeed.ToString() +
si.UnitPrice.ToString() +
si.ShipFrom.ToString() +
si.OrderQty.ToString() +
si.PackQty.ToString() +
si.ReturnableContainer.ToString() +
si.SupplierId.ToString() +
si.VendorPartNo.ToString() +
si.PartDescription.ToString()
}
func (si *SNF_30Item) Init() {
si.RecordType.Content = "30"
si.RecordType.StartPos = 1
si.RecordType.EndPos = 2
si.RecordType.Width = 2
si.TpDestination.Content = ""
si.TpDestination.StartPos = 3
si.TpDestination.EndPos = 22
si.TpDestination.Width = 20
si.CustReferenceNr.Content = ""
si.CustReferenceNr.StartPos = 23
si.CustReferenceNr.EndPos = 42
si.CustReferenceNr.Width = 20
si.TpShipTo.Content = ""
si.TpShipTo.StartPos = 43
si.TpShipTo.EndPos = 62
si.TpShipTo.Width = 20
si.DockNr.Content = ""
si.DockNr.StartPos = 63
si.DockNr.EndPos = 92
si.DockNr.Width = 30
si.InternalContract.Content = ""
si.InternalContract.StartPos = 93
si.InternalContract.EndPos = 122
si.InternalContract.Width = 30
si.EngChangeLevel.Content = ""
si.EngChangeLevel.StartPos = 123
si.EngChangeLevel.EndPos = 152
si.EngChangeLevel.Width = 30
si.LineFeed.Content = ""
si.LineFeed.StartPos = 153
si.LineFeed.EndPos = 182
si.LineFeed.Width = 30
si.ModelYear.Content = ""
si.ModelYear.StartPos = 183
si.ModelYear.EndPos = 186
si.ModelYear.Width = 4
si.Filler2.Content = ""
si.Filler2.StartPos = 187
si.Filler2.EndPos = 192
si.Filler2.Width = 6
si.ContractNr.Content = ""
si.ContractNr.StartPos = 193
si.ContractNr.EndPos = 202
si.ContractNr.Width = 10
si.Position.Content = ""
si.Position.StartPos = 203
si.Position.EndPos = 212
si.Position.Width = 10
si.ZZ.Content = ""
si.ZZ.StartPos = 213
si.ZZ.EndPos = 222
si.ZZ.Width = 10
si.LinePR.Content = ""
si.LinePR.StartPos = 223
si.LinePR.EndPos = 252
si.LinePR.Width = 30
si.CustPartNr.Content = ""
si.CustPartNr.StartPos = 253
si.CustPartNr.EndPos = 282
si.CustPartNr.Width = 30
si.PurchaseOrderNr.Content = ""
si.PurchaseOrderNr.StartPos = 283
si.PurchaseOrderNr.EndPos = 304
si.PurchaseOrderNr.Width = 22
si.Filler3.Content = ""
si.Filler3.StartPos = 305
si.Filler3.EndPos = 312
si.Filler3.Width = 8
si.Filler4.Content = ""
si.Filler4.StartPos = 313
si.Filler4.EndPos = 332
si.Filler4.Width = 20
si.PartReleaseStatus.Content = ""
si.PartReleaseStatus.StartPos = 333
si.PartReleaseStatus.EndPos = 342
si.PartReleaseStatus.Width = 10
si.Uom.Content = ""
si.Uom.StartPos = 343
si.Uom.EndPos = 352
si.Uom.Width = 10
si.ReleaseNr.Content = ""
si.ReleaseNr.StartPos = 353
si.ReleaseNr.EndPos = 382
si.ReleaseNr.Width = 30
si.ReserveLineFeed.Content = ""
si.ReserveLineFeed.StartPos = 383
si.ReserveLineFeed.EndPos = 412
si.ReserveLineFeed.Width = 30
si.UnitPrice.Content = ""
si.UnitPrice.StartPos = 413
si.UnitPrice.EndPos = 422
si.UnitPrice.Width = 10
si.ShipFrom.Content = ""
si.ShipFrom.StartPos = 423
si.ShipFrom.EndPos = 442
si.ShipFrom.Width = 20
si.OrderQty.Content = ""
si.OrderQty.StartPos = 443
si.OrderQty.EndPos = 452
si.OrderQty.Width = 10
si.PackQty.Content = ""
si.PackQty.StartPos = 453
si.PackQty.EndPos = 462
si.PackQty.Width = 10
si.ReturnableContainer.Content = ""
si.ReturnableContainer.StartPos = 463
si.ReturnableContainer.EndPos = 482
si.ReturnableContainer.Width = 20
si.SupplierId.Content = ""
si.SupplierId.StartPos = 483
si.SupplierId.EndPos = 502
si.SupplierId.Width = 20
si.VendorPartNo.Content = ""
si.VendorPartNo.StartPos = 503
si.VendorPartNo.EndPos = 532
si.VendorPartNo.Width = 30
si.PartDescription.Content = ""
si.PartDescription.StartPos = 533
si.PartDescription.EndPos = 562
si.PartDescription.Width = 30
}
func (sf *SNF_50Forecast) ToString() string {
return sf.RecordType.ToString() +
sf.SchedStartDate.ToString() +
sf.SchedEndDate.ToString() +
sf.FcstBucketCode.ToString() +
sf.FcstSchedQualifier.ToString() +
sf.Filler2.ToString() +
sf.SchedQty.ToString() +
sf.DatetimeQualifier.ToString() +
sf.SchedTime.ToString() +
sf.Filler4.ToString() +
sf.ScheduleDate.ToString() +
sf.ReferenceNr.ToString() +
sf.Carrier.ToString() +
sf.TransportCode.ToString() +
sf.RouteCode.ToString() +
sf.DeliveryDate.ToString() +
sf.DeliveryTime.ToString() +
sf.TimeZone.ToString() +
sf.ShipOrderStatusCode.ToString()
}
func (sf *SNF_50Forecast) Init() {
sf.RecordType.Content = "50"
sf.RecordType.StartPos = 1
sf.RecordType.EndPos = 2
sf.RecordType.Width = 2
sf.SchedStartDate.Content = ""
sf.SchedStartDate.StartPos = 3
sf.SchedStartDate.EndPos = 12
sf.SchedStartDate.Width = 10
sf.SchedEndDate.Content = ""
sf.SchedEndDate.StartPos = 13
sf.SchedEndDate.EndPos = 22
sf.SchedEndDate.Width = 10
sf.FcstBucketCode.Content = ""
sf.FcstBucketCode.StartPos = 23
sf.FcstBucketCode.EndPos = 32
sf.FcstBucketCode.Width = 10
sf.FcstSchedQualifier.Content = ""
sf.FcstSchedQualifier.StartPos = 33
sf.FcstSchedQualifier.EndPos = 36
sf.FcstSchedQualifier.Width = 4
sf.Filler2.Content = ""
sf.Filler2.StartPos = 37
sf.Filler2.EndPos = 42
sf.Filler2.Width = 6
sf.SchedQty.Content = ""
sf.SchedQty.StartPos = 43
sf.SchedQty.EndPos = 52
sf.SchedQty.Width = 10
sf.DatetimeQualifier.Content = ""
sf.DatetimeQualifier.StartPos = 53
sf.DatetimeQualifier.EndPos = 52
sf.DatetimeQualifier.Width = 10
sf.SchedTime.Content = ""
sf.SchedTime.StartPos = 63
sf.SchedTime.EndPos = 66
sf.SchedTime.Width = 4
sf.Filler4.Content = ""
sf.Filler4.StartPos = 67
sf.Filler4.EndPos = 72
sf.Filler4.Width = 6
sf.ScheduleDate.Content = ""
sf.ScheduleDate.StartPos = 73
sf.ScheduleDate.EndPos = 82
sf.ScheduleDate.Width = 10
sf.ReferenceNr.Content = ""
sf.ReferenceNr.StartPos = 83
sf.ReferenceNr.EndPos = 112
sf.ReferenceNr.Width = 30
sf.Carrier.Content = ""
sf.Carrier.StartPos = 113
sf.Carrier.EndPos = 122
sf.Carrier.Width = 10
sf.TransportCode.Content = ""
sf.TransportCode.StartPos = 123
sf.TransportCode.EndPos = 132
sf.TransportCode.Width = 10
sf.RouteCode.Content = ""
sf.RouteCode.StartPos = 133
sf.RouteCode.EndPos = 152
sf.RouteCode.Width = 20
sf.DeliveryDate.Content = ""
sf.DeliveryDate.StartPos = 153
sf.DeliveryDate.EndPos = 162
sf.DeliveryDate.Width = 10
sf.DeliveryTime.Content = ""
sf.DeliveryTime.StartPos = 163
sf.DeliveryTime.EndPos = 168
sf.DeliveryTime.Width = 6
sf.TimeZone.Content = ""
sf.TimeZone.StartPos = 169
sf.TimeZone.EndPos = 172
sf.TimeZone.Width = 4
sf.ShipOrderStatusCode.Content = ""
sf.ShipOrderStatusCode.StartPos = 173
sf.ShipOrderStatusCode.EndPos = 174
sf.ShipOrderStatusCode.Width = 2
}
func Grammer_GetEDIFileName() (filename string, edisn string, err error) {
var (
stdeftab db.Stdeftab
stdeftablst []db.Stdeftab
data string
i int
)
stdeftab = db.Stdeftab{}
if stdeftablst, err = stdeftab.GetStandardList("SNF_FILENAME"); err != nil {
return
}
// 获取内置数据
filename = ""
for i = 0; i < len(stdeftablst); i++ {
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
switch stdeftablst[i].Bez {
case "TIME()":
data = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
case "EDI_SN":
if edisn, err = service.SN_GetNextSnr(stdeftablst[i].Bez); err != nil {
return
}
data = edisn
default:
data = stdeftablst[i].Bez
}
if i == 0 {
filename = data
} else {
filename = filename + "." + data
}
}
filename = filename + ".edi"
return
}
// 生成Grammer 排序订单的EDI文件
func Grammer_GenerateSEQOrderEDIFile(filefolder string) (err error) {
var (
filename string
edisn string
rowdata string
ss SNF_Separator
sh SNF_01Header
shc SNF_11HeaderComment
sseq SNF_13Seq
sitem SNF_30Item
sqty SNF_50Forecast
cotab db.Pln_custorder
wotab db.Pln_workorder
wotablst []db.Pln_workorder
parttab db.Me_part
stdeftab db.Stdeftab
stdeftablst []db.Stdeftab
i, j, pos int
po string
iatcod int
)
// 查询获取所有Grammar的未完成的生产订单数据
wotab = db.Pln_workorder{}
if wotablst, err = wotab.GetExternalTier2SEQOrders(); err != nil {
return
}
if filename, edisn, err = Grammer_GetEDIFileName(); err != nil {
return
} else {
fmt.Println(filename)
}
filename = filefolder + filename
f, err := os.Create(filename)
defer f.Close()
if err != nil {
return
} else {
// 头部数据
ss = SNF_Separator{}
if rowdata, err = ss.Print(edisn); err != nil {
return
}
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
// Header信息
sh = SNF_01Header{}
if rowdata, err = sh.Print(edisn); err != nil {
return
}
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
// Comment信息
shc = SNF_11HeaderComment{}
if rowdata, err = shc.Print(); err != nil {
return
}
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
// 获取30和50的常量信息
stdeftab = db.Stdeftab{}
if stdeftablst, err = stdeftab.GetStandardList("SNF_ITEM"); err != nil {
return
}
for i = 0; i < len(stdeftablst); i++ {
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
switch stdeftablst[i].Statid {
case "PurchaseOrderNr":
po = stdeftablst[i].Bez
case "MFSBASAtcode":
iatcod, _ = strconv.Atoi(stdeftablst[i].Bez)
}
}
// 遍历生产订单写入文件
for i = 0; i < len(wotablst); i++ {
// 获取客户订单信息
cotab = db.Pln_custorder{Finr: db.G_FINR, Custordernr: wotablst[i].Custordernr}
if cotab, err = cotab.SelectOne(); err != nil {
return
}
// 创建13行
sseq = SNF_13Seq{}
sseq.Init()
if wotablst[i].Status < common.WO_STATUS_CLOSED {
sseq.ActionRequest.Content = "30"
if len(wotablst[i].Swet) >= 12 {
sseq.SjjDeliveryTime.Content = wotablst[i].Swet[:12]
sseq.BbaSwetTime.Content = wotablst[i].Swet
} else {
sseq.SjjDeliveryTime.Content = cotab.Swet[:12]
sseq.BbaSwetTime.Content = cotab.Swet
}
} else {
// 订单取消
if wotablst[i].Status == common.WO_STATUS_CANCELED {
sseq.ActionRequest.Content = "20"
sseq.SjjDeliveryTime.Content = "999901010000"
sseq.BbaSwetTime.Content = "99990101000000"
}
}
sseq.VehicleIdNr.Content = cotab.Vin
sseq.CustomerSeqNo.Content = strconv.Itoa(common.ValueToInt(wotablst[i].Oemseq,0))
sseq.BbaOrderNr.Content = strings.TrimSpace(cotab.Oemordernr) + "-" + wotablst[i].Partfamilyid + "-" + cotab.Swet[:4]
sseq.BbaPartFamily.Content = wotablst[i].Partfamilyid
sseq.BbaSupplyGroup.Content = wotablst[i].Supplygroupid
rowdata = sseq.ToString()
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
for j = 0; j < len(wotablst[i].Partlst); j++ {
// 获取零件主数据
parttab = db.Me_part{Finr: db.G_FINR, Partid: wotablst[i].Partlst[j].Partid, Projnr: wotablst[i].Projnr}
if parttab, err = parttab.SelectOne(); err != nil {
return
}
// 创建30行和50行
sitem = SNF_30Item{}
sitem.Init()
pos = strings.Index(wotablst[i].Partlst[j].Partid, "-")
if pos >= 0 {
sitem.EngChangeLevel.Content = wotablst[i].Partlst[j].Partid[pos+1:]
}
sitem.DockNr.Content = wotablst[i].GetAttributeValue(iatcod)
sitem.CustPartNr.Content = "S" + wotablst[i].Partlst[j].Partid
sitem.PurchaseOrderNr.Content = po
sitem.PartDescription.Content = parttab.Descr1
rowdata = sitem.ToString()
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
sqty = SNF_50Forecast{}
sqty.Init()
sqty.SchedQty.Content = strconv.Itoa(wotablst[i].Partlst[j].Partqty)
rowdata = sqty.ToString()
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
}
}
}
return
}
// 生成Grammer 排序订单的EDI文件
func Grammer_GenerateNOSEQOrderEDIFile(filefolder string) (err error) {
var (
filename string
edisn string
rowdata string
ss SNF_Separator
sh SNF_01Header
shc SNF_11HeaderComment
sseq SNF_13Seq
sitem SNF_30Item
sqty SNF_50Forecast
cotab db.Pln_custorder
wotab db.Pln_workorder
wotablst []db.Pln_workorder
parttab db.Me_part
stdeftab db.Stdeftab
stdeftablst []db.Stdeftab
i, j, pos int
po string
iatcod int
)
// 查询获取所有Grammar的未完成的生产订单数据
wotab = db.Pln_workorder{}
if wotablst, err = wotab.GetExternalTier2NOSEQOrders(); err != nil {
return
}
if len(wotablst) <= 0 {
return
}
if filename, edisn, err = Grammer_GetEDIFileName(); err != nil {
return
} else {
fmt.Println(filename)
}
filename = filefolder + filename
f, err := os.Create(filename)
defer f.Close()
if err != nil {
return
} else {
// 头部数据
ss = SNF_Separator{}
if rowdata, err = ss.Print(edisn); err != nil {
return
}
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
// Header信息
sh = SNF_01Header{}
if rowdata, err = sh.Print(edisn); err != nil {
return
}
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
// Comment信息
shc = SNF_11HeaderComment{}
if rowdata, err = shc.Print(); err != nil {
return
}
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
// 获取30和50的常量信息
stdeftab = db.Stdeftab{}
if stdeftablst, err = stdeftab.GetStandardList("SNF_ITEM"); err != nil {
return
}
for i = 0; i < len(stdeftablst); i++ {
//fmt.Println(i, ">",stdeftablst[i].Statid,"<", stdeftablst[i].Bez)
switch stdeftablst[i].Statid {
case "PurchaseOrderNr":
po = stdeftablst[i].Bez
case "MFSBASAtcode":
iatcod, _ = strconv.Atoi(stdeftablst[i].Bez)
}
}
// 遍历生产订单写入文件
for i = 0; i < len(wotablst); i++ {
// 获取客户订单信息
cotab = db.Pln_custorder{Finr: db.G_FINR, Custordernr: wotablst[i].Custordernr}
if cotab, err = cotab.SelectOne(); err != nil {
return
}
// 创建13行
sseq = SNF_13Seq{}
sseq.Init()
switch wotablst[i].Ordertype {
case common.WO_TYPE_REORDER:
sseq.ActionRequest.Content = "90"
sseq.BbaOrderNr.Content = strings.TrimSpace(cotab.Oemordernr) + "-" + wotablst[i].Partfamilyid + "-" + cotab.Swet[:4] + "-RO"
case common.WO_TYPE_INTERNAL:
sseq.ActionRequest.Content = "80"
sseq.BbaOrderNr.Content = wotablst[i].Workordernr
}
sseq.VehicleIdNr.Content = cotab.Vin
sseq.CustomerSeqNo.Content = strconv.Itoa(common.ValueToInt(wotablst[i].Oemseq,0))
sseq.SjjDeliveryTime.Content = wotablst[i].Swet[:12]
sseq.BbaPartFamily.Content = wotablst[i].Partfamilyid
sseq.BbaSupplyGroup.Content = wotablst[i].Supplygroupid
sseq.BbaSwetTime.Content = wotablst[i].Swet
rowdata = sseq.ToString()
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
for j = 0; j < len(wotablst[i].Partlst); j++ {
// 获取零件主数据
parttab = db.Me_part{Finr: db.G_FINR, Partid: wotablst[i].Partlst[j].Partid, Projnr: wotablst[i].Projnr}
if parttab, err = parttab.SelectOne(); err != nil {
return
}
// 创建30行和50行
sitem = SNF_30Item{}
sitem.Init()
pos = strings.Index(wotablst[i].Partlst[j].Partid, "-")
if pos >= 0 {
sitem.EngChangeLevel.Content = wotablst[i].Partlst[j].Partid[pos+1:]
}
sitem.DockNr.Content = wotablst[i].GetAttributeValue(iatcod)
sitem.CustPartNr.Content = "S" + wotablst[i].Partlst[j].Partid
sitem.PurchaseOrderNr.Content = po
sitem.PartDescription.Content = parttab.Descr1
rowdata = sitem.ToString()
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
sqty = SNF_50Forecast{}
sqty.Init()
sqty.SchedQty.Content = strconv.Itoa(wotablst[i].Partlst[j].Partqty)
rowdata = sqty.ToString()
if _, err = f.WriteString(rowdata + "\n"); err != nil {
return
}
}
}
}
return
}