package task
|
|
|
|
import (
|
|
"LAPP_SJA_ME/db"
|
|
"LAPP_SJA_ME/etcd"
|
|
"LAPP_SJA_ME/utils"
|
|
"LAPP_SJA_ME/web/middleware/glog"
|
|
"LAPP_SJA_ME/web/models"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
/*etl执行方法集合*/
|
|
|
|
/*
|
|
*方法:更新生产订单和客户订单
|
|
*逻辑:一个客户订单号对应多个生产订单号;
|
|
*情况1: 如果生产订单号是40状态:那么生产订单号和客户订单号直接更新为40状态
|
|
*情况2: 如果生产订单号是80状态:如果客户订单号对应的生产订单有小于80的状态;那么客户订单不更新,只需要更新生产订单
|
|
*/
|
|
func UpdatePlnWorkorder(finr int, workordernr string, status int, optime string) error {
|
|
|
|
/* 获取锁 */
|
|
LOOP:
|
|
err := etcd.G_jobLock.TryLock("lock")
|
|
if err != nil {
|
|
fmt.Println("pln_workorder groutine lock fail!")
|
|
time.Sleep(2 * 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:
|
|
glog.InfoExtln("UpdatePlnWorkorder", "workordernr:", workordernr, status, optime)
|
|
//查询生产订单对应的客户订单是否有小于80状态的订单
|
|
var pln models.Pln_workorder
|
|
_, err = session.Table("pln_workorder").Where("finr = ? and workordernr = ?", finr, workordernr).Get(&pln)
|
|
if err != nil {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", err)
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return err
|
|
}
|
|
if pln.Status > 40 {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", "订单状态大于40")
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return nil
|
|
}
|
|
//更新生产订单表
|
|
_, err := session.Table("pln_workorder").Cols("status").Where("finr = ? and workordernr = ?", finr, workordernr).Update(&map[string]interface{}{"status": 40})
|
|
if err != nil {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", err)
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return err
|
|
}
|
|
|
|
//更新客户订单
|
|
_, err = session.Table("pln_custorder").Cols("status").Where("finr = ? and custordernr = ? ", finr, pln.Custordernr).Update(&map[string]interface{}{"status": 40})
|
|
if err != nil {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", err)
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return err
|
|
}
|
|
case 80:
|
|
glog.InfoExtln("UpdatePlnWorkorder", "workordernr:", workordernr, status, optime)
|
|
//更新生产订单表
|
|
_, err := session.Table("pln_workorder").Cols("status", "schedbegtime").Where("finr = ? and workordernr = ?", finr, workordernr).Update(&map[string]interface{}{"status": 80, "schedbegtime": optime})
|
|
if err != nil {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", err)
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return err
|
|
}
|
|
//查询生产订单对应的客户订单是否有小于80状态的订单
|
|
var pln models.Pln_workorder
|
|
_, err = session.Table("pln_workorder").Where("finr = ? and workordernr = ?", finr, workordernr).Get(&pln)
|
|
if err != nil {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", err)
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return err
|
|
}
|
|
var plc models.Pln_workorder
|
|
ok, err := session.Table("pln_workorder").Where("finr = ? and custordernr = ? and status < ?", finr, pln.Custordernr, status).Get(&plc)
|
|
if err != nil {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", err)
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return err
|
|
}
|
|
if !ok {
|
|
//生产订单不存在小于80的状态,更新生产订单
|
|
_, err := session.Table("pln_custorder").Cols("status").Where("finr = ? and custordernr = ?", finr, pln.Custordernr).Update(&map[string]interface{}{"status": 80})
|
|
if err != nil {
|
|
glog.InfoExtln("UpdatePlnWorkorder", "err:", err)
|
|
session.Rollback()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return err
|
|
}
|
|
}
|
|
default:
|
|
}
|
|
session.Commit()
|
|
session.Close()
|
|
etcd.G_jobLock.UnLock()
|
|
return nil
|
|
}
|
|
|
|
//更新批次订单表
|
|
func UpdatePlnBatchorder(finr int, batchordernr string, status int, actqty int, optime string) error {
|
|
engine := db.Eloquent.Master()
|
|
//判断传入状态
|
|
switch status {
|
|
case 40:
|
|
//更新批次订单表
|
|
_, err := engine.Table("pln_batchorder").Cols("status", "actqty", "actbegtime").Where("finr = ? and batchordernr = ?", finr, batchordernr).Update(&map[string]interface{}{"status": 40, "actqty": actqty, "actbegtime": optime})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
case 80:
|
|
//更新生产订单表
|
|
_, err := engine.Table("pln_batchorder").Cols("status", "actqty", "actendtime").Where("finr = ? and batchordernr = ?", finr, batchordernr).Update(&map[string]interface{}{"status": 80, "actqty": actqty, "actendtime": optime})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
default:
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//清空接口缓存表里,三天前并且releaseflag为1的数据
|
|
func DelCacheData() {
|
|
tick := time.Tick(24 * time.Hour)
|
|
for {
|
|
select {
|
|
case <-tick:
|
|
//获取三天前的字符串
|
|
ThreeDay := time.Now().AddDate(0, 0, -3)
|
|
ThreeDayStr := utils.TimeFormat(ThreeDay, "yyyyMMddHHmmss")
|
|
engine := db.Eloquent.Master()
|
|
//删除pln_workorder_intstatus
|
|
_, err := engine.Table("pln_workorder_intstatus").Where("finr = ? and credatuz <= ? and releaseflag = 1", utils.Finr, ThreeDayStr).Delete(&models.Pln_workorder_intstatus{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
//删除pln_batchorder_intstatus
|
|
_, err = engine.Table("pln_batchorder_intstatus").Where("finr = ? and credatuz <= ? and releaseflag = 1", utils.Finr, ThreeDayStr).Delete(&models.Pln_batchorder_intstatus{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
return
|
|
}
|
|
}
|
|
|
|
}
|