|
|
- package main
-
- import (
- dalBase "LAPP_ACURA_MOM_BACKEND/dao/base"
- dalJit "LAPP_ACURA_MOM_BACKEND/dao/jit"
- 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"
- "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 = 100
- 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
- }
- acuraDB.ShowSQL(true)
- // 从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
- 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
- }
- }
- // 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) + "ACURA.csv"
- filepath := path.Join(dir, filename)
- acuraSession := acuraDB.NewSession()
- defer acuraSession.Close()
- nowStr := now.Format(grmi.DateTimeOutFormat)
- daoPackOrderItem := dalJit.NewPackOrderItemLstDAO(acuraSession, plantNr, userId)
- daoPackOrderStatus := dalJit.NewPackOrderStatusDAO(acuraSession, plantNr, userId)
- daoArticle := dalBase.NewArticleDAO(acuraSession, plantNr, userId)
- daoSerialOrder := dalOm.NewSerialOrderDAO(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()
- var currentPackOrderId string
- for index, item := range backFlushLi {
- if index == 0 {
- currentPackOrderId = item.PackOrderStatus.PackOrderId
- packOrderIdLi = append(packOrderIdLi, item.PackOrderStatus.PackOrderId)
- }
- _, 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()
- //}
- //fmt.Println("item.SerialOrder:", item.SerialOrder.SerialOrderId)
- //fmt.Println("item.SerialOrder.CreateTime:", item.SerialOrder.CreateTime.Restore().String())
- //fmt.Println("serialOrderStartTime:", serialOrderStartTime.String())
- //fmt.Println("serialOrderEndTime:", serialOrderEndTime.String())
- //if item.SerialOrder.CreateTime.Restore().Before(serialOrderStartTime) {
- // fmt.Println("here1")
- // serialOrderStartTime = item.SerialOrder.CreateTime.Restore()
- //}
- //if serialOrderEndTime.Before(item.SerialOrder.CreateTime.Restore()) {
- // fmt.Println("here2")
- // serialOrderEndTime = item.SerialOrder.CreateTime.Restore()
- //}
- //if item.PackOrderStatus.CreateTime.Restore().Before(packOrderStartTime) {
- // packOrderStartTime = item.PackOrderStatus.CreateTime.Restore()
- //}
- //if packOrderEndTime.Before(item.PackOrderStatus.CreateTime.Restore()) {
- // packOrderEndTime = item.PackOrderStatus.CreateTime.Restore()
- //}
- serialOrderIdLi = append(serialOrderIdLi, item.SerialOrder.SerialOrderId)
- if currentPackOrderId != item.PackOrderStatus.PackOrderId {
- currentPackOrderId = item.PackOrderStatus.PackOrderId
- packOrderIdLi = append(packOrderIdLi, item.PackOrderStatus.PackOrderId)
- }
- }
-
- 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 {
- 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
- }
- count, err = daoPackOrderStatus.UpdateBackFlushFlag(packOrderIdLi)
- if err != nil {
- _ = acuraSession.Rollback()
- fmt.Println("更新包装单回冲状态失败, error:" + err.Error())
- return
- }
- if int(count) != len(packOrderIdLi) {
- _ = acuraSession.Rollback()
- fmt.Println("更新包装单回冲状态数量和查询的数量不一致, 更新数量:" + strconv.Itoa(int(count)) + ", 查询数量:" + strconv.Itoa(len(packOrderIdLi)))
- 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
-
- }
|