From a46da4a61e09b413c98db57dc5245ee2f0db8829 Mon Sep 17 00:00:00 2001 From: louwenzhi Date: Wed, 25 Aug 2021 17:53:44 +0800 Subject: [PATCH] =?UTF-8?q?tod=20parsed=20=3D=202=20=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/bbaasn/main.go | 53 +++++---- cmd/calloff/main.go | 46 ++++---- cmd/grammerasn/main.go | 35 +++--- cmd/mes/main.go | 41 ++++--- cmd/msg/main.go | 47 ++++---- cmd/printer/main.go | 41 ++++--- cmd/scheduler/main.go | 50 ++++---- cmd/seq/main.go | 50 ++++---- cmd/tod/main.go | 42 +++---- common/Utils.go | 4 + config/config.go | 8 +- db/Jit_asnhead_landing.go | 6 + db/Jit_asnorder_cache.go | 2 +- db/PrintTask.go | 12 +- seq/Seqtask.go | 41 ++++--- service/Asn.go | 9 +- service/Custorder.go | 1 + service/Snrtab.go | 236 ++++++++++++++++++++------------------ tod/Parser.go | 3 +- tod/Tod_test.go | 19 --- tod/Todtask.go | 173 ++++++++++++++-------------- 21 files changed, 467 insertions(+), 452 deletions(-) diff --git a/cmd/bbaasn/main.go b/cmd/bbaasn/main.go index 4331209..e3fd413 100644 --- a/cmd/bbaasn/main.go +++ b/cmd/bbaasn/main.go @@ -3,16 +3,15 @@ package main import ( "flag" "fmt" + "github.com/kardianos/service" "leit.com/leit_seat_aps/asn" "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/config" "leit.com/leit_seat_aps/db" - "leit.com/leit_seat_aps/etcd" "leit.com/leit_seat_aps/glog" "leit.com/leit_seat_aps/msg" "log" "os" - "github.com/kardianos/service" "path/filepath" ) @@ -103,11 +102,11 @@ func imain(){ return } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) @@ -117,26 +116,26 @@ func imain(){ return } //创建snretcd连接 - if err = etcd.InitSnrJobLock(); err != nil { - glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") - return - } - - // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //if err = etcd.InitSnrJobLock(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") + // return + //} + // + //// 创建etcd监听连接 + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} // 为发运单生成独立的ASN,基于发运单消息 go msg.Asn() //生成发运单 diff --git a/cmd/calloff/main.go b/cmd/calloff/main.go index 124766f..94643d6 100644 --- a/cmd/calloff/main.go +++ b/cmd/calloff/main.go @@ -96,11 +96,11 @@ func imain() { } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", @@ -117,26 +117,26 @@ func imain() { } //创建snretcd连接 - if err = etcd.InitSnrJobLock(); err != nil { - glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") - return - } + //if err = etcd.InitSnrJobLock(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") + // return + //} // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} // Calloff文件解析和保存,读取Calloff信息并生成发运包装 go calloff.ParseCalloffNew() diff --git a/cmd/grammerasn/main.go b/cmd/grammerasn/main.go index abfd7bc..ed3fbc3 100644 --- a/cmd/grammerasn/main.go +++ b/cmd/grammerasn/main.go @@ -8,7 +8,6 @@ import ( "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/config" "leit.com/leit_seat_aps/db" - "leit.com/leit_seat_aps/etcd" "leit.com/leit_seat_aps/glog" "log" "os" @@ -94,11 +93,11 @@ func imain(){ return } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) @@ -108,20 +107,20 @@ func imain(){ return } // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} //解析asn文件 go asn.LoadAsnToLandingData() diff --git a/cmd/mes/main.go b/cmd/mes/main.go index 221f4f1..cecf66a 100644 --- a/cmd/mes/main.go +++ b/cmd/mes/main.go @@ -8,7 +8,6 @@ import ( "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/config" "leit.com/leit_seat_aps/db" - "leit.com/leit_seat_aps/etcd" "leit.com/leit_seat_aps/glog" "leit.com/leit_seat_aps/mes" "log" @@ -110,12 +109,12 @@ func imain() { log.Printf("failed to read yaml config due to: %v", err) return } - //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + ////加载配置 + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) @@ -125,20 +124,20 @@ func imain() { return } // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} // 基于派工下达计划生成生产包装 mes.GenProductionPack() } diff --git a/cmd/msg/main.go b/cmd/msg/main.go index cc5f438..be4eb3f 100644 --- a/cmd/msg/main.go +++ b/cmd/msg/main.go @@ -7,7 +7,6 @@ import ( "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/config" "leit.com/leit_seat_aps/db" - "leit.com/leit_seat_aps/etcd" "leit.com/leit_seat_aps/glog" "leit.com/leit_seat_aps/msg" "leit.com/leit_seat_aps/seq" @@ -97,11 +96,11 @@ func imain() { return } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) @@ -112,26 +111,26 @@ func imain() { } //创建snretcd连接 - if err = etcd.InitSnrJobLock(); err != nil { - glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") - return - } + //if err = etcd.InitSnrJobLock(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") + // return + //} // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} // 运行二级件需求计算服务 go tier2.RunDemandCollectorTask() //msg消息推送 diff --git a/cmd/printer/main.go b/cmd/printer/main.go index 734ca1d..49dbb73 100644 --- a/cmd/printer/main.go +++ b/cmd/printer/main.go @@ -8,7 +8,6 @@ import ( "leit.com/leit_seat_aps/config" "leit.com/leit_seat_aps/db" Engine "leit.com/leit_seat_aps/engine" - "leit.com/leit_seat_aps/etcd" "leit.com/leit_seat_aps/glog" "log" "os" @@ -95,11 +94,11 @@ func imain() { return } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) @@ -109,21 +108,21 @@ func imain() { glog.Infoln("初始化数据库", "InitMssqlDb return fail") return } - // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //// 创建etcd监听连接 + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} //打印服务 Engine.RunEngine(conf) } diff --git a/cmd/scheduler/main.go b/cmd/scheduler/main.go index 79f6ddd..e90fff5 100644 --- a/cmd/scheduler/main.go +++ b/cmd/scheduler/main.go @@ -95,11 +95,11 @@ func imain() { return } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) @@ -113,26 +113,26 @@ func imain() { glog.Infoln("初始化EtCD连接", "InitJobLock return fail") return } - //创建snretcd连接 - if err = etcd.InitSnrJobLock(); err != nil { - glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") - return - } - // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + ////创建snretcd连接 + //if err = etcd.InitSnrJobLock(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") + // return + //} + //// 创建etcd监听连接 + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} // 生产派工 go seq.Scheduler() diff --git a/cmd/seq/main.go b/cmd/seq/main.go index 916ab7c..fdd8cf0 100644 --- a/cmd/seq/main.go +++ b/cmd/seq/main.go @@ -95,11 +95,11 @@ func imain(){ return } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) @@ -114,26 +114,26 @@ func imain(){ return } //创建snretcd连接 - if err = etcd.InitSnrJobLock(); err != nil { - glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") - return - } - - // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //if err = etcd.InitSnrJobLock(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitSnrJobLock return fail") + // return + //} + // + //// 创建etcd监听连接 + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} //测试SEQ文件解析和保存 go seq.ParseSeqNew() diff --git a/cmd/tod/main.go b/cmd/tod/main.go index bef256d..7dc0450 100644 --- a/cmd/tod/main.go +++ b/cmd/tod/main.go @@ -3,6 +3,7 @@ package main import ( "flag" "fmt" + "github.com/kardianos/service" "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/config" "leit.com/leit_seat_aps/db" @@ -11,7 +12,6 @@ import ( "leit.com/leit_seat_aps/tod" "log" "os" - "github.com/kardianos/service" "path/filepath" ) @@ -103,11 +103,11 @@ func imain() { } //加载配置 - err = config.InitConfig() - if err != nil { - log.Printf("failed to read yaml config due to: %v", err) - return - } + //err = config.InitConfig() + //if err != nil { + // log.Printf("failed to read yaml config due to: %v", err) + // return + //} //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", @@ -124,21 +124,21 @@ func imain() { return } - // 创建etcd监听连接 - if err = etcd.InitEtcdClient(); err != nil { - glog.Infoln("初始化EtCD连接", "InitJobLock return fail") - return - } - - // register app service to etcd - if config.AppConfig.UseETCD { - CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) - defer CheckServiceDao.RevokeLease() - err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) - if err != nil { - log.Fatal("register service to etcd failed, error:", err) - } - } + //// 创建etcd监听连接 + //if err = etcd.InitEtcdClient(); err != nil { + // glog.Infoln("初始化EtCD连接", "InitJobLock return fail") + // return + //} + // + //// register app service to etcd + //if config.AppConfig.UseETCD { + // CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr) + // defer CheckServiceDao.RevokeLease() + // err = CheckServiceDao.RegisterService(config.AppConfig.App.Name) + // if err != nil { + // log.Fatal("register service to etcd failed, error:", err) + // } + //} //解析tod文件缓存并创建客户订单头 go tod.ParseTodNew() diff --git a/common/Utils.go b/common/Utils.go index 6342544..d08b750 100644 --- a/common/Utils.go +++ b/common/Utils.go @@ -477,6 +477,10 @@ func CreateCaptchaFive() string { return fmt.Sprintf("%05v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(100000)) } +func CreateCaptchaFour() string { + return fmt.Sprintf("%04v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000)) +} + /*! username 发送者邮件 password 授权码 diff --git a/config/config.go b/config/config.go index 8dd3cf5..229fa31 100644 --- a/config/config.go +++ b/config/config.go @@ -34,6 +34,7 @@ type EnvConfig struct { Day int `yaml:"day"` Num int `yaml:"num"` Printobjtype string `yaml:"printobjtype"` + Msgtype string `yaml:"msgtype"` Begtime string `yaml:"begtime"` Endtime string `yaml:"endtime"` Shiptog bool `yaml:"shiptog"` @@ -56,12 +57,11 @@ func ReadYamlConfig(path string) (*EnvConfig, error) { return conf, nil } - var AppConfig Config type Config struct { - *App `mapstructure:"app"` - *ETCD `mapstructure:"etcd"` + *App `mapstructure:"app"` + *ETCD `mapstructure:"etcd"` } type App struct { @@ -99,4 +99,4 @@ func InitConfig() (err error) { return } return nil -} \ No newline at end of file +} diff --git a/db/Jit_asnhead_landing.go b/db/Jit_asnhead_landing.go index be1fb1c..91b9861 100644 --- a/db/Jit_asnhead_landing.go +++ b/db/Jit_asnhead_landing.go @@ -100,6 +100,7 @@ func (t *Jit_asnhead_landing) Del() bool { func (t *Jit_asnhead_landing) Delelte(session *xorm.Session) bool { var ( asnitemtab Jit_asnitem_landing + asncachetab Jit_asnorder_cache asnordtab Jit_asnorder_landing err error ) @@ -113,6 +114,11 @@ func (t *Jit_asnhead_landing) Delelte(session *xorm.Session) bool { if _, err = session.Delete(asnitemtab); err != nil { return false } + // 删除缓存数据 + asncachetab = Jit_asnorder_cache{Finr: G_FINR, Asnnr: t.Asnnr} + if _, err = session.Delete(asncachetab); err != nil { + return false + } // 删除ASN头 if _, err = session.ID(core.PK{G_FINR, t.Asnnr}).Delete(&Jit_asnhead_landing{}); err != nil { return false diff --git a/db/Jit_asnorder_cache.go b/db/Jit_asnorder_cache.go index 0fb7316..9e6527f 100644 --- a/db/Jit_asnorder_cache.go +++ b/db/Jit_asnorder_cache.go @@ -92,7 +92,7 @@ func (t *Jit_asnorder_cache) Del() bool { //删 func (t *Jit_asnorder_cache) DelInfo() bool { e := G_DbEngine - _, err := e.Table("jit_asnorder_cache").Where("finr = ? and asnnr = ?", G_FINR, t.Asnnr).Delete(&Jit_asnorder_cache{}) + _, err := e.Table("jit_asnorder_cache").Where("finr = ? and flag = ?", G_FINR, 1).Delete(&Jit_asnorder_cache{}) if err != nil { return false } diff --git a/db/PrintTask.go b/db/PrintTask.go index 50cb5f6..3e23974 100644 --- a/db/PrintTask.go +++ b/db/PrintTask.go @@ -127,7 +127,7 @@ func (t *PrintTask) GenExcelFile(conf *conf.EnvConfig) error { } } else if pd.Varname == "RSUM" { result, _ := xlFile.CalcCellValue("Sheet1", pd.Varpos) - xlFile.SetCellValue("Sheet1", pd.Varpos, common.ValueToInt(result,0)) + xlFile.SetCellValue("Sheet1", pd.Varpos, common.ValueToInt(result, 0)) } else { xlFile.SetCellValue("Sheet1", pd.Varpos, pd.Varvalue) } @@ -155,11 +155,17 @@ func (t *PrintTask) GetPrintTaskList(stalist []string, prnlist []string, conf *c err error ) e := G_DbEngine + + Msgtypes := strings.Split(conf.Msgtype, ",") + + if len(Msgtypes) == 0{ + Msgtypes = []string{"BBAASN"} + } // 获取所有开口的打印任务头 if len(prnlist) > 0 { - err = e.Where("finr = ?", conf.Finr).In("status", stalist).In("printerid", prnlist).OrderBy("printheadid").Find(&printheadlist) + err = e.Where("finr = ?", conf.Finr).In("status", stalist).In("printerid", prnlist).In("msgtype", Msgtypes).OrderBy("printheadid").Find(&printheadlist) } else { - err = e.Where("finr = ?", conf.Finr).In("status", stalist).OrderBy("printheadid").Find(&printheadlist) + err = e.Where("finr = ?", conf.Finr).In("status", stalist).OrderBy("printheadid").In("msgtype", Msgtypes).Find(&printheadlist) } if err != nil { glog.Infoln("failed to query printheadtab due to: ", err) diff --git a/seq/Seqtask.go b/seq/Seqtask.go index db08289..a7a68c1 100644 --- a/seq/Seqtask.go +++ b/seq/Seqtask.go @@ -136,13 +136,13 @@ func ParseSeqOrder() { // 读取SEQ的LandingData for j, _ = range seqlandtablst { /* 获取锁 */ - LOOP: - err = etcd.G_jobLock.TryLock("lock") - if err != nil { - fmt.Println("seq groutine lock fail!") - time.Sleep(10 * time.Millisecond) - goto LOOP - } + //LOOP: + // err = etcd.G_jobLock.TryLock("lock") + // if err != nil { + // fmt.Println("seq groutine lock fail!") + // time.Sleep(5 * time.Millisecond) + // goto LOOP + // } fmt.Println("seq groutine lock success!") // 初始化客户订单对象并获取客户订单头,如果不存在则返回 cotab = db.Pln_custorder{Projnr: seqlandtablst[j].Projnr, Oemordernr: seqlandtablst[j].Oemordernr, Partfamilyid: seqlandtablst[j].Partfamilyid} @@ -160,7 +160,9 @@ func ParseSeqOrder() { bl_co.SeqType = seqlandtablst[j].Seqmode bl_co.Oemordernr = seqlandtablst[j].Oemordernr } else { + glog.InfoExtln("custorder信息", "custorder due to: ", bl_co.Custordernr) etcd.G_jobLock.UnLock() + time.Sleep(10 * time.Millisecond) continue } @@ -176,10 +178,12 @@ func ParseSeqOrder() { if bl_co.Custordertab.Handlestatus != common.CO_PARSE_STATUS_OK { fmt.Println("验证客户订单状态是否满足更新条件!", bl_co.Custordertab.Handlestatus, common.CO_PARSE_STATUS_OK) etcd.G_jobLock.UnLock() + time.Sleep(10 * time.Millisecond) continue } // 判断订单状态,如果是>=26,则跳出循环 if bl_co.Custordertab.Status >= common.CO_STATUS_RELEASED { + glog.InfoExtln("custorder信息", "custorder due to: ", bl_co.Custordernr) // 客户订单状态不允许更新,设置解析状态为9 seqlandtablst[j].Parsed = common.EDI_PARSE_ERROR seqlandtablst[j].Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") @@ -189,6 +193,7 @@ func ParseSeqOrder() { return } etcd.G_jobLock.UnLock() + time.Sleep(10 * time.Millisecond) continue } @@ -209,6 +214,7 @@ func ParseSeqOrder() { glog.InfoExtln("解析并读取SEQ", fmt.Sprintf("当前零件族%s的最大OEMSEQ%d,与SEQ订单%s的排序%d不连续!", bl_co.Custordertab.Partfamilyid, prevseq, seqlandtablst[j].Oemordernr, common.ValueToInt(seqlandtablst[j].Oemseq, 0))) etcd.G_jobLock.UnLock() + time.Sleep(10 * time.Millisecond) continue } } @@ -222,6 +228,7 @@ func ParseSeqOrder() { if !ok { glog.InfoExtln("解析并读取SEQ", fmt.Sprintf("当前客户订单%s的SEQ解析版本1尚未解析!", seqlandtablst[j].Oemordernr)) etcd.G_jobLock.UnLock() + time.Sleep(10 * time.Millisecond) continue } } @@ -231,6 +238,7 @@ func ParseSeqOrder() { if err = session.Begin(); err != nil { session.Close() etcd.G_jobLock.UnLock() + glog.InfoExtln("custorder信息", "custorder due to err: ", err) return } // 基于SEQ保存客户订单版本信息(用于追溯) @@ -262,14 +270,14 @@ func ParseSeqOrder() { } // 创建客户订单计算二级需求的消息 - bl_ordmsg = service.BL_Ordmsg{MsgType: common.MSG_TYPE_DEMAND, MsgEvent: common.MSG_EVENT_NEW, MsgObjid: bl_co.Custordernr, MsgcPara1: bl_co.Projnr} - if err = bl_ordmsg.Create(session); err != nil { - glog.InfoExtln("解析并读取SEQ", "为客户订单 创建二级需求消息失败:", bl_co.Custordernr, err) - session.Rollback() - session.Close() - etcd.G_jobLock.UnLock() - return - } + //bl_ordmsg = service.BL_Ordmsg{MsgType: common.MSG_TYPE_DEMAND, MsgEvent: common.MSG_EVENT_NEW, MsgObjid: bl_co.Custordernr, MsgcPara1: bl_co.Projnr} + //if err = bl_ordmsg.Create(session); err != nil { + // glog.InfoExtln("解析并读取SEQ", "为客户订单 创建二级需求消息失败:", bl_co.Custordernr, err) + // session.Rollback() + // session.Close() + // etcd.G_jobLock.UnLock() + // return + //} // 更新解析记录的状态为已解析 seqlandtablst[j].Parsed = common.EDI_PARSE_YES @@ -282,10 +290,11 @@ func ParseSeqOrder() { etcd.G_jobLock.UnLock() return } + glog.InfoExtln("custorder信息", "custorder due to: ", bl_co.Custordernr) session.Commit() session.Close() etcd.G_jobLock.UnLock() - time.Sleep(10 * time.Millisecond) + time.Sleep(5 * time.Millisecond) } } diff --git a/service/Asn.go b/service/Asn.go index dbbaf83..515af7b 100644 --- a/service/Asn.go +++ b/service/Asn.go @@ -139,6 +139,8 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) { continue } } else if cotab.Wotablst[i].Status == common.WO_STATUS_CLOSED { + err = errors.New(fmt.Sprintf("扶手订单%s 订单状态不符合!", cotab.Wotablst[i].Workordernr)) + glog.InfoExtln("grammerasn", "err :", err) continue } else { isflag = true @@ -158,6 +160,9 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) { //判断该客户订单是否有小于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 @@ -166,7 +171,7 @@ func (bt *BL_Tier2ASN) CLoseTier2WorkOrder() (err error) { cache.Flag = 1 cache.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") cache.Lastuser = "asn_service" - if err = cache.UpdateFields(session, "flag,lastuser"); err != nil { + if err = cache.UpdateFields(session, "flag,lastmodif,lastuser"); err != nil { glog.InfoExtln("grammerasn", "err :", err) session.Rollback() return @@ -198,6 +203,6 @@ func (bt *BL_Tier2ASN) SetParsedStatus() (err error) { return } //删除文件对应的缓存 - //cache.DelInfo() + cache.DelInfo() return } diff --git a/service/Custorder.go b/service/Custorder.go index 1f2ce40..6506494 100644 --- a/service/Custorder.go +++ b/service/Custorder.go @@ -19,6 +19,7 @@ type BL_CustOrder struct { Projnr string // 项目号 Partfamilyid string SeqType int // 3=新建;1=变更;2=取消 + Parsed int // 0=未解析;1=已解析;2=需要解析 Edifile string // EDI 文件名 Carmodelid string Ordertime time.Time diff --git a/service/Snrtab.go b/service/Snrtab.go index badd340..43ed8db 100644 --- a/service/Snrtab.go +++ b/service/Snrtab.go @@ -4,7 +4,6 @@ import ( "github.com/go-xorm/xorm" "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/db" - "leit.com/leit_seat_aps/etcd" "strconv" "strings" "time" @@ -222,118 +221,129 @@ func SN_GetNextSnrBySession(snr string, session *xorm.Session) (retsnr string, e return } - -// 获取指定序列的下一个流水号(异步获取) func SN_SyncGetNextSnr(snr string) (retsnr string, err error) { - /* 获取锁 */ -LOOPSNR: - err = etcd.Snr_jobLock.TryLock("msgid") - if err != nil { - time.Sleep(1 * time.Millisecond) - goto LOOPSNR - } - var ( - snrtab db.Snrtab - lastupdtime time.Time - y, l_y, d, l_d, wk, l_wk int - m, l_m time.Month - layout []byte - i, nextsnr int - sql string - ) - - snrtab = db.Snrtab{} - if _, err = db.G_DbEngine.Id(core.PK{db.G_FINR, snr}).Get(&snrtab); err != nil { - etcd.Snr_jobLock.UnLock() - return - } - snrtab.Clipped() - - if snrtab.Lastnrcreate == "" { - nextsnr = snrtab.Nextnr - } else { - if lastupdtime, err = common.DateParse(snrtab.Lastnrcreate, "YmdHis"); err != nil { - etcd.Snr_jobLock.UnLock() - return - } - // 获取下一序列值 - y = time.Now().Year() - m = time.Now().Month() - d = time.Now().Day() - _, wk = time.Now().ISOWeek() - l_y = lastupdtime.Year() - l_m = lastupdtime.Month() - l_d = lastupdtime.Day() - _, l_wk = lastupdtime.ISOWeek() - switch strings.ToUpper(snrtab.Resetnrrule) { - case "DAILY": - if y == l_y && m == l_m && wk == l_wk && d == l_d { - nextsnr = snrtab.Nextnr - } else { - nextsnr = snrtab.Startnr - } - case "WEEKLY": - if y == l_y && m == l_m && wk == l_wk { - nextsnr = snrtab.Nextnr - } else { - nextsnr = snrtab.Startnr - } - case "MONTHLY": - if y == l_y && m == l_m { - nextsnr = snrtab.Nextnr - } else { - nextsnr = snrtab.Startnr - } - case "YEARLY": - if y == l_y { - nextsnr = snrtab.Nextnr - } else { - nextsnr = snrtab.Startnr - } - case "NEVER": - nextsnr = snrtab.Nextnr - default: - nextsnr = snrtab.Nextnr - } - } - // 组合返回值 - layout = []byte(snrtab.Identifierlayout) - for i = 0; i < len(layout); i++ { - switch string(layout[i]) { - case "1": //前缀 - retsnr = retsnr + snrtab.Prefix - case "2": //日期变量 - retsnr = retsnr + common.Date(time.Now().Unix(), snrtab.Dateformat) - case "3": //中缀 - retsnr = retsnr + snrtab.Infix - case "4": //流水号 - if snrtab.Identifierformat == "CHAR" { - retsnr = retsnr + common.ConvInt2FormatString(nextsnr, snrtab.Length) - } else { - retsnr = retsnr + strconv.Itoa(nextsnr) - } - case "5": //后缀 - retsnr = retsnr + snrtab.Postfix - } - } - //更新下一序列值 - // 处理数值超限 - snrtab.Nextnr = nextsnr + snrtab.Step - snrtab.Lastnrcreate = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") - snrtab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") - if snrtab.Nextnr > snrtab.Endnr { - switch strings.ToUpper(snrtab.Overflowhandling) { - case "NO": - case "RESET": - snrtab.Nextnr = snrtab.Startnr - } + tmStr := time.Now().Format("060102150405.999999") + "000000" + str := strings.Replace(tmStr, ".", "", -1) + if len(str) < 16 { + tmStr = tmStr + common.CreateCaptchaFour() + return tmStr, err } + str = str[:16] + str = str + common.CreateCaptchaFour() + return str, nil +} - sql = "update `snrtab` set nextnr = ?, lastnrcreate = ?, lastmodif = ? where finr = ? AND snrid = ?" - if _, err = db.G_DbEngine.Exec(sql, snrtab.Nextnr, snrtab.Lastnrcreate, snrtab.Lastmodif, db.G_FINR, snrtab.Snrid); err != nil { - etcd.Snr_jobLock.UnLock() - return - } - etcd.Snr_jobLock.UnLock() - return -} \ No newline at end of file +// 获取指定序列的下一个流水号(异步获取) +//func SN_SyncGetNextSnr(snr string) (retsnr string, err error) { +// /* 获取锁 */ +//LOOPSNR: +// err = etcd.Snr_jobLock.TryLock("msgid") +// if err != nil { +// time.Sleep(1 * time.Millisecond) +// goto LOOPSNR +// } +// var ( +// snrtab db.Snrtab +// lastupdtime time.Time +// y, l_y, d, l_d, wk, l_wk int +// m, l_m time.Month +// layout []byte +// i, nextsnr int +// sql string +// ) +// +// snrtab = db.Snrtab{} +// if _, err = db.G_DbEngine.Id(core.PK{db.G_FINR, snr}).Get(&snrtab); err != nil { +// etcd.Snr_jobLock.UnLock() +// return +// } +// snrtab.Clipped() +// +// if snrtab.Lastnrcreate == "" { +// nextsnr = snrtab.Nextnr +// } else { +// if lastupdtime, err = common.DateParse(snrtab.Lastnrcreate, "YmdHis"); err != nil { +// etcd.Snr_jobLock.UnLock() +// return +// } +// // 获取下一序列值 +// y = time.Now().Year() +// m = time.Now().Month() +// d = time.Now().Day() +// _, wk = time.Now().ISOWeek() +// l_y = lastupdtime.Year() +// l_m = lastupdtime.Month() +// l_d = lastupdtime.Day() +// _, l_wk = lastupdtime.ISOWeek() +// switch strings.ToUpper(snrtab.Resetnrrule) { +// case "DAILY": +// if y == l_y && m == l_m && wk == l_wk && d == l_d { +// nextsnr = snrtab.Nextnr +// } else { +// nextsnr = snrtab.Startnr +// } +// case "WEEKLY": +// if y == l_y && m == l_m && wk == l_wk { +// nextsnr = snrtab.Nextnr +// } else { +// nextsnr = snrtab.Startnr +// } +// case "MONTHLY": +// if y == l_y && m == l_m { +// nextsnr = snrtab.Nextnr +// } else { +// nextsnr = snrtab.Startnr +// } +// case "YEARLY": +// if y == l_y { +// nextsnr = snrtab.Nextnr +// } else { +// nextsnr = snrtab.Startnr +// } +// case "NEVER": +// nextsnr = snrtab.Nextnr +// default: +// nextsnr = snrtab.Nextnr +// } +// } +// // 组合返回值 +// layout = []byte(snrtab.Identifierlayout) +// for i = 0; i < len(layout); i++ { +// switch string(layout[i]) { +// case "1": //前缀 +// retsnr = retsnr + snrtab.Prefix +// case "2": //日期变量 +// retsnr = retsnr + common.Date(time.Now().Unix(), snrtab.Dateformat) +// case "3": //中缀 +// retsnr = retsnr + snrtab.Infix +// case "4": //流水号 +// if snrtab.Identifierformat == "CHAR" { +// retsnr = retsnr + common.ConvInt2FormatString(nextsnr, snrtab.Length) +// } else { +// retsnr = retsnr + strconv.Itoa(nextsnr) +// } +// case "5": //后缀 +// retsnr = retsnr + snrtab.Postfix +// } +// } +// //更新下一序列值 +// // 处理数值超限 +// snrtab.Nextnr = nextsnr + snrtab.Step +// snrtab.Lastnrcreate = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") +// snrtab.Lastmodif = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss") +// if snrtab.Nextnr > snrtab.Endnr { +// switch strings.ToUpper(snrtab.Overflowhandling) { +// case "NO": +// case "RESET": +// snrtab.Nextnr = snrtab.Startnr +// } +// } +// +// sql = "update `snrtab` set nextnr = ?, lastnrcreate = ?, lastmodif = ? where finr = ? AND snrid = ?" +// if _, err = db.G_DbEngine.Exec(sql, snrtab.Nextnr, snrtab.Lastnrcreate, snrtab.Lastmodif, db.G_FINR, snrtab.Snrid); err != nil { +// etcd.Snr_jobLock.UnLock() +// return +// } +// etcd.Snr_jobLock.UnLock() +// return +//} diff --git a/tod/Parser.go b/tod/Parser.go index 0efa400..ee51634 100644 --- a/tod/Parser.go +++ b/tod/Parser.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "io/ioutil" + "leit.com/leit_seat_aps/common" "os" "strings" ) @@ -80,7 +81,7 @@ func ParseTodEdi(ediFile string, tod *TOD) (err error) { } tod.SeqList[ilen-1].Dtm = dtm default: - err = errors.New("Unknown datetime type in DTM : " + string(dtm.DateTimeType)) + err = errors.New("Unknown datetime type in DTM : " + common.ValueToString(dtm.DateTimeType, "")) goto ERR } tod.DataRows++ diff --git a/tod/Tod_test.go b/tod/Tod_test.go index fc75aff..53c9fbf 100644 --- a/tod/Tod_test.go +++ b/tod/Tod_test.go @@ -26,7 +26,6 @@ func TestParseTodNew(t *testing.T) { projtablst []db.Me_project todland TodLandData todProj service.TodProject - order_ver db.Pln_custorder_ver rd []os.FileInfo fi os.FileInfo edi_file string @@ -113,26 +112,8 @@ func TestParseTodNew(t *testing.T) { os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) return } - //删除状态为9的数据 - if err = order_ver.DelCustorderVer(); err != nil { - t.Errorf("Failed to DelWaitCustorder: %s,err is :%v", projtablst[i].Projectid, err) - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) - return - } if err = todland.SaveTodData(&todProj); err != nil { t.Errorf("Failed to SaveTodData for project: due to: %v,err is :%v", projtablst[i].Projectid, err) - //删除状态为9的数据 - if err = order_ver.DelCustorderVer(); err != nil { - t.Errorf("Failed to DelWaitCustorder:%s,err is :%v ", projtablst[i].Projectid, err) - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) - return - } - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) - return - } - //把状态为9的数据更新为0 - if err = order_ver.UpCustorderVer(); err != nil { - t.Errorf("Failed to UpWaitCustorder:%v ", err) os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) return } diff --git a/tod/Todtask.go b/tod/Todtask.go index 413a40b..c4c4de1 100644 --- a/tod/Todtask.go +++ b/tod/Todtask.go @@ -27,7 +27,6 @@ func ParseTodNew() { projtablst []db.Me_project todland TodLandData todProj service.TodProject - order_ver db.Pln_custorder_ver rd []os.FileInfo fi os.FileInfo edi_file string @@ -106,26 +105,8 @@ func ParseTodNew() { glog.InfoExtln("tod解析", "Failed to ReadTodData for project is :", err) continue } - //删除状态为9的数据 - if err = order_ver.DelCustorderVer(); err != nil { - glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) - continue - } if err = todland.SaveTodData(&todProj); err != nil { glog.InfoExtln("tod解析", "Failed to SaveTodData for project! is :", err) - //删除状态为9的数据 - if err = order_ver.DelCustorderVer(); err != nil { - glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) - continue - } - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) - continue - } - //把状态为9的数据更新为0 - if err = order_ver.UpCustorderVer(); err != nil { - glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errbox"+"/"+fi.Name()) continue } @@ -143,20 +124,20 @@ func ParseTodCustorderNew() { for { fmt.Println("TOD解析创建生产订单监听中!") var ( - err error - projtab db.Me_project - projtablst []db.Me_project - mesprojtab db.Prod_project - todProj service.TodProject - covtab db.Pln_custorder_ver - vcovlst []db.VCustorderVer - bl_co service.BL_CustOrder - cust db.Pln_custorder + err error + projtab db.Me_project + projtablst []db.Me_project + mesprojtab db.Prod_project + todProj service.TodProject + covtab db.Pln_custorder_ver + vcovlst []db.VCustorderVer + bl_co service.BL_CustOrder + cust db.Pln_custorder mailsubject, mailbody string - verr service.BL_VerifyError - i, j int - bRet bool - session *xorm.Session + verr service.BL_VerifyError + i, j int + bRet bool + session *xorm.Session ) projtab = db.Me_project{} @@ -211,6 +192,37 @@ func ParseTodCustorderNew() { // 加载客户订单进行校验 for j, _ = range vcovlst { + if bl_co.SeqType == 1 { + //判断是否存在前一个版本, + //如果存在前一个版本,判断是否解析 + if vcovlst[j].Pln_custorder_ver.Version > 1 { + perInfo := new(db.Pln_custorder_ver) + perInfo.Finr = vcovlst[j].Pln_custorder_ver.Finr + perInfo.Custordernr = vcovlst[j].Pln_custorder_ver.Custordernr + perInfo.Version = vcovlst[j].Pln_custorder_ver.Version + res := perInfo.SelectInfo() + glog.InfoExtln("tod","Custordernr", vcovlst[j].Pln_custorder_ver.Custordernr) + glog.InfoExtln("tod","Version",vcovlst[j].Pln_custorder_ver.Version) + glog.InfoExtln("tod","上一版本Version",perInfo.Version) + glog.InfoExtln("tod","result",res) + if err != nil { + glog.InfoExtln("TOD解析创建生产订单", "err is:", err) + return + } + if res { + //添加邮件预警 + mailsubject = "客户订单上一版本没有解析" + mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 客户订单上一版本没有解析!" + if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { + glog.InfoExtln("发送邮件", "err is :", err) + } + glog.InfoExtln("tod","result:",mailsubject) + continue + } + } + + } + /* 获取锁 */ LOOP: err = etcd.G_jobLock.TryLock("lock") @@ -222,13 +234,14 @@ func ParseTodCustorderNew() { fmt.Println("tod groutine lock success!") bl_co = service.BL_CustOrder{} - bl_co.Custordernr = vcovlst[j].Pln_custorder.Custordernr - bl_co.Oemordernr = vcovlst[j].Pln_custorder.Oemordernr - bl_co.Projnr = vcovlst[j].Pln_custorder.Projnr - bl_co.Partfamilyid = vcovlst[j].Pln_custorder_ver.Partfamilyid - bl_co.SeqType = vcovlst[j].Pln_custorder_ver.Seqmode - bl_co.Edifile = vcovlst[j].Pln_custorder_ver.Edifile - bl_co.Custordertab = vcovlst[j].Pln_custorder + bl_co.Custordernr = vcovlst[j].Pln_custorder.Custordernr + bl_co.Oemordernr = vcovlst[j].Pln_custorder.Oemordernr + bl_co.Projnr = vcovlst[j].Pln_custorder.Projnr + bl_co.Partfamilyid = vcovlst[j].Pln_custorder_ver.Partfamilyid + bl_co.SeqType = vcovlst[j].Pln_custorder_ver.Seqmode + bl_co.Edifile = vcovlst[j].Pln_custorder_ver.Edifile + bl_co.Custordertab = vcovlst[j].Pln_custorder + bl_co.Parsed = vcovlst[j].Pln_custorder_ver.Parsed // 初始化客户订单的错误清单 bl_co.Bl_verrdict = make(map[string]service.BL_VerifyError) @@ -254,15 +267,15 @@ func ParseTodCustorderNew() { //添加邮件预警 mailsubject = "客户订单号重复错误" - mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 半年内重复!" - if err = SendTodErrorEmail(projtablst[i],mailsubject, mailbody); err != nil { + mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 半年内重复!" + if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { glog.InfoExtln("发送邮件", "err is :", err) } } } // 如果是指定供应组的SEQ+1发邮件预警 - AlertForCustOrderUpdateTodByRule(projtablst[i], bl_co, vcovlst[j] ) + AlertForCustOrderUpdateTodByRule(projtablst[i], bl_co, vcovlst[j]) // 查询获得客户订单的供应组的零件清单 if err = bl_co.GetSupplyGroupPartList(&todProj); err != nil { @@ -359,7 +372,7 @@ func ParseTodCustorderNew() { if bl_co.SeqType == 1 && bl_co.Custordertab.Status >= common.CO_STATUS_RELEASED { //添加邮件预警 mailsubject = "SEQ+1的客户订单已下达" - mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 已下达,SEQ+1更新出错!" + mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\nErrorinfo : 已下达,SEQ+1更新出错!" if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { glog.InfoExtln("发送邮件", "err is :", err) } @@ -379,7 +392,7 @@ func ParseTodCustorderNew() { //添加邮件预警 mailsubject = "客户订单取消" - mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+2请求,取消!" + mailbody = "项目号: " + todProj.Projectid + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+2请求,取消!" if err = SendTodErrorEmail(projtablst[i], mailsubject, mailbody); err != nil { glog.InfoExtln("发送邮件", "err is :", err) } @@ -398,10 +411,13 @@ func ParseTodCustorderNew() { if err = bl_co.Custordertab.UpdateFields(session, "handlestatus,lastmodif"); err != nil { bRet = false } - session.Commit() - session.Close() - etcd.G_jobLock.UnLock() - continue + if bl_co.SeqType != 3 { + glog.InfoExtln("tod","Custordernr:",bl_co.Custordertab.Custordernr) + session.Commit() + session.Close() + etcd.G_jobLock.UnLock() + continue + } } } else { bl_co.Custordertab.Handlestatus = common.CO_PARSE_STATUS_OK @@ -425,7 +441,7 @@ func ParseTodCustorderNew() { } } - if bRet { + if bRet || bl_co.Parsed == 2{ session.Commit() session.Close() } else { @@ -448,7 +464,6 @@ func ReadTodXlsx() { projtab db.Me_project projtablst []db.Me_project todland TodLandData - order_ver db.Pln_custorder_ver todProj service.TodProject rd []os.FileInfo fi os.FileInfo @@ -602,26 +617,8 @@ func ReadTodXlsx() { glog.InfoExtln("tod Close", "Failed Close is :", err) return } - //删除状态为9的数据 - if err = order_ver.DelCustorderVer(); err != nil { - glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) - continue - } if err = todland.SaveTodData(&todProj); err != nil { glog.InfoExtln("tod解析", "Failed to SaveTodData for project! is :", err) - //删除状态为9的数据 - if err = order_ver.DelCustorderVer(); err != nil { - glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) - continue - } - os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) - continue - } - //把状态为9的数据更新为0 - if err = order_ver.UpCustorderVer(); err != nil { - glog.InfoExtln("tod解析", "Failed to DelWaitCustorder: ", err) os.Rename(edi_file, todProj.Projecttab.Tod_folder+"/errxlsx"+"/"+fi.Name()) continue } @@ -638,17 +635,17 @@ func ReadTodXlsx() { } // 发送TOD解析错误或警示邮件 -func SendTodErrorEmail(projtab db.Me_project, subject, errinfo string)(err error){ - var mail db.Sendmailtab - - mail.Status = "waiting" - mail.Body = errinfo - mail.Subject = projtab.Projectid + "-->" + subject - mail.Name = projtab.From_email - mail.Tomail = projtab.Tod_error_to_recievers - mail.Host = projtab.Emailserver_host + ":" + common.ValueToString(projtab.Emailserver_port, "") - mail.Password = projtab.From_pwd - mail.Username = projtab.From_email +func SendTodErrorEmail(projtab db.Me_project, subject, errinfo string) (err error) { + var mail db.Sendmailtab + + mail.Status = "waiting" + mail.Body = errinfo + mail.Subject = projtab.Projectid + "-->" + subject + mail.Name = projtab.From_email + mail.Tomail = projtab.Tod_error_to_recievers + mail.Host = projtab.Emailserver_host + ":" + common.ValueToString(projtab.Emailserver_port, "") + mail.Password = projtab.From_pwd + mail.Username = projtab.From_email err = mail.Add() if err != nil { glog.InfoExtln("发送邮件", "err is :", err) @@ -657,14 +654,14 @@ func SendTodErrorEmail(projtab db.Me_project, subject, errinfo string)(err error } // 为项目指定的供应组发送SEQ+1的预警邮件(基于指定供应组) -func AlertForCustOrderUpdateTodByRule(projtab db.Me_project, bl_co service.BL_CustOrder, vcov db.VCustorderVer ){ - var( - err error - idx,seqtype,k int - todrule,v,mailsubject,mailbody string - kvlst,rulelst []string - sgdict map[string]string - exist bool +func AlertForCustOrderUpdateTodByRule(projtab db.Me_project, bl_co service.BL_CustOrder, vcov db.VCustorderVer) { + var ( + err error + idx, seqtype, k int + todrule, v, mailsubject, mailbody string + kvlst, rulelst []string + sgdict map[string]string + exist bool ) // 获取项目指定的TOD邮件规则 @@ -693,7 +690,7 @@ func AlertForCustOrderUpdateTodByRule(projtab db.Me_project, bl_co service.BL_Cu } if exist { mailsubject = "SEQ+1提醒" - mailbody = "项目号: " + bl_co.Custordertab.Projnr + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+1请求,取消!" + mailbody = "项目号: " + bl_co.Custordertab.Projnr + "\r\n客户订单号: " + bl_co.Oemordernr + "\r\n提示信息 : 客户订单接收到+1请求,取消!" if err = SendTodErrorEmail(projtab, mailsubject, mailbody); err != nil { glog.InfoExtln("发送邮件", "err is :", err) }