Browse Source

tod parsed = 2 判断

master
娄文智 3 years ago
parent
commit
a46da4a61e
21 changed files with 467 additions and 452 deletions
  1. +26
    -27
      cmd/bbaasn/main.go
  2. +23
    -23
      cmd/calloff/main.go
  3. +17
    -18
      cmd/grammerasn/main.go
  4. +20
    -21
      cmd/mes/main.go
  5. +23
    -24
      cmd/msg/main.go
  6. +20
    -21
      cmd/printer/main.go
  7. +25
    -25
      cmd/scheduler/main.go
  8. +25
    -25
      cmd/seq/main.go
  9. +21
    -21
      cmd/tod/main.go
  10. +4
    -0
      common/Utils.go
  11. +4
    -4
      config/config.go
  12. +6
    -0
      db/Jit_asnhead_landing.go
  13. +1
    -1
      db/Jit_asnorder_cache.go
  14. +9
    -3
      db/PrintTask.go
  15. +25
    -16
      seq/Seqtask.go
  16. +7
    -2
      service/Asn.go
  17. +1
    -0
      service/Custorder.go
  18. +123
    -113
      service/Snrtab.go
  19. +2
    -1
      tod/Parser.go
  20. +0
    -19
      tod/Tod_test.go
  21. +85
    -88
      tod/Todtask.go

+ 26
- 27
cmd/bbaasn/main.go View File

@ -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()
//生成发运单


+ 23
- 23
cmd/calloff/main.go View File

@ -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()


+ 17
- 18
cmd/grammerasn/main.go View File

@ -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()


+ 20
- 21
cmd/mes/main.go View File

@ -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()
}

+ 23
- 24
cmd/msg/main.go View File

@ -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消息推送


+ 20
- 21
cmd/printer/main.go View File

@ -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)
}

+ 25
- 25
cmd/scheduler/main.go View File

@ -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()


+ 25
- 25
cmd/seq/main.go View File

@ -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()


+ 21
- 21
cmd/tod/main.go View File

@ -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()


+ 4
- 0
common/Utils.go View File

@ -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 授权码


+ 4
- 4
config/config.go View File

@ -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
}
}

+ 6
- 0
db/Jit_asnhead_landing.go View File

@ -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


+ 1
- 1
db/Jit_asnorder_cache.go View File

@ -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
}


+ 9
- 3
db/PrintTask.go View File

@ -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)


+ 25
- 16
seq/Seqtask.go View File

@ -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)
}
}


+ 7
- 2
service/Asn.go View File

@ -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
}

+ 1
- 0
service/Custorder.go View File

@ -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


+ 123
- 113
service/Snrtab.go View File

@ -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
}
// 获取指定序列的下一个流水号(异步获取)
//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
//}

+ 2
- 1
tod/Parser.go View File

@ -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++


+ 0
- 19
tod/Tod_test.go View File

@ -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
}


+ 85
- 88
tod/Todtask.go View File

@ -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)
}


Loading…
Cancel
Save