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.

133 lines
2.9 KiB

package task
import (
svr "LAPP_GAAS_GFrame_BACKEND/services/log"
qmsvr "LAPP_GAAS_GFrame_BACKEND/services/qm"
model "LAPP_GAAS_GFrame_BACKEND/models/log"
qmmodel "LAPP_GAAS_GFrame_BACKEND/models/qm"
"context"
"time"
)
/*************************************
*功能:异步打印生成打印规则(包装单打印方法生成)
**************************************/
//仓库
var packChan = make(chan model.PackOrder, 100) //定义一个调度任务通道
var printNum = 50
/****查询要打印的任务**********/
func CreatePackPrintTask() {
for {
//创建继承Baxkground的子节点Context
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
go doTaskPrintPack(ctx)
data := make([]model.PackOrder, 0)
packList := make([]string, 0)
//第一步,查询要打印的数据
var serviceOfPackOrder = svr.NewPackOrderService()
data, err := serviceOfPackOrder.SelectUnPrint(printNum)
if err != nil {
return
}
//锁定
for _, v := range data {
packList = append(packList, v.PackOrderId)
}
err = serviceOfPackOrder.UpdateUnPrint(packList)
if err != nil {
time.Sleep(1 * time.Second)
continue
}
//第二步,把所有的服务调度放到channel
for _, v := range data {
packChan <- v
}
time.Sleep(1 * time.Second)
}
}
/********打印逻辑************/
func doTaskPrintPack(ctx context.Context) {
//第三步,启动协程,从channel里读取数据
for {
select {
case <-ctx.Done():
return
case task, ok := <-packChan:
if !ok {
return //停机退出
}
var serviceOfPackOrder = svr.NewPackOrderService()
err := serviceOfPackOrder.CreatePackOrderPrintInfo(task)
if err !=nil{
return
}
}
}
}
//仓库
var recChan = make(chan qmmodel.ReclinerReclst, 100) //定义一个调度任务通道
/****查询要打印的任务**********/
func CreateRecPrintTask() {
for {
//创建继承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 {
return
}
//锁定
for _, v := range data {
recList = append(recList, v.RecNr)
}
err = serviceOfRec.UpdateUnPrint(recList)
if err != nil {
time.Sleep(1 * time.Second)
continue
}
//第二步,把所有的服务调度放到channel
for _, v := range data {
recChan <- v
}
time.Sleep(1 * time.Second)
}
}
/********打印逻辑************/
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{
return
}
}
}
}