Browse Source

添加回冲文件的功能脚本

pull/95/head
zhangxin 3 years ago
parent
commit
9c64ffbad7
3 changed files with 244 additions and 0 deletions
  1. +223
    -0
      etl_task/BackFlushPackOrder.go
  2. +1
    -0
      etl_task/BackFlushShipOrder.go
  3. +20
    -0
      etl_task/model/ShellParam.go

+ 223
- 0
etl_task/BackFlushPackOrder.go View File

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

+ 1
- 0
etl_task/BackFlushShipOrder.go View File

@ -0,0 +1 @@
package main

+ 20
- 0
etl_task/model/ShellParam.go View File

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

Loading…
Cancel
Save