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.

245 lines
4.9 KiB

  1. package Engine
  2. import (
  3. "fmt"
  4. "leit.com/leit_seat_aps/common"
  5. conf "leit.com/leit_seat_aps/config"
  6. "leit.com/leit_seat_aps/db"
  7. "testing"
  8. "time"
  9. )
  10. func TestEngine(t *testing.T) {
  11. conf, err := conf.ReadYamlConfig("D:\\Go\\gopath\\src\\LAPP_PLATFORM\\conf\\config.yaml")
  12. if err != nil {
  13. t.Errorf("failed to read yaml config due to: %v", err)
  14. return
  15. }
  16. RunEngine(conf)
  17. time.Sleep(60 * time.Second)
  18. }
  19. // 测试不同服务之间的GoRouting通信
  20. /**
  21. |-- 管道 --| --> 1号打印机 --|
  22. Fetcher--|--管道--|Scheduler --->| |--管道--|--> Saver
  23. |-- 管道 --| --> 2号打印机 --|
  24. 引擎管理对象
  25. 1. Fetcher
  26. 2. Fetcher -> Scheduler 管道
  27. 3. Scheduler
  28. 4. Printer列表 (每个Printer包括接收数据的管道和缓存数据的队列
  29. 5. 打印机 -> Saver的管道
  30. 6. Saver带有缓存数据队列
  31. **/
  32. func TestEngineRoutine(t *testing.T) {
  33. fschan := make(chan int) // 数据获取服务到调度器的管道
  34. sp1chan := make(chan int) // 调度器到1号打印机的管道
  35. sp2chan := make(chan int) // 调度器到2号打印机的管道
  36. pschan := make(chan int) // 打印机到保存服务的管道
  37. var t1, t2 time.Time
  38. var sp1q []int
  39. var sp2q []int
  40. t1 = time.Now()
  41. fmt.Println("start time = ", t1)
  42. // 模拟数据获取服务
  43. go func() {
  44. for i := 0; i < 40000; i++ {
  45. fschan <- i
  46. }
  47. }()
  48. // 启动调度器服务
  49. go func() {
  50. for {
  51. i := <-fschan
  52. if i%2 == 0 {
  53. sp1chan <- i
  54. } else {
  55. sp2chan <- i
  56. }
  57. }
  58. }()
  59. // 启动打印机1服务
  60. go func() {
  61. for {
  62. i := <-sp1chan
  63. //fmt.Println("打印机1接收打印任务:", i)
  64. sp1q = append(sp1q, i)
  65. }
  66. }()
  67. // 启动打印机2服务
  68. go func() {
  69. for {
  70. i := <-sp2chan
  71. //fmt.Println("打印机2接收打印任务:", i)
  72. sp2q = append(sp2q, i)
  73. }
  74. }()
  75. go func() {
  76. for {
  77. if len(sp1q) > 0 {
  78. i := sp1q[0]
  79. sp1q = sp1q[1:]
  80. pschan <- i
  81. fmt.Println("打印机1:任务:", i, "完成")
  82. }
  83. }
  84. }()
  85. go func() {
  86. for {
  87. if len(sp2q) > 0 {
  88. i := sp2q[0]
  89. sp2q = sp2q[1:]
  90. pschan <- i
  91. fmt.Println("打印机2:任务:", i, "完成")
  92. }
  93. }
  94. }()
  95. // 启动保存服务
  96. go func() {
  97. for {
  98. i := <-pschan
  99. fmt.Println("任务:", i, " 被保存")
  100. if i >= 39998 {
  101. t2 = time.Now()
  102. fmt.Println("end time = ", t2)
  103. }
  104. }
  105. }()
  106. time.Sleep(10 * time.Second)
  107. sub := t2.Sub(t1)
  108. fmt.Println("Duration = ", sub.Seconds())
  109. }
  110. func TestEngineRoutineWithQueue(t *testing.T) {
  111. fschan := make(chan int) // 数据获取服务到调度器的管道
  112. sp1chan := make(chan int) // 调度器到1号打印机的管道
  113. sp2chan := make(chan int) // 调度器到2号打印机的管道
  114. pschan := make(chan int) // 打印机到保存服务的管道
  115. var t1, t2 time.Time
  116. t1 = time.Now()
  117. fmt.Println("start time = ", t1)
  118. // 模拟数据获取服务
  119. go func() {
  120. for i := 0; i < 40000; i++ {
  121. fschan <- i
  122. }
  123. }()
  124. // 启动调度器服务
  125. go func() {
  126. for {
  127. i := <-fschan
  128. if i%2 == 0 {
  129. sp1chan <- i
  130. } else {
  131. sp2chan <- i
  132. }
  133. }
  134. }()
  135. // 启动打印机1服务
  136. go func() {
  137. var sp1q []int
  138. var t int
  139. for {
  140. if len(sp1q) > 0 {
  141. t = sp1q[0]
  142. } else {
  143. continue
  144. }
  145. select {
  146. case i := <-sp1chan:
  147. sp1q = append(sp1q, i)
  148. fmt.Println("打印机1接收打印任务:", i)
  149. case pschan <- t:
  150. sp1q = sp1q[1:]
  151. fmt.Println("打印机1发送保存任务:", t)
  152. }
  153. }
  154. }()
  155. // 启动打印机2服务
  156. go func() {
  157. var sp2q []int
  158. var t int
  159. for {
  160. if len(sp2q) > 0 {
  161. t = sp2q[0]
  162. } else {
  163. continue
  164. }
  165. select {
  166. case i := <-sp2chan:
  167. sp2q = append(sp2q, i)
  168. fmt.Println("打印机2接收打印任务:", i)
  169. case pschan <- t:
  170. sp2q = sp2q[1:]
  171. fmt.Println("打印机2发送保存任务:", t)
  172. }
  173. }
  174. }()
  175. // 启动保存服务
  176. go func() {
  177. for {
  178. i := <-pschan
  179. fmt.Println("任务:", i, " 被保存")
  180. if i >= 39998 {
  181. t2 = time.Now()
  182. fmt.Println("end time = ", t2)
  183. }
  184. }
  185. }()
  186. time.Sleep(10 * time.Second)
  187. sub := t2.Sub(t1)
  188. fmt.Println("Duration = ", sub.Seconds())
  189. }
  190. func TestDelPrinterInfo(t *testing.T) {
  191. var (
  192. connstring string
  193. err error
  194. )
  195. // 连接数据库
  196. connstring = fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable",
  197. `10.114.64.19`, "lapp", "123fis", "SJA_APS", 1433)
  198. if err = db.InitMssqlDb(connstring); err != nil {
  199. t.Errorf("Failed to connect db due to: %v", err)
  200. return
  201. }
  202. t.Log("111")
  203. //defer db.G_DbEngine.Close()
  204. tick := time.Tick(5 * time.Second)
  205. //tick := time.Tick(72 * time.Hour)
  206. for {
  207. select {
  208. case <-tick:
  209. //执行删除操作
  210. before7day := time.Now().AddDate(0, 0, -1)
  211. fmt.Printf("before7day:%s", before7day)
  212. t.Log("before7day")
  213. timestr := common.TimeFormat(before7day, "yyyyMMddHHmmss")
  214. t.Log(timestr)
  215. printer := new(db.Printheadtab)
  216. printer.Finr = db.G_FINR
  217. printer.DelBefore7DayRecords(timestr)
  218. }
  219. }
  220. }