From 9c64ffbad7886741c81d334f8fa06fb80a7ec384 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Wed, 29 Dec 2021 10:50:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=9E=E5=86=B2=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E5=8A=9F=E8=83=BD=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etl_task/BackFlushPackOrder.go | 223 +++++++++++++++++++++++++++++++++ etl_task/BackFlushShipOrder.go | 1 + etl_task/model/ShellParam.go | 20 +++ 3 files changed, 244 insertions(+) create mode 100644 etl_task/BackFlushPackOrder.go create mode 100644 etl_task/BackFlushShipOrder.go create mode 100644 etl_task/model/ShellParam.go diff --git a/etl_task/BackFlushPackOrder.go b/etl_task/BackFlushPackOrder.go new file mode 100644 index 0000000..23d39ab --- /dev/null +++ b/etl_task/BackFlushPackOrder.go @@ -0,0 +1,223 @@ +package main + +import ( + dalBase "LAPP_ACURA_MOM_BACKEND/dao/base" + dalJit "LAPP_ACURA_MOM_BACKEND/dao/jit" + "LAPP_ACURA_MOM_BACKEND/etl_task/model" + "LAPP_ACURA_MOM_BACKEND/grmi" + "LAPP_ACURA_MOM_BACKEND/utils" + "encoding/csv" + "fmt" + "github.com/go-xorm/xorm" + "os" + "strconv" + "time" +) + +const ( + plantNr = 100 + userId = "BackFlush" +) + +func main() { + now := time.Now() + year, month, day := now.Date() + hour := now.Hour() + minute := now.Minute() + second := now.Second() + // init global location time zone + var err error + utils.TimezoneLocation, err = time.LoadLocation("Asia/Shanghai") + if err != nil { + fmt.Println("初始化时区错误:" + err.Error()) + return + } + if len(os.Args) < 5 { + fmt.Println("参数长度错误!") + return + } + //fmt.Println("shellPath:", shellPath) + //fmt.Println("sourceDsn:", sourceDsn) + //fmt.Println("targetDsn:", targetDsn) + //fmt.Println("global.DatabaseDsn:", global.DatabaseDsn) + //fmt.Println("global.MongoDsn:", global.MongoDsn) + //fmt.Println("strconv.Itoa(task.TaskId):", strconv.Itoa(task.TaskId)) + var acuraDsn = os.Args[2] + var etlDsn = os.Args[3] + taskId, err := strconv.Atoi(os.Args[4]) + if err != nil { + fmt.Println("接收到的taskId错误, taskId:" + os.Args[4]) + return + } + // 初始化数据库连接 + etlDB, err := xorm.NewEngine("mssql", etlDsn) + if err != nil { + fmt.Println("初始化讴歌数据库引擎错误:" + err.Error()) + return + } + err = etlDB.Ping() + if err != nil { + fmt.Println("连接ETL数据库失败, error:" + err.Error()) + return + } + acraDB, err := xorm.NewEngine("mssql", acuraDsn) + if err != nil { + fmt.Println("初始化讴歌数据库引擎错误:" + err.Error()) + return + } + err = acraDB.Ping() + if err != nil { + fmt.Println("连接讴歌数据库失败, error:" + err.Error()) + return + } + // 从etl数据库中获取参数 + var index1 string + var index2 string + var index3 string + var index5 string + var index7 string + var index8 string + var index11 string + var path string + etlSession := etlDB.NewSession() + shellParamLi := make([]model.ShellParam, 0) + err = etlSession.Table("Shell").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.CtlParam1 + case "index2": + index2 = param.CtlParam1 + case "index3": + index3 = param.CtlParam1 + case "index5": + index5 = param.CtlParam1 + case "index7": + index7 = param.CtlParam1 + case "index8": + index8 = param.CtlParam1 + case "index11": + index11 = param.CtlParam1 + case "path": + path = param.CtlParam1 + } + } + filepath := path + "/" + "bkfl" + fmt.Sprintf("%d%02d%02d%d", year, int(month), day, 3600*hour+60*minute+second) + "2TU.csv" + acuraSession := acraDB.NewSession() + + nowStr := now.Format(grmi.DateTimeOutFormat) + daoPackOrderItem := dalJit.NewPackOrderItemLstDAO(acuraSession, plantNr, userId) + daoArticle := dalBase.NewArticleDAO(acuraSession, plantNr, userId) + backFlushLi, err := daoPackOrderItem.GetUnFlushBackData(nowStr) + if err != nil { + fmt.Println("查询和更新包装单状态失败, error:" + err.Error()) + return + } + if len(backFlushLi) == 0 { + fmt.Println("OK") + return + } + ArtMap := make(map[string]int) + serialOrderIdLi := make([]string, 0) + packOrderIdLi := make([]string, 0) + serialOrderStartTime := time.Now() + serialOrderEndTime := time.Now() + packOrderStartTime := time.Now() + packOrderEndTime := time.Now() + for index, item := range backFlushLi { + _, exist := ArtMap[item.SerialOrder.ArtId] + if !exist { + ArtMap[item.SerialOrder.ArtId] = 1 + } else { + ArtMap[item.SerialOrder.ArtId] += 1 + } + if index == 0 { + serialOrderStartTime = item.SerialOrder.CreateTime.Restore() + serialOrderEndTime = item.SerialOrder.CreateTime.Restore() + packOrderStartTime = item.PackOrderStatus.CreateTime.Restore() + packOrderEndTime = item.PackOrderStatus.CreateTime.Restore() + } + if item.SerialOrder.CreateTime.Restore().Sub(serialOrderEndTime) > 0 { + serialOrderEndTime = item.SerialOrder.CreateTime.Restore() + } + if item.SerialOrder.CreateTime.Restore().Sub(serialOrderStartTime) < 0 { + serialOrderEndTime = item.SerialOrder.CreateTime.Restore() + } + if item.PackOrderStatus.CreateTime.Restore().Sub(packOrderStartTime) < 0 { + packOrderStartTime = item.PackOrderStatus.CreateTime.Restore() + } + if item.PackOrderStatus.CreateTime.Restore().Sub(packOrderEndTime) > 0 { + packOrderEndTime = item.PackOrderStatus.CreateTime.Restore() + } + serialOrderIdLi = append(serialOrderIdLi, item.SerialOrder.SerialOrderId) + packOrderIdLi = append(packOrderIdLi, item.PackOrderStatus.PackOrderId) + + } + if err = acuraSession.Begin(); err != nil { + fmt.Println("开启事务失败, error:" + err.Error()) + 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()) + } + defer File.Close() + //创建写入接口 + WriterCsv := csv.NewWriter(File) + for artId, qty := range ArtMap { + article, err := daoArticle.SelectOne(artId) + if err != nil { + fmt.Println("查询物料数据失败, error:" + err.Error()) + return + } + if article == nil { + fmt.Println("物料不存在, 物料ID:" + artId) + return + } + qadArtId := article.ArtSpec3 + if qadArtId == "" { + fmt.Println("未获取到ERP零件号, 物料ID:" + artId) + return + } + + + index6 := fmt.Sprintf("%02d%02d%d,%02d%02d%d", int(month), day, 3600*hour+60*minute+second, int(month), day, 3600*hour+60*minute+second) + index8 = index8 + fmt.Sprintf("%d%02d%02d%d", year, int(month), day, 3600*hour+60*minute+second) + index10 := now.Format("02/01/06") + record := fmt.Sprintf(`"%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s"`, + index1, + index2, + index3, + qadArtId, + index5, + index6, + index7, + index8, + strconv.Itoa(qty), + index10, + index11, + ) + str := []string{record} //需要写入csv的数据,切片类型 + + //写入一条数据,传入数据为切片(追加模式) + err = WriterCsv.Write(str) + if err != nil { + 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 + +} diff --git a/etl_task/BackFlushShipOrder.go b/etl_task/BackFlushShipOrder.go new file mode 100644 index 0000000..06ab7d0 --- /dev/null +++ b/etl_task/BackFlushShipOrder.go @@ -0,0 +1 @@ +package main diff --git a/etl_task/model/ShellParam.go b/etl_task/model/ShellParam.go new file mode 100644 index 0000000..388076c --- /dev/null +++ b/etl_task/model/ShellParam.go @@ -0,0 +1,20 @@ +package main + +import "LAPP_ACURA_MOM_BACKEND/grmi" + +type ShellParam struct { + TaskId int `xorm:"pk int 'TaskId'" json:"ShellParam-TaskId"` + ShellName string `xorm:"pk nvarchar(255) 'ShellName'" json:"ShellParam-ShellName"` + ParamName string `xorm:"pk nvarchar(255) 'ParamName'" json:"ShellParam-ParamName"` + ParamType string `xorm:"nvarchar(255) 'ParamType'" json:"ShellParam-ParamType"` + ParamValue string `xorm:"nvarchar(255) 'ParamValue'" json:"ShellParam-ParamValue"` + ValueType int `xorm:"int 'ValueType'" json:"ShellParam-ValueType"` + ValueFormat string `xorm:"nvarchar(255) 'ValueFormat'" json:"ShellParam-ValueFormat"` + CtlParam1 string `xorm:"nvarchar(255) 'CtlParam1'" json:"ShellParam-CtlParam1"` + CtlParam2 string `xorm:"nvarchar(255) 'CtlParam2'" json:"ShellParam-CtlParam2"` + CtlParam3 int `xorm:"int 'CtlParam3'" json:"ShellParam-CtlParam3"` + CtlParam4 int `xorm:"int 'CtlParam4'" json:"ShellParam-CtlParam4"` + LastModify grmi.DateTime `xorm:"datetime 'LastModify' not null updated" json:"ShellParam-LastModify"` + LastUser string `xorm:"nvarchar(20) 'LastUser' " json:"ShellParam-LastUser"` + CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"ShellParam-CreateTime"` +}