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