Browse Source

提交

master
娄文智 3 years ago
parent
commit
a6748103b7
3 changed files with 56 additions and 9 deletions
  1. +1
    -1
      etcd/etcd.go
  2. +6
    -1
      main.go
  3. +49
    -7
      task/func.go

+ 1
- 1
etcd/etcd.go View File

@ -4,7 +4,7 @@ import (
"time"
"context"
"fmt"
"github.com/coreos/etcd/clientv3"
clientv3 "go.etcd.io/etcd/client/v3"
)
//创建租约注册服务


+ 6
- 1
main.go View File

@ -4,6 +4,7 @@ import (
"LAPP_SJA_ME/conf"
"LAPP_SJA_ME/db"
Engine "LAPP_SJA_ME/engine"
"LAPP_SJA_ME/etcd"
"LAPP_SJA_ME/inits/parse"
"LAPP_SJA_ME/lab"
"LAPP_SJA_ME/task"
@ -116,7 +117,11 @@ func imain() {
//go func() {
// http.ListenAndServe("0.0.0.0:8899", nil)
//}()
//创建etcd连接
if err = etcd.InitJobLock(); err != nil {
glog.Infoln("初始化EtCD连接", "InitJobLock return fail")
return
}
//打印服务
go Engine.RunEngine(conf)


+ 49
- 7
task/func.go View File

@ -2,8 +2,10 @@ package task
import (
"LAPP_SJA_ME/db"
"LAPP_SJA_ME/etcd"
"LAPP_SJA_ME/utils"
"LAPP_SJA_ME/web/models"
"fmt"
"time"
)
@ -16,52 +18,92 @@ import (
*情况2: 如果生产订单号是80状态如果客户订单号对应的生产订单有小于80的状态那么客户订单不更新只需要更新生产订单
*/
func UpdatePlnWorkorder(finr int, workordernr string, status int) error {
/* 获取锁 */
LOOP:
err := etcd.G_jobLock.TryLock("lock")
if err != nil {
fmt.Println("pln_workorder groutine lock fail!")
time.Sleep(5 * time.Millisecond)
goto LOOP
}
fmt.Println("pln_workorder groutine lock success!")
engine := db.Eloquent.Master()
session := engine.NewSession()
if err = session.Begin(); err != nil {
session.Close()
etcd.G_jobLock.UnLock()
return err
}
//判断传入状态
switch status {
case 40:
//更新生产订单表
_, err := engine.Table("pln_workorder").Cols("status").Where("finr = ? and workordernr = ? and status <= ?", finr, workordernr, status).Update(&map[string]interface{}{"status": 40})
_, err := session.Table("pln_workorder").Cols("status").Where("finr = ? and workordernr = ? and status <= ?", finr, workordernr, status).Update(&map[string]interface{}{"status": 40})
if err != nil {
session.Rollback()
session.Close()
etcd.G_jobLock.UnLock()
return err
}
//查询生产订单对应的客户订单是否有小于80状态的订单
var pln models.Pln_workorder
_, err = engine.Table("pln_workorder").Where("finr = ? and workordernr = ?", finr, workordernr).Get(&pln)
_, err = session.Table("pln_workorder").Where("finr = ? and workordernr = ?", finr, workordernr).Get(&pln)
if err != nil {
session.Rollback()
session.Close()
etcd.G_jobLock.UnLock()
return err
}
//更新客户订单
_, err = engine.Table("pln_custorder").Cols("status").Where("finr = ? and custordernr = ? and status <= ?", finr, pln.Custordernr, status).Update(&map[string]interface{}{"status": 40})
_, err = session.Table("pln_custorder").Cols("status").Where("finr = ? and custordernr = ? and status <= ?", finr, pln.Custordernr, status).Update(&map[string]interface{}{"status": 40})
if err != nil {
session.Rollback()
session.Close()
etcd.G_jobLock.UnLock()
return err
}
case 80:
//更新生产订单表
_, err := engine.Table("pln_workorder").Cols("status").Where("finr = ? and workordernr = ? and status <= ?", finr, workordernr, status).Update(&map[string]interface{}{"status": 80})
_, err := session.Table("pln_workorder").Cols("status").Where("finr = ? and workordernr = ? and status <= ?", finr, workordernr, status).Update(&map[string]interface{}{"status": 80})
if err != nil {
session.Rollback()
session.Close()
etcd.G_jobLock.UnLock()
return err
}
//查询生产订单对应的客户订单是否有小于80状态的订单
var pln models.Pln_workorder
_, err = engine.Table("pln_workorder").Where("finr = ? and workordernr = ?", finr, workordernr).Get(&pln)
_, err = session.Table("pln_workorder").Where("finr = ? and workordernr = ?", finr, workordernr).Get(&pln)
if err != nil {
session.Rollback()
session.Close()
etcd.G_jobLock.UnLock()
return err
}
var plc models.Pln_workorder
ok, err := engine.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", finr, pln.Custordernr, status).Get(&plc)
ok, err := session.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", finr, pln.Custordernr, status).Get(&plc)
if err != nil {
session.Rollback()
session.Close()
etcd.G_jobLock.UnLock()
return err
}
if !ok {
//生产订单不存在小于80的状态,更新生产订单
_, err := engine.Table("pln_custorder").Cols("status").Where("finr = ? and custordernr = ?", finr, pln.Custordernr).Update(&map[string]interface{}{"status": 80})
_, err := session.Table("pln_custorder").Cols("status").Where("finr = ? and custordernr = ?", finr, pln.Custordernr).Update(&map[string]interface{}{"status": 80})
if err != nil {
session.Rollback()
session.Close()
etcd.G_jobLock.UnLock()
return err
}
}
default:
}
session.Commit()
session.Close()
etcd.G_jobLock.UnLock()
return nil
}


Loading…
Cancel
Save