Просмотр исходного кода

getstockgod接口优化,补全字段

wufeng 2 лет назад
Родитель
Сommit
2ba91e666c
1 измененных файлов с 91 добавлено и 45 удалено
  1. 91 45
      app/admin/controller/Good.php

+ 91 - 45
app/admin/controller/Good.php

@@ -470,52 +470,98 @@ class Good extends Base
       return app_show(0,"获取成功",["list"=>$data,"count"=>$count]);
   }
 
-    public function GetStockGod(){
-        $page = isset($this->post['page']) &&$this->post['page'] !=="" ? intval($this->post['page']):1;
-        $size = isset($this->post['size']) &&$this->post['size'] !=="" ? intval($this->post['size']):10;
-        $condition = [["b.is_del","=",0],["c.usable_stock",">",0]];
-        $type_code = isset($this->post['type_code']) &&$this->post['type_code'] !=="" ? trim($this->post['type_code'])
-            :"";
-        if($type_code!==""){
-            $condition[]=["b.spuCode","like","%{$type_code}%"];
-        }
-        $count = Db::name("good")->alias("b")
-            ->join("good_stock c","c.spuCode = b.spuCode","left")
-            ->where($condition)->group("b.spuCode,b.good_name,b.good_unit,b.cat_id,b.craft_desc,b.addtime")
-            ->count();
-        $page>=ceil($count/$size) ? $page=ceil($count/$size) :"";
-        $list = Db::name("good")->alias("b")
-            ->join("good_stock c","c.spuCode = b.spuCode","left")
-            ->where($condition)->field("b.spuCode,b.good_name,b.good_unit,b.cat_id,b.craft_desc,b.addtime,sum(c.wait_in_stock) wait_in_stock,
-                sum(c.wait_out_stock) wait_out_stock,sum(c.usable_stock) usable_stock,sum(c.intra_stock) intra_stock,sum(c.warn_stock) warn_stock,sum(c.total_stock) total_stock")
-            ->page($page,$size)->order("b.addtime desc")->group("b.spuCode,b.good_name,b.good_unit,b.cat_id,b.craft_desc,b.addtime")->select();
-       // echo Db::name("good_type")->getLastSql();
-        $data=[];
-        foreach ($list as $key=>$value){
-            $temp=[];
-            if($value['spuCode']!=""){
-                $child = Db::name("good_stock")->alias("a")->join("warehouse_info b","a.wsm_code=b.wsm_code","left")
-                    ->where(['a.spuCode'=>$value['spuCode'],"b.wsm_type"=>1,"a.is_del"=>0])->field("a.wsm_code,b.name wsm_name,a.wait_in_stock,a.wait_out_stock,a.usable_stock,a.intra_stock,a.total_stock,a.warn_stock")->select();
+    public function GetStockGod()
+    {
+
+        //1.接收参数
+        $data = $this->request->only(['page' => 1, 'size' => 10, 'type_code' => ''], 'post', 'trim');
+
+        //2.组织查询条件
+        $condition = [["b.is_del", "=", 0], ["c.usable_stock", ">", 0]];
+        if ($data['type_code']) $condition[] = ["b.spuCode", "like", "%{$data['type_code']}%"];
+
+        //3.总数
+        $count = Db::name("good")
+            ->alias("b")
+            ->join("good_stock c", "c.spuCode = b.spuCode", "left")
+            ->where($condition)
+            ->group("b.spuCode,b.good_name,b.good_unit,b.cat_id,b.craft_desc,b.addtime")
+            ->count('b.id');
+
+        //4.查询列表
+        $last_page = ceil($count / $data['size']);
+        $page = $data['page'] >= $last_page ? $last_page : $data['page'];
+        $list = Db::name("good")
+            ->alias("b")
+            ->join("good_stock c", "c.spuCode = b.spuCode", "left")
+            ->where($condition)
+            ->field("b.spuCode,b.good_name,b.good_unit,b.cat_id,b.brand_id,b.craft_desc,b.addtime,sum(c.wait_in_stock) wait_in_stock,sum(c.wait_out_stock) wait_out_stock,sum(c.usable_stock) usable_stock,sum(c.intra_stock) intra_stock,sum(c.warn_stock) warn_stock,sum(c.total_stock) total_stock")
+            ->page($page, $data['size'])
+            ->order("b.addtime desc")
+            ->group("b.spuCode,b.good_name,b.good_unit,b.cat_id,b.craft_desc,b.brand_id,b.addtime")
+            ->select()
+            ->toArray();
+
+        //5.组织其他数据
+        if ($list) {
+
+            //仓库
+            $child = Db::name("good_stock")
+                ->alias("a")
+                ->join("warehouse_info b", "a.wsm_code=b.wsm_code", "left")
+                ->join("business bus", "bus.companyNo=b.companyNo", "left")
+                ->join("supplier s", "s.code=b.supplierNo", "left")
+                ->where(["b.wsm_type" => 1, "a.is_del" => 0])
+                ->whereIn('a.spuCode', array_column($list, 'spuCode'))
+                ->column("a.wsm_code,b.name wsm_name,a.wait_in_stock,a.wait_out_stock,a.usable_stock,a.intra_stock,a.total_stock,a.warn_stock,b.supplierNo,s.name supplierName,b.companyNo,bus.company", 'a.spuCode');
+
+            //商品单位和品牌
+            $good_unit_s = Db::name("unit")->whereIn('id', array_column($list, 'good_unit'))->where('is_del', 0)->column('unit', 'id');
+            $brands = Db::name("brand")->whereIn('id', array_column($list, 'brand_id'))->where('is_del', 0)->column('brand_name', 'id');
+
+            $data = [];
+            foreach ($list as $key => $value) {
+                $temp = [];
+
+                $temp['good_name'] = $value['good_name'];
+                $temp['good_code'] = $value['spuCode'];
+                $temp['type_code'] = '';
+                $temp['unit'] = $good_unit_s[$value['good_unit']] ?? '';
+                $temp['sort_f'] = isset($value['cat_id']) ? made($value['cat_id']) : [];
+                $temp['sort_f'] = implode('/', array_column($temp['sort_f'], 'name'));//由于这个字段原样在页面显示,所以在这里特意拼接成字符串
+                $temp['attribute'] = $value['craft_desc'];
+                $temp['addtime'] = $value['addtime'];
+                $temp['usable_stock'] = isset($value['usable_stock']) ? $value['usable_stock'] : "";
+                $temp['wait_in_stock'] = isset($value['wait_in_stock']) ? $value['wait_in_stock'] : "";
+                $temp['wait_out_stock'] = isset($value['wait_out_stock']) ? $value['wait_out_stock'] : "";
+                $temp['intra_stock'] = isset($value['intra_stock']) ? $value['intra_stock'] : "";
+                $temp['total_stock'] = isset($value['total_stock']) ? $value['total_stock'] : "";
+                // $temp['warn_stock'] = isset($value['warn_stock'])? $value['warn_stock']:"";
+                $temp['child'] = $child[$value['spuCode']] ?? [];
+                $temp['brand_name'] = $brands[$value['brand_id']] ?? '';
+
+                //规格信息
+                $spec = Db::name("good_spec")->field('id,spec_id,spec_value_id')->where(["spuCode" => $value['spuCode'], "is_del" => 0])->select()->toArray();
+
+                $speclist = [];
+                if (!empty($spec)) {
+                    foreach ($spec as $val) {
+                        $tmp = [];
+                        $tmp['spec_id'] = $val['spec_id'];
+                        $tmp['spec_value_id'] = $val['spec_value_id'];
+                        $sp = Db::name("specs")->where(["id" => $val['spec_id']])->find();
+                        $tmp['spec_name'] = isset($sp["spec_name"]) ? $sp["spec_name"] : "";
+                        $spv = Db::name("spec_value")->where(["id" => $val['spec_value_id']])->find();
+                        $tmp['spec_value'] = isset($spv["spec_value"]) ? $spv["spec_value"] : "";
+                        $speclist[] = $tmp;
+                    }
+                }
+                $temp['specinfo'] = $speclist;
+
+                $data[] = $temp;
             }
-            $temp['good_name'] = $value['good_name'];
-            $temp['good_code'] = $value['spuCode'];
-            $temp['type_code'] ='';
-            $unit = Db::name("unit")->where(['id'=>$value['good_unit']])->find();
-            $temp['unit'] = isset($unit['unit'])?$unit['unit']:"";
-            $temp['sort_f']=isset($value['cat_id'])?made($value['cat_id']):[];
-            $temp['sort_f']=implode('/',array_column($temp['sort_f'],'name'));//由于这个字段原样在页面显示,所以在这里特意拼接成字符串
-            $temp['attribute']=$value['craft_desc'];
-            $temp['addtime']=$value['addtime'];
-            $temp['usable_stock'] = isset($value['usable_stock'])? $value['usable_stock']:"";
-            $temp['wait_in_stock'] = isset($value['wait_in_stock'])? $value['wait_in_stock']:"";
-            $temp['wait_out_stock'] = isset($value['wait_out_stock'])? $value['wait_out_stock']:"";
-            $temp['intra_stock'] = isset($value['intra_stock'])? $value['intra_stock']:"";
-            $temp['total_stock'] = isset($value['total_stock'])? $value['total_stock']:"";
-           // $temp['warn_stock'] = isset($value['warn_stock'])? $value['warn_stock']:"";
-            $temp['child']=isset($child)&&!empty($child) ? $child:[];
-            $data[]=$temp;
-        }
-        return app_show(0,"获取成功",["list"=>$data,"count"=>$count]);
+        }
+        return app_show(0, "获取成功", ["list" => $data, "count" => $count]);
     }
     /**
      * @return \think\response\Json|void