|
@@ -3,7 +3,6 @@ package main
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
- "github.com/robfig/cron"
|
|
|
"log"
|
|
|
"mongodb"
|
|
|
"qfw/util"
|
|
@@ -72,13 +71,6 @@ func NewPT() *ProjectTask {
|
|
|
var P_QL *ProjectTask
|
|
|
var sp = make(chan bool, 5)
|
|
|
|
|
|
-//初始化全量合并对象
|
|
|
-func init() {
|
|
|
- P_QL = NewPT()
|
|
|
- go P_QL.updateAllQueue()
|
|
|
- //go P_QL.clearMem()
|
|
|
-}
|
|
|
-
|
|
|
func (p *ProjectTask) updateAllQueue() {
|
|
|
arru := make([][]map[string]interface{}, p.saveSize)
|
|
|
indexu := 0
|
|
@@ -114,86 +106,6 @@ func (p *ProjectTask) updateAllQueue() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//项目合并内存更新
|
|
|
-func (p *ProjectTask) clearMem() {
|
|
|
- c := cron.New()
|
|
|
- //在内存中保留最近6个月的信息
|
|
|
- //跑全量时每5分钟跑一次,跑增量时400分钟跑一次
|
|
|
- _ = c.AddFunc("50 0/5 * * * *", func() {
|
|
|
- if (p.currentType == "ql" && SingleClear == 0) || p.clearContimes >= 80 {
|
|
|
- SingleClear = 1
|
|
|
- //跳过的次数清零
|
|
|
- p.clearContimes = 0
|
|
|
- //信息进入查找对比全局锁
|
|
|
- p.findLock.Lock()
|
|
|
- //defer p.findLock.Unlock()
|
|
|
- //合并进行的任务都完成
|
|
|
- p.wg.Wait()
|
|
|
- //遍历id
|
|
|
- //所有内存中的项目信息
|
|
|
- p.AllIdsMapLock.Lock()
|
|
|
- log.Println("清除开始")
|
|
|
- //清除计数
|
|
|
- clearNum := 0
|
|
|
- for k, v := range p.AllIdsMap {
|
|
|
- if p.currentTime-v.P.LastTime > p.validTime {
|
|
|
- clearNum++
|
|
|
- //删除id的map
|
|
|
- delete(p.AllIdsMap, k)
|
|
|
- //删除pb
|
|
|
- if v.P.Buyer != "" {
|
|
|
- ids := p.mapPb[v.P.Buyer]
|
|
|
- if ids != nil {
|
|
|
- ids.Lock.Lock()
|
|
|
- ids.Arr = deleteSlice(ids.Arr, k, "pb")
|
|
|
- if len(ids.Arr) == 0 {
|
|
|
- delete(p.mapPb, v.P.Buyer)
|
|
|
- }
|
|
|
- ids.Lock.Unlock()
|
|
|
- }
|
|
|
- }
|
|
|
- //删除mapPn
|
|
|
- for _, vn := range append([]string{v.P.ProjectName}, v.P.MPN...) {
|
|
|
- if vn != "" {
|
|
|
- ids := p.mapPn[vn]
|
|
|
- if ids != nil {
|
|
|
- ids.Lock.Lock()
|
|
|
- ids.Arr = deleteSlice(ids.Arr, k, "pn")
|
|
|
- if len(ids.Arr) == 0 {
|
|
|
- delete(p.mapPn, vn)
|
|
|
- }
|
|
|
- ids.Lock.Unlock()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //删除mapPc
|
|
|
- for _, vn := range append([]string{v.P.ProjectCode}, v.P.MPC...) {
|
|
|
- if vn != "" {
|
|
|
- ids := p.mapPc[vn]
|
|
|
- if ids != nil {
|
|
|
- ids.Lock.Lock()
|
|
|
- ids.Arr = deleteSlice(ids.Arr, k, "pc")
|
|
|
- if len(ids.Arr) == 0 {
|
|
|
- delete(p.mapPc, vn)
|
|
|
- }
|
|
|
- ids.Lock.Unlock()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- v = nil
|
|
|
- }
|
|
|
- }
|
|
|
- p.AllIdsMapLock.Unlock()
|
|
|
- p.findLock.Unlock()
|
|
|
- SingleClear = 0
|
|
|
- log.Println("清除完成:", clearNum, len(p.AllIdsMap), len(p.mapPn), len(p.mapPc), len(p.mapPb))
|
|
|
- } else {
|
|
|
- p.clearContimes++
|
|
|
- }
|
|
|
- })
|
|
|
- c.Start()
|
|
|
-}
|
|
|
-
|
|
|
//全量合并
|
|
|
func (p *ProjectTask) taskQl() {
|
|
|
defer util.Catch()
|
|
@@ -248,13 +160,13 @@ func (p *ProjectTask) enter(db, coll string, q map[string]interface{}) {
|
|
|
p.Brun = true
|
|
|
count := 0
|
|
|
|
|
|
- q = map[string]interface{}{"updatetime": map[string]interface{}{"$gt": 1643262000}}
|
|
|
+ //q = map[string]interface{}{"updatetime": map[string]interface{}{"$gt": 0}}
|
|
|
util.Debug("start project", q, p.pici)
|
|
|
sess := MongoTool.GetMgoConn()
|
|
|
defer MongoTool.DestoryMongoConn(sess)
|
|
|
|
|
|
fields := map[string]interface{}{"kvtext": 0, "repeat_reason": 0}
|
|
|
- ms := sess.DB(db).C(coll).Find(q).Select(fields).Sort("publishtime")
|
|
|
+ ms := sess.DB(db).C(coll).Find(nil).Select(fields).Sort("publishtime")
|
|
|
query := ms.Iter()
|
|
|
var lastid interface{}
|
|
|
|