SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.5 KiB

  1. package seq
  2. import (
  3. "github.com/go-xorm/xorm"
  4. "leit.com/leit_seat_aps/common"
  5. "leit.com/leit_seat_aps/db"
  6. "log"
  7. "path/filepath"
  8. "time"
  9. )
  10. // SEQ 解析的数据对象
  11. type BL_Seq struct {
  12. Custordernr string // 系统内部客户订单号
  13. Oemordernr string // 客户订单号
  14. Projnr string // 项目号
  15. SeqType int // 3=新建;1=变更;2=取消
  16. Edifile string // EDI 文件名
  17. Vin string // 车身号
  18. Swet string // 交付时间
  19. Oemseq string // 排序号(10位)
  20. Partfamilyid string // 零件族
  21. Assemblyline string // 客户装配线
  22. Unloadingpoint string // 客户卸货点
  23. Seqdatatab db.Pln_seqdata_landing
  24. }
  25. // SEQ 缓存数据对象定义
  26. type SeqLandData struct {
  27. Projnr string // 项目号
  28. Edifile string // EDI 文件名
  29. Bl_SeqDict map[string]BL_Seq // 解析的SEQ订单对象
  30. Seqlandtab []db.Pln_seqdata_landing // 排序版本消息
  31. }
  32. // 加载SEQ文件并将文件中的客户订单数据解析到客户订单字典
  33. func (bls *SeqLandData) ReadSeqData(seq_file string) (err error) {
  34. var (
  35. sequence SEQUENCE
  36. seq SEQ
  37. bl_seq BL_Seq
  38. ediFile string
  39. )
  40. // 解析EDI文件
  41. sequence = SEQUENCE{}
  42. if err = ParseSeqEdi(seq_file, &sequence); err != nil {
  43. log.Printf("Failed to load SEQ file: %s due to: %v", seq_file, err)
  44. return
  45. }
  46. // PrintSeqEdi(&sequence)
  47. // 获取SEQ文件名
  48. _, ediFile = filepath.Split(seq_file)
  49. // 初始化
  50. bls.Bl_SeqDict = make(map[string]BL_Seq)
  51. // 遍历
  52. for _, seq = range sequence.SeqList {
  53. bl_seq = BL_Seq{}
  54. bl_seq.Oemordernr = seq.Gir.CustOrderNr
  55. bl_seq.SeqType = seq.SeqType
  56. bl_seq.Edifile = ediFile
  57. bl_seq.Projnr = bls.Projnr
  58. bl_seq.Oemseq = seq.SeqNum
  59. bl_seq.Vin = seq.Gir.Vin
  60. bl_seq.Partfamilyid = sequence.Ftx.PartFamily
  61. bl_seq.Assemblyline = seq.Loc44.AssemblyLine
  62. bl_seq.Unloadingpoint = seq.Loc83.UnloadingPoint
  63. bl_seq.Swet = common.Date(seq.Dtm.MsgTime.Unix(), "YYYYMMDDHHmmss")
  64. bls.Bl_SeqDict[bl_seq.Oemordernr] = bl_seq
  65. }
  66. return
  67. }
  68. // 保存SEQ解析数据
  69. func (bls *SeqLandData) SaveSeqData() (err error) {
  70. var (
  71. bl_seq BL_Seq
  72. version int
  73. seqlandtab db.Pln_seqdata_landing
  74. session *xorm.Session
  75. flag bool
  76. )
  77. // 遍历每一条SEQ信息,检查是否存在,如果存在则更新它
  78. session = db.G_DbEngine.NewSession()
  79. defer session.Close()
  80. flag = true
  81. for _, bl_seq = range bls.Bl_SeqDict {
  82. // 新建
  83. seqlandtab = db.Pln_seqdata_landing{}
  84. seqlandtab.Finr = db.G_FINR
  85. seqlandtab.Oemordernr = bl_seq.Oemordernr
  86. seqlandtab.Vin = bl_seq.Vin
  87. seqlandtab.Partfamilyid = bl_seq.Partfamilyid
  88. seqlandtab.Projnr = bl_seq.Projnr
  89. // 基于OEM订单号和零件组获取SEQ数据最新版本号
  90. if version, err = seqlandtab.GetLatestVersionBySession(session); err != nil {
  91. flag = false
  92. break
  93. }
  94. seqlandtab.Version = version + 1
  95. seqlandtab.Seqmode = bl_seq.SeqType
  96. seqlandtab.Oemseq= common.ValueToFloat(bl_seq.Oemseq,0.0)
  97. if seqlandtab.Oemseq <= 0 {
  98. seqlandtab.Oemseq = 9999999999
  99. }
  100. seqlandtab.Swet = bl_seq.Swet
  101. seqlandtab.Assemblyline = bl_seq.Assemblyline
  102. seqlandtab.Unloadingpoint = bl_seq.Unloadingpoint
  103. seqlandtab.Parsed = 0 // 默认未解析
  104. seqlandtab.Edifile = bl_seq.Edifile
  105. seqlandtab.Lastuser = "service"
  106. seqlandtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
  107. if _, err = session.Insert(seqlandtab); err != nil {
  108. flag = false
  109. break
  110. }
  111. }
  112. if flag {
  113. session.Commit()
  114. } else {
  115. session.Rollback()
  116. }
  117. return
  118. }