package db import ( "errors" "github.com/go-xorm/xorm" "leit.com/leit_seat_aps/common" "xorm.io/core" ) //客户订单表 type Pln_custorder struct { Finr int `xorm:"pk" json:"pln_custorder.finr"` Custordernr string `xorm:"pk" json:"pln_custorder.custordernr"` Oemordernr string `json:"pln_custorder.oemordernr"` Partfamilyid string `json:"pln_custorder.partfamilyid"` Orderinfo string `json:"pln_custorder.orderinfo"` Ordertime string `json:"pln_custorder.ordertime"` Swet string `json:"pln_custorder.swet"` Projnr string `json:"pln_custorder.projnr"` Partid string `json:"pln_custorder.partid"` Status int `json:"pln_custorder.status"` Handlestatus string `json:"pln_custorder.handlestatus"` Vin string `json:"pln_custorder.vin"` Seqswet string `json:"pln_custorder.seqswet"` Oemseq float64 `json:"pln_custorder.oemseq"` Assemblyline string `json:"pln_custorder.assemblyline"` Unloadingpoint string `json:"pln_custorder.unloadingpoint"` Calloffnr int `json:"pln_custorder.calloffnr"` Checksequence int `json:"pln_custorder.checksequence"` Calloffswet string `json:"pln_custorder.calloffswet"` Consigneeplant int `json:"pln_custorder.consigneeplant"` Consigneecompany int `json:"pln_custorder.consigneecompany"` Consumecompany int `json:"pln_custorder.consumecompany"` Consumeplant int `json:"pln_custorder.consumeplant"` Unloadingplace string `json:"pln_custorder.unloadingplace"` Backflush int `json:"pln_custorder.backflush"` Backflushsn string `json:"pln_custorder.backflushsn"` Vehicleidset string `json:"pln_custorder.vehicleidset"` Vehicleid string `json:"pln_custorder.vehicleid"` Lastmodif string `json:"pln_custorder.lastmodif"` Lastuser string `json:"pln_custorder.lastuser"` Credatuz string `json:"pln_custorder.credatuz"` Attrlst []Pln_custorder_atcodlst `xorm:"-"` Partlst []Pln_custorder_partlst `xorm:"-"` Wotablst []Pln_workorder `xorm:"-"` Sgpartlst []Pln_custorder_supplygroup_partlst `xorm:"-"` } // 客户订单和它的版本头综合视图 type VCustorderVer struct { Pln_custorder `xorm:"extends"` Pln_custorder_ver `xorm:"extends"` } func (t *Pln_custorder) Clipped() { common.TrimStruct(t, *t) } func (t *Pln_custorder) TableName() string { return "pln_custorder" } //增 func (t *Pln_custorder) Add() error { e := G_DbEngine cotab := new(Pln_custorder) affw, err := e.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Count(cotab) if err != nil { return err } if affw > 0 { return errors.New("数据已经存在!") } _, err = e.Table("pln_custorder").Insert(t) if err != nil { return err } return nil } //增 func (t *Pln_custorder) Insert(session *xorm.Session) error { cotab := new(Pln_custorder) affw, err := session.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Count(cotab) if err != nil { return err } if affw > 0 { return errors.New("数据已经存在!") } _, err = session.Table("pln_custorder").Insert(t) if err != nil { return err } return nil } //删 func (t *Pln_custorder) Del() bool { e := G_DbEngine _, err := e.ID(core.PK{G_FINR, t.Custordernr}).Delete(&Pln_custorder{}) if err != nil { return false } return true } //改 func (t *Pln_custorder) Update(fields string) (err error) { e := G_DbEngine //判断对应的工单,是否全是26状态,如果存在,则不更新 var plc Pln_workorder affw, err := e.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", G_FINR, t.Custordernr, common.WO_STATUS_RELEASED).Count(&plc) if err != nil { return err } if affw > 0 { return } _, err = e.ID(core.PK{G_FINR, t.Custordernr}).Cols(fields).Update(t) if err != nil { return } return } //更新指定字段(20变成26) func (t *Pln_custorder) UpdateToFields(session *xorm.Session, fields string) (err error) { //判断对应的工单,是否全是26状态,如果存在,则不更新 var plc Pln_workorder ok, err := session.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", G_FINR, t.Custordernr, common.WO_STATUS_RELEASED).Get(&plc) if err != nil { return err } if !ok { if _, err = session.Table("pln_custorder").Where("finr = ? and custordernr = ? and status = ?", G_FINR, t.Custordernr, common.WO_STATUS_PLANNED).Cols(fields).Update(t); err != nil { return } } return } //更新指定字段 func (t *Pln_custorder) UpdateFields(session *xorm.Session, fields string) (err error) { if _, err = session.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Cols(fields).Update(t); err != nil { return } return } //更新指定字段(20变成26) func (t *Pln_custorder) UpdateToFieldsWithoutSession(fields string) (err error) { e := G_DbEngine if _, err = e.Table("pln_custorder").ID(core.PK{G_FINR, t.Custordernr}).Cols(fields).Update(t); err != nil { return } return } //查 func (t *Pln_custorder) SelectOne() (data Pln_custorder, err error) { e := G_DbEngine _, err = e.ID(core.PK{G_FINR, t.Custordernr}).Get(&data) if err != nil { return data, err } return data, nil } //查 func (t *Pln_custorder) SelectCustOne() (data Pln_custorder, err error) { e := G_DbEngine _, err = e.Where("finr = ? and projnr = ? and oemordernr = ? and calloffnr = ?",G_FINR,t.Projnr,t.Oemordernr,t.Calloffnr).Get(&data) if err != nil { return data, err } return data, nil } //查询重复订单 func (t *Pln_custorder) SelectExpirationtime(Expirationtime string) (data Pln_custorder, result bool, err error) { e := G_DbEngine result, err = e.Where("finr = ? and oemordernr = ? and ordertime > ?", G_FINR, t.Oemordernr, Expirationtime).Get(&data) if err != nil { return data, false, err } return data, true, nil } //查 func (t *Pln_custorder) GetFullData() (data Pln_custorder, err error) { var ( attrlst []Pln_custorder_atcodlst partlst []Pln_custorder_partlst wotablst []Pln_workorder woattrlst []Pln_workorder_atcodlst wopartlst []Pln_workorder_partlst i, j, k, m, n int ) e := G_DbEngine _, err = e.ID(core.PK{G_FINR, t.Custordernr}).Get(&data) if err != nil { return } data.Clipped() // 获取属性列表 if err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("pos").Find(&attrlst); err != nil { return } for i, _ = range attrlst { attrlst[i].Clipped() } data.Attrlst = attrlst // 获取零件列表 if err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("supplygroupid, partid").Find(&partlst); err != nil { return } for j, _ = range partlst { partlst[j].Clipped() } data.Partlst = partlst // 获取生产订单列表 if err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("workordernr").Find(&wotablst); err != nil { return } for k, _ = range wotablst { wotablst[k].Clipped() // 获取生产订单的属性列表 if err = e.Where("finr = ? and workordernr = ?", G_FINR, wotablst[k].Workordernr).OrderBy("pos").Find(&woattrlst); err != nil { return } for m, _ = range woattrlst { woattrlst[m].Clipped() } wotablst[k].Attrlst = woattrlst // 获取生产订单的零件列表 if err = e.Where("finr = ? and workordernr = ?", G_FINR, wotablst[k].Workordernr).OrderBy("partid").Find(&wopartlst); err != nil { return } for n, _ = range wopartlst { wopartlst[n].Clipped() } wotablst[k].Partlst = wopartlst } data.Wotablst = wotablst return data, nil } //基于Oem订单号查客户订单 func (t *Pln_custorder) GetByOemOrderNr() (exist bool, cotab Pln_custorder, err error) { var ( i int cotablst []Pln_custorder ) e := G_DbEngine if err = e.Where("finr = ? and oemordernr = ? and partfamilyid = ? and projnr = ? and orderinfo != ?", G_FINR, t.Oemordernr, t.Partfamilyid, t.Projnr, "REO").Desc("credatuz").Limit(1, 0).Find(&cotablst); err != nil { return } if len(cotablst) > 0 { cotablst[0].Clipped() cotab = cotablst[0] if err = e.Where("finr = ? and custordernr = ?", G_FINR, cotab.Custordernr).OrderBy("supplygroupid").Find(&cotab.Wotablst); err != nil { return } for i, _ = range cotab.Wotablst { cotab.Wotablst[i].Clipped() } exist = true return } else { exist = false } return } //基于Oem订单号查客户订单 func (t *Pln_custorder) GetByOemOrderNrBySession(session *xorm.Session) (exist bool, cotab Pln_custorder, err error) { var cotablst []Pln_custorder if err = session.Where("finr = ? and oemordernr = ? and partfamilyid = ? and projnr = ?", G_FINR, t.Oemordernr, t.Partfamilyid, t.Projnr).Desc("credatuz").Limit(1, 0).Find(&cotablst); err != nil { return } if len(cotablst) > 0 { cotablst[0].Clipped() cotab = cotablst[0] exist = true return } else { exist = false } return } //基于零件族查找状态>=20的客户订单的最大OEMSEQ号 func (t *Pln_custorder) GetMaxOemSeqByPartFamily() (maxseq int, conr string, err error) { var cotablst []Pln_custorder e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and partfamilyid = ? and status >= ? and oemseq < ?", G_FINR, t.Projnr, t.Partfamilyid, common.CO_STATUS_PLANNED, 9999999999).NotIn("orderinfo", "INT", "REO").Desc("oemseq").Limit(1, 0).Find(&cotablst); err != nil { return } if len(cotablst) > 0 { maxseq = common.ValueToInt(cotablst[0].Oemseq, 0) conr = cotablst[0].Custordernr return } else { maxseq = 0 conr = "" } return } // 查询客户订单所有的SupplyGroup的零件清单 func (t *Pln_custorder) GetSGPartlst() (datalst []Pln_custorder_supplygroup_partlst, err error) { e := G_DbEngine err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("supplygroupid, partid").Find(&datalst) for i, _ := range datalst { datalst[i].Clipped() } return } // 查询客户订单所有的零件清单 func (t *Pln_custorder) GetPartlst() (datalst []Pln_custorder_partlst, err error) { e := G_DbEngine err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("supplygroupid, partid").Find(&datalst) for i, _ := range datalst { datalst[i].Clipped() } return } // 查询客户订单所有的属性清单 func (t *Pln_custorder) GetAttributelst() (datalst []Pln_custorder_atcodlst, err error) { e := G_DbEngine err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("pos").Find(&datalst) for i, _ := range datalst { datalst[i].Clipped() } return } // 查询客户订单所有的生产订单 func (t *Pln_custorder) GetWorkorderlst() (datalst []Pln_workorder, err error) { e := G_DbEngine err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("workordernr").Find(&datalst) for i, _ := range datalst { datalst[i].Clipped() } return } // 查询客户订单所有的生产订单及其零件清单 func (t *Pln_custorder) GetWorkorderPartlst() (datalst []Pln_workorder, err error) { var i, j int e := G_DbEngine err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).OrderBy("workordernr").Find(&datalst) for i, _ = range datalst { datalst[i].Clipped() if err = e.Where("finr = ? and workordernr = ?", G_FINR, datalst[i].Workordernr).OrderBy("partid").Find(&datalst[i].Partlst); err != nil { return } for j = 0; j < len(datalst[i].Partlst); j++ { datalst[i].Partlst[j].Clipped() } } return } // 为客户订单添加SupplyGroup的零件清单 func (t *Pln_custorder) AddSGPartlst(session *xorm.Session, datalst []Pln_custorder_supplygroup_partlst) (err error) { var cosgpartab Pln_custorder_supplygroup_partlst for i := 0; i < len(datalst); i++ { cosgpartab = Pln_custorder_supplygroup_partlst{} cosgpartab = datalst[i] if _, err = session.Insert(cosgpartab); err != nil { return } } return } // 为客户订单添加零件清单 func (t *Pln_custorder) AddPartlst(session *xorm.Session, datalst []Pln_custorder_partlst) (err error) { var copartab Pln_custorder_partlst for i := 0; i < len(datalst); i++ { copartab = Pln_custorder_partlst{} copartab = datalst[i] if _, err = session.Insert(copartab); err != nil { return } } return } // 为客户订单添加属性清单 func (t *Pln_custorder) AddAttributelst(session *xorm.Session, datalst []Pln_custorder_atcodlst) (err error) { var coattrtab Pln_custorder_atcodlst for i := 0; i < len(datalst); i++ { coattrtab = Pln_custorder_atcodlst{} coattrtab = datalst[i] if _, err = session.Insert(coattrtab); err != nil { return } } return } // 删除客户订单所有的SupplyGroup的零件清单 func (t *Pln_custorder) DelSGPartlst(session *xorm.Session, sgid string) bool { sql := "DELETE FROM `pln_custorder_supplygroup_partlst` WHERE finr = ? AND custordernr = ? AND supplygroupid = ?" if _, err := session.Exec(sql, G_FINR, t.Custordernr, sgid); err != nil { return false } return true } // 删除客户订单所有的零件清单 func (t *Pln_custorder) DelPartlst(session *xorm.Session) bool { sql := "DELETE FROM `pln_custorder_partlst` WHERE finr = ? AND custordernr = ?" if _, err := session.Exec(sql, G_FINR, t.Custordernr); err != nil { return false } return true } // 删除客户订单所有的属性清单 func (t *Pln_custorder) DelAttributelst(session *xorm.Session) bool { sql := "DELETE FROM `pln_custorder_atcodlst` WHERE finr = ? AND custordernr = ?" if _, err := session.Exec(sql, G_FINR, t.Custordernr); err != nil { return false } return true } //获取客户订单版本的最近值 func (t *Pln_custorder) GetLatestVersion() (ver int, err error) { var covtablst []Pln_custorder_ver e := G_DbEngine if err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).Desc("version").Limit(1, 0).Find(&covtablst); err != nil { return } if len(covtablst) > 0 { ver = covtablst[0].Version } else { ver = 0 } return } //获取客户订单版本的最近值 func (t *Pln_custorder) GetLatestVersionBySession(session *xorm.Session) (ver int, err error) { var covtablst []Pln_custorder_ver if err = session.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).Desc("version").Limit(1, 0).Find(&covtablst); err != nil { return } if len(covtablst) > 0 { ver = covtablst[0].Version } else { ver = 0 } return } //获取客户订单错误索引的最近值 func (t *Pln_custorder) GetLatestErrorIndex() (idx int, err error) { var coetablst []Pln_custorder_errorlst e := G_DbEngine if err = e.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).Desc("pos").Limit(1, 0).Find(&coetablst); err != nil { return } if len(coetablst) > 0 { idx = coetablst[0].Pos } else { idx = 0 } return } //获取客户订单错误索引的最近值 func (t *Pln_custorder) GetLatestErrorIndexBySession(session *xorm.Session) (idx int, err error) { var coetablst []Pln_custorder_errorlst if err = session.Where("finr = ? and custordernr = ?", G_FINR, t.Custordernr).Desc("pos").Limit(1, 0).Find(&coetablst); err != nil { return } if len(coetablst) > 0 { idx = coetablst[0].Pos } else { idx = 0 } return } //基于Oem订单号,零件族和年份获取最新的客户订单 func (t *Pln_custorder) GetByAsnDataBySession(swetyear string, session *xorm.Session) (exist bool, cotab Pln_custorder, err error) { var ( cotablst []Pln_custorder i int ) if err = session.Where("finr = ? and oemordernr = ? and partfamilyid = ? and swet like ?", G_FINR, t.Oemordernr, t.Partfamilyid, swetyear+"%").Desc("credatuz").Limit(1, 0).Find(&cotablst); err != nil { return } if len(cotablst) > 0 { cotablst[0].Clipped() cotab = cotablst[0] exist = true // 获取生产订单数据 if err = session.Where("finr = ? and custordernr = ? and partfamilyid = ?", G_FINR, cotab.Custordernr, cotab.Partfamilyid).OrderBy("workordernr").Find(&cotab.Wotablst); err != nil { return } for i = 0; i < len(cotab.Wotablst); i++ { cotab.Wotablst[i].Clipped() } return } else { exist = false } return } //基于Oem订单号查客户订单及其供应组零件清单 func (t *Pln_custorder) GetDataForCarmodelByOemorder(oemordnr, projnr string) (datalst []Pln_custorder, err error) { var i, j int e := G_DbEngine if err = e.Where("finr = ? and oemordernr = ? and projnr = ?", G_FINR, oemordnr, projnr).OrderBy("custordernr").Find(&datalst); err != nil { return } for i = 0; i < len(datalst); i++ { datalst[i].Clipped() // 获取客户订单的供应组零件数据 if err = e.Where("finr = ? and custordernr = ?", G_FINR, datalst[i].Custordernr).OrderBy("partfamilyid, supplygroupid, partid").Find(&datalst[i].Sgpartlst); err != nil { return } for j = 0; j < len(datalst[i].Sgpartlst); j++ { datalst[i].Sgpartlst[j].Clipped() } } return } // 获取指定项目和OEM订单号的整车副规格版本 func (t *Pln_custorder) GetCarModelSpec() (vcoslst []VCustorderSpec, err error) { e := G_DbEngine if err = e.Table("Pln_custorder_carmodelver").Alias("cocmv").Join("INNER", []string{"me_carmodel_ver", "cmv"}, "cocmv.finr = cmv.finr and cocmv.carmodelid = cmv.carmodelid and cocmv.version = cmv.version"). Where("cocmv.finr = ? and cocmv.oemordernr = ? and cocmv.projnr = ?", G_FINR, t.Oemordernr, t.Projnr).Desc("cocmv.credatuz").Find(&vcoslst); err != nil { return } return } //查询是否有未计划的订单 func (t *Pln_custorder) SelectTenArr() (data []Pln_custorder, err error) { e := G_DbEngine err = e.Where("finr = ? and status = ?", G_FINR, 10).Limit(1, 0).Find(&data) if err != nil { return data, err } return data, nil }