package db import ( "errors" "fmt" "github.com/go-xorm/xorm" "leit.com/leit_seat_aps/common" "xorm.io/core" ) //发运包装单表 type Jit_packorder struct { Finr int `xorm:"pk" json:"jit_packorder.finr"` Packorderid string `xorm:"pk" json:"jit_packorder.packorderid"` Packtemplateid string `json:"jit_packorder.packtemplateid"` Status int `json:"jit_packorder.status"` Loadstatus int `json:"jit_packorder.loadstatus"` // 装车状态,0=未装车,1=已装车 Shortpack int `json:"jit_packorder.shortpack"` // 是否短包 Shortby string `json:"jit_packorder.shortby"` Shorttime string `json:"jit_packorder.shorttime"` Orderinfo string `json:"jit_packorder.orderinfo"` Projnr string `json:"jit_packorder.projnr"` Syncsn string `json:"jit_packorder.syncsn"` Boxsn string `json:"jit_packorder.boxsn"` Packtypeid string `json:"jit_packorder.packtypeid"` Printerid string `json:"jit_packorder.printerid"` Templatefile string `json:"jit_packorder.templatefile"` Planqty int `json:"jit_packorder.planqty"` Actqty int `json:"jit_packorder.actqty"` Opentime string `json:"jit_packorder.opentime"` Closetime string `json:"jit_packorder.closetime"` Operator string `json:"jit_packorder.operator"` Lastmodif string `json:"jit_packorder.lastmodif"` Lastuser string `json:"jit_packorder.lastuser"` Credatuz string `json:"jit_packorder.credatuz"` Itemlst []Jit_packorder_itemlst `json:"itemlst" xorm:"-"` } // 指定同步号包装单锁关联的客户订单视图 type VCustorderPackorder struct { Pln_custorder `xorm:"extends"` Pln_workorder `xorm:"extends"` Jit_packorder_itemlst `xorm:"extends"` Jit_packorder `xorm:"extends"` } type VPackorder struct { Jit_packorder `xorm:"extends"` Jit_packorder_itemlst `xorm:"extends"` } func (t *Jit_packorder) Clipped() { common.TrimStruct(t, *t) } func (t *Jit_packorder) TableName() string { return "jit_packorder" } //增 func (t *Jit_packorder) Add() (err error) { var ( i int affw int64 pkotab Jit_packorder ) e := G_DbEngine pkotab = Jit_packorder{} affw, err = e.Table("jit_packorder").ID(core.PK{G_FINR, t.Packorderid}).Count(pkotab) if err != nil { return err } if affw > 0 { return errors.New("数据已经存在!") } _, err = e.Table("jit_packorder").Insert(t) if err != nil { return err } // 遍历子项并插入 for i = 0; i < len(t.Itemlst); i++ { if err = t.Itemlst[i].Add(); err != nil { return } } return nil } //增 func (t *Jit_packorder) Insert(session *xorm.Session) (err error) { var ( i int affw int64 pkotab Jit_packorder ) pkotab = Jit_packorder{} affw, err = session.Table("jit_packorder").ID(core.PK{G_FINR, t.Packorderid}).Count(pkotab) if err != nil { return err } if affw > 0 { return errors.New("数据已经存在!") } _, err = session.Table("jit_packorder").Insert(t) if err != nil { return err } // 遍历子项并插入 for i = 0; i < len(t.Itemlst); i++ { if err = t.Itemlst[i].Insert(session); err != nil { return } } return } //删 func (t *Jit_packorder) Del() bool { e := G_DbEngine _, err := e.ID(core.PK{G_FINR, t.Packorderid}).Delete(&Jit_packorder{}) if err != nil { return false } return true } //改 func (t *Jit_packorder) Update() bool { e := G_DbEngine _, err := e.ID(core.PK{G_FINR, t.Packorderid}).Update(t) if err != nil { return false } return true } //更新指定字段 func (t *Jit_packorder) UpdateFields(session *xorm.Session, fields string) (err error) { if _, err = session.Table("jit_packorder").ID(core.PK{G_FINR, t.Packorderid}).Cols(fields).Update(t); err != nil { return } return } //查 func (t *Jit_packorder) SelectOne() (data Jit_packorder, err error) { var i int e := G_DbEngine _, err = e.ID(core.PK{G_FINR, t.Packorderid}).Get(&data) if err != nil { return data, err } data.Clipped() // 获取值列表 if err = e.Where("finr = ? and packorderid = ? ", G_FINR, data.Packorderid).OrderBy("pos").Find(&data.Itemlst); err != nil { return } for i, _ = range data.Itemlst { data.Itemlst[i].Clipped() } return data, nil } //查 func (t *Jit_packorder) SelectOneBySession(session *xorm.Session) (data Jit_packorder, err error) { var i int _, err = session.ID(core.PK{G_FINR, t.Packorderid}).Get(&data) if err != nil { return data, err } data.Clipped() // 获取值列表 if err = session.Where("finr = ? and packorderid = ? ", G_FINR, data.Packorderid).OrderBy("pos").Find(&data.Itemlst); err != nil { return } for i, _ = range data.Itemlst { data.Itemlst[i].Clipped() } return data, nil } // 基于指定项目、checksequence和供应组获取包装 func (t *Jit_packorder) GetByCheckSeqSupplyGroup(session *xorm.Session, projnr string, cs int, sgid string) (datalst []Jit_packorder, err error) { var ( i int pakordict map[string]string ok bool pakord Jit_packorder vdatalst []VPackorder ) datalst = []Jit_packorder{} query := session.Table("jit_packorder") query = query.Join("INNER", "jit_packorder_itemlst", "jit_packorder.finr = jit_packorder_itemlst.finr and jit_packorder.packorderid = jit_packorder_itemlst.packorderid") query = query.Where("jit_packorder.finr = ? and jit_packorder.projnr = ? and jit_packorder_itemlst.seq = ? and jit_packorder_itemlst.supplygroupid = ?", G_FINR, projnr, cs, sgid ) // 查询 if err = query.Find(&vdatalst); err != nil { return } pakordict = make( map[string]string ) for i = 0; i < len(vdatalst); i++ { vdatalst[i].Jit_packorder.Clipped() vdatalst[i].Jit_packorder_itemlst.Clipped() if _, ok = pakordict[vdatalst[i].Jit_packorder.Packorderid]; !ok { pakordict[vdatalst[i].Jit_packorder.Packorderid] = vdatalst[i].Jit_packorder.Packorderid // 查询包装单 pakord = Jit_packorder{Packorderid: vdatalst[i].Jit_packorder.Packorderid} if pakord, err = pakord.SelectOneBySession(session); err != nil { return } datalst = append(datalst, pakord) } } return } // 基于指定项目、oemseq和供应组获取包装 func (t *Jit_packorder) GetByOemSeqSupplyGroup(session *xorm.Session, projnr string, oemseq int, sgid string) (datalst []Jit_packorder, err error) { var ( i int pakordict map[string]string ok bool pakord Jit_packorder vdatalst []VPackorder ) datalst = []Jit_packorder{} query := session.Table("jit_packorder") query = query.Join("INNER", "jit_packorder_itemlst", "jit_packorder.finr = jit_packorder_itemlst.finr and jit_packorder.packorderid = jit_packorder_itemlst.packorderid") query = query.Where("jit_packorder.finr = ? and jit_packorder.projnr = ? and jit_packorder_itemlst.oemseq = ? and jit_packorder_itemlst.supplygroupid = ?", G_FINR, projnr, oemseq, sgid ) fmt.Println("查询工单OEMSEQ对应的包装单:",oemseq, sgid) // 查询 if err = query.Find(&vdatalst); err != nil { return } pakordict = make( map[string]string ) for i = 0; i < len(vdatalst); i++ { vdatalst[i].Jit_packorder.Clipped() vdatalst[i].Jit_packorder_itemlst.Clipped() if _, ok = pakordict[vdatalst[i].Jit_packorder.Packorderid]; !ok { fmt.Println(" 基于OEMSEQ获取包装单:",vdatalst[i].Jit_packorder.Packorderid) pakordict[vdatalst[i].Jit_packorder.Packorderid] = vdatalst[i].Jit_packorder.Packorderid // 查询包装单 pakord = Jit_packorder{Packorderid: vdatalst[i].Jit_packorder.Packorderid} if pakord, err = pakord.SelectOneBySession(session); err != nil { return } datalst = append(datalst, pakord) } } return } // 基于指定项目、checksequence获取包装 func (t *Jit_packorder) GetByCheckSeq(session *xorm.Session, projnr string, cs int ) (datalst []Jit_packorder, err error) { var ( i int pakordict map[string]string ok bool pakord Jit_packorder vdatalst []VPackorder ) datalst = []Jit_packorder{} query := session.Table("jit_packorder") query = query.Join("INNER", "jit_packorder_itemlst", "jit_packorder.finr = jit_packorder_itemlst.finr and jit_packorder.packorderid = jit_packorder_itemlst.packorderid") query = query.Where("jit_packorder.finr = ? and jit_packorder.projnr = ? and jit_packorder_itemlst.seq = ?", G_FINR, projnr, cs ) // 查询 if err = query.Find(&vdatalst); err != nil { return } pakordict = make( map[string]string ) for i = 0; i < len(vdatalst); i++ { vdatalst[i].Jit_packorder.Clipped() vdatalst[i].Jit_packorder_itemlst.Clipped() if _, ok = pakordict[vdatalst[i].Jit_packorder.Packorderid]; !ok { pakordict[vdatalst[i].Jit_packorder.Packorderid] = vdatalst[i].Jit_packorder.Packorderid // 查询包装单 pakord = Jit_packorder{Packorderid: vdatalst[i].Jit_packorder.Packorderid} if pakord, err = pakord.SelectOneBySession(session); err != nil { return } datalst = append(datalst, pakord) } } return } // 指定同步号的其它开口包装单 func (t *Jit_packorder) GetOpenPackOrdersBySyncid(session *xorm.Session, projnr, syncid string, unconsiderpkoid string) (datalst []Jit_packorder, err error) { var i, j int if err = session.Where("finr = ? and projnr = ? and status = ? and syncsn = ? and packorderid != ?", G_FINR, projnr, common.PKO_STATUS_PLANNED, syncid, unconsiderpkoid).OrderBy("packorderid").Find(&datalst); err != nil { return } // 获取值列表 for i = 0; i < len(datalst); i++ { datalst[i].Clipped() if err = session.Where("finr = ? and packorderid = ? ", G_FINR, datalst[i].Packorderid).OrderBy("pos").Find(&datalst[i].Itemlst); err != nil { return } for j, _ = range datalst[i].Itemlst { datalst[i].Itemlst[j].Clipped() } } return } // 获取项目未装车的包装订单,status >= 26, loadstatus = 0 func (t *Jit_packorder) GetUnloadedPackOrders(projnr string) (datalst []Jit_packorder, err error) { var i, j int e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and status >= ? and loadstatus = ?", G_FINR, projnr, common.PKO_STATUS_PLANNED, common.PKO_STATUS_UNLOADED).OrderBy("packorderid").Find(&datalst); err != nil { return } // 获取值列表 for i = 0; i < len(datalst); i++ { datalst[i].Clipped() if err = e.Where("finr = ? and packorderid = ? ", G_FINR, datalst[i].Packorderid).OrderBy("pos").Find(&datalst[i].Itemlst); err != nil { return } for j, _ = range datalst[i].Itemlst { datalst[i].Itemlst[j].Clipped() } } return } // 基于syncid数组获取相关包装单 func (t *Jit_packorder) GetListBySyncidList(session *xorm.Session, projnr string, syncidlst []string) (datalst []Jit_packorder, err error) { var i, j int if err = session.Where("finr = ? and projnr = ?",G_FINR, projnr).In("syncsn", syncidlst).OrderBy("packorderid").Find(&datalst); err != nil { return } // 获取值列表 for i = 0; i < len(datalst); i++ { datalst[i].Clipped() if err = session.Where("finr = ? and packorderid = ? ", G_FINR, datalst[i].Packorderid).OrderBy("pos").Find(&datalst[i].Itemlst); err != nil { return } for j, _ = range datalst[i].Itemlst { datalst[i].Itemlst[j].Clipped() } } return } //获取指定客户订单号关联的特殊开口包装单(带同步ID信息的) func (t *Jit_packorder) GetSpecialOpenListByCustorder(session *xorm.Session, conr string) (vdatalst []VCustorderPackorder, err error) { var i int query := session.Table("jit_packorder") query = query.Join("INNER", "jit_packorder_itemlst", "jit_packorder.finr = jit_packorder_itemlst.finr and jit_packorder.packorderid = jit_packorder_itemlst.packorderid") query = query.Join("INNER", "pln_workorder", "jit_packorder_itemlst.finr = pln_workorder.finr and jit_packorder_itemlst.workordernr = pln_workorder.workordernr") query = query.Join("INNER", "pln_custorder", "pln_workorder.finr = pln_custorder.finr and pln_workorder.custordernr = pln_custorder.custordernr") query = query.Where("pln_custorder.finr = ? and pln_custorder.custordernr = ? and jit_packorder.status < ? and jit_packorder.syncsn != ?", G_FINR, conr, common.PKO_STATUS_RELEASED, "") if err = query.Find(&vdatalst); err != nil { return } for i = 0; i < len(vdatalst); i++ { vdatalst[i].Pln_custorder.Clipped() vdatalst[i].Pln_workorder.Clipped() vdatalst[i].Jit_packorder.Clipped() vdatalst[i].Jit_packorder_itemlst.Clipped() } return } //获取指定包装单号关联的客户订单 func (t *Jit_packorder) GetFullDataByPackorder(pkoid string) (vdatalst []VCustorderPackorder, err error) { var i int e := G_DbEngine query := e.Table("jit_packorder") query = query.Join("INNER", "jit_packorder_itemlst", "jit_packorder.finr = jit_packorder_itemlst.finr and jit_packorder.packorderid = jit_packorder_itemlst.packorderid") query = query.Join("INNER", "pln_workorder", "jit_packorder_itemlst.finr = pln_workorder.finr and jit_packorder_itemlst.workordernr = pln_workorder.workordernr") query = query.Join("INNER", "pln_custorder", "pln_workorder.finr = pln_custorder.finr and pln_workorder.custordernr = pln_custorder.custordernr") query = query.Where("jit_packorder.finr = ? and jit_packorder.packorderid = ?", G_FINR, pkoid) if err = query.Find(&vdatalst); err != nil { return } for i = 0; i < len(vdatalst); i++ { vdatalst[i].Pln_custorder.Clipped() vdatalst[i].Pln_workorder.Clipped() vdatalst[i].Jit_packorder.Clipped() vdatalst[i].Jit_packorder_itemlst.Clipped() } return }