285 lines
9.3 KiB
Go
285 lines
9.3 KiB
Go
package mtwm
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
"time"
|
||
|
||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||
|
||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||
"git.rosy.net.cn/jx-callback/business/partner"
|
||
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||
"git.rosy.net.cn/jx-callback/globals"
|
||
)
|
||
|
||
const (
|
||
RefreshCommentTime = 7 * 24 * time.Hour // 此值必须大于24小时
|
||
RefreshCommentTimeInterval = 60 * time.Minute
|
||
BAD_COMMENTS_MAX_MODIFY_TIME = 24 * 6 // 小时
|
||
)
|
||
|
||
func (c *PurchaseHandler) StartRefreshComment() {
|
||
utils.AfterFuncWithRecover(5*time.Second, func() {
|
||
c.refreshCommentOnce()
|
||
})
|
||
}
|
||
|
||
func (c *PurchaseHandler) refreshCommentOnce() {
|
||
c.RefreshComment(time.Now().Add(-RefreshCommentTime), time.Now())
|
||
utils.AfterFuncWithRecover(RefreshCommentTimeInterval, func() {
|
||
c.refreshCommentOnce()
|
||
})
|
||
}
|
||
|
||
func formalizeTagList(mtwmTagList string) (outTagList string) {
|
||
if mtwmTagList != "" {
|
||
outTagList = string(utils.Format4Output(strings.Split(mtwmTagList, ","), true))
|
||
}
|
||
return outTagList
|
||
}
|
||
|
||
func (c *PurchaseHandler) RefreshComment(fromTime, toTime time.Time) (err error) {
|
||
startTime := time.Now().Add(-24 * time.Hour)
|
||
//endTime := time.Now().Add(-RefreshCommentTime)
|
||
endDateStr := startTime.Format("20060102")
|
||
startDateStr := time.Now().Add(-RefreshCommentTime).Format("20060102")
|
||
storeIDs, _ := dao.GetOrderStoreIDs(dao.GetDB(), fromTime, toTime, model.VendorIDMTWM)
|
||
task := tasksch.NewParallelTask("mtwm RefreshComment", nil, jxcontext.AdminCtx,
|
||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||
storeID := batchItemList[0].(int)
|
||
|
||
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDMTWM, "")
|
||
commentList, _ := getAPI(storeDetail.VendorOrgCode, storeID, storeDetail.VendorStoreID).CommentQuery(storeDetail.VendorStoreID, startDateStr, endDateStr, 0, 0, mtwmapi.CommentReplyStatusNotReplied)
|
||
var orderCommentList []*model.OrderComment
|
||
if len(commentList) == model.NO || commentList == nil {
|
||
return nil, nil
|
||
}
|
||
for _, mtwmComment := range commentList {
|
||
createdTime, err := utils.TryStr2Time(mtwmComment.CommentTime)
|
||
if err == nil {
|
||
orderComment := &model.OrderComment{
|
||
VendorOrderID: utils.Int64ToStr(mtwmComment.CommentID), // 美团评价不能得到订单号,以评价ID代替
|
||
VendorID: model.VendorIDMTWM,
|
||
UserCommentID: utils.Int64ToStr(mtwmComment.CommentID),
|
||
VendorStoreID: storeDetail.VendorStoreID,
|
||
TagList: formalizeTagList(mtwmComment.CommentLables),
|
||
Score: int8(mtwmComment.FoodCommentScore),
|
||
ModifyDuration: BAD_COMMENTS_MAX_MODIFY_TIME,
|
||
OriginalMsg: string(utils.MustMarshal(mtwmComment)),
|
||
IsReplied: int8(mtwmComment.ReplyStatus),
|
||
StoreID: storeDetail.ID,
|
||
}
|
||
if orderComment.IsReplied == 0 {
|
||
orderComment.Content = mtwmComment.CommentContent
|
||
orderComment.CommentCreatedAt = createdTime
|
||
} else {
|
||
orderComment.Content = mtwmComment.AddComment
|
||
if updatedTime, err := utils.TryStr2Time(mtwmComment.CommentTime); err == nil {
|
||
orderComment.CommentCreatedAt = updatedTime
|
||
}
|
||
}
|
||
|
||
foodNameList := make(map[string]int, 0)
|
||
for _, fn := range mtwmComment.PraiseRetailList {
|
||
foodNameList[fn.Name] = 1
|
||
}
|
||
for _, fn := range mtwmComment.CriticRetailList {
|
||
foodNameList[fn.Name] = 1
|
||
}
|
||
|
||
for _, fn := range mtwmComment.CommentOrderDetail {
|
||
if len(fn.FoodName)-strings.LastIndex(fn.FoodName, ")") > 3 {
|
||
foodNameList[fn.FoodName] = 1
|
||
} else {
|
||
foodNameList[fn.FoodName[0:strings.LastIndex(fn.FoodName, "(")]] = 1
|
||
}
|
||
}
|
||
nameList := make([]string, 0, 0)
|
||
for k, _ := range foodNameList {
|
||
nameList = append(nameList, k)
|
||
}
|
||
|
||
if len(foodNameList) > 0 {
|
||
vendorOrderID, _ := dao.GetBadCommentOrderId(storeDetail.ID, time.Now().Add(-RefreshCommentTime), startTime, nameList)
|
||
if vendorOrderID != "" {
|
||
orderComment.VendorOrderID2 = vendorOrderID
|
||
}
|
||
}
|
||
orderCommentList = append(orderCommentList, orderComment)
|
||
}
|
||
}
|
||
|
||
if len(orderCommentList) > 0 {
|
||
err = partner.CurOrderManager.OnOrderComments(orderCommentList)
|
||
}
|
||
|
||
return orderCommentList, nil
|
||
}, storeIDs)
|
||
|
||
task.Run()
|
||
resultList, err2 := task.GetResult(0)
|
||
if err = err2; err != nil {
|
||
globals.SugarLogger.Debugf("----------resultList err:= %v", err)
|
||
return err
|
||
}
|
||
|
||
if len(resultList) != 0 {
|
||
globals.SugarLogger.Debugf("----------resultList:= %d", len(resultList))
|
||
}
|
||
//var orderCommentList []*model.OrderComment
|
||
//for _, result := range resultList {
|
||
// orderComment := result.(*model.OrderComment)
|
||
// orderCommentList = append(orderCommentList, orderComment)
|
||
//}
|
||
//
|
||
//if len(orderCommentList) > 0 {
|
||
// err = partner.CurOrderManager.OnOrderComments(orderCommentList)
|
||
//}
|
||
//
|
||
return err
|
||
}
|
||
|
||
func (c *PurchaseHandler) ReplyOrderComment(ctx *jxcontext.Context, vendorOrgCode string, orderComment *model.OrderComment, replyComment string) (err error) {
|
||
if globals.EnableMtwmStoreWrite {
|
||
err = getAPI(vendorOrgCode, orderComment.StoreID, orderComment.VendorStoreID).CommentAddReply(orderComment.VendorStoreID, utils.Str2Int64(orderComment.UserCommentID), replyComment)
|
||
}
|
||
return err
|
||
}
|
||
|
||
func GetMtwmCommentList4ShanGou(key string, appOrgCode string, startTime, endTime string) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
now = time.Now()
|
||
errs = make([]string, 0, 0)
|
||
pageNum = 1
|
||
)
|
||
end, _ := utils.TryStr2Time(endTime)
|
||
if end.Year() == now.Year() && end.Month() == now.Month() && end.Day() == now.Day() {
|
||
return fmt.Errorf("结束时间不能是当前时间")
|
||
}
|
||
configList, err := dao.QueryConfigs(db, key, "Cookie", "")
|
||
if err != nil {
|
||
return err
|
||
}
|
||
if len(configList) != model.YES {
|
||
return fmt.Errorf("查询异常,请输入正确的key或者添加此key")
|
||
}
|
||
|
||
param := map[string]interface{}{
|
||
"wmPoiId": -1,
|
||
"appType": 3,
|
||
"pageNum": pageNum,
|
||
"rate": 0,
|
||
"reply": -1,
|
||
"context": -1,
|
||
"startDate": startTime,
|
||
"endDate": endTime,
|
||
"timeType": 4,
|
||
}
|
||
for {
|
||
commentList, err := getAPI(appOrgCode, 0, "").GetComment4ShanGou(param, true, configList[0].Value)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
if len(commentList) == model.NO {
|
||
return fmt.Errorf("查询参数暂未获取到数据")
|
||
}
|
||
// 差评订单数据
|
||
orderCommentList := CommentListData(db, commentList, startTime, endTime)
|
||
if len(orderCommentList) > 0 {
|
||
err2 := partner.CurOrderManager.OnOrderComments(orderCommentList)
|
||
if err2 != nil {
|
||
errs = append(errs, err2.Error())
|
||
}
|
||
}
|
||
if len(commentList) >= 10 {
|
||
pageNum += 1
|
||
} else {
|
||
break
|
||
}
|
||
}
|
||
|
||
return fmt.Errorf("%s", strings.Join(errs, ","))
|
||
}
|
||
|
||
func CommentListData(db *dao.DaoDB, skuList []*mtwmapi.CommentsList, startTime, endTime string) []*model.OrderComment {
|
||
st, _ := utils.TryStr2Time(startTime)
|
||
et, _ := utils.TryStr2Time(endTime)
|
||
orderCommentList := make([]*model.OrderComment, 0, len(skuList))
|
||
|
||
for _, mtwmComment := range skuList {
|
||
store, err := dao.GetStoreDetailByVendorStoreID(db, utils.Int2Str(mtwmComment.WmPoiId), model.VendorIDMTWM, "")
|
||
if err != nil {
|
||
continue
|
||
}
|
||
createdTime, _ := utils.TryStr2Time(mtwmComment.CreateTime)
|
||
orderComment := &model.OrderComment{
|
||
VendorOrderID: utils.Int64ToStr(mtwmComment.Id), // 美团评价不能得到订单号,以评价ID代替
|
||
VendorID: model.VendorIDMTWM,
|
||
UserCommentID: utils.Int64ToStr(mtwmComment.UserId),
|
||
VendorStoreID: utils.Int2Str(mtwmComment.WmPoiId),
|
||
TagList: "",
|
||
Score: int8(mtwmComment.FoodCommentScore),
|
||
ModifyDuration: BAD_COMMENTS_MAX_MODIFY_TIME,
|
||
OriginalMsg: string(utils.MustMarshal(mtwmComment)),
|
||
IsReplied: 0,
|
||
StoreID: 0,
|
||
}
|
||
if len(mtwmComment.ECommentList) != 0 {
|
||
orderComment.IsReplied = 1
|
||
}
|
||
|
||
if orderComment.IsReplied == 0 {
|
||
orderComment.Content = mtwmComment.MasterCleanComment
|
||
orderComment.CommentCreatedAt = createdTime
|
||
} else {
|
||
orderComment.Content = mtwmComment.Comment
|
||
orderComment.CommentCreatedAt = utils.Timestamp2Time(int64(mtwmComment.Utime))
|
||
}
|
||
|
||
// 商品的名称集合
|
||
foodNameList := make(map[string]int, 0)
|
||
// 好评商品
|
||
for _, fn := range mtwmComment.PraiseFoodList {
|
||
foodNameList[fn] = 1
|
||
}
|
||
// 差评商品
|
||
for _, fn := range mtwmComment.CriticFoodList {
|
||
foodNameList[fn] = 1
|
||
}
|
||
// 列表商品
|
||
for _, fn := range mtwmComment.SpuCommentList {
|
||
foodNameList[fn.SpuName] = 1
|
||
}
|
||
// 包含()中文括号的商品
|
||
for _, fn := range mtwmComment.OrderStatus.Details {
|
||
if len(fn.FoodName)-strings.LastIndex(fn.FoodName, ")") > 3 {
|
||
foodNameList[strings.TrimSuffix(fn.FoodName, " ")] = 1
|
||
} else {
|
||
foodNameList[strings.TrimSuffix(fn.FoodName[0:strings.LastIndex(fn.FoodName, "(")], " ")] = 1
|
||
}
|
||
}
|
||
|
||
orderComment.StoreID = store.ID
|
||
if len(foodNameList) > 0 {
|
||
foodName := make([]string, 0, len(foodNameList))
|
||
for fnl, _ := range foodNameList {
|
||
foodName = append(foodName, fnl)
|
||
}
|
||
vendorOrderID, _ := dao.GetBadCommentOrderId(store.ID, st.AddDate(0, 0, -7), et.AddDate(0, 0, 7), foodName)
|
||
if vendorOrderID != "" {
|
||
orderComment.VendorOrderID2 = vendorOrderID
|
||
}
|
||
}
|
||
orderCommentList = append(orderCommentList, orderComment)
|
||
|
||
}
|
||
|
||
return orderCommentList
|
||
}
|