瀏覽代碼

物料代码搜索优化

qiuenguang 1 年之前
父節點
當前提交
6aca47a51e
共有 1 個文件被更改,包括 63 次插入24 次删除
  1. 63 24
      application/api/controller/Product.php

+ 63 - 24
application/api/controller/Product.php

@@ -149,9 +149,15 @@ class Product extends Api
         $filter['a.YB_Cpdh'] = $code;
         $filter['a.YB_Cpdh'] = $code;
         $yb_field = 'rtrim(a.YB_方案) as YB_方案,a.YB_Yjno,rtrim(a.存货编码) as 存货编码,a.考核印数,rtrim(a.Sys_id) as Sys_id,a.Mod_rq,rtrim(b.物料名称) as 印版名称,rtrim(c.名称) as 印版类别,a.UniqID';
         $yb_field = 'rtrim(a.YB_方案) as YB_方案,a.YB_Yjno,rtrim(a.存货编码) as 存货编码,a.考核印数,rtrim(a.Sys_id) as Sys_id,a.Mod_rq,rtrim(b.物料名称) as 印版名称,rtrim(c.名称) as 印版类别,a.UniqID';
         $ybRes = db('产品_印版资料')->alias('a')
         $ybRes = db('产品_印版资料')->alias('a')
-            ->join('物料_存货编码 b','a.存货编码 = b.物料代码','left')
-            ->join('物料_存货结构 c','LEFT(a.存货编码,'.$num.') = c.编号','left')
-            ->where($filter)->field($yb_field)->order('a.YB_Yjno,a.存货编码')->select();
+            ->join('物料_存货编码 b', 'a.存货编码 = b.物料代码', 'left')
+            ->join('物料_存货结构 c',
+                'LEFT(a.存货编码, CASE WHEN a.存货编码 REGEXP \'[a-zA-Z]\' THEN 5 ELSE 4 END) = c.编号',
+                'left'
+            )
+            ->where($filter)
+            ->field($yb_field)
+            ->order('a.YB_Yjno,a.存货编码')
+            ->select();
         //技术附件
         //技术附件
         $jsRes = db('产品_技术附件')
         $jsRes = db('产品_技术附件')
             ->where('关联产品','like','%'.$code.'%')
             ->where('关联产品','like','%'.$code.'%')
@@ -687,18 +693,51 @@ class Product extends Api
 //        $num = config('product_code_digit');
 //        $num = config('product_code_digit');
         $num = 5;
         $num = 5;
         if (!empty($search)){
         if (!empty($search)){
-            $sql = "SELECT DISTINCT rtrim(a.`物料代码`) AS `物料代码`,rtrim(a.`物料名称`) AS `物料名称`,rtrim(b.`客户编号`) AS `客户编号`,rtrim(b.`客户名称`) AS `客户名称` FROM
-                    `物料_存货编码` a
-                    JOIN `产品_基本资料` b ON LEFT(a.`物料代码`,$num) = LEFT(b.`客户编号`,$num)
-                    WHERE  (a.`物料名称` LIKE '%{$search}%' or a.物料代码 LIKE '%{$search}%') 
-                    group by a.`物料代码`
-                    ORDER BY a.`物料代码` ASC";
+            $sql = "SELECT DISTINCT  
+                    rtrim(a.`物料代码`) AS `物料代码`,  
+                    rtrim(a.`物料名称`) AS `物料名称`,  
+                    rtrim(b.`客户编号`) AS `客户编号`,  
+                    rtrim(b.`客户名称`) AS `客户名称`  
+                FROM  
+                    `物料_存货编码` a  
+                    JOIN `产品_基本资料` b ON LEFT(a.`物料代码`,   
+                        CASE  
+                            WHEN a.`物料代码` REGEXP '[a-zA-Z]' THEN 5  
+                            ELSE 4  
+                        END  
+                    ) = LEFT(b.`客户编号`,   
+                        CASE  
+                            WHEN a.`物料代码` REGEXP '[a-zA-Z]' THEN 5  
+                            ELSE 4  
+                        END  
+                    )  
+                WHERE  
+                    (a.`物料名称` LIKE '%{$search}%' OR a.`物料代码` LIKE '%{$search}%')  
+                GROUP BY  
+                    a.`物料代码`  
+                ORDER BY  
+                    a.`物料代码` ASC ";
         }else{
         }else{
-            $sql = "SELECT DISTINCT rtrim(a.`物料代码`) as `物料代码`, rtrim(a.`物料名称`) as `物料名称`,rtrim(b.客户编号) as 客户编号,rtrim(b.客户名称) as 客户名称
-                FROM `物料_存货编码` a
-                JOIN `产品_基本资料` b ON LEFT(a.`物料代码`,$num) = LEFT(b.`客户编号`,$num)
-               
-                ORDER BY a.`物料代码` ASC";
+            $sql = "SELECT DISTINCT  
+                    rtrim(a.`物料代码`) AS `物料代码`,  
+                    rtrim(a.`物料名称`) AS `物料名称`,  
+                    rtrim(b.`客户编号`) AS `客户编号`,  
+                    rtrim(b.`客户名称`) AS `客户名称`  
+                FROM  
+                    `物料_存货编码` a  
+                    JOIN `产品_基本资料` b ON LEFT(a.`物料代码`,   
+                        CASE  
+                            WHEN a.`物料代码` REGEXP '[a-zA-Z]' THEN 5  
+                            ELSE 4  
+                        END  
+                    ) = LEFT(b.`客户编号`,   
+                        CASE  
+                            WHEN a.`物料代码` REGEXP '[a-zA-Z]' THEN 5  
+                            ELSE 4  
+                        END  
+                    )  
+                ORDER BY  
+                    a.`物料代码` ASC";
         }
         }
         $data = Db::query($sql);
         $data = Db::query($sql);
         // 初始化一个关联数组,用于存储相同客户编号的数据
         // 初始化一个关联数组,用于存储相同客户编号的数据
@@ -747,16 +786,16 @@ class Product extends Api
                 LEFT JOIN `物料_存货结构` c ON LEFT(a.物料代码,$num) = c.编号
                 LEFT JOIN `物料_存货结构` c ON LEFT(a.物料代码,$num) = c.编号
                 LEFT JOIN `物料_存货结构` d ON LEFT(a.物料代码,$num+2) = d.编号
                 LEFT JOIN `物料_存货结构` d ON LEFT(a.物料代码,$num+2) = d.编号
                 WHERE (a.物料名称 LIKE '%{$search}%' or a.物料代码 LIKE '%{$search}%') 	AND (
                 WHERE (a.物料名称 LIKE '%{$search}%' or a.物料代码 LIKE '%{$search}%') 	AND (
-	a.物料代码 LIKE '00%' 
-	OR a.物料代码 LIKE '01%' 
-	OR a.物料代码 LIKE '04%' 
-	OR a.物料代码 LIKE '03%' 
-	OR a.物料代码 LIKE '14%'
-	OR a.物料代码 LIKE 'Y00%' 
-	OR a.物料代码 LIKE 'Y01%' 
-	OR a.物料代码 LIKE 'Y04%' 
-	OR a.物料代码 LIKE 'J03%' 
-	OR a.物料代码 LIKE 'Y14%')";
+                        a.物料代码 LIKE '00%' 
+                        OR a.物料代码 LIKE '01%' 
+                        OR a.物料代码 LIKE '04%' 
+                        OR a.物料代码 LIKE '03%' 
+                        OR a.物料代码 LIKE '14%'
+                        OR a.物料代码 LIKE 'Y00%' 
+                        OR a.物料代码 LIKE 'Y01%' 
+                        OR a.物料代码 LIKE 'Y04%' 
+                        OR a.物料代码 LIKE 'J03%' 
+                        OR a.物料代码 LIKE 'Y14%')";
             $data = Db::query($sql);
             $data = Db::query($sql);
         }else{
         }else{
             $sql = "SELECT rtrim(a.`物料代码`) as 物料代码,rtrim(a.`物料名称`) as 物料名称,rtrim(a.`规格`) as 规格,rtrim(b.编号) as oneCode,rtrim(b.名称) as oneName,
             $sql = "SELECT rtrim(a.`物料代码`) as 物料代码,rtrim(a.`物料名称`) as 物料名称,rtrim(a.`规格`) as 规格,rtrim(b.编号) as oneCode,rtrim(b.名称) as oneName,