package task import ( qmsvr "LAPP_ACURA_MOM_BACKEND/services/qm" qmmodel "LAPP_ACURA_MOM_BACKEND/models/qm" "LAPP_ACURA_MOM_BACKEND/web/middleware/glog" "context" "time" ) //仓库 var recChan = make(chan qmmodel.ReclinerReclst, 100) //定义一个调度任务通道 var printNum = 50 func CreateRecPrintTaskTick() { tick := time.Tick(1 * time.Second) for { select { case <-tick: CreateRecPrintTask() } } } /****查询要打印的任务**********/ func CreateRecPrintTask() { //创建继承Baxkground的子节点Context ctx, cancel := context.WithCancel(context.Background()) defer cancel() go doTaskPrintRec(ctx) data := make([]qmmodel.ReclinerReclst, 0) recList := make([]int, 0) //第一步,查询要打印的数据 var serviceOfRec = qmsvr.NewReclinerReclstService() data, err := serviceOfRec.SelectUnPrint(printNum) if err != nil { glog.InfoExtln("返修错误", "err:", err) return } if len(data) == 0 { return } //锁定 for _, v := range data { recList = append(recList, v.RecNr) } err = serviceOfRec.UpdateUnPrint(recList) if err != nil { glog.InfoExtln("返修错误", "err:", err) return } //第二步,把所有的服务调度放到channel for _, v := range data { recChan <- v } } /********打印逻辑************/ func doTaskPrintRec(ctx context.Context) { //第三步,启动协程,从channel里读取数据 for { select { case <-ctx.Done(): return case task, ok := <-recChan: if !ok { return //停机退出 } var serviceOfRec = qmsvr.NewReclinerReclstService() err := serviceOfRec.CreateRecPrintInfo(task) if err !=nil{ glog.InfoExtln("返修打印错误日志","err:",err) continue } } } }