package db import ( "errors" "github.com/go-xorm/xorm" "leit.com/leit_seat_aps/common" "strconv" "xorm.io/core" ) //CALLOFF信息缓存表 type Pln_calloffdata_landing struct { Finr int `xorm:"pk" json:"pln_calloffdata_landing.finr"` Calloffnr int `xorm:"pk" json:"pln_calloffdata_landing.calloffnr"` Consumeplant int `xorm:"pk" json:"pln_calloffdata_landing.consumeplant"` Partfamilyid string `xorm:"pk" json:"pln_calloffdata_landing.partfamilyid"` Oemordernr string `json:"pln_calloffdata_landing.oemordernr"` Calloffsortnr int `json:"pln_calloffdata_landing.calloffsortnr"` Projnr string `json:"pln_calloffdata_landing.projnr"` Seqmode int `json:"pln_calloffdata_landing.seqmode"` Checksequence int `json:"pln_calloffdata_landing.checksequence"` Msgtime string `json:"pln_calloffdata_landing.msgtime"` Swet string `json:"pln_calloffdata_landing.swet"` Consigneeplant int `json:"pln_calloffdata_landing.consigneeplant"` Consigneecompany int `json:"pln_calloffdata_landing.consigneecompany"` Consumecompany int `json:"pln_calloffdata_landing.consumecompany"` Unloadingplace string `json:"pln_calloffdata_landing.unloadingplace"` Vehicleidset string `json:"pln_calloffdata_landing.vehicleidset"` Vehicleid string `json:"pln_calloffdata_landing.vehicleid"` Parsed int `json:"pln_calloffdata_landing.parsed"` Handlestatus string `json:"pln_calloffdata_landing.handlestatus"` Edifile string `json:"pln_calloffdata_landing.edifile"` Lastmodif string `json:"pln_calloffdata_landing.lastmodif"` Lastuser string `json:"pln_calloffdata_landing.lastuser"` Credatuz string `json:"pln_calloffdata_landing.credatuz"` } func (t *Pln_calloffdata_landing) Clipped() { common.TrimStruct(t, *t) } func (t *Pln_calloffdata_landing) TableName() string { return "pln_calloffdata_landing" } //增 func (t *Pln_calloffdata_landing) Add() error { e := G_DbEngine cfdatatab := new(Pln_calloffdata_landing) affw, err := e.Table("pln_calloffdata_landing").ID(core.PK{G_FINR, t.Calloffnr, t.Consumeplant, t.Partfamilyid}).Count(cfdatatab) if err != nil { return err } if affw > 0 { return errors.New("数据已经存在!") } _, err = e.Table("pln_calloffdata_landing").Insert(t) if err != nil { return err } return nil } //增 func (t *Pln_calloffdata_landing) Insert(session *xorm.Session) error { cfdatatab := new(Pln_calloffdata_landing) affw, err := session.Table("pln_calloffdata_landing").ID(core.PK{G_FINR, t.Calloffnr, t.Consumeplant, t.Partfamilyid}).Count(cfdatatab) if err != nil { return err } if affw > 0 { return errors.New("数据已经存在!") } _, err = session.Table("pln_calloffdata_landing").Insert(t) if err != nil { return err } return nil } //删 func (t *Pln_calloffdata_landing) Del() bool { e := G_DbEngine _, err := e.ID(core.PK{G_FINR, t.Calloffnr, t.Consumeplant, t.Partfamilyid}).Delete(&Pln_calloffdata_landing{}) if err != nil { return false } return true } //改 func (t *Pln_calloffdata_landing) Update() bool { e := G_DbEngine _, err := e.ID(core.PK{G_FINR, t.Calloffnr, t.Consumeplant, t.Partfamilyid}).Update(t) if err != nil { return false } return true } //更新指定字段 func (t *Pln_calloffdata_landing) UpdateFieldsWithoutSession(fields string) (err error) { e := G_DbEngine if _, err = e.Table("pln_calloffdata_landing").ID(core.PK{G_FINR, t.Calloffnr, t.Consumeplant, t.Partfamilyid}).Cols(fields).Update(t); err != nil { return } return } //更新指定字段 func (t *Pln_calloffdata_landing) UpdateFields(session *xorm.Session, fields string) (err error) { if _, err = session.Table("pln_calloffdata_landing").ID(core.PK{G_FINR, t.Calloffnr, t.Consumeplant, t.Partfamilyid}).Cols(fields).Update(t); err != nil { return } return } //查 func (t *Pln_calloffdata_landing) SelectOne() (data Pln_calloffdata_landing, err error) { e := G_DbEngine _, err = e.ID(core.PK{G_FINR, t.Calloffnr, t.Consumeplant, t.Partfamilyid}).Get(&data) if err != nil { return data, err } return data, nil } //按照calloff导入的数据,生成对应的导入文件数组 func (t *Pln_calloffdata_landing) GetUnparsedLandingData() (cflandtablst []Pln_calloffdata_landing, err error) { cflandtablst = []Pln_calloffdata_landing{} e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and parsed = ?", G_FINR, t.Projnr, 0).Asc("calloffsortnr", "calloffnr").Find(&cflandtablst); err != nil { return } for i, _ := range cflandtablst { cflandtablst[i].Clipped() } return } //按照calloff导入的数据,生成对应的导入文件数组 func (t *Pln_calloffdata_landing) ExistUnParsedCfByProjectOemorderPf(projnr, oemorder, pfid string) (exist bool, err error) { var ( cflandtab Pln_calloffdata_landing cflandtablst []Pln_calloffdata_landing ) e := G_DbEngine exist = false // 判断同客户订单指定PF的CALLOFF是否已进来 if err = e.Where("finr = ? and projnr = ? and oemordernr = ? and partfamilyid = ?", G_FINR, projnr, oemorder, pfid).Find(&cflandtablst); err != nil { return } if len(cflandtablst) <= 0 { exist = true return } // 判断是否存在未解析或解析错误的calloff for _, cflandtab = range cflandtablst { if cflandtab.Parsed != common.EDI_PARSE_YES { exist = true return } if cflandtab.Handlestatus != common.CO_PARSE_STATUS_OK { exist = true return } } return } // 基于项目 CS和零件族查询记录 func (t *Pln_calloffdata_landing) GetByProjectCheckSequencePartfamily() (cflandtablst []Pln_calloffdata_landing, err error) { var i int e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and checksequence = ? and partfamilyid = ?", G_FINR, t.Projnr, t.Checksequence, t.Partfamilyid).Desc("calloffsortnr").Find(&cflandtablst); err != nil { return } for i = 0; i < len(cflandtablst); i++ { cflandtablst[i].Clipped() } return } // 基于项目 OEMORDER查询记录 func (t *Pln_calloffdata_landing) GetByProjectOemorder() (cflandtablst []Pln_calloffdata_landing, err error) { var i int e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and oemordernr = ?", G_FINR, t.Projnr, t.Oemordernr).Desc("credatuz").Find(&cflandtablst); err != nil { return } for i = 0; i < len(cflandtablst); i++ { cflandtablst[i].Clipped() } return } //获取客户订单CALLOFF消息的版本号,如果没有版本记录,则默认返回0 func (t *Pln_calloffdata_landing) GetParsedMaxCheckSequence(projnr string, pfid string) (maxchecksequence int, err error) { var cflandtablst []Pln_calloffdata_landing cflandtablst = []Pln_calloffdata_landing{} e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and partfamilyid = ? and parsed = ? and handlestatus = ?", G_FINR, projnr, pfid, common.EDI_PARSE_YES, "OK").Desc("checksequence").Limit(1, 0).Find(&cflandtablst); err != nil { return } if len(cflandtablst) > 0 { maxchecksequence = cflandtablst[0].Checksequence } else { maxchecksequence = 0 } return } //基于项目号、零件族和CheckSequence号获取Calloff数据行 func (t *Pln_calloffdata_landing) GetPrevCalloff() (cflandtab Pln_calloffdata_landing, err error) { var cflandtablst []Pln_calloffdata_landing cflandtablst = []Pln_calloffdata_landing{} e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and partfamilyid = ? and checksequence = ?", G_FINR, t.Projnr, t.Partfamilyid, t.Checksequence).Desc("checksequence").Limit(1, 0).Find(&cflandtablst); err != nil { return } if len(cflandtablst) > 0 { cflandtab = cflandtablst[0] } else { err = errors.New("指定项目:" + t.Projnr + "零件族:" + t.Partfamilyid + "CheckSequence:" + strconv.Itoa(t.Checksequence) + "的Calloff记录不存在!") } return } //获取指定项目、零件族,间隔checksequence区间内的报错的解析记录数 func (t *Pln_calloffdata_landing) AnyErrorRecordBetweenCheckSequence(projnr, pfid string, ifrom, ito int) (exist bool, err error) { var cflandtablst []Pln_calloffdata_landing cflandtablst = []Pln_calloffdata_landing{} e := G_DbEngine if err = e.Where("finr = ? and projnr = ? and partfamilyid = ? and checksequence > ? and checksequence < ? and ( handlestatus = ? or handlestatus = ?)", G_FINR, projnr, pfid, ifrom, ito, "ER", "RC").Asc("checksequence").Find(&cflandtablst); err != nil { return } if len(cflandtablst) > 0 { exist = true return } else { exist = false return } return }