|
|
@@ -0,0 +1,141 @@ |
|
|
|
package consume |
|
|
|
|
|
|
|
import ( |
|
|
|
"applet/app/cfg" |
|
|
|
utils2 "applet/app/utils" |
|
|
|
"applet/app/utils/logx" |
|
|
|
"applet/consume/md" |
|
|
|
"bytes" |
|
|
|
"code.fnuoos.com/EggPlanet/egg_system_rules.git" |
|
|
|
md3 "code.fnuoos.com/EggPlanet/egg_system_rules.git/md" |
|
|
|
md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" |
|
|
|
es2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/es" |
|
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es" |
|
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" |
|
|
|
"encoding/json" |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"github.com/streadway/amqp" |
|
|
|
"io/ioutil" |
|
|
|
"net/http" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
func EggEnergyAutoScoreConsume(queue md.MqQueue) { |
|
|
|
fmt.Println(">>>>>>>>>>>>EggEnergyAutoScoreConsume>>>>>>>>>>>>") |
|
|
|
ch, err := rabbit.Cfg.Pool.GetChannel() |
|
|
|
if err != nil { |
|
|
|
logx.Error(err) |
|
|
|
return |
|
|
|
} |
|
|
|
defer ch.Release() |
|
|
|
//1、将自己绑定到交换机上 |
|
|
|
ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) |
|
|
|
//2、取出数据进行消费 |
|
|
|
ch.Qos(1) |
|
|
|
delivery := ch.Consume(queue.Name, false) |
|
|
|
|
|
|
|
egg_system_rules.Init(cfg.RedisAddr) |
|
|
|
var res amqp.Delivery |
|
|
|
var ok bool |
|
|
|
for { |
|
|
|
res, ok = <-delivery |
|
|
|
if ok == true { |
|
|
|
err = handleEggEnergyAutoScoreDataConsume(res.Body) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("EggEnergyAutoScoreConsume_ERR:::::", err.Error()) |
|
|
|
utils2.FilePutContents("EggEnergyAutoScoreConsume_ERR", utils2.SerializeStr(map[string]interface{}{ |
|
|
|
"body": res.Body, |
|
|
|
"err": err.Error(), |
|
|
|
})) |
|
|
|
} |
|
|
|
//_ = res.Reject(false) |
|
|
|
err = res.Ack(true) |
|
|
|
fmt.Println("err ::: ", err) |
|
|
|
} else { |
|
|
|
panic(errors.New("error getting message")) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func handleEggEnergyAutoScoreDataConsume(msgData []byte) error { |
|
|
|
time.Sleep(time.Duration(100) * time.Millisecond) //休眠100毫秒 |
|
|
|
// 1.解析mq中queue的数据结构体 |
|
|
|
var msg *md2.EggStructForAutoScoreData |
|
|
|
err := json.Unmarshal(msgData, &msg) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 请求获取预测分数 |
|
|
|
req := md.GetPredictReq{ |
|
|
|
Ecpm: msg.Ecpm, |
|
|
|
InviteUserNums: msg.InviteUserNums, |
|
|
|
TeamActivityNums: msg.TeamActivityNums, |
|
|
|
SignInNums: msg.SignInNums, |
|
|
|
ImActivityNums: msg.ImActivityNums, |
|
|
|
SendRedPackageNums: msg.SendRedPackageNums, |
|
|
|
EggEnergyExchangeAccountBalance: msg.EggEnergyExchangeAccountBalance, |
|
|
|
AccountBalanceExchangeEggEnergyNums: msg.AccountBalanceExchangeEggEnergyNums, |
|
|
|
SendCircleOfFriendNums: msg.SendCircleOfFriendNums, |
|
|
|
ForumCommentsNums: msg.ForumCommentsNums, |
|
|
|
CollegeLearningNums: msg.CollegeLearningNums, |
|
|
|
ViolateNums: msg.ViolateNums, |
|
|
|
BrowseInterfaceNums: msg.BrowseInterfaceNums, |
|
|
|
PersonAddActivityValue: msg.PersonAddActivityValue, |
|
|
|
} |
|
|
|
|
|
|
|
reqBytes, err := json.Marshal(req) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("EggEnergyAutoScoreConsumeFailedMarshal_ERR:::::", err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
url := "http://ddf.ddstaros.cn/predict" |
|
|
|
|
|
|
|
request, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(reqBytes)) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("EggEnergyAutoScoreConsumeFailedNewRequest_ERR:::::", err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
request.Header.Set("Content-Type", "application/json") |
|
|
|
client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s |
|
|
|
resp, err := client.Do(request) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("EggEnergyAutoScoreConsumeFailedPostRequest_ERR:::::", err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
defer resp.Body.Close() |
|
|
|
|
|
|
|
respBody, err := ioutil.ReadAll(resp.Body) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("EggEnergyAutoScoreConsumeFailedIOReadAll_ERR:::::", err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
var score md.GetPredictResp |
|
|
|
err = json.Unmarshal(respBody, &score) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("EggEnergyAutoScoreConsumeFailedUnmarshal_ERR:::::", err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 更新上周得分 |
|
|
|
esScore := md3.EggEnergyUserEggScoreEs{ |
|
|
|
ScoreValue: score.PredictedScore, |
|
|
|
} |
|
|
|
now := time.Now() |
|
|
|
lastWeek := now.AddDate(0, 0, -7) |
|
|
|
year, week := lastWeek.ISOWeek() |
|
|
|
yearString := utils2.IntToStr(year) |
|
|
|
weekString := utils2.IntToStr(week) |
|
|
|
LastWeekIndex := es2.GetAppointIndexFromAlias(yearString, weekString) |
|
|
|
updateDocRet, err := es.UpdateDoc(LastWeekIndex, msg.DocId, esScore) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("EggEnergyAutoScoreConsumeFailedUpdateEs_ERR:::::", err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
fmt.Printf("updateDoc ==> %+v \n\n", updateDocRet) |
|
|
|
|
|
|
|
return nil |
|
|
|
} |