Browse Source

三线回冲

develop
zhangxin 1 year ago
parent
commit
62d8c4e46b
1 changed files with 299 additions and 0 deletions
  1. +299
    -0
      etl_task/BackFlushGFrame3.go

+ 299
- 0
etl_task/BackFlushGFrame3.go View File

@ -0,0 +1,299 @@
package main
import (
dalBase "LAPP_ACURA_MOM_BACKEND/dao/base"
omModel "LAPP_ACURA_MOM_BACKEND/models/om"
dalOm "LAPP_ACURA_MOM_BACKEND/dao/om"
"LAPP_ACURA_MOM_BACKEND/etl_task/model"
"LAPP_ACURA_MOM_BACKEND/grmi"
meta "LAPP_ACURA_MOM_BACKEND/meta/base"
omMeta "LAPP_ACURA_MOM_BACKEND/meta/om"
"LAPP_ACURA_MOM_BACKEND/utils"
"fmt"
_ "github.com/denisenkom/go-mssqldb"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
"io/ioutil"
"os"
"path"
"strconv"
"strings"
"time"
)
//BackFlushPackOrder.exe "server=101.201.121.115;database=LAPP_ACURA_MES;user id=sa;password=Leit2020;port=1433;encrypt=disable" "LAPP_ACURA_MES" "server=101.201.121.115;database=LAPP_ETL2;user id=sa;password=Leit2020;port=1433;encrypt=disable" "LAPP_ETL2" "98"
func main() {
var err error
var plantNr = 300
var userId = "BackFlush"
now := time.Now()
year, month, day := now.Date()
hour := now.Hour()
minute := now.Minute()
second := now.Second()
// init global location time zone
utils.TimezoneLocation, err = time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println("初始化时区错误:" + err.Error())
return
}
if len(os.Args) < 5 {
fmt.Println("参数长度错误!")
return
}
var acuraDsn = os.Args[1]
var etlDsn = os.Args[3]
taskId, err := strconv.Atoi(os.Args[5])
if err != nil {
fmt.Println("接收到的taskId错误, taskId:" + os.Args[5])
return
}
//etlDsn := "server=101.201.121.115;database=LAPP_ETL;user id=sa;password=Leit2020;port=1433;encrypt=disable"
//acuraDsn := "server=101.201.121.115;database=LAPP_ACURA_MES3;user id=sa;password=Leit2020;port=1433;encrypt=disable"
//taskId := 101
// 初始化数据库连接
etlDB, err := xorm.NewEngine("mssql", etlDsn)
if err != nil {
fmt.Println("初始化etl数据库引擎错误:" + err.Error())
return
}
err = etlDB.Ping()
if err != nil {
fmt.Println("连接ETL数据库失败, error:" + err.Error())
return
}
acuraDB, err := xorm.NewEngine("mssql", acuraDsn)
if err != nil {
fmt.Println("初始化讴歌数据库引擎错误:" + err.Error())
return
}
err = acuraDB.Ping()
if err != nil {
fmt.Println("连接讴歌数据库失败, error:" + err.Error())
return
}
// 从etl数据库中获取参数
var index1 string
var index2 string
var index3 string
var index5 string
var index8 string
var tempIndex9 string
var index12 string
var dir string
var suffix string
etlSession := etlDB.NewSession()
defer etlSession.Close()
shellParamLi := make([]model.ShellParam, 0)
err = etlSession.Table("ShellParam").Where("TaskId = ?", taskId).Find(&shellParamLi)
if err != nil {
fmt.Println("查询任务需要参数失败, error:" + err.Error())
return
}
for _, param := range shellParamLi {
switch param.ParamName {
case "index1":
index1 = param.ParamValue
case "index2":
index2 = param.ParamValue
case "index3":
index3 = param.ParamValue
case "index5":
index5 = param.ParamValue
case "index8":
index8 = param.ParamValue
case "index9":
tempIndex9 = param.ParamValue
case "index12":
index12 = param.ParamValue
case "path":
dir = param.ParamValue
case "suffix":
suffix = param.ParamValue
}
}
// index1编码转换
tempReader := transform.NewReader(strings.NewReader(index1), simplifiedchinese.GBK.NewEncoder())
tempBytes, err := ioutil.ReadAll(tempReader)
if err != nil {
fmt.Println("转码失败, 错误:" + err.Error())
return
}
index1 = string(tempBytes)
// index2编码转换
tempReader = transform.NewReader(strings.NewReader(index2), simplifiedchinese.GBK.NewEncoder())
tempBytes, err = ioutil.ReadAll(tempReader)
if err != nil {
fmt.Println("转码失败, 错误:" + err.Error())
return
}
index2 = string(tempBytes)
// index3 编码转换
tempReader = transform.NewReader(strings.NewReader(index3), simplifiedchinese.GBK.NewEncoder())
tempBytes, err = ioutil.ReadAll(tempReader)
if err != nil {
fmt.Println("转码失败, 错误:" + err.Error())
return
}
index3 = string(tempBytes)
// index5 编码转换
tempReader = transform.NewReader(strings.NewReader(index5), simplifiedchinese.GBK.NewEncoder())
tempBytes, err = ioutil.ReadAll(tempReader)
if err != nil {
fmt.Println("转码失败, 错误:" + err.Error())
return
}
index5 = string(tempBytes)
// index8 编码转换
tempReader = transform.NewReader(strings.NewReader(index8), simplifiedchinese.GBK.NewEncoder())
tempBytes, err = ioutil.ReadAll(tempReader)
if err != nil {
fmt.Println("转码失败, 错误:" + err.Error())
return
}
index8 = string(tempBytes)
// index12 编码转换
tempReader = transform.NewReader(strings.NewReader(index12), simplifiedchinese.GBK.NewEncoder())
tempBytes, err = ioutil.ReadAll(tempReader)
if err != nil {
fmt.Println("转码失败, 错误:" + err.Error())
return
}
index12 = string(tempBytes)
filename := "bkfl" + fmt.Sprintf("%d%02d%02d%d", year, int(month), day, 3600*hour+60*minute+second) + suffix + ".csv"
filepath := path.Join(dir, filename)
acuraSession := acuraDB.NewSession()
defer acuraSession.Close()
daoArticle := dalBase.NewArticleDAO(acuraSession, plantNr, userId)
daoSerialOrder := dalOm.NewSerialOrderDAO(acuraSession, plantNr, userId)
where := fmt.Sprintf("%s = ? and %s = ? and %s = ?",
omMeta.SerialOrder_PlantNr.ColumnName,
omMeta.SerialOrder_QualityCheck.ColumnName,
omMeta.SerialOrder_BackFlushFlag.ColumnName,
)
args := []interface{}{plantNr, "OK", false}
serialOrderLi := make([]omModel.SerialOrder, 0)
err = acuraSession.Table(omMeta.SerialOrder.TableName).Where(where, args...).Limit(1000).OrderBy(omMeta.SerialOrder_QualityCheckTime.SortColumnName).Find(&serialOrderLi)
if err != nil {
lastSql, lastArgs := acuraSession.LastSQL()
fmt.Println(fmt.Sprintf("查询工单失败,错误:%v, lastSql: %s, lastArgs: %v", err, lastSql, lastArgs))
return
}
ArtMap := make(map[string]int)
serialOrderIdLi := make([]string, 0)
for _, serialOrder := range serialOrderLi {
qty := ArtMap[serialOrder.ArtId]
ArtMap[serialOrder.ArtId] = qty + 1
serialOrderIdLi = append(serialOrderIdLi, serialOrder.SerialOrderId)
}
writeLi := make([]string, 0, len(ArtMap))
for artId, qty := range ArtMap {
//article, err := daoArticle.SelectOne(artId)
articleLi, err := daoArticle.Select([]grmi.Predicate{meta.Article_ArtId.NewPredicate(grmi.Equal, artId)}, nil)
if err != nil {
_ = acuraSession.Rollback()
fmt.Println("查询物料数据失败, error:" + err.Error())
return
}
if len(articleLi) == 0 {
_ = acuraSession.Rollback()
fmt.Println("物料不存在, 物料ID:" + artId)
return
}
article := articleLi[0]
if !article.BackFlushItemToggle {
continue
}
qadArtId := article.ArtSpec3
if qadArtId == "" {
fmt.Println("未获取到ERP零件号, 物料ID:" + artId)
return
}
index6 := fmt.Sprintf("%02d%02d%d", int(month), day, 3600*hour+60*minute+second)
index7 := fmt.Sprintf("%02d%02d%d", int(month), day, 3600*hour+60*minute+second)
index9 := tempIndex9 + fmt.Sprintf("%d%02d%02d%d", year, int(month), day, 3600*hour+60*minute+second)
index11 := now.Format("01/02/06")
writeStr := fmt.Sprintf(`"%s","%s",%s,"%s","%s",%s,%s,"%s","%s",%s,%s,"%s",""`,
index1,
index2,
index3,
qadArtId,
index5,
index6,
index7,
index8,
index9,
strconv.Itoa(qty),
index11,
index12,
)
writeLi = append(writeLi, writeStr)
}
if err = acuraSession.Begin(); err != nil {
fmt.Println("开启事务失败, error:" + err.Error())
return
}
count, err := daoSerialOrder.UpdateBackFlushFlag(serialOrderIdLi)
if err != nil {
_ = acuraSession.Rollback()
fmt.Println("更新工单回冲状态失败, error:" + err.Error())
return
}
if int(count) != len(serialOrderIdLi) {
_ = acuraSession.Rollback()
fmt.Println("更新工单回冲状态数量和查询的数量不一致, 更新数量:" + strconv.Itoa(int(count)) + ", 查询数量:" + strconv.Itoa(len(serialOrderIdLi)))
return
}
//OpenFile读取文件,不存在时则创建,使用追加模式
File, err := os.OpenFile(filepath, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
fmt.Println("创建csv文件失败, error:" + err.Error())
return
}
_, err = File.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM
if err != nil {
_ = acuraSession.Rollback()
fmt.Println("写入csv文件失败, error:" + err.Error())
return
}
for _, item := range writeLi {
_, err = File.WriteString(item)
if err != nil {
_ = acuraSession.Rollback()
fmt.Println("写入csv文件失败, error:" + err.Error())
return
}
_, err = File.Write([]byte{'\r', '\n'})
if err != nil {
_ = acuraSession.Rollback()
fmt.Println("写入csv文件失败, error:" + err.Error())
return
}
}
File.Close()
//创建写入接口
//WriterCsv := csv.NewWriter(File)
//for _, writeItem := range writeLi {
// //写入一条数据,传入数据为切片(追加模式)
// err = WriterCsv.Write(writeItem)
// if err != nil {
// _ = acuraSession.Rollback()
// fmt.Println("写入csv文件失败, error:" + err.Error())
// return
// }
//}
//WriterCsv.Flush() //刷新,不刷新是无法写入的
err = acuraSession.Commit()
if err != nil {
fmt.Println("事务提交失败, error:" + err.Error())
return
}
fmt.Println("OK")
return
}

Loading…
Cancel
Save