#455 解决了并发问题

Merged
zhangxin merged 1 commits from fix_packRepair into develop 3 years ago
  1. +7
    -3
      main.go
  2. +90
    -69
      task/printer.go

+ 7
- 3
main.go View File

@ -14,6 +14,8 @@ import (
"github.com/kataras/iris/v12"
"log"
"os"
"net/http"
_ "net/http/pprof"
"path/filepath"
"time"
)
@ -133,10 +135,12 @@ func imain() {
go task.CreateTask()
//开启生成打印包装消息
go task.CreatePackPrintTask()
go task.CreatePackPrintTaskTick()
//返修打印
go task.CreateRecPrintTask()
go task.CreateRecPrintTaskTick()
go func() {
http.ListenAndServe("0.0.0.0:8899", nil)
}()
//启动监听端口
app.Run(iris.Addr(":8093"), iris.WithConfiguration(conf.C))
//app.Run(iris.Addr(":8097"), iris.WithConfiguration(conf.C))


+ 90
- 69
task/printer.go View File

@ -1,10 +1,10 @@
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"
svr "LAPP_GAAS_GFrame_BACKEND/services/log"
qmsvr "LAPP_GAAS_GFrame_BACKEND/services/qm"
"LAPP_GAAS_GFrame_BACKEND/web/middleware/glog"
"context"
"time"
@ -19,40 +19,52 @@ var packChan = make(chan model.PackOrder, 100) //定义一个调度任务通道
var printNum = 50
/****查询要打印的任务**********/
func CreatePackPrintTask() {
func CreatePackPrintTaskTick() {
tick := time.Tick(1 * time.Second)
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
select {
case <-tick:
CreatePackPrintTask()
}
time.Sleep(1 * time.Second)
}
}
/****查询要打印的任务**********/
func CreatePackPrintTask() {
//创建继承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
}
if len(data) == 0 {
return
}
//锁定
for _, v := range data {
packList = append(packList, v.PackOrderId)
}
err = serviceOfPackOrder.UpdateUnPrint(packList)
if err != nil {
return
}
//第二步,把所有的服务调度放到channel
for _, v := range data {
packChan <- v
}
}
/********打印逻辑************/
func doTaskPrintPack(ctx context.Context) {
//第三步,启动协程,从channel里读取数据
@ -67,72 +79,81 @@ func doTaskPrintPack(ctx context.Context) {
}
var serviceOfPackOrder = svr.NewPackOrderService()
err := serviceOfPackOrder.CreatePackOrderPrintInfo(task)
if err !=nil{
if err != nil {
glog.InfoExtln("serviceOfPackOrder", "err:", err)
continue
}
}
}
}
//仓库
var recChan = make(chan qmmodel.ReclinerReclst, 100) //定义一个调度任务通道
/****查询要打印的任务**********/
func CreateRecPrintTask() {
func CreateRecPrintTaskTick() {
tick := time.Tick(1 * time.Second)
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)
glog.InfoExtln("返修错误","data:",len(data))
if err != nil {
glog.InfoExtln("返修错误","err:",err)
return
}
//锁定
for _, v := range data {
recList = append(recList, v.RecNr)
}
err = serviceOfRec.UpdateUnPrint(recList)
if err != nil {
glog.InfoExtln("返修错误","err:",err)
time.Sleep(1 * time.Second)
continue
}
//第二步,把所有的服务调度放到channel
for _, v := range data {
recChan <- v
select {
case <-tick:
CreateRecPrintTask()
}
time.Sleep(1 * time.Second)
}
}
/****查询要打印的任务**********/
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)
if err != nil {
glog.InfoExtln("返修错误", "返修错误打印err:", err)
continue
}
}
}
}
}

Loading…
Cancel
Save