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 }