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"` }