package dao import ( "fmt" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/globals/api" ) type PageShopWithPlaceName struct { model.PageShop CityName string `json:"cityName"` DistrictName string `json:"districtName"` Distance int `json:"distance"` } func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStoreID string, vendorID int, orgCode string, cityCode, districtCode int, tel string, minShopScore float32, minRecentOrderNum, minSkuCount int, lng1, lat1, lng2, lat2 float64) (pagedInfo *model.PagedInfo, err error) { sql := ` SELECT SQL_CALC_FOUND_ROWS t1.*, t2.name city_name, t3.name district_name FROM page_shop t1 LEFT JOIN place t2 ON t2.code = t1.city_code LEFT JOIN place t3 ON t3.code = t1.district_code WHERE 1 = 1 ` sqlParams := []interface{}{} if vendorStoreID != "" { sql += " AND t1.vendor_store_id = ?" sqlParams = append(sqlParams, vendorStoreID) } if vendorID != -1 { sql += " AND t1.vendor_id = ?" sqlParams = append(sqlParams, vendorID) } if orgCode != "" { sql += " AND t1.org_code = ?" sqlParams = append(sqlParams, orgCode) } if cityCode != 0 { sql += " AND t1.city_code = ?" sqlParams = append(sqlParams, cityCode) } if districtCode != 0 { sql += " AND t1.district_code = ?" sqlParams = append(sqlParams, districtCode) } if tel != "" { sql += " AND t1.tel1 = ?" sqlParams = append(sqlParams, tel) } if minShopScore > 0 { sql += " AND t1.shop_score >= ?" sqlParams = append(sqlParams, minShopScore) } if minRecentOrderNum > 0 { sql += " AND t1.recent_order_num >= ?" sqlParams = append(sqlParams, minRecentOrderNum) } if minSkuCount > 0 { sql += " AND t1.sku_count >= ?" sqlParams = append(sqlParams, minSkuCount) } if lng1 > 0 { sql += " AND t1.lng >= ? AND t1.lat >= ? AND t1.lng <= ? AND t1.lat <= ?" sqlParams = append(sqlParams, lng1, lat1, lng2, lat2) } if keyword != "" { keywordLike := "%" + keyword + "%" sql += " AND (t1.name LIKE ? OR t1.tel1 LIKE ? OR t1.tel2 LIKE ? OR t1.org_code LIKE ? OR t1.address LIKE ? OR t2.name LIKE ? OR t3.name LIKE ? OR t1.licence_code LIKE ?" sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike) sql += ")" } sql += ` ORDER BY t1.recent_order_num DESC LIMIT ? OFFSET ? ` pageSize = jxutils.FormalizePageSize(pageSize) offset = jxutils.FormalizePageOffset(offset) sqlParams = append(sqlParams, pageSize, offset) var shopList []*PageShopWithPlaceName txDB, _ := Begin(db) defer func() { if r := recover(); r != nil { Rollback(db, txDB) panic(r) } }() if err = GetRowsTx(txDB, &shopList, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ TotalCount: GetLastTotalRowCount2(db, txDB), Data: shopList, } Commit(db, txDB) } else { Rollback(db, txDB) } return pagedInfo, err } func QueryPageStores2(db *DaoDB, pageSize, offset int, keyword string, vendorStoreID string, vendorID, cityCode, districtCode int, tel string, minShopScore float32, minRecentOrderNum, minSkuCount int, lng1, lat1, lng2, lat2 float64) (pagedInfo *model.PagedInfo, err error) { sqlJD := ` SELECT name, 0 vendor_id, wmpoiid vendor_store_id, orgcode org_code, 1 vendor_status, address, phone tel1, pj shop_score, month_sales_tip recent_order_num, bak_info city_name FROM jingdong_showd ` sqlEbai := ` ` sqlMT := ` ` sql := ` SELECT SQL_CALC_FOUND_ROWS t1.*, t2.code city_code FROM ( ` if vendorID == -1 { sql += sqlJD //+ ` UNION` //sql += sqlEbai + ` UNION` //sql += sqlMT } else { switch vendorID { case model.VendorIDJD: sql += sqlJD case model.VendorIDMTWM: sql += sqlMT case model.VendorIDEBAI: sql += sqlEbai } } sql += ` )t1 LEFT JOIN place t2 ON t2.name = t1.city_name AND t2.level = 2 WHERE 1 = 1 ` sqlParams := []interface{}{} if vendorStoreID != "" { sql += " AND t1.vendor_store_id = ?" sqlParams = append(sqlParams, vendorStoreID) } if vendorID != -1 { sql += " AND t1.vendor_id = ?" sqlParams = append(sqlParams, vendorID) } if cityCode != 0 { sql += " AND t1.city_code = ?" sqlParams = append(sqlParams, cityCode) } if districtCode != 0 { sql += " AND t1.district_code = ?" sqlParams = append(sqlParams, districtCode) } if tel != "" { sql += " AND t1.tel1 = ?" sqlParams = append(sqlParams, tel) } if minShopScore > 0 { sql += " AND t1.shop_score >= ?" sqlParams = append(sqlParams, minShopScore) } if minRecentOrderNum > 0 { sql += " AND t1.recent_order_num >= ?" sqlParams = append(sqlParams, minRecentOrderNum) } //if minSkuCount > 0 { // sql += " AND t1.sku_count >= ?" // sqlParams = append(sqlParams, minSkuCount) //} //if lng1 > 0 { // sql += " AND t1.lng >= ? AND t1.lat >= ? AND t1.lng <= ? AND t1.lat <= ?" // sqlParams = append(sqlParams, lng1, lat1, lng2, lat2) //} if keyword != "" { keywordLike := "%" + keyword + "%" sql += " AND (t1.name LIKE ? OR t1.tel1 LIKE ? OR t1.tel2 LIKE ? OR t1.org_code LIKE ? OR t1.address LIKE ? OR t2.name LIKE ? OR t3.name LIKE ? OR t1.licence_code LIKE ?" sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike) sql += ")" } sql += ` ORDER BY t1.recent_order_num DESC LIMIT ? OFFSET ? ` pageSize = jxutils.FormalizePageSize(pageSize) offset = jxutils.FormalizePageOffset(offset) sqlParams = append(sqlParams, pageSize, offset) var shopList []*PageShopWithPlaceName txDB, _ := Begin(db) defer func() { if r := recover(); r != nil { Rollback(db, txDB) panic(r) } }() fmt.Println(sql) fmt.Println(sqlParams) if err = GetRowsTx(txDB, &shopList, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ TotalCount: GetLastTotalRowCount2(db, txDB), //Data: shopList, } Commit(db, txDB) var newShopList []*PageShopWithPlaceName for _, v := range shopList { if v.Address != "" && v.CityName != "" { result, _ := api.AutonaviAPI.GetCoordinateFromAddressByPageAll(v.Address, v.CityCode) lng, lat := result.Lng, result.Lat v.DistrictName = result.AdName v.Lng, v.Lat = lng, lat if lng1 > 0 { if !(lng >= lng1 && lat >= lat1 && lng <= lng2 && lat <= lat2) { newShopList = append(newShopList, v) } } else { newShopList = append(newShopList, v) } newShopList = append(newShopList, v) } else { newShopList = append(newShopList, v) } } pagedInfo.Data = shopList } else { Rollback(db, txDB) } return pagedInfo, err }