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.

191 lines
5.9 KiB

  1. package reorder
  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. "strings"
  9. "time"
  10. )
  11. // REORDER 解析的数据对象
  12. type BL_Reorder struct {
  13. Reordernr string // Reorder订单号
  14. Rejectionnr string
  15. Projnr string // 项目号
  16. Edifile string // EDI 文件名
  17. Partfamilyid string // 零件族
  18. Plantsitecode int // 客户车间号
  19. Consigee string
  20. Msgid string
  21. Msgtime time.Time
  22. Reorderlandtab db.Pln_reorderdata_landing // Reorder消息
  23. SgDict map[string]BL_ReorderSupplygroup
  24. }
  25. type BL_ReorderSupplygroup struct {
  26. Reordernr string // Reorder订单号
  27. Oemordernr string // 客户订单号
  28. SeqType int // 3=新建;1=变更;2=取消
  29. Partfamilyid string // 零件族
  30. Supplygroupid string // 供应组
  31. PartDict map[string]BL_ReorderPart
  32. }
  33. type BL_ReorderPart struct {
  34. Reordernr string // Reorder订单号
  35. Oemordernr string // 客户订单号
  36. Supplygroupid string // 供应组
  37. Partid string
  38. Partqty int
  39. }
  40. // Reorder 缓存数据对象定义
  41. type ReorderLandData struct {
  42. Projnr string // 项目号
  43. Edifile string // EDI 文件名
  44. Bl_Reorder BL_Reorder // 解析的REORDER订单对象
  45. Reorderlandtablst []db.Pln_reorderdata_landing // Reorder消息
  46. }
  47. // 加载Reorder文件并将文件中的Reorder订单数据解析到Reorder订单字典
  48. func (rld *ReorderLandData) ReadReorderData(reorder_file string) (err error) {
  49. var (
  50. reorder REORDER
  51. seq SEQ
  52. bl_reorder BL_Reorder
  53. bl_reosg BL_ReorderSupplygroup
  54. bl_reopart BL_ReorderPart
  55. ediFile string
  56. i int
  57. )
  58. // 解析EDI文件
  59. reorder = REORDER{}
  60. if err = ParseReorderEdi(reorder_file, &reorder); err != nil {
  61. log.Printf("Failed to load REORDER file: %s due to: %v", reorder_file, err)
  62. return
  63. }
  64. PrintReorderEdi(&reorder)
  65. // 获取SEQ文件名
  66. _, ediFile = filepath.Split(reorder_file)
  67. // 遍历
  68. bl_reorder = BL_Reorder{}
  69. bl_reorder.Reordernr = reorder.Bgm.ReorderNum
  70. bl_reorder.Rejectionnr = reorder.Ftx.RejectionNum
  71. bl_reorder.Edifile = ediFile
  72. bl_reorder.Projnr = rld.Projnr
  73. bl_reorder.Partfamilyid = reorder.Rff.PartFamily
  74. bl_reorder.Plantsitecode = reorder.Nad.ConsigneePlant
  75. bl_reorder.Consigee = reorder.Nad.Consignee
  76. bl_reorder.Msgid = reorder.Unh.MsgId
  77. bl_reorder.Msgtime = reorder.Dtm.MsgTime
  78. bl_reorder.SgDict = make(map[string]BL_ReorderSupplygroup)
  79. for _, seq = range reorder.SeqList {
  80. bl_reosg = BL_ReorderSupplygroup{}
  81. bl_reosg.Reordernr = reorder.Bgm.ReorderNum
  82. bl_reosg.Partfamilyid = reorder.Rff.PartFamily
  83. bl_reosg.Oemordernr = strings.TrimSpace(seq.Gir.CustOrderNr)
  84. bl_reosg.Supplygroupid = seq.Gir.SupplyGroup
  85. bl_reosg.SeqType = seq.SeqType
  86. bl_reosg.PartDict = make(map[string]BL_ReorderPart)
  87. for i = 0; i < len(seq.LinList); i++ {
  88. bl_reopart = BL_ReorderPart{}
  89. bl_reopart.Reordernr = reorder.Bgm.ReorderNum
  90. bl_reopart.Oemordernr = strings.TrimSpace(seq.Gir.CustOrderNr)
  91. bl_reopart.Supplygroupid = seq.Gir.SupplyGroup
  92. bl_reopart.Partid = seq.LinList[i].PartNr + "-" + seq.LinList[i].Pia.Ai // 零件号
  93. bl_reopart.Partqty = seq.LinList[i].Qty.Qty
  94. bl_reosg.PartDict[bl_reopart.Partid] = bl_reopart
  95. }
  96. bl_reorder.SgDict[bl_reosg.Supplygroupid] = bl_reosg
  97. }
  98. rld.Bl_Reorder = bl_reorder
  99. return
  100. }
  101. // 保存REORDER解析数据
  102. func (rld *ReorderLandData) SaveReorderData() (err error) {
  103. var (
  104. bl_reosg BL_ReorderSupplygroup
  105. bl_reopart BL_ReorderPart
  106. reolandtab db.Pln_reorderdata_landing
  107. reosgtab db.Pln_reordersupplygroup_landing
  108. reoparttab db.Pln_reorderpart_landing
  109. session *xorm.Session
  110. flag bool
  111. )
  112. // 遍历每一条SEQ信息,检查是否存在,如果存在则更新它
  113. session = db.G_DbEngine.NewSession()
  114. defer session.Close()
  115. // 新建
  116. reolandtab = db.Pln_reorderdata_landing{}
  117. reolandtab.Finr = db.G_FINR
  118. reolandtab.Reordernr = rld.Bl_Reorder.Reordernr
  119. reolandtab.Rejectionnr = rld.Bl_Reorder.Rejectionnr
  120. reolandtab.Partfamilyid = rld.Bl_Reorder.Partfamilyid
  121. reolandtab.Projnr = rld.Bl_Reorder.Projnr
  122. reolandtab.Consignee = rld.Bl_Reorder.Consigee
  123. reolandtab.Consigneeplant = rld.Bl_Reorder.Plantsitecode
  124. reolandtab.Parsed = 0 // 默认未解析
  125. reolandtab.Edifile = rld.Bl_Reorder.Edifile
  126. reolandtab.Msgid = rld.Bl_Reorder.Msgid
  127. reolandtab.Msgtime = common.Date(rld.Bl_Reorder.Msgtime.Unix(), "YYYYMMDDHHmmss")
  128. reolandtab.Lastuser = "service"
  129. reolandtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
  130. reolandtab.Lastmodif = reolandtab.Credatuz
  131. if _, err = session.Insert(reolandtab); err != nil {
  132. session.Rollback()
  133. return
  134. }
  135. flag = true
  136. for _, bl_reosg = range rld.Bl_Reorder.SgDict {
  137. reosgtab = db.Pln_reordersupplygroup_landing{}
  138. reosgtab.Finr = db.G_FINR
  139. reosgtab.Reordernr = bl_reosg.Reordernr
  140. reosgtab.Oemordernr = bl_reosg.Oemordernr
  141. reosgtab.Supplygroupid = bl_reosg.Supplygroupid
  142. reosgtab.Seqmode = bl_reosg.SeqType
  143. reosgtab.Lastuser = "service"
  144. reosgtab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
  145. reosgtab.Lastmodif = reosgtab.Credatuz
  146. if _, err = session.Insert(reosgtab); err != nil {
  147. flag = false
  148. break
  149. }
  150. for _, bl_reopart = range bl_reosg.PartDict {
  151. reoparttab = db.Pln_reorderpart_landing{}
  152. reoparttab.Finr = db.G_FINR
  153. reoparttab.Reordernr = bl_reopart.Reordernr
  154. reoparttab.Oemordernr = bl_reopart.Oemordernr
  155. reoparttab.Supplygroupid = bl_reopart.Supplygroupid
  156. reoparttab.Partid = bl_reopart.Partid
  157. reoparttab.Partqty = bl_reopart.Partqty
  158. reoparttab.Lastuser = "service"
  159. reoparttab.Credatuz = common.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
  160. reoparttab.Lastmodif = reoparttab.Credatuz
  161. if _, err = session.Insert(reoparttab); err != nil {
  162. flag = false
  163. break
  164. }
  165. }
  166. if !flag {
  167. break
  168. }
  169. }
  170. if flag {
  171. session.Commit()
  172. } else {
  173. session.Rollback()
  174. }
  175. return
  176. }