From 5b3ca39434ed28c5d12e797cd28de6a9ef0b3b8c Mon Sep 17 00:00:00 2001 From: "DESKTOP-4672LME\\Xu Tengfei" Date: Thu, 2 Sep 2021 14:59:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?APS=E5=90=91WMS=E4=BC=A0=E9=80=92=E5=8F=91?= =?UTF-8?q?=E8=BF=90=E5=8C=85=E8=A3=85=E4=BF=A1=E6=81=AF=20=E7=94=9F?= =?UTF-8?q?=E6=88=90xml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- calloff/Callofftask.go | 82 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/calloff/Callofftask.go b/calloff/Callofftask.go index b7404b8..b4cafe1 100644 --- a/calloff/Callofftask.go +++ b/calloff/Callofftask.go @@ -1,8 +1,10 @@ package calloff import ( + "encoding/xml" "fmt" "github.com/go-xorm/xorm" + "io" "io/ioutil" "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/db" @@ -11,6 +13,8 @@ import ( "leit.com/leit_seat_aps/service" "os" "regexp" + "strconv" + "strings" "time" ) @@ -554,6 +558,7 @@ func ParseCalloffOrder() { session.Close() etcd.G_jobLock.UnLock() time.Sleep(10 * time.Millisecond) + } } @@ -703,8 +708,85 @@ func GenerateDeliveryCar() { if err != nil { return } + + //APS向WMS传递发运包装信息 + var o = PlnCalloffdataLandingXml{} + o.Packorderid = pkotablst[j].Packorderid + o.Packtemplateid = pkotablst[j].Packtemplateid + o.Projnr = pkotablst[j].Projnr + o.Status = strconv.Itoa(pkotablst[j].Status) + o.Shortpack = strconv.Itoa(pkotablst[j].Shortpack) + o.Orderinfo = pkotablst[j].Orderinfo + o.Boxsn = pkotablst[j].Boxsn + o.Packtypeid = pkotablst[j].Packtypeid + o.Printerid = pkotablst[j].Printerid + o.Templatefile = pkotablst[j].Templatefile + o.Planqty = strconv.Itoa(pkotablst[j].Planqty) + o.Actqty = strconv.Itoa(pkotablst[j].Actqty) + for _, info := range pkotablst[j].Itemlst{ + o.Details = append(o.Details, Pln_calloffdata_landing_Xml{ + Packorderid :info.Packorderid, + Pos :common.ValueToString(info.Pos,""), + Poscode :info.Poscode, + Oemseq : common.ValueToString(info.Oemseq, ""), + Checkseq :common.ValueToString(info.Seq,""), + Supplygroupid : info.Supplygroupid, + Workordernr : info.Workordernr, + Status : common.ValueToString(info.Status,""), + Planqty :common.ValueToString(info.Planqty,""), + Actqty :common.ValueToString(info.Actqty,""), + }) + } + + resXML, err := xml.MarshalIndent(o, " ", " ") + if err != nil { + glog.InfoExtln("Calloff包装单", "Failed to create xml due to :",err) + } + timeS := time.Now().Format("20060102150405.999") + fileName := strings.Trim(timeS,".") + f, err := os.Create("./OutData/"+fileName +".xml") + if err != nil { + glog.InfoExtln("Calloff包装单", "Failed to create xml due to :",err) + } + io.WriteString(f, xml.Header) + io.WriteString(f, string(resXML)) } } + + time.Sleep(10 * time.Second) } } + +type PlnCalloffdataLandingXml struct { + XMLName xml.Name `xml:"Content"` + Packorderid string `xml:"packorderid,attr"` + Packtemplateid string `xml:"packtemplateid,attr"` + Projnr string `xml:"projnr,attr"` + Status string `xml:"status,attr"` + Shortpack string `xml:"shortpack,attr"` + Orderinfo string `xml:"orderinfo,attr"` + Boxsn string `xml:"boxsn,attr"` + Packtypeid string `xml:"packtypeid,attr"` + Printerid string `xml:"printerid,attr"` + Templatefile string `xml:"templatefile,attr"` + Planqty string `xml:"planqty,attr"` + Actqty string `xml:"actqty,attr"` + + Details []Pln_calloffdata_landing_Xml `xml:"Details"` + Description string `xml:",innerxml"` +} + +type Pln_calloffdata_landing_Xml struct { + XMLName xml.Name `xml:"Details"` + Packorderid string `xml:"packorderid,attr"` + Pos string `xml:"pos,attr"` + Poscode string `xml:"poscode,attr"` + Oemseq string `xml:"oemseq,attr"` + Checkseq string `xml:"checkseq,attr"` + Supplygroupid string `xml:"supplygroupid,attr"` + Workordernr string `xml:"workordernr,attr"` + Status string `xml:"status,attr"` + Planqty string `xml:"planqty,attr"` + Actqty string `xml:"actqty,attr"` +} -- 2.30.1.windows.1 From 459f4a075ad413d7bcd75f3c5949f967edaaa9e3 Mon Sep 17 00:00:00 2001 From: "DESKTOP-4672LME\\Xu Tengfei" Date: Fri, 10 Sep 2021 14:50:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BC=82=E6=AD=A5=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E5=8C=85=E8=A3=85=E5=8D=95xml=5Fmsg,=E7=94=9F=E6=88=90xml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- calloff/Callofftask.go | 67 +++++++++++++++++----- cmd/calloff/main.go | 3 + db/Xml_msg.go | 125 +++++++++++++++++++++++++++++++++++++++++ service/Xmlmsg.go | 61 ++++++++++++++++++++ 4 files changed, 242 insertions(+), 14 deletions(-) create mode 100644 db/Xml_msg.go create mode 100644 service/Xmlmsg.go diff --git a/calloff/Callofftask.go b/calloff/Callofftask.go index b4cafe1..bf25a54 100644 --- a/calloff/Callofftask.go +++ b/calloff/Callofftask.go @@ -1,6 +1,7 @@ package calloff import ( + "encoding/json" "encoding/xml" "fmt" "github.com/go-xorm/xorm" @@ -704,11 +705,7 @@ func GenerateDeliveryCar() { } } - err = session.Commit() - if err != nil { - return - } - + fmt.Println("---------------------生成xmL_msg1") //APS向WMS传递发运包装信息 var o = PlnCalloffdataLandingXml{} o.Packorderid = pkotablst[j].Packorderid @@ -738,26 +735,68 @@ func GenerateDeliveryCar() { }) } - resXML, err := xml.MarshalIndent(o, " ", " ") + jsonBytes, err := json.Marshal(o) if err != nil { - glog.InfoExtln("Calloff包装单", "Failed to create xml due to :",err) + fmt.Println(err) + } + bl_xmlmsg := service.BL_Xmlmsg{MsgType: common.MSG_TYPE_SHIP, Msg: string(jsonBytes)} + fmt.Println("---------------------生成xmL_msg2") + if err = bl_xmlmsg.Create(session); err != nil { + fmt.Println(err) } - timeS := time.Now().Format("20060102150405.999") - fileName := strings.Trim(timeS,".") - f, err := os.Create("./OutData/"+fileName +".xml") + + err = session.Commit() if err != nil { - glog.InfoExtln("Calloff包装单", "Failed to create xml due to :",err) + fmt.Println(err) + return } - io.WriteString(f, xml.Header) - io.WriteString(f, string(resXML)) } } - time.Sleep(10 * time.Second) } } +func CallOffXmlTick(){ + timer := time.NewTicker(60 * time.Second) + for { + select { + case <-timer.C: + Xml_msg := db.Xml_msg{} + if xmllst, err := Xml_msg.GetUnXmlMessages(); err != nil { + glog.InfoExtln("Calloff包装单", "解析发运单消息失败: ", err) + }else{ + for _, xmlInfo := range xmllst{ + var xmlStruct PlnCalloffdataLandingXml + json.Unmarshal([]byte(xmlInfo.Msg), &xmlStruct) + + resXML, err := xml.MarshalIndent(xmlStruct, " ", " ") + if err != nil { + glog.InfoExtln("Calloff包装单", "Failed to create xml due to :",err) + } + timeS := time.Now().Format("20060102150405.999") + fileName := strings.Trim(timeS,".") + f, err := os.Create("./OutData/"+fileName +".xml") + if err != nil { + glog.InfoExtln("Calloff包装单", "Failed to create xml due to :",err) + } + io.WriteString(f, xml.Header) + io.WriteString(f, string(resXML)) + + Xml_msg.Msgid = xmlInfo.Msgid + Xml_msg.Status = common.MSG_STATUS_FINISHED + Xml_msg.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") + Xml_msg.Lastuser = "service" + if err = Xml_msg.UpdateFieldsWithoutSession("status,lastmodif,lastuser"); err != nil { + glog.InfoExtln("Calloff包装单", "Failed to create xml due to :",err) + } + } + } + } + } +} + + type PlnCalloffdataLandingXml struct { XMLName xml.Name `xml:"Content"` Packorderid string `xml:"packorderid,attr"` diff --git a/cmd/calloff/main.go b/cmd/calloff/main.go index 94643d6..029b112 100644 --- a/cmd/calloff/main.go +++ b/cmd/calloff/main.go @@ -145,4 +145,7 @@ func imain() { // 将26下达的包装单加载到发运车中,系统根据实际加载情况 calloff.GenerateDeliveryCar() + + // 异步监听包装单xml_msg,生成xml + go calloff.CallOffXmlTick() } diff --git a/db/Xml_msg.go b/db/Xml_msg.go new file mode 100644 index 0000000..6bf1723 --- /dev/null +++ b/db/Xml_msg.go @@ -0,0 +1,125 @@ +package db + +import ( + "errors" + "github.com/go-xorm/xorm" + "leit.com/leit_seat_aps/common" + "xorm.io/core" +) + +//订单消息表 +type Xml_msg struct { + Finr int `xorm:"pk"` + Msgid string `xorm:"pk"` + Msgtype string + Status int + Msg string + Lastmodif string + Lastuser string + Credatuz string +} + +func (t *Xml_msg) Clipped() { + common.TrimStruct(t, *t) +} +func (t *Xml_msg) TableName() string { + return "xml_msg" +} + +//增 +func (t *Xml_msg) Add() error { + e := G_DbEngine + xmlmsgtab := new(Xml_msg) + affw, err := e.Table("xml_msg").ID(core.PK{G_FINR, t.Msgid}).Count(xmlmsgtab) + if err != nil { + return err + } + if affw > 0 { + return errors.New("数据已经存在!") + } + _, err = e.Table("xml_msg").Insert(t) + + if err != nil { + return err + } + return nil +} + +//增 +func (t *Xml_msg) Insert(session *xorm.Session) error { + xmlmsgtab := new(Xml_msg) + affw, err := session.Table("xml_msg").ID(core.PK{G_FINR, t.Msgid}).Count(xmlmsgtab) + if err != nil { + return err + } + if affw > 0 { + return errors.New("数据已经存在!") + } + _, err = session.Table("xml_msg").Insert(t) + + if err != nil { + return err + } + return nil +} + +//删 +func (t *Xml_msg) Del() bool { + e := G_DbEngine + _, err := e.ID(core.PK{G_FINR, t.Msgid}).Delete(&Xml_msg{}) + if err != nil { + return false + } + return true +} + +//改 +func (t *Xml_msg) Update() bool { + e := G_DbEngine + _, err := e.ID(core.PK{G_FINR, t.Msgid}).Update(t) + if err != nil { + return false + } + return true +} + +//更新指定字段 +func (t *Xml_msg) UpdateFields(session *xorm.Session, fields string) (err error) { + if _, err = session.Table("xml_msg").ID(core.PK{G_FINR, t.Msgid}).Cols(fields).Update(t); err != nil { + return + } + return +} + +//更新指定字段 +func (t *Xml_msg) UpdateFieldsWithoutSession(fields string) (err error) { + e := G_DbEngine + if _, err = e.Table("xml_msg").ID(core.PK{G_FINR, t.Msgid}).Cols(fields).Update(t); err != nil { + return + } + return +} + +//查 +func (t *Xml_msg) SelectOne() (data Xml_msg, err error) { + e := G_DbEngine + _, err = e.ID(core.PK{G_FINR, t.Msgid}).Get(&data) + if err != nil { + return data, err + } + return data, nil +} + +//获取没有生成xml的消息 +func (t *Xml_msg) GetUnXmlMessages() (datalst []Xml_msg, err error) { + var i int + + e := G_DbEngine + if err = e.Where("finr = ? and msgtype = ? and status <= ?", G_FINR, common.MSG_TYPE_SHIP, common.MSG_STATUS_PLAN).OrderBy("credatuz").Find(&datalst); err != nil { + return + } + for i = 0; i < len(datalst); i++ { + datalst[i].Clipped() + } + return +} diff --git a/service/Xmlmsg.go b/service/Xmlmsg.go new file mode 100644 index 0000000..462c46c --- /dev/null +++ b/service/Xmlmsg.go @@ -0,0 +1,61 @@ +package service + +import ( + "github.com/go-xorm/xorm" + "leit.com/leit_seat_aps/common" + "leit.com/leit_seat_aps/db" + "time" +) + +// 订单消息服务,包括拣料单、包装单和发运单 +type BL_Xmlmsg struct { + MsgType string // 消息类型,PICK 拣料单 PACK 包装单 SHIP 发运单 + Msg string + Status int + Xmlmsgtab db.Xml_msg +} + +// 创建订单消息 +func (bl_xmlmsg *BL_Xmlmsg) Create(session *xorm.Session) (err error) { + var ( + //ordsn, prnsn string + msgid string + xmlmsgtab db.Xml_msg + ) + + //// 获取拣料单序列号 + //if ordsn, err = GetSysStringParameter(1, "*", "ORDERMSG_SN"); err != nil { + // return + //} + //if strings.TrimSpace(ordsn) == "" { + // ordsn = "ORDERMSG" // 默认流水ID + //} + // + //// 获取打印表单头流水号 + //if prnsn, err = GetSysStringParameter(1, "*", "PRNSHEETHEAD_SN"); err != nil { + // return + //} + //if strings.TrimSpace(prnsn) == "" { + // prnsn = "PRNSHEETHEAD" // 默认流水ID + //} + + // 获取消息号 + if msgid, err = SN_SyncGetNextSnr(""); err != nil { + return + } + + // 创建订单消息并返回 + xmlmsgtab = db.Xml_msg{} + xmlmsgtab.Finr = db.G_FINR + xmlmsgtab.Msgid = msgid + xmlmsgtab.Msgtype = bl_xmlmsg.MsgType + xmlmsgtab.Status = common.MSG_STATUS_PLAN + xmlmsgtab.Msg = bl_xmlmsg.Msg + xmlmsgtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") + xmlmsgtab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") + xmlmsgtab.Lastuser = "service" + if err = xmlmsgtab.Insert(session); err != nil { + return + } + return +} \ No newline at end of file -- 2.30.1.windows.1