Explorar o código

删除备注
提取代码

cqp hai 3 meses
pai
achega
09cab458f4
Modificáronse 1 ficheiros con 118 adicións e 78 borrados
  1. 118 78
      app/Service/OaService.php

+ 118 - 78
app/Service/OaService.php

@@ -211,8 +211,6 @@ class OaService extends Service
     public function oaAdd($data)
     {
         $oa = new Oa();
-
-
         try {
             DB::beginTransaction();
             $oa->menu_id = $data['menu_id'];
@@ -250,16 +248,12 @@ class OaService extends Service
 
     public function oaEdit($data, $user)
     {
-
-
         $first = Oa::where('del_time', 0)->where('channel',$this->user['depart_top'][0]['depart_id'])->where('menu_id', $data['menu_id']);
         if (isset($data['id'])) $first = $first->where('id', '<>', $data['id']);
         if (isset($data['type'])) $first = $first->where('type', $data['type']);
         $first = $first->first();
-
         if ($first) return [false, '该菜单oa已存在!'];
 
-
         try {
             DB::beginTransaction();
             if (isset($data['id'])) $oa = Oa::where('id', $data['id'])->first();
@@ -425,31 +419,27 @@ class OaService extends Service
             list($status, $msg) = $this->createPurchaseSpecial($data);
             return [$status, $msg];
         }else{
-
-            //获取工作流
-            $list = $this->getOaProcess($menu_id);
-
-            //不存在直接审核通过
-            if(empty($list)){
+            //是否存在工作流
+            $bool = $this->getOaProcessIsset($menu_id);
+            if(! $bool){
                 list($parent_status,$parent_msg) = $this->returnOa($order_no, 1, $type);
-                if(!$parent_status) return [false, $parent_msg];
+                if(! $parent_status) return [false, $parent_msg];
                 return [true, ''];
             }
 
             try {
                 DB::beginTransaction();
 
-                list($employee_ids, $oa_sub_id,$order_detail) = $this->oaCommon($menu_id, ['order_number' => $orderObject], 1,0,$this->user);
+                list($employee_ids, $oa_sub_id,$order_detail) = $this->oaCommon($menu_id, ['order_number' => $orderObject], 1,0, $this->user);
                 if (empty($employee_ids)) {
                     list($parent_status,$parent_msg) = $this->returnOa($order_no, 1, $type);
-                    if(!$parent_status) {
+                    if(! $parent_status) {
                         DB::rollBack();
                         return [false, $parent_msg];
                     }
-                    else{
-                        DB::commit();
-                        return [true, '审核成功'];
-                    }
+
+                    DB::commit();
+                    return [true, ''];
                 }
 
                 $order = new OaOrder();
@@ -500,7 +490,7 @@ class OaService extends Service
                 //发送消息
                 $this->sendWxOaCheckMessage($send_data);
 
-                return [true, '']; //success
+                return [true, ''];
             } catch (\Exception $e) {
                 DB::rollBack();
                 $this->returnOa($order_no, 2, $type);
@@ -580,31 +570,71 @@ class OaService extends Service
         }
     }
 
-    //获取工作流
-    public function getOaProcess($menu_id){
-        //特殊的审批
-        $list = Oa::from('oa as o')
+    //判断工作流是否存在
+    public function getOaProcessIsset($menu_id){
+        //特殊的审批 分社采购单
+        $bool = Oa::from('oa as o')
             ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
             ->select('os.sort', 'os.type', 'os.sub_id')
             ->where('o.del_time', 0)
             ->where('o.sub_type', 2)
             ->where('os.del_time', 0)
-            ->where('o.menu_id', $menu_id);
-        if (!empty($type)) $list = $list->where('os.sort', 1);
-        $list = $list->orderBy('os.sort')->get()->toArray();
-        if(empty($list)){
-            $list = Oa::from('oa as o')
+            ->where('o.menu_id', $menu_id)
+            ->orderBy('os.sort')
+            ->exists();
+        if(! $bool){
+            //其它
+            $bool = Oa::from('oa as o')
                 ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
                 ->select('os.sort', 'os.type', 'os.sub_id')
                 ->where('o.del_time', 0)
                 ->where('os.del_time', 0)
                 ->where('o.channel', $this->user['depart_top'][0]['depart_id'])
-                ->where('o.menu_id', $menu_id);
-            if (!empty($type)) $list = $list->where('os.sort', 1);
-            $list = $list->orderBy('os.sort')->get()->toArray();
+                ->where('o.menu_id', $menu_id)
+                ->orderBy('os.sort')
+                ->exists();
+        }
+
+        return $bool;
+    }
+
+    //获取OA的id
+    public function getOaId($menu_id){
+        //特殊的审批 分社采购单
+        $oa_id = Oa::where('menu_id',$menu_id)
+            ->where('del_time', 0)
+            ->where('sub_type',2)
+            ->value('id');
+        if(empty($oa_id)) {
+            //其它
+            $oa_id = Oa::where('menu_id', $menu_id)
+                ->where('del_time', 0)
+                ->where('channel',$this->user['depart_top'][0]['depart_id'])
+                ->value('id');
+        }
+
+        return $oa_id;
+    }
+
+    //获取oaOrder
+    public function getOaOrder($menu_id, $order_no){
+        $oa_id = Oa::where('menu_id',$menu_id)->where('del_time', 0)->where('sub_type',2)->exists();
+        if($oa_id){
+            //特殊的审批 分社采购单
+            $detail = OaOrder::where('order_no', $order_no)
+                ->orderBy('id', 'desc')
+                ->where('menu_id', $menu_id)
+                ->first();
+        }else{
+            //其它
+            $detail = OaOrder::where('order_no', $order_no)
+                ->where('channel',$this->user['depart_top'][0]['depart_id'])
+                ->orderBy('id', 'desc')
+                ->where('menu_id', $menu_id)
+                ->first();
         }
 
-        return $list;
+        return $detail;
     }
 
     public function oaCommon($menu_id, $param, $sort = 1, $parent_id = 0,$user='')
@@ -622,20 +652,27 @@ class OaService extends Service
             []
         );
 
+        //获取具体业务单据数据
         $detail = $this->oaGetData($menu_id, $request,$user);
-        //特殊的审批
-        $oa_id = Oa::where('menu_id',$menu_id)->where('del_time', 0)->where('sub_type',2)->value('id');
-        if(empty($oa_id)) $oa_id = Oa::where('menu_id', $menu_id)->where('channel',$this->user['depart_top'][0]['depart_id'])->where('del_time', 0)->value('id');
+
+        //获取工作流ID
+        $oa_id = $this->getOaId($menu_id);
+
         $parent_ids = [$parent_id, 0];
-//        var_dump($parent_ids);
         if ($sort > 2) {
             $sorts = $sort - 1;
-            $oa_sub_ids = OaSub::where('sort', '<', $sorts)->where('del_time', 0)->wherein('parent_id', $parent_ids)->pluck('id')->toArray();
-//            var_dump($oa_sub_ids);die;
+            $oa_sub_ids = OaSub::where('sort', '<', $sorts)
+                ->where('del_time', 0)
+                ->whereIn('parent_id', $parent_ids)
+                ->pluck('id')
+                ->toArray();
             $parent_ids = array_merge($parent_ids, $oa_sub_ids);
         }
-        $list = OaSub::where('oa_id', $oa_id)->where('del_time', 0)->where('sort', $sort)->wherein('parent_id', $parent_ids);
-        $list = $list->select('*')->get()->toArray();
+        $list = OaSub::where('oa_id', $oa_id)
+            ->where('del_time', 0)
+            ->where('sort', $sort)
+            ->whereIn('parent_id', $parent_ids)
+            ->get()->toArray();
         if (empty($list)) return [[], '',$detail];
         $oa_sub_ids = [];
         $oa_sub_key = [];
@@ -645,8 +682,10 @@ class OaService extends Service
             $rule_key_list[$v['id']] = [];
         }
 
-        $rule_list = OaSubRule::wherein('oa_sub_id', $oa_sub_ids)->select('*')->get()->toArray();
-
+        $rule_list = OaSubRule::whereIn('oa_sub_id', $oa_sub_ids)
+            ->get()
+            ->toArray();
+        $rule_key_list = [];
         foreach ($rule_list as $v) {
             $rule_key_list[$v['oa_sub_id']][] = $v;
         }
@@ -654,7 +693,6 @@ class OaService extends Service
         //规则开始判断
         $employee_ids = [];
         $oa_sub_id = 0;
-
         foreach ($rule_key_list as $k => $v) {
             $status = $this->formulaRule($v, $detail);
             if ($status) {
@@ -666,17 +704,15 @@ class OaService extends Service
                     $employee_ids[] = [$oa_sub_key[$k]['sub_id']];
                 }
                 $oa_sub_id = $k;
-                continue;
             }
         }
 
-        return [$employee_ids, $oa_sub_id,$detail];
+        return [$employee_ids, $oa_sub_id, $detail];
     }
 
     public function formulaRule($params, $detail)
     {
         $rule = '';
-//        dd($params);
         if (empty($params)) return true;
         foreach ($params as $param) {
             if (!$param['key']) continue;
@@ -684,29 +720,25 @@ class OaService extends Service
             $rule .= '"' . $detail[$param['key']] . '"' . ' ' . $param['formula'] . ' ' . '"' . $param['value'] . '"';
 
         }
-//        dd($rule);
         if (empty($rule)) return true;
-//        var_dump($rule);
         if (eval("return  $rule;")) {
-//            var_dump($rule);die;
             return true;
         } else return false;
     }
 
     public function oaCheck($data, $user)
     {
+        //校验
+        list($status, $msg) = $this->oaCheckRule($data, $user);
+        if(! $status) return [false, $msg];
+        //参数
+        $detail = $msg;
         $user_id = $user['id'];
         $id = $data['id'];
         $state = $data['state'];
         if ($state == 0) $state = 2;
-        $remark = $data['remark'];
-        $detail = OaOrderSub::from('oa_order_sub as s')
-            ->leftJoin('oa_order_sub_employee as e', 'e.oa_order_sub_id', 's.id')
-            ->where('e.employee_id', $user_id)->where('s.state', 0)
-            ->where('s.id', $id)
-            ->select('s.oa_order_id', 'sort', 'oa_sub_id', 's.id')->first();
-        if (empty($detail)) return [false, '没有审核权限'];
-        $detail = $detail->toArray();
+        $remark = $data['remark'] ?? "";
+
         $oaOrder = OaOrder::where('id', $detail['oa_order_id'])->first();
         try {
             DB::beginTransaction();
@@ -722,10 +754,11 @@ class OaService extends Service
                         $oaOrder->state = 2;
                         $oaOrder->save();
 
+                        //直接完成审核
                         list($parent_status,$parent_msg) = $this->returnOa($oaOrder->order_no, 1, $oaOrder->opt_case);
-                        if(!$parent_status){
+                        if(! $parent_status){
                             DB::rollBack();
-                            return [false,$parent_msg];
+                            return [false, $parent_msg];
                         }
 
                         //审核通过 发送消息
@@ -827,7 +860,7 @@ class OaService extends Service
                     }
                     OaOrderSub::where('sort', ($detail['sort'] - 1))->where('oa_order_id', $oaOrder->id)->update([
                         'state' => 0,
-                        'remark' => $remark ?? "",
+                        'remark' => $remark,
                     ]);
 
                     //发送消息
@@ -843,6 +876,7 @@ class OaService extends Service
 
             //抄送 以及 组织发送数据
             $send_data = $this->report($oaOrder, $detail['oa_sub_id'],$user_id,$sys_menu);
+
             //发送数据
             $this->sendWxOaCheckMessage($send_data);
             DB::commit();
@@ -853,6 +887,20 @@ class OaService extends Service
         }
     }
 
+    private function oaCheckRule($data,$user){
+        if(empty($data['id'])) return [false, "ID不能为空"];
+        $detail = OaOrderSub::from('oa_order_sub as s')
+            ->leftJoin('oa_order_sub_employee as e', 'e.oa_order_sub_id', 's.id')
+            ->where('e.employee_id', $user['id'])
+            ->where('s.id', $data['id'])
+            ->where('s.state', 0)
+            ->select('s.oa_order_id', 'sort', 'oa_sub_id', 's.id')
+            ->first();
+        if(empty($detail)) return [false, '无审核权限'];
+
+        return [true, $detail->toArray()];
+    }
+
     //发送公众号消息
     public function sendWxOaCheckMessage($send_data){
         if(empty($send_data)) return ;
@@ -884,7 +932,6 @@ class OaService extends Service
         }
     }
 
-
     public function report($oaOrder, $oa_sub_id,$user_id,$sys_menu)
     {
         $return = [];
@@ -996,26 +1043,19 @@ class OaService extends Service
             list($status, $msg) = $this->oaOrderStatePurchase($data,$user);
             return [$status, $msg];
         }else{
-            //特殊的审批
-            $oa_id = Oa::where('menu_id',$menu_id)->where('del_time', 0)->where('sub_type',2)->exists();
-            if($oa_id){
-                $detail = OaOrder::where('order_no', $order_no)
-                    ->orderBy('id', 'desc')
-                    ->where('menu_id', $menu_id)
-                    ->first();
-            }else{
-                $detail = OaOrder::where('order_no', $order_no)
-                    ->where('channel',$this->user['depart_top'][0]['depart_id'])
-                    ->orderBy('id', 'desc')
-                    ->where('menu_id', $menu_id)
-                    ->first();
-            }
+            $detail = $this->getOaOrder($menu_id, $order_no);
 
             if (empty($detail))  return [true, ['state' => 0]];
             if ($detail->state == 2) return [true, ['state' => 0]];
-            $oa_detail = OaOrderSubEmployee::where('employee_id', $user_id)->where('oa_order_id', $detail->id)->pluck('oa_order_sub_id')->toArray();
+            $oa_detail = OaOrderSubEmployee::where('employee_id', $user_id)
+                ->where('oa_order_id', $detail->id)
+                ->pluck('oa_order_sub_id')
+                ->toArray();
             if (empty($oa_detail)) return [true, ['state' => 0]];
-            $state = OaOrderSub::wherein('id', $oa_detail)->where('state', '<>', 2)->orderBy('sort', 'desc')->first();
+            $state = OaOrderSub::whereIn('id', $oa_detail)
+                ->where('state', '<>', 2)
+                ->orderBy('sort', 'desc')
+                ->first();
             if (in_array($state->state, [0, 2])) return [true, ['state' => 1, 'id' => $state->id]];
 
             return [true, ['state' => 0]];