cqp пре 4 недеља
родитељ
комит
7df1f1493e
1 измењених фајлова са 108 додато и 75 уклоњено
  1. 108 75
      app/Service/U8XkyServerService.php

+ 108 - 75
app/Service/U8XkyServerService.php

@@ -155,29 +155,49 @@ class U8XkyServerService extends Service
         }
 
         if(! $is_add){
-            $bool = Inventory::where('del_time', 0)
-                ->where('login_type', $user['login_type'])
-                ->where('id', $id)
-                ->where('status', '>', Inventory::STATE_ZERO)
-                ->exists();
-            if($bool) return [false, '存货记录状态已变更,编辑失败'];
+            $order = Inventory::where('id', $data['id'])->first();
+            if(empty($order)) return [false, '存货信息不存在或已被删除'];
+            $order = $order->toArray();
+            list($status, $msg) = $this->checkState(U8State::type_four, $user, $order['order_number']);
+            if(! $status) return [false, $msg];
         }
 
         return [true, ''];
     }
 
-    public function inventoryCommon($data,$user, $field = []){
-        $model = Inventory::where('del_time',0)
-//            ->where('crt_id', $user['userid'])
-            ->where('login_type', $user['login_type'])
-            ->orderby('id', 'desc');
+    public function inventoryCommon($data, $user, $field = []){
+        $type = U8State::type_four;
+
+        $model = Inventory::from('inventory as i')
+            ->leftJoin('u8_state as s', function ($join) use ($type, $user) {
+                $join->on('i.order_number', '=', 's.order_number')
+                    ->where('s.type', '=', $type)
+                    ->where('s.login_type', '=', $user['login_type'])
+                    ->where('s.del_time', '=', 0);
+            })
+            ->where('i.del_time', 0)
+            ->where('i.login_type', $user['login_type'])
+            ->select('i.*', DB::raw('IFNULL(s.state, -1) as state'))
+            ->orderby('i.id', 'desc');
+
+        // 2. 状态过滤逻辑
+        if (isset($data['state']) && $data['state'] !== '') {
+            $state_filter = $data['state'];
+            if ($state_filter == -1) {
+                // 未发起审批:在状态表里找不到记录
+                $model->whereNull('s.state');
+            } else {
+                // 0:待审核 1:通过 2:驳回
+                $model->where('s.state', $state_filter);
+            }
+        }
+
+        if(! empty($data['id'])) $model->where('i.id', $data['id']);
 
-        if(! empty($data['id'])) $model->where('id', $data['id']);
-        if(isset($data['status'])) $model->where('status', $data['status']);
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
             $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
-            $model->where('crt_time','>=',$return[0]);
-            $model->where('crt_time','<=',$return[1]);
+            $model->where('i.crt_time', '>=', $return[0]);
+            $model->where('i.crt_time', '<=', $return[1]);
         }
 
         return $model;
@@ -202,52 +222,40 @@ class U8XkyServerService extends Service
     public function fillInventoryData($data, $user){
         if(empty($data['data'])) return $data;
 
-        //状态
-        $map = $this->returnState($data, Record::type_four, $user['login_type']);
-
-        $e_map = DDEmployee::whereIn('crt_id', array_unique(array_column($data['data'], 'crt_id')))
+        $e_map = DDEmployee::whereIn('userid', array_unique(array_column($data['data'], 'crt_id')))
             ->where('login_type', $user['login_type'])
-            ->pluck('name_id', 'id')
+            ->pluck('name', 'userid')
             ->toArray();
         foreach ($data['data'] as $key => $value){
-            $data['data'][$key]['crt_name'] = $e_map[$value['crt_id']] ?? "";
-            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
             $data['data'][$key]['bSale'] = $value['bSale'] ? '是' : '否';
             $data['data'][$key]['bExpSale'] = $value['bExpSale'] ? '是' : '否';
             $data['data'][$key]['bPurchase'] = $value['bPurchase'] ? '是' : '否';
             $data['data'][$key]['bSelf'] = $value['bSelf'] ? '是' : '否';
             $data['data'][$key]['bComsume'] = $value['bComsume'] ? '是' : '否';
 
-            if(isset($map[$value['order_number']])) {
-                $m = $map[$value['order_number']];
-                $state = $m;
-                $state_title = Record::state_name[$state];
-            }else{
-                $state = Record::state_minus_one;
-                $state_title = Record::state_name[$state];
-            }
-            $data['data'][$key]['state'] = $state;
-            $data['data'][$key]['state_title'] = $state_title;
+            $data['data'][$key]['crt_name'] = $e_map[$value['crt_id']] ?? "";
+            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
+            $data['data'][$key]['state_title'] = Record::state_name[$value['state']];
         }
 
         return $data;
     }
 
-    public function inventoryDel($data){
+    public function inventoryDel($data, $user){
         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
 
         try {
             DB::beginTransaction();
             $time = time();
 
-            $bool = Inventory::where('del_time', 0)
-                ->whereIn('id', $data['id'])
-                ->where('status', '>', Inventory::STATE_ZERO)
-                ->exists();
-            if($bool) return [false, '存货记录状态已变更,删除失败'];
+            $order = Inventory::where('id', $data['id'])->first();
+            if(empty($order)) return [false, '存货信息不存在或已被删除'];
+            $order = $order->toArray();
+            list($status, $msg) = $this->checkState(U8State::type_five, $user, $order['order_number']);
+            if(! $status) return [false, $msg];
 
             Inventory::where('del_time',0)
-                ->whereIn('id',$data['id'])
+                ->where('id',$data['id'])
                 ->update(['del_time' => $time]);
 
             DB::commit();
@@ -261,6 +269,24 @@ class U8XkyServerService extends Service
 
     //新增存货到本地-----------------------------------------------
 
+    private function checkState($type, $user, $order_number){
+        $lastRecord = U8State::where('del_time', 0)
+            ->where('type', $type)
+            ->where('login_type', $user['login_type'])
+            ->where('order_number', $order_number)
+            ->first(['state']); // 只取状态字段
+        if ($lastRecord) {
+            $text_o = U8State::type_name[$type];
+            // 如果状态是 0 (待审核) 或 1 (审核通过),拦截
+            if (in_array($lastRecord->state, [U8State::state_zero, U8State::state_one])) {
+                $text = U8State::state_name[$lastRecord->state];
+                return [false, $text_o . ' (' . $order_number . ') 处于' . $text . ',操作失败'];
+            }
+        }
+
+        return [true, ''];
+    }
+
     //新增供应商到本地-----------------------------------------------
 
     public function vendorAdd($data, $user){
@@ -348,27 +374,47 @@ class U8XkyServerService extends Service
         }
 
         if(! $is_add){
-            $bool = Vendor::where('del_time', 0)
-                ->where('id', $id)
-                ->where('status', '>', Vendor::STATE_ZERO)
-                ->exists();
-            if($bool) return [false, '供应商记录状态已变更,编辑失败'];
+            $order = Vendor::where('id', $data['id'])->first();
+            if(empty($order)) return [false, '供应商信息不存在或已被删除'];
+            $order = $order->toArray();
+            list($status, $msg) = $this->checkState(U8State::type_five, $user, $order['order_number']);
+            if(! $status) return [false, $msg];
         }
 
         return [true, ''];
     }
 
-    public function vendorCommon($data,$user, $field = []){
-        $model = Vendor::where('del_time',0)
-            ->where('crt_id', $user['userid'])
-            ->orderby('id', 'desc');
+    public function vendorCommon($data, $user, $field = []){
+        $type = U8State::type_five;
+
+        $model = Vendor::from('vendor as v')
+            ->leftJoin('u8_state as s', function ($join) use ($type, $user) {
+                $join->on('v.order_number', '=', 's.order_number')
+                    ->where('s.type', '=', $type)
+                    ->where('s.login_type', '=', $user['login_type'])
+                    ->where('s.del_time', '=', 0);
+            })
+            ->where('v.del_time', 0)
+            ->where('v.crt_id', $user['userid'])
+            ->select('v.*', DB::raw('IFNULL(s.state, -1) as state'))
+            ->orderby('v.id', 'desc');
+
+        if (isset($data['state']) && $data['state'] !== '') {
+            $state_filter = $data['state'];
+            if ($state_filter == -1) {
+                // 未发起审批:u8_states 表里没记录,s.id 就会是 NULL
+                $model->whereNull('s.id');
+            } else {
+                // 0:待审核 1:通过 2:驳回
+                $model->where('s.state', $state_filter);
+            }
+        }
 
-        if(! empty($data['id'])) $model->where('id', $data['id']);
-        if(isset($data['status'])) $model->where('status', $data['status']);
+        if(! empty($data['id'])) $model->where('v.id', $data['id']);
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
             $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
-            $model->where('crt_time','>=',$return[0]);
-            $model->where('crt_time','<=',$return[1]);
+            $model->where('v.crt_time', '>=', $return[0]);
+            $model->where('v.crt_time', '<=', $return[1]);
         }
 
         return $model;
@@ -385,27 +431,14 @@ class U8XkyServerService extends Service
     public function fillVendorData($data, $user){
         if(empty($data['data'])) return $data;
 
-        //状态
-        $map = $this->returnState($data, Record::type_five, $user['login_type']);
-
-        $e_map = DDEmployee::whereIn('crt_id', array_unique(array_column($data['data'], 'crt_id')))
+        $e_map = DDEmployee::whereIn('userid', array_unique(array_column($data['data'], 'crt_id')))
             ->where('login_type', $user['login_type'])
-            ->pluck('name_id', 'id')
+            ->pluck('name', 'userid')
             ->toArray();
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_name'] = $e_map[$value['crt_id']] ?? "";
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
-
-            if(isset($map[$value['order_number']])) {
-                $m = $map[$value['order_number']];
-                $state = $m;
-                $state_title = Record::state_name[$state];
-            }else{
-                $state = Record::state_minus_one;
-                $state_title = Record::state_name[$state];
-            }
-            $data['data'][$key]['state'] = $state;
-            $data['data'][$key]['state_title'] = $state_title;
+            $data['data'][$key]['state_title'] = Record::state_name[$value['state']];
         }
 
         return $data;
@@ -419,21 +452,21 @@ class U8XkyServerService extends Service
         return [true, $return];
     }
 
-    public function vendorDel($data){
+    public function vendorDel($data, $user){
         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
 
         try {
             DB::beginTransaction();
             $time = time();
 
-            $bool = Vendor::where('del_time', 0)
-                ->whereIn('id', $data['id'])
-                ->where('status', '>', Inventory::STATE_ZERO)
-                ->exists();
-            if($bool) return [false, '供应商记录状态已变更,删除失败'];
+            $order = Vendor::where('id', $data['id'])->first();
+            if(empty($order)) return [false, '供应商信息不存在或已被删除'];
+            $order = $order->toArray();
+            list($status, $msg) = $this->checkState(U8State::type_five, $user, $order['order_number']);
+            if(! $status) return [false, $msg];
 
             Vendor::where('del_time',0)
-                ->whereIn('id',$data['id'])
+                ->where('id',$data['id'])
                 ->update(['del_time' => $time]);
 
             DB::commit();