GAAS GFrame项目web后台
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.

71 lines
1.6 KiB

  1. package task
  2. import (
  3. svr "LAPP_GAAS_GFrame_BACKEND/services/log"
  4. model "LAPP_GAAS_GFrame_BACKEND/models/log"
  5. "context"
  6. "time"
  7. )
  8. /*************************************
  9. *功能:异步打印生成打印规则(包装单打印方法生成)
  10. **************************************/
  11. //仓库
  12. var packChan = make(chan model.PackOrder, 100) //定义一个调度任务通道
  13. var printNum = 50
  14. /****查询要打印的任务**********/
  15. func CreatePackPrintTask() {
  16. for {
  17. //创建继承Baxkground的子节点Context
  18. ctx, cancel := context.WithCancel(context.Background())
  19. defer cancel()
  20. go doTaskPrintPack(ctx)
  21. data := make([]model.PackOrder, 0)
  22. packList := make([]string, 0)
  23. //第一步,查询要打印的数据
  24. var serviceOfPackOrder = svr.NewPackOrderService()
  25. data, err := serviceOfPackOrder.SelectUnPrint(printNum)
  26. if err != nil {
  27. return
  28. }
  29. //锁定
  30. for _, v := range data {
  31. packList = append(packList, v.PackOrderId)
  32. }
  33. err = serviceOfPackOrder.UpdateUnPrint(packList)
  34. if err != nil {
  35. time.Sleep(1 * time.Second)
  36. continue
  37. }
  38. //第二步,把所有的服务调度放到channel
  39. for _, v := range data {
  40. packChan <- v
  41. }
  42. time.Sleep(1 * time.Second)
  43. }
  44. }
  45. /********打印逻辑************/
  46. func doTaskPrintPack(ctx context.Context) {
  47. //第三步,启动协程,从channel里读取数据
  48. for {
  49. select {
  50. case <-ctx.Done():
  51. return
  52. case task, ok := <-packChan:
  53. if !ok {
  54. return //停机退出
  55. }
  56. var serviceOfPackOrder = svr.NewPackOrderService()
  57. err := serviceOfPackOrder.CreatePackOrderPrintInfo(task)
  58. if err !=nil{
  59. return
  60. }
  61. }
  62. }
  63. }