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.

88 lines
2.7 KiB

  1. package service
  2. import (
  3. "errors"
  4. "fmt"
  5. "leit.com/leit_seat_aps/common"
  6. "leit.com/leit_seat_aps/db"
  7. "leit.com/leit_seat_aps/glog"
  8. )
  9. // 生产包装处理引擎
  10. type BL_MESPrintEngine struct {
  11. PackTmpDict map[string]BL_ProdPackTmp // 生产包装单模板
  12. }
  13. // 加载生产包装单模板
  14. func (mespe *BL_MESPrintEngine) LoadPackTemplates() (err error) {
  15. var(
  16. ppaktmp db.Prod_packtemplate
  17. ppaktmplst []db.Prod_packtemplate
  18. bl_ppaktmp BL_ProdPackTmp
  19. )
  20. // 初始化
  21. mespe.PackTmpDict = make(map[string]BL_ProdPackTmp)
  22. // 加载生产包装单模板
  23. if ppaktmplst, err = ppaktmp.GetAll(); err != nil {
  24. err = errors.New(fmt.Sprintf("获取生产包装模板失败%v",err))
  25. return
  26. }
  27. // 将模板字典化
  28. for _, ppaktmp = range ppaktmplst {
  29. bl_ppaktmp = BL_ProdPackTmp{PackTmplId: ppaktmp.Packtemplateid, Paktmpltab: ppaktmp}
  30. mespe.PackTmpDict[bl_ppaktmp.PackTmplId] = bl_ppaktmp
  31. }
  32. return
  33. }
  34. // 读取并解析生产包装单下达消息
  35. func (mespe *BL_MESPrintEngine) ParseOpenPrintMsg() (err error) {
  36. var(
  37. mesmsgtab db.Mes_msg
  38. mesmsgtablst []db.Mes_msg
  39. ppakordtab db.Prod_packorder
  40. bl_mesmsg BL_Mesmsg
  41. printheadtab db.Printheadtab
  42. )
  43. // 读取MES开口的打印消息
  44. if mesmsgtablst, err = mesmsgtab.GetOpenPrintMessages(); err != nil{
  45. err = errors.New(fmt.Sprintf("获取MES开口打印消息失败%v",err))
  46. }
  47. // 遍历消息
  48. for _, mesmsgtab = range mesmsgtablst {
  49. bl_mesmsg = BL_Mesmsg{Msgid: mesmsgtab.Msgid, MsgObjid: mesmsgtab.Msgobjid,
  50. MsgType: mesmsgtab.Msgtype, MsgEvent: mesmsgtab.Msgevent, MsgcPara1: mesmsgtab.Msg_cpara1, Msgtab: mesmsgtab}
  51. switch mesmsgtab.Msgtype {
  52. // 生产包装打印消息
  53. case common.MESMSG_TYPE_PACK:
  54. // 获取包装单,基于打印模板生成打印数据
  55. ppakordtab = db.Prod_packorder{Finr:db.G_FINR,Packorderid: mesmsgtab.Msgobjid}
  56. if ppakordtab, err = ppakordtab.SelectOne(); err != nil {
  57. glog.InfoExtln("生产包装打印消息解析", "获取包装单失败:",mesmsgtab.Msgobjid, err)
  58. continue
  59. }
  60. // 生成打印数据
  61. if printheadtab, err = bl_mesmsg.GeneratePrintDataForPackOrder(ppakordtab, mespe); err != nil {
  62. // 更新订单消息的出错状态和出错消息
  63. if err = bl_mesmsg.Pending(err.Error()); err != nil {
  64. glog.InfoExtln("生产包装打印消息解析", "生成包装单打印数据失败:", mesmsgtab.Msgobjid, err)
  65. continue
  66. }
  67. } else {
  68. // 将打印数据插入到打印服务的数据库
  69. printheadtab = printheadtab
  70. // 关闭订单消息
  71. if err = bl_mesmsg.Close(); err != nil {
  72. glog.InfoExtln("生产包装打印消息解析", "关闭包装单打印消息失败:", err)
  73. continue
  74. }
  75. }
  76. }
  77. }
  78. return
  79. }