131 lines
3.2 KiB
Go
131 lines
3.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"time"
|
|
|
|
"go-common/app/job/main/workflow/model"
|
|
"go-common/library/log"
|
|
)
|
|
|
|
const (
|
|
_wfKeyPrefix = "wf_"
|
|
_feedbackDealType = 1
|
|
)
|
|
|
|
// queueProc .
|
|
func (s *Service) queueproc(c context.Context, dealType int) {
|
|
for {
|
|
var (
|
|
key string
|
|
listMap = make(map[string][]int64)
|
|
)
|
|
sParams := searchParams(c, dealType, model.ListBefore, s.businessAttr)
|
|
cLists, err := s.challByIDs(c, sParams)
|
|
if err != nil {
|
|
log.Error("s.challByIDs error(%v)", err)
|
|
time.Sleep(time.Second * 3)
|
|
continue
|
|
}
|
|
if len(cLists) > 0 {
|
|
for _, cList := range cLists {
|
|
if cList.DispatchState != model.QueueState {
|
|
continue
|
|
}
|
|
now := time.Now().Format("2006-01-02 15:04:05")
|
|
log.Info("current cid(%d) dispatch_state is (%d) time is (%s)", cList.ID, cList.DispatchState, now)
|
|
key = genKey(c, cList.Business, dealType)
|
|
listMap[key] = append(listMap[key], cList.ID)
|
|
}
|
|
for key, list := range listMap {
|
|
newDispatchState := s.dispatchState(c, dealType, model.ListBefore, cLists[list[0]].DispatchState)
|
|
err := s.dao.UpDispatchStateByIDs(c, list, newDispatchState)
|
|
if err != nil {
|
|
log.Error("s.dao.UpDispatchStateByIDs error(%v)", err)
|
|
time.Sleep(time.Second * 3)
|
|
continue
|
|
}
|
|
now := time.Now().Format("2006-01-02 15:04:05")
|
|
log.Info("this cids(%v) change dispatch_state to (%d) time is (%s)", list, newDispatchState, now)
|
|
err = s.dao.SetList(c, key, list)
|
|
if err != nil {
|
|
log.Error("s.dao.SetList error(%v)", err)
|
|
time.Sleep(time.Second * 3)
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
time.Sleep(time.Second * 15)
|
|
}
|
|
}
|
|
|
|
// repairListProc .
|
|
func (s *Service) repairQueueproc(c context.Context, dealType int) {
|
|
s.setCrash(c)
|
|
|
|
for {
|
|
time.Sleep(time.Second * 30)
|
|
exist, err := s.dao.IsCrash(c)
|
|
if err != nil {
|
|
log.Error("s.dao.ExistKey error(%v)", err)
|
|
time.Sleep(time.Second * 3)
|
|
continue
|
|
}
|
|
if exist {
|
|
continue
|
|
}
|
|
var keySlice []string
|
|
for _, attr := range s.businessAttr {
|
|
var key string
|
|
if attr.AssignType == model.SysAssignType {
|
|
continue
|
|
}
|
|
if dealType == model.FDealType {
|
|
if dealType == attr.DealType {
|
|
key = genKey(c, attr.ID, dealType)
|
|
}
|
|
} else if dealType == model.ADealType {
|
|
key = genKey(c, attr.ID, dealType)
|
|
}
|
|
keySlice = append(keySlice, key)
|
|
}
|
|
sParams := searchParams(c, dealType, model.ListIng, s.businessAttr)
|
|
for _, key := range keySlice {
|
|
var cids []int64
|
|
sParams.Business = strings.Split(key, "_")[1]
|
|
searchRes, err := s.dao.SearchChall(c, sParams)
|
|
if err != nil {
|
|
log.Error("s.dao.SearchChall error(%v)", err)
|
|
time.Sleep(time.Second * 3)
|
|
continue
|
|
}
|
|
searchDataRes := searchRes.Result
|
|
if len(searchDataRes) > 0 {
|
|
for _, r := range searchDataRes {
|
|
cids = append(cids, r.ID)
|
|
}
|
|
err := s.dao.SetList(c, key, cids)
|
|
if err != nil {
|
|
log.Error("s.dao.SetList error(%v)", err)
|
|
time.Sleep(time.Second * 3)
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
s.setCrash(c)
|
|
}
|
|
}
|
|
|
|
// SetConstKey .
|
|
func (s *Service) setCrash(c context.Context) {
|
|
for {
|
|
if err := s.dao.SetCrash(c); err != nil {
|
|
log.Error("s.dao.SetString error(%v)", err)
|
|
time.Sleep(time.Second * 3)
|
|
continue
|
|
}
|
|
break
|
|
}
|
|
}
|