Browse Source

生成新版的打印模板

feature_msg
娄文智 3 years ago
parent
commit
782297aea3
6 changed files with 325 additions and 23 deletions
  1. +9
    -0
      cmd/msg/main.go
  2. +2
    -2
      db/Pln_workorder.go
  3. +18
    -0
      db/Printheadtab.go
  4. +47
    -0
      db/Printitemtab.go
  5. +46
    -11
      msg/Msgparser.go
  6. +203
    -10
      service/Ordmsg.go

+ 9
- 0
cmd/msg/main.go View File

@ -110,6 +110,15 @@ func imain() {
return
}
//初始化数据库
salvestring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable",
conf.SalveServer, conf.SalveUser, conf.SalvePassword, conf.SalveDbName, conf.SalvePort)
if err := db.InitMssqlSalveDb(salvestring); err != nil {
glog.Infoln("初始化数据库", "InitMssqlDb return fail")
return
}
//创建snretcd连接
//if err = etcd.InitSnrJobLock(); err != nil {
// glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail")


+ 2
- 2
db/Pln_workorder.go View File

@ -471,8 +471,8 @@ func (t *Pln_workorder) GetLineProjectUnfinishedTaskWorkorders(projnr string, li
func (t *Pln_workorder) GetLineProjectUnfinishedTaskWorkordersBySwet(projnr string, lineid string, qty int) (wotabs []Pln_workorder, err error) {
e := G_DbEngine
if err = e.Where("finr = ? and projnr = ? and worklineid = ? and status = ?",
G_FINR, projnr, lineid, common.WO_STATUS_PLANNED).Asc("preschedseq", "supplygroupid").Limit(qty).Find(&wotabs); err != nil {
if err = e.Where("finr = ? and projnr = ? and worklineid = ? and status = ? and oemseq < ?",
G_FINR, projnr, lineid, common.WO_STATUS_PLANNED, 9999999999).Asc("preschedseq", "supplygroupid").Limit(qty).Find(&wotabs); err != nil {
return
}


+ 18
- 0
db/Printheadtab.go View File

@ -71,6 +71,24 @@ func (t *Printheadtab) Insert(session *xorm.Session) error {
return nil
}
//增
func (t *Printheadtab) Insertlab(session *xorm.Session) error {
printheadtab := new(Printheadtab)
affw, err := session.Table("printheadtab").ID(core.PK{G_FINR, t.Printheadid}).Count(printheadtab)
if err != nil {
return err
}
if affw > 0 {
return errors.New("数据已经存在!")
}
_, err = session.Table("printheadtab").Insert(t)
if err != nil {
return err
}
return nil
}
//删
func (t *Printheadtab) Del() bool {
e := G_DbEngine


+ 47
- 0
db/Printitemtab.go View File

@ -0,0 +1,47 @@
package db
import (
"github.com/go-xorm/xorm"
"leit.com/leit_seat_aps/common"
)
//打印记录明细表
type Printitem struct {
Finr int `xorm:"pk"`
Printheadid string `xorm:"pk"`
Detail string
Lastmodif string
Lastuser string
Credatuz string
}
//包装单
type PackPrintItem struct {
HeadData map[string]interface{} `json:"HeadData"`
DetailData []map[string]interface{} `json:"DetailData"`
}
//减料单
type PickPrintItem struct {
HeadData map[string]interface{} `json:"HeadData"`
Color []string `json:"Color"`
PartIds []string `json:"PartIds"`
DetailData []map[string]interface{} `json:"DetailData"`
}
func (t *Printitem) Clipped() {
common.TrimStruct(t, *t)
}
func (t *Printitem) TableName() string {
return "printitem"
}
//增
func (t *Printitem) Insertlab(session *xorm.Session) error {
_, err := session.Table("printitem").Insert(t)
if err != nil {
return err
}
return nil
}

+ 46
- 11
msg/Msgparser.go View File

@ -30,6 +30,7 @@ func ParseOpenPrintMsg(pe *service.BL_PrintEngine) (err error) {
i int
msgtypes []string
session *xorm.Session
salvesession *xorm.Session
)
ordmsgtab = db.Order_msg{}
@ -56,6 +57,7 @@ func ParseOpenPrintMsg(pe *service.BL_PrintEngine) (err error) {
if err = session.Begin(); err != nil {
return
}
if err = bl_ordmsg.GeneratePrintDataForPickOrder(session, pickordtab, pe); err != nil {
session.Rollback()
session.Close()
@ -87,9 +89,39 @@ func ParseOpenPrintMsg(pe *service.BL_PrintEngine) (err error) {
glog.InfoExtln("Msg解析", "解析打印消息失败:", err)
return
}
if err = bl_ordmsg.GeneratePrintDataForPackOrder(session, packordtab, pe); err != nil {
salvesession = db.G_DbSalve.NewSession()
defer salvesession.Close()
if err = salvesession.Begin(); err != nil {
return
}
//开启debug
db.G_DbSalve.ShowSQL(true)
err = bl_ordmsg.GeneratePrintDataForPackOrderToJson(session,salvesession, packordtab, pe)
if err !=nil{
glog.InfoExtln("Msg解析", "解析打印消息失败:", err)
session.Rollback()
session.Close()
salvesession.Rollback()
salvesession.Close()
// 更新订单消息的出错状态和出错消息
if err = bl_ordmsg.Pending(err.Error()); err != nil {
glog.InfoExtln("Msg解析", "解析打印消息失败:", err)
return
}
}
if err = bl_ordmsg.GeneratePrintDataForPackOrder(session,packordtab, pe); err != nil {
glog.InfoExtln("Msg解析", "解析打印消息失败:", err)
session.Rollback()
session.Close()
salvesession.Rollback()
salvesession.Close()
// 更新订单消息的出错状态和出错消息
if err = bl_ordmsg.Pending(err.Error()); err != nil {
glog.InfoExtln("Msg解析", "解析打印消息失败:", err)
@ -98,6 +130,9 @@ func ParseOpenPrintMsg(pe *service.BL_PrintEngine) (err error) {
} else {
session.Commit()
session.Close()
salvesession.Commit()
salvesession.Close()
// 关闭订单消息
if err = bl_ordmsg.Close(); err != nil {
glog.InfoExtln("Msg解析", "解析打印消息失败:", err)
@ -328,7 +363,7 @@ func GenAsnFileForShipOrderByPartFamily(asnardpf *ASN_ARD_PF, shipordtab db.Jit_
session *xorm.Session
bl_asnmsg service.BL_Ordmsg
kvmap, binmap map[string]string
key,val string
key, val string
ok bool
)
@ -444,16 +479,16 @@ func GenAsnFileForShipOrderByPartFamily(asnardpf *ASN_ARD_PF, shipordtab db.Jit_
} else {
bbaasnitemtab.Calloffnr = vdata.Pln_custorder.Calloffnr
}
bbaasnitemtab.Modelcode = vdata.Pln_custorder.Projnr
bbaasnitemtab.Oemordernr = vdata.Pln_custorder.Oemordernr
bbaasnitemtab.Partfamilyid = asnardpf.Pfid
bbaasnitemtab.Modelcode = vdata.Pln_custorder.Projnr
bbaasnitemtab.Oemordernr = vdata.Pln_custorder.Oemordernr
bbaasnitemtab.Partfamilyid = asnardpf.Pfid
bbaasnitemtab.Supplygroupid = vdata.Pln_workorder.Supplygroupid
bbaasnitemtab.Packorderid = vdata.Jit_packorder.Packorderid
bbaasnitemtab.Swet = vdata.Pln_custorder.Calloffswet
bbaasnitemtab.Binnr = vdata.Jit_packorder.Boxsn
bbaasnitemtab.Lastuser = "bbaasn_service"
bbaasnitemtab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
bbaasnitemtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
bbaasnitemtab.Packorderid = vdata.Jit_packorder.Packorderid
bbaasnitemtab.Swet = vdata.Pln_custorder.Calloffswet
bbaasnitemtab.Binnr = vdata.Jit_packorder.Boxsn
bbaasnitemtab.Lastuser = "bbaasn_service"
bbaasnitemtab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
bbaasnitemtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
bbaasntab.Itemlst = append(bbaasntab.Itemlst, bbaasnitemtab)
// 统计包装数


+ 203
- 10
service/Ordmsg.go View File

@ -1,6 +1,7 @@
package service
import (
"encoding/json"
"fmt"
"github.com/go-xorm/xorm"
"leit.com/leit_seat_aps/common"
@ -331,6 +332,7 @@ func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPickOrder(session *xorm.Session,
printdetailtab.Finr = db.G_FINR
printdetailtab.Printheadid = printheadid
printdetailtab.Varname = bl_picktmp.Picktemplatetab.Printlst[j].Varname
switch bl_picktmp.Picktemplatetab.Printlst[j].Vartype {
case common.PRN_VAR_TYP_2DCOL: // 二维表列变量
// 获取拣料单项额外的内存数据,包括生产订单、客户订单和属性
@ -663,9 +665,10 @@ func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPackOrder(session *xorm.Session,
if err = printheadtab.Insert(session); err != nil {
return
}
// 遍历打印设置条码
idx = 1
detailmap := make(map[string]string)
for i = 0; i < len(bl_packtmp.Paktmpltab.Printlst); i++ {
// 定义暂存数据的map
bufdata := []interface{}{}
@ -678,9 +681,10 @@ func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPackOrder(session *xorm.Session,
Pos: idx,
Varname: bl_packtmp.Paktmpltab.Printlst[i].Varname,
Varpos: bl_packtmp.Paktmpltab.Printlst[i].Varpos}
val = ""
if len(packordtab.Itemlst) == 0{
glog.InfoExtln("packordtab","packordtab.orderid",packordtab.Packorderid)
if len(packordtab.Itemlst) == 0 {
glog.InfoExtln("packordtab", "packordtab.orderid", packordtab.Packorderid)
continue
}
if packordtab.Itemlst[0].Workordernr != "" {
@ -705,11 +709,6 @@ func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPackOrder(session *xorm.Session,
val = ""
}
case common.PRN_VAR_TYP_VARSET: // 动态变量集
for k, v := range detailmap {
key := strings.TrimSpace(k)
value := strings.TrimSpace(v)
kvmap[key] = value
}
// 获取变量集
varlst = strings.Split(bl_packtmp.Paktmpltab.Printlst[i].Varvalue, ";")
if len(varlst) <= 0 {
@ -722,6 +721,7 @@ func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPackOrder(session *xorm.Session,
}
}
case common.PRN_VAR_TYP_LOOPVAR: // 循环变量
for j = 0; j < len(packordtab.Itemlst); j++ {
//加载模板
bufdata = append(bufdata, bl_packtmp.Paktmpltab)
@ -785,8 +785,10 @@ func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPackOrder(session *xorm.Session,
if err = printdetailtab.Insert(session); err != nil {
return
}
idx++
}
continue
case common.PRN_VAR_TYP_SYSVAR: // 系统参数2
@ -814,14 +816,205 @@ func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPackOrder(session *xorm.Session,
if err = printdetailtab.Insert(session); err != nil {
return
}
varname := strings.TrimSpace(bl_packtmp.Paktmpltab.Printlst[i].Varname)
detailmap[varname] = val
idx++
}
}
return
}
// 为包装单生成打印数据
func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForPackOrderToJson(session *xorm.Session, salvesession *xorm.Session, packordtab db.Jit_packorder, pe *BL_PrintEngine) (err error) {
var (
bl_packtmp BL_Package
salveprintheadtab db.Printheadtab
printitem db.Printitem
wotab db.Pln_workorder
cotab db.Pln_custorder
supplygroup db.Me_supplygroup
printheadid, val, tmp string
varlst []string
ok bool
i, j, icopy, icopies int
)
// 获取模板
if bl_packtmp, ok = pe.PackTmpDict[packordtab.Packtemplateid]; !ok {
return
}
// 如果打印多份
icopies = common.Max(bl_ordmsg.Ordmsgtab.Printcopies, bl_packtmp.Paktmpltab.Printqty, 1)
for icopy = 0; icopy < icopies; icopy++ {
// 获取打印头流水号
if strings.TrimSpace(bl_ordmsg.Ordmsgtab.Printheadsn) != "" {
if printheadid, err = SN_GetNextSnrBySession(strings.TrimSpace(bl_ordmsg.Ordmsgtab.Printheadsn), session); err != nil {
return
}
} else {
if printheadid, err = SN_GetNextSnrBySession("PRNSHEETHEAD", session); err != nil {
return
}
}
// 创建打印头
salveprintheadtab = db.Printheadtab{}
salveprintheadtab.Finr = db.G_FINR
salveprintheadtab.Printheadid = printheadid
salveprintheadtab.Status = common.PRN_HEAD_STATUS_NEW
salveprintheadtab.Printerid = bl_packtmp.Paktmpltab.Printerid
salveprintheadtab.Printobjtype = common.MSG_TYPE_PACK
salveprintheadtab.Printobjid = packordtab.Packorderid
salveprintheadtab.Printfiletype = "EXCEL"
if strings.TrimSpace(packordtab.Templatefile) == "" {
salveprintheadtab.Templatefile = bl_packtmp.Paktmpltab.Templatefile
} else {
salveprintheadtab.Templatefile = packordtab.Templatefile
}
salveprintheadtab.Orientation = bl_packtmp.Paktmpltab.Orientation
salveprintheadtab.Printcopies = common.Max(bl_ordmsg.Ordmsgtab.Printcopies, bl_packtmp.Paktmpltab.Printqty, 1)
salveprintheadtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
salveprintheadtab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
salveprintheadtab.Lastuser = "service"
if err = salveprintheadtab.Insert(salvesession); err != nil {
return
}
printitem = db.Printitem{
Finr: db.G_FINR,
Printheadid: printheadid}
dataMap := db.PackPrintItem{}
headMap := make(map[string]interface{})
detailMap := make([]map[string]interface{}, 0)
//获取常量设置信息 //构建headMap
for i = 0; i < len(bl_packtmp.Paktmpltab.Printlst); i++ {
if bl_packtmp.Paktmpltab.Printlst[i].Vartype == common.PRN_VAR_TYP_LOOPVAR{
continue
}
// 定义暂存数据的map
bufdata := []interface{}{}
bufdata = append(bufdata, packordtab)
kvmap := common.StructToMap(bufdata)
val = ""
if len(packordtab.Itemlst) == 0 {
glog.InfoExtln("packordtab", "packordtab.orderid", packordtab.Packorderid)
continue
}
if packordtab.Itemlst[0].Workordernr != "" {
wotab = db.Pln_workorder{Finr: db.G_FINR, Workordernr: packordtab.Itemlst[0].Workordernr}
if wotab, err = wotab.SelectOne(); err != nil {
return
}
bufdata = append(bufdata, wotab)
co := db.Pln_custorder{Finr: db.G_FINR, Custordernr: wotab.Custordernr}
if cotab, err = co.SelectOne(); err != nil {
return
}
bufdata = append(bufdata, cotab)
kvmap = common.StructToMap(bufdata)
}
switch bl_packtmp.Paktmpltab.Printlst[i].Vartype {
case common.PRN_VAR_TYP_VALUE: // 静态值
val = bl_packtmp.Paktmpltab.Printlst[i].Varvalue
case common.PRN_VAR_TYP_VARIABLE: // 动态变量
if val, ok = kvmap[bl_packtmp.Paktmpltab.Printlst[i].Varvalue]; !ok {
val = ""
}
case common.PRN_VAR_TYP_VARSET: // 动态变量集
// 获取变量集
varlst = strings.Split(bl_packtmp.Paktmpltab.Printlst[i].Varvalue, ";")
if len(varlst) <= 0 {
continue
} else {
for j = 0; j < len(varlst); j++ {
if tmp, ok = kvmap[varlst[j]]; ok {
val = val + tmp
}
}
}
case common.PRN_VAR_TYP_SYSVAR: // 系统参数2
switch bl_packtmp.Paktmpltab.Printlst[i].Varvalue {
case "DATE()":
val = common.Date(time.Now().Unix(), "YYYYMMDD")
case "TIME()":
val = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
case "COPY":
val = GetPrintSysCopyValue(icopy+1, bl_packtmp.Paktmpltab.Printlst[i].Picture)
}
default:
continue
}
if val, err = GetValueByPicture(val, bl_packtmp.Paktmpltab.Printlst[i].Picture, bl_packtmp.Paktmpltab.Printlst[i].Varpos); err != nil {
return
}
varname := strings.TrimSpace(bl_packtmp.Paktmpltab.Printlst[i].Varname)
headMap[varname] = val
}
//构建detailMap
for j = 0; j < len(packordtab.Itemlst); j++ {
onedetailMap := make(map[string]interface{})
wotab = db.Pln_workorder{Finr: db.G_FINR, Workordernr: packordtab.Itemlst[j].Workordernr}
if wotab, err = wotab.SelectOne(); err != nil {
return
}
glog.InfoExtln("pack打印消息", "wotab is:", wotab)
supplygroup = db.Me_supplygroup{Finr: db.G_FINR, Supplygroupid: wotab.Supplygroupid}
if supplygroup, err = supplygroup.SelectOne(); err != nil {
return
}
glog.InfoExtln("pack打印消息", "supplygroup is:", supplygroup)
co := db.Pln_custorder{Finr: db.G_FINR, Custordernr: wotab.Custordernr}
if cotab, err = co.SelectOne(); err != nil {
return
}
glog.InfoExtln("pack打印消息", "cotab is:", cotab)
onedetailMap["pos"] = packordtab.Itemlst[j].Pos
onedetailMap["oemseq"] = common.ValueToInt(wotab.Oemseq,0)
if common.ValueIsEmpty(packordtab.Itemlst[j].Workordernr) {
onedetailMap["oemordernr"] = ""
} else {
onedetailMap["oemordernr"] = strings.TrimSpace(cotab.Oemordernr)
}
onedetailMap["description"] = strings.TrimSpace(supplygroup.Descr)
onedetailMap["swet"] = strings.TrimSpace(cotab.Calloffswet)
fmt.Println(onedetailMap)
detailMap = append(detailMap, onedetailMap)
}
dataMap.HeadData = headMap
dataMap.DetailData = detailMap
fmt.Println(dataMap)
glog.InfoExtln("pack打印消息", "dataMap is:", dataMap)
detailStrJson, _ := json.Marshal(dataMap)
printitem.Detail = string(detailStrJson)
glog.InfoExtln("pack打印消息", "detailStrJson is:", detailStrJson)
printitem.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
printitem.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
printitem.Lastuser = "service"
if err = printitem.Insertlab(salvesession); err != nil {
return
}
}
return
}
// 为发运单生成打印数据
func (bl_ordmsg *BL_Ordmsg) GeneratePrintDataForShipOrder(session *xorm.Session, shipordtab db.Jit_shiporder, pe *BL_PrintEngine) (err error) {
var (


Loading…
Cancel
Save