Browse Source

Merge pull request 'feature_xml 异步监听包装单xml_msg,生成xml' (#1) from feature_xml into master

Reviewed-on: http://101.201.121.115:3000/leo/LAPP_SJA_APS_BACKEND/pulls/1
master
娄文智 3 years ago
parent
commit
be8d2b56f7
4 changed files with 310 additions and 0 deletions
  1. +121
    -0
      calloff/Callofftask.go
  2. +3
    -0
      cmd/calloff/main.go
  3. +125
    -0
      db/Xml_msg.go
  4. +61
    -0
      service/Xmlmsg.go

+ 121
- 0
calloff/Callofftask.go View File

@ -1,8 +1,11 @@
package calloff
import (
"encoding/json"
"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 +14,8 @@ import (
"leit.com/leit_seat_aps/service"
"os"
"regexp"
"strconv"
"strings"
"time"
)
@ -554,6 +559,7 @@ func ParseCalloffOrder() {
session.Close()
etcd.G_jobLock.UnLock()
time.Sleep(10 * time.Millisecond)
}
}
@ -699,12 +705,127 @@ func GenerateDeliveryCar() {
}
}
fmt.Println("---------------------生成xmL_msg1")
//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,""),
})
}
jsonBytes, err := json.Marshal(o)
if err != nil {
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)
}
err = session.Commit()
if err != nil {
fmt.Println(err)
return
}
}
}
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"`
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"`
}

+ 3
- 0
cmd/calloff/main.go View File

@ -145,4 +145,7 @@ func imain() {
// 将26下达的包装单加载到发运车中,系统根据实际加载情况
calloff.GenerateDeliveryCar()
// 异步监听包装单xml_msg,生成xml
go calloff.CallOffXmlTick()
}

+ 125
- 0
db/Xml_msg.go View File

@ -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
}

+ 61
- 0
service/Xmlmsg.go View File

@ -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
}

Loading…
Cancel
Save