Files
jx-callback/business/model/dao/dao_order_sku_financial.go
邹宗楠 710d57d4e5 1
2024-09-29 14:15:21 +08:00

86 lines
2.4 KiB
Go

package dao
import (
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-print/dao"
"sort"
"time"
)
// GetBadCommentOrderId 根据差评商品列表获取订单号
func GetBadCommentOrderId(jxStoreId int, startTime, endTime time.Time, foodNameList []string) (string, error) {
sqlParams := []interface{}{}
sql := `
SELECT count(s.vendor_order_id) count,s.vendor_order_id FROM goods_order g
LEFT JOIN order_sku s ON g.vendor_order_id = s.vendor_order_id
WHERE g.jx_store_id = ? AND g.vendor_id = ? AND g.order_created_at >= ? AND g.order_created_at <= ? AND s.sku_name IN (` + dao.GenQuestionMarks(len(foodNameList)) + `) GROUP BY s.vendor_order_id LIMIT 0, 1000
`
sqlParams = append(sqlParams, []interface{}{
jxStoreId,
model.VendorIDMTWM,
startTime,
endTime,
foodNameList,
})
commentOrder := make([]*badCommentOrder, 0, 0)
if err := GetRows(GetDB(), &commentOrder, sql, sqlParams...); err != nil {
return "", err
}
// 全等于的话就是目标订单
vendorOrderIdList := make([]string, 0, 0)
for _, v := range commentOrder {
if v.Count == len(foodNameList) {
return v.VendorOrderId, nil
} else if v.Count-1 == len(foodNameList) || v.Count-2 == len(foodNameList) {
vendorOrderIdList = append(vendorOrderIdList, v.VendorOrderId)
} else if v.Count+1 == len(foodNameList) || v.Count+2 == len(foodNameList) {
vendorOrderIdList = append(vendorOrderIdList, v.VendorOrderId)
}
}
sql2 := `SELECT * FROM order_sku WHERE vendor_order_id = ?`
mathProbability := make(map[string]float64, 0)
for _, v := range vendorOrderIdList {
skuFinancial := make([]*model.OrderSku, 0, 0)
if err := GetRows(GetDB(), &skuFinancial, sql2, []interface{}{v}...); err != nil {
continue
}
var skuMatchingCount int = 0
for _, sf := range skuFinancial {
for _, fnl := range foodNameList {
if sf.SkuName == fnl {
skuMatchingCount += 1
}
}
}
mathProbability[v] = float64(skuMatchingCount) / float64(len(skuFinancial))
}
var values []float64
for _, v := range mathProbability {
values = append(values, v)
}
sort.Slice(values, func(i, j int) bool {
if values[i] > values[j] {
return true
}
return false
})
for k, v := range mathProbability {
if v == values[0] {
return k, nil
}
}
return "", nil
}
type badCommentOrder struct {
Count int `json:"count"`
VendorOrderId string `json:"vendor_order_id"`
}