LAPP 打印服务 支持条码打印和表单打印 通过Socket或windows打印方式
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.

116 lines
2.4 KiB

3 years ago
3 years ago
3 years ago
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/kardianos/service"
  6. "LAPP_PRN_Service/common"
  7. "LAPP_PRN_Service/config"
  8. "LAPP_PRN_Service/db"
  9. Engine "LAPP_PRN_Service/engine"
  10. "LAPP_PRN_Service/glog"
  11. "log"
  12. "os"
  13. "path/filepath"
  14. )
  15. //基于windows系统服务器,安装成服务
  16. type program struct{}
  17. func (p *program) Start(s service.Service) error {
  18. // Start should not block. Do the actual work async.
  19. go p.run()
  20. return nil
  21. }
  22. func (p *program) run() {
  23. imain()
  24. }
  25. func (p *program) Stop(s service.Service) error {
  26. return nil
  27. }
  28. func main() {
  29. svcConfig := &service.Config{
  30. Name: "printer",
  31. DisplayName: "printer",
  32. Description: "this is printer",
  33. }
  34. prg := &program{}
  35. s, err := service.New(prg, svcConfig)
  36. if err != nil {
  37. log.Fatal(err)
  38. }
  39. if len(os.Args) > 1 {
  40. verb := os.Args[1]
  41. switch verb {
  42. case "install":
  43. s.Install()
  44. log.Println("服务安装成功")
  45. return
  46. case "remove":
  47. s.Uninstall()
  48. log.Println("服务卸载成功")
  49. return
  50. case "start":
  51. s.Start()
  52. log.Println("服务启动")
  53. return
  54. case "stop":
  55. s.Stop()
  56. log.Println("服务暂停")
  57. return
  58. }
  59. }
  60. err = s.Run()
  61. if err != nil {
  62. log.Println(err)
  63. }
  64. }
  65. /**系统入口函数,按项目依次启动TOD、SEQ、REORDER、CALLOFF的解析服务**/
  66. func imain() {
  67. //初始化日志
  68. baseDir := ""
  69. flag.StringVar(&baseDir, "dir", "log", "running in a directory")
  70. flag.Parse()
  71. defer glog.Flush()
  72. pathLogDir := filepath.Join(baseDir, "glog")
  73. //备注,因为是打包成windows服务,路径需要转义
  74. pathLogDir, err := common.GetCurrentPath(pathLogDir)
  75. if err != nil {
  76. log.Printf("failed pathLogDir due to: %v", err)
  77. return
  78. }
  79. glog.DefaultInit(true, pathLogDir)
  80. glog.Infoln("启动日志", "InitDB return success")
  81. //加载配置
  82. path, err := common.GetCurrentPath("config/config.yaml")
  83. if err != nil {
  84. log.Printf("failed to read yaml config due to: %v", err)
  85. return
  86. }
  87. fmt.Println(path)
  88. conf, err := config.ReadYamlConfig(path)
  89. if err != nil {
  90. log.Printf("failed to read yaml config due to: %v", err)
  91. return
  92. }
  93. //初始化数据库
  94. connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable",
  95. conf.Server, conf.User, conf.Password, conf.DbName, conf.Port)
  96. fmt.Println(connstring)
  97. if err := db.InitMssqlDb(connstring); err != nil {
  98. glog.Infoln("初始化数据库", "InitMssqlDb return fail")
  99. return
  100. }
  101. //打印服务
  102. Engine.RunEngine(conf)
  103. }