|
@@ -9,6 +9,7 @@ import (
|
|
"image"
|
|
"image"
|
|
"image/color"
|
|
"image/color"
|
|
"io"
|
|
"io"
|
|
|
|
+ "io/ioutil"
|
|
"log"
|
|
"log"
|
|
"math/rand"
|
|
"math/rand"
|
|
util "mfw/util"
|
|
util "mfw/util"
|
|
@@ -56,9 +57,9 @@ func processevent(p *util.Packet) {
|
|
switch event {
|
|
switch event {
|
|
case util.SERVICE_DISTINGUISH:
|
|
case util.SERVICE_DISTINGUISH:
|
|
defer util.Catch()
|
|
defer util.Catch()
|
|
- log.Println("------接收到消息的数据-----")
|
|
|
|
//写数据
|
|
//写数据
|
|
if ret := make(map[string]interface{}); json.Unmarshal(p.GetBusinessData(), &ret) == nil {
|
|
if ret := make(map[string]interface{}); json.Unmarshal(p.GetBusinessData(), &ret) == nil {
|
|
|
|
+ log.Println("验证码--接收到消息的数据msgId:", p.Msgid)
|
|
flag, _ := ret["flag"].(bool)
|
|
flag, _ := ret["flag"].(bool)
|
|
if flag {
|
|
if flag {
|
|
img, _ := ret["img"]
|
|
img, _ := ret["img"]
|
|
@@ -85,6 +86,7 @@ func processevent(p *util.Packet) {
|
|
toWork(obj)
|
|
toWork(obj)
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
|
|
+ log.Println("验证码--超时处理msgId:", p.Msgid)
|
|
overtime(p.Msgid)
|
|
overtime(p.Msgid)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -99,9 +101,11 @@ func (a *DistinguishWork) Start(openId string) {
|
|
}
|
|
}
|
|
for _, v := range workers {
|
|
for _, v := range workers {
|
|
if v["openId"] == openId {
|
|
if v["openId"] == openId {
|
|
|
|
+ log.Println("验证码--", openId, "已经在工作中,重复进入")
|
|
return
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ log.Println("验证码--", openId, "进入工作")
|
|
workers = append(workers, map[string]interface{}{"openId": openId, "status": status_rest})
|
|
workers = append(workers, map[string]interface{}{"openId": openId, "status": status_rest})
|
|
toWork(nil)
|
|
toWork(nil)
|
|
}
|
|
}
|
|
@@ -109,6 +113,7 @@ func (a *DistinguishWork) Start(openId string) {
|
|
//结束工作,删除工作人
|
|
//结束工作,删除工作人
|
|
func (a *DistinguishWork) End(openId string) {
|
|
func (a *DistinguishWork) End(openId string) {
|
|
defer util.Catch()
|
|
defer util.Catch()
|
|
|
|
+ log.Println("验证码--", openId, "退出本次工作")
|
|
end(openId)
|
|
end(openId)
|
|
}
|
|
}
|
|
|
|
|
|
@@ -159,15 +164,17 @@ func (a *DistinguishWork) Reply(openId, content string) {
|
|
defer util.Catch()
|
|
defer util.Catch()
|
|
obj := workering[openId]
|
|
obj := workering[openId]
|
|
if obj == nil || len(obj) < 2 {
|
|
if obj == nil || len(obj) < 2 {
|
|
|
|
+ log.Println("验证码--本次回复msgId丢失")
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ log.Println("验证码--", openId, "回复内容:", content)
|
|
tmp := make(map[string]interface{})
|
|
tmp := make(map[string]interface{})
|
|
tmp["content"] = content
|
|
tmp["content"] = content
|
|
tmp["msgId"] = obj[0]
|
|
tmp["msgId"] = obj[0]
|
|
client.WriteObj(obj[1], obj[0], util.EVENT_RECIVE_CALLBACK, util.SENDTO_TYPE_P2P, tmp)
|
|
client.WriteObj(obj[1], obj[0], util.EVENT_RECIVE_CALLBACK, util.SENDTO_TYPE_P2P, tmp)
|
|
deleteWorker(openId)
|
|
deleteWorker(openId)
|
|
updateWorker(openId, status_rest)
|
|
updateWorker(openId, status_rest)
|
|
- time.AfterFunc(1*time.Second, func() {
|
|
|
|
|
|
+ time.AfterFunc(2*time.Second, func() {
|
|
toWork(nil)
|
|
toWork(nil)
|
|
})
|
|
})
|
|
}
|
|
}
|
|
@@ -180,7 +187,7 @@ func deleteWorker(openId string) {
|
|
//进行一个任务
|
|
//进行一个任务
|
|
func toWork(o map[string]interface{}) {
|
|
func toWork(o map[string]interface{}) {
|
|
openId, obj, status := worked(o)
|
|
openId, obj, status := worked(o)
|
|
- if openId == "" || status == 0 { //成功 || 该任务无效
|
|
|
|
|
|
+ if status == 0 { //成功 || 该任务无效
|
|
return
|
|
return
|
|
}
|
|
}
|
|
if obj == nil || status == -1 {
|
|
if obj == nil || status == -1 {
|
|
@@ -199,11 +206,6 @@ func toWork(o map[string]interface{}) {
|
|
}
|
|
}
|
|
obj["errorCount"] = errorCount
|
|
obj["errorCount"] = errorCount
|
|
}
|
|
}
|
|
- if status == -4 { //发送模板消息失败
|
|
|
|
- end(openId)
|
|
|
|
- toWork(obj)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
//把该任务放入等待队列中第一个,修改这个人的状态为空闲
|
|
//把该任务放入等待队列中第一个,修改这个人的状态为空闲
|
|
var waitWorksCopy []map[string]interface{}
|
|
var waitWorksCopy []map[string]interface{}
|
|
waitWorksCopy = append(waitWorksCopy, obj)
|
|
waitWorksCopy = append(waitWorksCopy, obj)
|
|
@@ -211,20 +213,26 @@ func toWork(o map[string]interface{}) {
|
|
waitWorksCopy = append(waitWorksCopy, v)
|
|
waitWorksCopy = append(waitWorksCopy, v)
|
|
}
|
|
}
|
|
waitWorks = waitWorksCopy
|
|
waitWorks = waitWorksCopy
|
|
|
|
+ //发送模板消息失败
|
|
|
|
+ if status == -4 {
|
|
|
|
+ end(openId)
|
|
|
|
+ toWork(obj)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
deleteWorker(openId)
|
|
deleteWorker(openId)
|
|
updateWorker(openId, status_rest)
|
|
updateWorker(openId, status_rest)
|
|
}
|
|
}
|
|
|
|
|
|
func worked(o map[string]interface{}) (string, map[string]interface{}, int) {
|
|
func worked(o map[string]interface{}) (string, map[string]interface{}, int) {
|
|
openId, obj := getWorker(o)
|
|
openId, obj := getWorker(o)
|
|
- if openId == "" { //没有闲人
|
|
|
|
|
|
+ if openId == "" || obj == nil { //没有闲人
|
|
return openId, obj, 0
|
|
return openId, obj, 0
|
|
}
|
|
}
|
|
from, ok := obj["from"].(string)
|
|
from, ok := obj["from"].(string)
|
|
msgId, ok := obj["msgId"].(string)
|
|
msgId, ok := obj["msgId"].(string)
|
|
img, ok := obj["img"].([]byte)
|
|
img, ok := obj["img"].([]byte)
|
|
if !ok {
|
|
if !ok {
|
|
- log.Println("获取到的数据不完整:", obj)
|
|
|
|
|
|
+ log.Println("验证码--获取到的数据不完整:", obj)
|
|
return openId, obj, -1
|
|
return openId, obj, -1
|
|
}
|
|
}
|
|
var name string
|
|
var name string
|
|
@@ -257,7 +265,7 @@ func worked(o map[string]interface{}) (string, map[string]interface{}, int) {
|
|
client, err := rpc.DialHTTP("tcp", wf.SysConfig.Rpcserver)
|
|
client, err := rpc.DialHTTP("tcp", wf.SysConfig.Rpcserver)
|
|
defer client.Close()
|
|
defer client.Close()
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println(err.Error())
|
|
|
|
|
|
+ log.Println("验证码--", err.Error())
|
|
status = -3
|
|
status = -3
|
|
return
|
|
return
|
|
}
|
|
}
|
|
@@ -271,7 +279,7 @@ func worked(o map[string]interface{}) (string, map[string]interface{}, int) {
|
|
Url: wf.SysConfig.Qmxcdn + "/upload/spider/" + name,
|
|
Url: wf.SysConfig.Qmxcdn + "/upload/spider/" + name,
|
|
}, &repl)*/
|
|
}, &repl)*/
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println(err.Error())
|
|
|
|
|
|
+ log.Println("验证码--", err.Error())
|
|
status = -4
|
|
status = -4
|
|
} else {
|
|
} else {
|
|
updateWorker(openId, status_waitReply)
|
|
updateWorker(openId, status_waitReply)
|
|
@@ -309,13 +317,17 @@ func getWorker(obj map[string]interface{}) (openId string, object map[string]int
|
|
}
|
|
}
|
|
tmp_length := len(tmp)
|
|
tmp_length := len(tmp)
|
|
if tmp_length == 0 { //都在忙,没有闲人
|
|
if tmp_length == 0 { //都在忙,没有闲人
|
|
- waitWorks = append(waitWorks, obj)
|
|
|
|
|
|
+ if obj != nil {
|
|
|
|
+ waitWorks = append(waitWorks, obj)
|
|
|
|
+ log.Println("验证码--都在忙,没有闲人")
|
|
|
|
+ }
|
|
return
|
|
return
|
|
}
|
|
}
|
|
tmp_index := rand.New(rand.NewSource(time.Now().UnixNano())).Intn(tmp_length)
|
|
tmp_index := rand.New(rand.NewSource(time.Now().UnixNano())).Intn(tmp_length)
|
|
workers_index := tmp[tmp_index]
|
|
workers_index := tmp[tmp_index]
|
|
workers[workers_index]["status"] = status_working
|
|
workers[workers_index]["status"] = status_working
|
|
openId, _ = workers[workers_index]["openId"].(string)
|
|
openId, _ = workers[workers_index]["openId"].(string)
|
|
|
|
+ log.Println("验证码--获取到可以工作的人", openId)
|
|
if len(waitWorks) > 0 {
|
|
if len(waitWorks) > 0 {
|
|
//把该任务加入等待队列
|
|
//把该任务加入等待队列
|
|
if obj != nil {
|
|
if obj != nil {
|
|
@@ -336,10 +348,11 @@ func createImg(msgId string, img []byte) (string, error) {
|
|
path := wf.SysConfig.Imgpath + "/upload/spider/"
|
|
path := wf.SysConfig.Imgpath + "/upload/spider/"
|
|
fs, err := os.Open(path)
|
|
fs, err := os.Open(path)
|
|
if err != nil && os.MkdirAll(path, 0700) != nil {
|
|
if err != nil && os.MkdirAll(path, 0700) != nil {
|
|
- log.Println("创建文件夹出错:", err)
|
|
|
|
|
|
+ log.Println("验证码--创建文件夹出错:", err)
|
|
return "", err
|
|
return "", err
|
|
}
|
|
}
|
|
defer fs.Close()
|
|
defer fs.Close()
|
|
|
|
+ go delOldImg(path)
|
|
err = processImg(path, name, bytes.NewBuffer(img), img)
|
|
err = processImg(path, name, bytes.NewBuffer(img), img)
|
|
if err != nil {
|
|
if err != nil {
|
|
return "", err
|
|
return "", err
|
|
@@ -347,22 +360,53 @@ func createImg(msgId string, img []byte) (string, error) {
|
|
return name, nil
|
|
return name, nil
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+//删除过期的图片
|
|
|
|
+func delOldImg(path string) {
|
|
|
|
+ dir, err := ioutil.ReadDir(path)
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Println("验证码--读取文件夹出错")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ now := time.Now()
|
|
|
|
+ todayStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
|
|
|
|
+ log.Println(todayStart)
|
|
|
|
+ log.Println(len(dir))
|
|
|
|
+ d := 0
|
|
|
|
+ s := 0
|
|
|
|
+ for _, file := range dir {
|
|
|
|
+ if file.IsDir() || file.Name() == bgImgName {
|
|
|
|
+ log.Println("-------")
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ if file.ModTime().Before(todayStart) {
|
|
|
|
+ d++
|
|
|
|
+ log.Println(file.Name())
|
|
|
|
+ os.Remove(path + file.Name())
|
|
|
|
+ } else {
|
|
|
|
+ s++
|
|
|
|
+ log.Println(file.ModTime())
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ log.Println(d)
|
|
|
|
+ log.Println(s)
|
|
|
|
+}
|
|
|
|
+
|
|
func processImg(path, name string, file io.Reader, img []byte) error {
|
|
func processImg(path, name string, file io.Reader, img []byte) error {
|
|
b_image, err := imaging.Open(path + bgImgName)
|
|
b_image, err := imaging.Open(path + bgImgName)
|
|
if err != nil {
|
|
if err != nil {
|
|
b_newImg := imaging.New(newsImagWidth, newsImagHeight, color.NRGBA{white, white, white, white})
|
|
b_newImg := imaging.New(newsImagWidth, newsImagHeight, color.NRGBA{white, white, white, white})
|
|
err = imaging.Save(b_newImg, path+bgImgName)
|
|
err = imaging.Save(b_newImg, path+bgImgName)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("创建背景图片出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--创建背景图片出错!", err)
|
|
}
|
|
}
|
|
b_image, err = imaging.Open(path + bgImgName)
|
|
b_image, err = imaging.Open(path + bgImgName)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("重新打开背景图片出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--重新打开背景图片出错!", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
config, _, err := image.DecodeConfig(file)
|
|
config, _, err := image.DecodeConfig(file)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("获取图片config出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--获取图片config出错!", err)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
w := config.Width
|
|
w := config.Width
|
|
@@ -372,35 +416,35 @@ func processImg(path, name string, file io.Reader, img []byte) error {
|
|
}
|
|
}
|
|
f, err := os.Create(path + name)
|
|
f, err := os.Create(path + name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("创建图片出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--创建图片出错!", err)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
_, err = f.Write(img)
|
|
_, err = f.Write(img)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("写入图片出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--写入图片出错!", err)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
f.Close()
|
|
f.Close()
|
|
_file, err := imaging.Open(path + name)
|
|
_file, err := imaging.Open(path + name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("打开图片出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--打开图片出错!", err)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
if h > newsImagHeight {
|
|
if h > newsImagHeight {
|
|
err = imaging.Save(imaging.Resize(_file, 0, newsImagHeight, imaging.Lanczos), path+name)
|
|
err = imaging.Save(imaging.Resize(_file, 0, newsImagHeight, imaging.Lanczos), path+name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("缩放图片出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--缩放图片出错!", err)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
_file, err = imaging.Open(path + name)
|
|
_file, err = imaging.Open(path + name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("缩放之后重新打开图片出错!", err)
|
|
|
|
|
|
+ log.Println("验证码--缩放之后重新打开图片出错!", err)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
}
|
|
err = imaging.Save(imaging.PasteCenter(b_image, _file), path+name)
|
|
err = imaging.Save(imaging.PasteCenter(b_image, _file), path+name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- log.Println("合并之后创建图片出错:", err)
|
|
|
|
|
|
+ log.Println("验证码--合并之后创建图片出错:", err)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
return nil
|