lvhao hai 17 horas
pai
achega
f4f5d0a1ea
Modificáronse 1 ficheiros con 98 adicións e 42 borrados
  1. 98 42
      core/CoreApp/controllers/Customer.php

+ 98 - 42
core/CoreApp/controllers/Customer.php

@@ -384,53 +384,109 @@ class Customer extends Start_Controller {
             }
             //取得信息列表
 			$info_list = $this->customer->find_all($where,'id,shop,source,name,email,phone,country,level,money,num,numphone,time,count,type',$order_str,$start,$perpage);
-			foreach ($info_list as $key=>$value) 
+
+			// ========== 性能优化:全表缓存替代循环内逐条查询(消除N+1问题)==========
+			// shop/country/typeclass 都是几百条的小表,直接全表查出来放内存,比逐条查或IN都高效
+
+			// 全量加载shop表,构建 id => shopname 映射
+			$shop_map = [];
+			$shop_rows = $this->shop->find_all('1=1', 'id,shopname');
+			foreach ($shop_rows as $row) {
+				$shop_map[$row['id']] = $row['shopname'];
+			}
+
+			// 全量加载typeclass表,构建 id => title 映射
+			$source_map = [];
+			$source_rows = $this->typeclass->find_all('1=1', 'id,title');
+			foreach ($source_rows as $row) {
+				$source_map[$row['id']] = $row['title'];
+			}
+
+			// 全量加载country表,构建 id => name 映射
+			$country_map = [];
+			$country_rows = $this->country->find_all('1=1', 'id,name');
+			foreach ($country_rows as $row) {
+				$country_map[$row['id']] = $row['name'];
+			}
+
+			// level值映射表(替代原来的if-elseif链)
+			$level_map = [
+				1 => '网红',
+				2 => '批发',
+				3 => '店铺转线下',
+				4 => '线下其他',
+				5 => '店内客户',
+			];
+
+			// 循环内仅做内存字典查找,不再发起数据库查询
+			foreach ($info_list as $key => $value) 
 		    {
-				$shop = $this->shop->read($value['shop']);
-				$info_list[$key]['shop'] = $shop['shopname'];
-				$source = $this->typeclass->read($value['source']);
-				$info_list[$key]['source'] = $source['title'];
-				if($value['country'] != 0)
-				{
-				    $country = $this->country->read($value['country']);
-				    $info_list[$key]['country'] = $country['name'];
-				}
-				else
-				{
+				// 店铺名称映射
+				$info_list[$key]['shop'] = isset($shop_map[$value['shop']]) ? $shop_map[$value['shop']] : '';
+				// 来源映射
+				$info_list[$key]['source'] = isset($source_map[$value['source']]) ? $source_map[$value['source']] : '';
+				// 国家映射
+				if ($value['country'] != 0) {
+					$info_list[$key]['country'] = isset($country_map[$value['country']]) ? $country_map[$value['country']] : '未知';
+				} else {
 					$info_list[$key]['country'] = "未知";
 				}
-				if($value['level'] == 1)
-				{
-					$info_list[$key]['level'] = "网红";
-				}
-				else if($value['level'] == 2)
-				{
-					$info_list[$key]['level'] = "批发";
-				}
-				else if($value['level'] == 3)
-				{
-					$info_list[$key]['level'] = "店铺转线下";
-				}
-				else if($value['level'] == 4)
-				{
-					$info_list[$key]['level'] = "线下其他";
-				}
-				else if($value['level'] == 5)
-				{
-					$info_list[$key]['level'] = "店内客户";
-				}
-				else
-				{
-					$info_list[$key]['level'] = "未定义";
-				}
-				if($value['time'] != 0)
-				{
-					$info_list[$key]['time'] = date('Y-m-d',$value['time']);
-				}
-				else
-				{
+				// 客户等级映射
+				$info_list[$key]['level'] = isset($level_map[$value['level']]) ? $level_map[$value['level']] : '未定义';
+				// 时间格式化
+				if ($value['time'] != 0) {
+					$info_list[$key]['time'] = date('Y-m-d', $value['time']);
+				} else {
 					$info_list[$key]['time'] = "无";
 				}
+				// ========== 以下为原代码(注释保留)==========
+				// $shop = $this->shop->read($value['shop']);
+				// $info_list[$key]['shop'] = $shop['shopname'];
+				// $source = $this->typeclass->read($value['source']);
+				// $info_list[$key]['source'] = $source['title'];
+				// if($value['country'] != 0)
+				// {
+				//     $country = $this->country->read($value['country']);
+				//     $info_list[$key]['country'] = $country['name'];
+				// }
+				// else
+				// {
+				// 	$info_list[$key]['country'] = "未知";
+				// }
+				// if($value['level'] == 1)
+				// {
+				// 	$info_list[$key]['level'] = "网红";
+				// }
+				// else if($value['level'] == 2)
+				// {
+				// 	$info_list[$key]['level'] = "批发";
+				// }
+				// else if($value['level'] == 3)
+				// {
+				// 	$info_list[$key]['level'] = "店铺转线下";
+				// }
+				// else if($value['level'] == 4)
+				// {
+				// 	$info_list[$key]['level'] = "线下其他";
+				// }
+				// else if($value['level'] == 5)
+				// {
+				// 	$info_list[$key]['level'] = "店内客户";
+				// }
+				// else
+				// {
+				// 	$info_list[$key]['level'] = "未定义";
+				// }
+				// if($value['time'] != 0)
+				// {
+				// 	$info_list[$key]['time'] = date('Y-m-d',$value['time']);
+				// }
+				// else
+				// {
+				// 	$info_list[$key]['time'] = "无";
+				// }
+
+				
 				//$gmcs = $this->fullorder->find_count("email = '".$value['email']."' time > '$timetk' and time < '$timetj'");
 				//$info_list[$key]['num'] = $gmcs;
 				$info_list[$key]['numphone'] = ($value['num'] > 0)?sprintf("%01.2f",$value['money']/$value['num']):0;