diff --git a/config/config.go b/config/config.go index 229fa31..297dfc6 100644 --- a/config/config.go +++ b/config/config.go @@ -33,6 +33,7 @@ type EnvConfig struct { Outbox string `yaml:"outbox"` Day int `yaml:"day"` Num int `yaml:"num"` + TimeInterval int64 `yaml:"timeinterval"` Printobjtype string `yaml:"printobjtype"` Msgtype string `yaml:"msgtype"` Begtime string `yaml:"begtime"` @@ -41,20 +42,21 @@ type EnvConfig struct { Packtog bool `yaml:"packtog"` } +var ConfValue EnvConfig + //read yaml config //注:path为yaml或yml文件的路径 func ReadYamlConfig(path string) (*EnvConfig, error) { - conf := &EnvConfig{} f, err := os.Open(path) if err != nil { return nil, err } else { - yaml.NewDecoder(f).Decode(conf) + yaml.NewDecoder(f).Decode(&ConfValue) } defer f.Close() - return conf, nil + return &ConfValue, nil } var AppConfig Config diff --git a/config/config.yaml b/config/config.yaml index d50199e..49489ba 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -34,6 +34,8 @@ inbox: Template\\Inbox outbox: Template\\Outbox # 间隔时间 day: 7 +#Etcd间隔时间(毫秒为单位) +timeinterval: 100 # 备份类型 printobjtype: "BBAASN" # 锁定区间 diff --git a/db/Pln_custorder_carmodelver.go b/db/Pln_custorder_carmodelver.go index 22f54fa..748cb43 100644 --- a/db/Pln_custorder_carmodelver.go +++ b/db/Pln_custorder_carmodelver.go @@ -76,6 +76,16 @@ func (t *Pln_custorder_carmodelver) Insert(session *xorm.Session) error { return nil } +//删 +func (t *Pln_custorder_carmodelver) DelSession(session *xorm.Session) bool { + + _, err := session.Where("finr = ? and oemordernr = ? and projnr = ?",G_FINR, t.Oemordernr, t.Projnr).Delete(&Pln_custorder_carmodelver{}) + if err != nil { + return false + } + return true +} + //删 func (t *Pln_custorder_carmodelver) Del() bool { e := G_DbEngine diff --git a/db/Pln_workorder.go b/db/Pln_workorder.go index 9a703da..17e260e 100644 --- a/db/Pln_workorder.go +++ b/db/Pln_workorder.go @@ -137,11 +137,22 @@ func (t *Pln_workorder) UpdateFieldsWo(session *xorm.Session, fields string) (ok //根据生产订单状态,改变客户订单 func (t *Pln_workorder) UpdateCustorderByWorkorder(session *xorm.Session, custordernr string) error { var plc Pln_workorder + var co Pln_custorder ok, err := session.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", G_FINR, custordernr, common.WO_STATUS_CLOSED).Get(&plc) if err != nil { return err } if !ok { + result, err := session.Table("pln_custorder").Where("finr = ? and custordernr = ?", G_FINR, custordernr).Get(&co) + if err != nil { + return err + } + if !result { + return errors.New("没有该记录!") + } + if co.Status == common.WO_STATUS_CLOSED { + return nil + } //生产订单不存在小于80的状态,更新生产订单 res, err := session.Table("pln_custorder").Cols("status", "lastuser").Where("finr = ? and custordernr = ?", G_FINR, custordernr).Update(&map[string]interface{}{"status": common.WO_STATUS_CLOSED, "lastuser": "asn_service"}) if err != nil { @@ -158,7 +169,10 @@ func (t *Pln_workorder) UpdateCustorderByWorkorder(session *xorm.Session, custor func (t *Pln_workorder) SelectByCustorder(session *xorm.Session, custordernr string) bool { var plc Pln_workorder ok, err := session.Table("pln_workorder").Where("finr = ? and custordernr = ? and worklineid = ? and status < ?", G_FINR, custordernr, "GRAMMER", common.WO_STATUS_CLOSED).Get(&plc) - if err != nil || ok { + if err != nil{ + return false + } + if ok{ return false } return true diff --git a/seq/Parsecarmodel.go b/seq/Parsecarmodel.go index 23a7722..739dca5 100644 --- a/seq/Parsecarmodel.go +++ b/seq/Parsecarmodel.go @@ -23,24 +23,24 @@ func RunCarmodelParser(projnr string) (err error) { msgtablst []db.Order_msg cotab db.Pln_custorder cotablst []db.Pln_custorder - cocmvtab db.Pln_custorder_carmodelver + cocmvtab, delmvtab db.Pln_custorder_carmodelver i int ok, match, isnew, alert bool cmid, alertinfo string version int - createtime time.Time - dura time.Duration + createtime time.Time + dura time.Duration session *xorm.Session ) bl_proj.Projectid = projnr // 第一步:加载项目的相关数据和已有车型规格 if err = bl_proj.GetCarModelList(); err != nil { - glog.InfoExtln("解析车型", "GetCarModelList is:",err) + glog.InfoExtln("解析车型", "GetCarModelList is:", err) return } fmt.Println("加载项目:", projnr, "的车型主数据成功!") - glog.InfoExtln("解析车型", "加载项目:",projnr) + glog.InfoExtln("解析车型", "加载项目:", projnr) // 第二步:加载项目的零件数据 if err = bl_proj.GetPartList(); err != nil { return @@ -61,7 +61,7 @@ func RunCarmodelParser(projnr string) (err error) { for i = 0; i < len(msgtablst); i++ { // 消息创建时间超过10分钟以上再处理(等客户订单的多个SEQ文件凑齐) if createtime, err = common.DateParse(msgtablst[i].Credatuz, "YmdHis"); err != nil { - fmt.Println("消息",msgtablst[i].Msgid,"的创建时间无法解析!") + fmt.Println("消息", msgtablst[i].Msgid, "的创建时间无法解析!") continue } dura = time.Now().Sub(createtime) @@ -133,7 +133,16 @@ func RunCarmodelParser(projnr string) (err error) { version = bl_cmspec.Version } } - + //删掉对应的车型 + delmvtab = db.Pln_custorder_carmodelver{Finr: db.G_FINR} + delmvtab.Oemordernr = msgtablst[i].Msgobjid + delmvtab.Projnr = msgtablst[i].Msg_cpara1 + res := delmvtab.DelSession(session) + if !res { + session.Rollback() + session.Close() + return + } // 更新OEM订单的车型规格表 cocmvtab = db.Pln_custorder_carmodelver{Finr: db.G_FINR} cocmvtab.Carmodelid = bl_cm.Carmodelid diff --git a/service/Asn.go b/service/Asn.go index 515af7b..cb92256 100644 --- a/service/Asn.go +++ b/service/Asn.go @@ -94,10 +94,8 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) { } // 关闭生产订单 match = true - isflag := false for i = 0; i < len(cotab.Wotablst); i++ { if strings.TrimSpace(cotab.Wotablst[i].Supplygroupid) != strings.TrimSpace(bl_t2ord.Asnordertab.Supplygroupid) || strings.TrimSpace(cotab.Wotablst[i].Partfamilyid) != strings.TrimSpace(bl_t2ord.Asnordertab.Partfamilyid) { - isflag = true continue } if cotab.Wotablst[i].Status < common.WO_STATUS_CLOSED && cotab.Wotablst[i].Status >= common.WO_STATUS_RELEASED { @@ -133,7 +131,6 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) { cotab.Wotablst[i].Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") res, err := cotab.Wotablst[i].UpdateFieldsWo(session, "status, lastmodif, lastuser") if err != nil || res < 1 { - isflag = true session.Rollback() glog.InfoExtln("grammerasn", "err :", err) continue @@ -143,7 +140,6 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) { glog.InfoExtln("grammerasn", "err :", err) continue } else { - isflag = true err = errors.New(fmt.Sprintf("扶手订单%s 订单状态不符合!", cotab.Wotablst[i].Workordernr)) glog.InfoExtln("grammerasn", "err :", err) session.Rollback() @@ -156,30 +152,28 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) { glog.InfoExtln("grammerasn", "err :", err) return } - if !isflag { - //判断该客户订单是否有小于80的GRAMMEER订单,如果存在则不更新 - ok := wotab.SelectByCustorder(session, cotab.Custordernr) - if ok { - - glog.InfoExtln("grammerasninfo", "bl_t2ord.Asnordertab.Asnnr :", bl_t2ord.Asnordertab.Asnnr) - glog.InfoExtln("grammerasninfo", "bl_t2ord.Asnordertab.Asnnr :", bl_t2ord.Asnordertab.Oemordernr) - //置位对应的工单 - cache := new(db.Jit_asnorder_cache) - cache.Asnnr = bl_t2ord.Asnordertab.Asnnr - cache.Oemordernr = bl_t2ord.Asnordertab.Oemordernr - cache.Partfamilyid = bl_t2ord.Asnordertab.Partfamilyid - cache.Flag = 1 - cache.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") - cache.Lastuser = "asn_service" - if err = cache.UpdateFields(session, "flag,lastmodif,lastuser"); err != nil { - glog.InfoExtln("grammerasn", "err :", err) - session.Rollback() - return - } - } else { - glog.InfoExtln("grammerasn暂时不能置位的订单", "cotab.Custordernr :", cotab.Custordernr) + glog.InfoExtln("grammerasn", "err :", err) + //判断该客户订单是否有小于80的GRAMMEER订单,如果存在则不更新 + ok := wotab.SelectByCustorder(session, cotab.Custordernr) + glog.InfoExtln("grammerasn", "ok :", ok) + if ok { + glog.InfoExtln("grammerasninfo", "bl_t2ord.Asnordertab.Asnnr :", bl_t2ord.Asnordertab.Asnnr) + glog.InfoExtln("grammerasninfo", "bl_t2ord.Asnordertab.Asnnr :", bl_t2ord.Asnordertab.Oemordernr) + //置位对应的工单 + cache := new(db.Jit_asnorder_cache) + cache.Asnnr = bl_t2ord.Asnordertab.Asnnr + cache.Oemordernr = bl_t2ord.Asnordertab.Oemordernr + cache.Partfamilyid = bl_t2ord.Asnordertab.Partfamilyid + cache.Flag = 1 + cache.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") + cache.Lastuser = "asn_service" + if err = cache.UpdateFields(session, "flag,lastmodif,lastuser"); err != nil { + glog.InfoExtln("grammerasn", "err :", err) + session.Rollback() + return } - + } else { + glog.InfoExtln("grammerasn暂时不能置位的订单", "cotab.Custordernr :", cotab.Custordernr) } session.Commit() } @@ -203,6 +197,6 @@ func (bt *BL_Tier2ASN) SetParsedStatus() (err error) { return } //删除文件对应的缓存 - cache.DelInfo() + //cache.DelInfo() return } diff --git a/service/Workline.go b/service/Workline.go index 160281f..9213cd6 100644 --- a/service/Workline.go +++ b/service/Workline.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "leit.com/leit_seat_aps/common" + conf "leit.com/leit_seat_aps/config" "leit.com/leit_seat_aps/db" "leit.com/leit_seat_aps/etcd" "leit.com/leit_seat_aps/glog" @@ -140,7 +141,7 @@ func (bl_wl *BL_Workline) LoadPlannedTask() (err error) { // 基于指定派工数量获取产线需派工生产订单 // 返回需要派工下达的排好序的生产订单 -func (bl_wl *BL_Workline) GetTaskToReleaseByQty() (bl_wolst []BL_WorkOrder,err error) { +func (bl_wl *BL_Workline) GetTaskToReleaseByQty() (bl_wolst []BL_WorkOrder, err error) { var ( totalRelQty int toRelQty int @@ -229,8 +230,8 @@ LOOP: swet2 = wotablst2[0].Swet } //记录日志 - glog.InfoExtln("scheduler","swet1",swet1) - glog.InfoExtln("scheduler","swet2",swet2) + glog.InfoExtln("scheduler", "swet1", swet1) + glog.InfoExtln("scheduler", "swet2", swet2) if common.ValueIsEmpty(swet1) { if common.ValueIsEmpty(swet2) { @@ -315,7 +316,7 @@ LOOP: } } } - } else if len(data) == 1{ + } else if len(data) == 1 { //项目1 info1 := strings.Split(data[0], ":") if len(info1) >= 2 { @@ -349,7 +350,7 @@ LOOP: bl_wo.Workordertab = wotablst1[i] bl_wolst = append(bl_wolst, bl_wo) } - }else { + } else { return } } @@ -393,7 +394,7 @@ LOOP: // 基于指定时间点获取产线需派工生产订单 // 返回需要派工下达的排好序的生产订单 -func (bl_wl *BL_Workline) GetTaskToReleaseByTime() (bl_wolst []BL_WorkOrder,err error) { +func (bl_wl *BL_Workline) GetTaskToReleaseByTime() (bl_wolst []BL_WorkOrder, err error) { var ( i int wotablst []db.Pln_workorder @@ -1116,9 +1117,9 @@ LOOPTIME: looptime++ if len(wotablst) > 0 { startseq = wotablst[0].Schedseq + 1 - } else if looptime >= 100{ + } else if looptime >= 100 { startseq = 1 - }else { + } else { glog.InfoExtln("排序调度", "LOOP起始排序号 = ", bl_wl.WorklineId, startseq) time.Sleep(100 * time.Millisecond) goto LOOPTIME @@ -1133,7 +1134,12 @@ LOOPTIME: err = etcd.G_jobLock.TryLock("lock") if err != nil { fmt.Println("seq groutine lock fail!") - time.Sleep(10 * time.Millisecond) + if conf.ConfValue.TimeInterval < 1 { + time.Sleep(10 * time.Millisecond) + } else { + time.Sleep(time.Duration(conf.ConfValue.TimeInterval) * time.Millisecond) + } + glog.InfoExtln("排序调度", "conf.ConfValue.TimeInterval = ",conf.ConfValue.TimeInterval) goto LOOP } //开启事务 @@ -1150,7 +1156,7 @@ LOOPTIME: wotab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") // 处理生产订单的拣料零件 - if err = wotab.UpdateFields(session,"schedseq,status,pickstatus,lastmodif"); err != nil { + if err = wotab.UpdateFields(session, "schedseq,status,pickstatus,lastmodif"); err != nil { glog.InfoExtln("排序调度", "err is : ", err) session.Rollback() session.Close() @@ -1179,7 +1185,7 @@ LOOPTIME: startseq = startseq + 1 // 更新客户订单状态 cotab = db.Pln_custorder{Finr: db.G_FINR, Custordernr: wotab.Custordernr, Status: common.WO_STATUS_RELEASED} - err = cotab.UpdateToFields(session,"status") + err = cotab.UpdateToFields(session, "status") if err != nil { glog.InfoExtln("排序调度", "err is : ", err) session.Rollback()