Browse Source

待办列表优化

wufeng 2 years ago
parent
commit
619fab3394
3 changed files with 207 additions and 29 deletions
  1. 12 14
      app/admin/controller/Goodup.php
  2. 194 14
      app/admin/controller/Proorder.php
  3. 1 1
      app/admin/route/app.php

+ 12 - 14
app/admin/controller/Goodup.php

@@ -1555,22 +1555,20 @@ class Goodup extends Base
                         //消息表
                         Db::name('order_msg')->insertAll($insert_order_msg_data);
 
-                    } else {
-                        ActionLog::logAdd(['id' => $createrid, 'nickname' => $creater], [
-                            "order_code" => $skuCode,//编号
-                            "status" => $bifore,
-                            "action_remark" => '',//备注
-                            "action_type" => "status"//新建create,编辑edit,更改状态status
-                        ], "SPSX", $exam_status, $platform);
-
-                        ProcessOrder::AddProcess(['id' => $createrid, 'nickname' => $creater], [
-                            "order_type" => 'SPSX',
-                            "order_code" => $skuCode,//咨询单详情编号
-                            "order_id" => $platform['id'],
-                            "order_status" => $exam_status, "before_status" => $bifore
-                        ]);
                     }
+                    ActionLog::logAdd(['id' => $createrid, 'nickname' => $creater], [
+                        "order_code" => $skuCode,//编号
+                        "status" => $bifore,
+                        "action_remark" => '',//备注
+                        "action_type" => "status"//新建create,编辑edit,更改状态status
+                    ], "SPSX", $exam_status, $platform);
 
+                    ProcessOrder::AddProcess(['id' => $createrid, 'nickname' => $creater], [
+                        "order_type" => 'SPSX',
+                        "order_code" => $skuCode,//咨询单详情编号
+                        "order_id" => $platform['id'],
+                        "order_status" => $exam_status, "before_status" => $bifore
+                    ]);
 
                     //商品上线的话,将数据包塞入到队列中
                     if ($exam_status == 6) {

+ 194 - 14
app/admin/controller/Proorder.php

@@ -108,8 +108,9 @@ public function __construct(App $app)
         $param = $this->request->filter('trim')->only(['token', 'apply_id' => '', 'action_uid' => '', 'order_code' => '', 'page' => 1, 'size' => 10], 'post');
 
         $db = ProcessWait::alias("a")
-            ->leftJoin("workflow b", "a.order_type=b.order_type and a.order_code=b.order_code")
-            ->where(['is_del' => 0, 'a.status' => ProcessWait::$status_wait]);
+            ->leftJoin('workflow b', 'a.order_type=b.order_type and a.order_code=b.order_code')
+            ->leftJoin('process p', 'p.process_type=a.order_type AND p.is_del=0 AND p.status=1')
+            ->where(['a.status' => ProcessWait::$status_wait]);
 
         $db->where(function ($query) use ($param) {
             //所属角色
@@ -119,7 +120,7 @@ public function __construct(App $app)
             $query->whereFindInSet('roleid', $role['roleid']);
 
             //本人id
-         $query->whereOr('wait_id', $this->uid);
+            $query->whereOr('wait_id', $this->uid);
         });
 
         if ($param['order_code'] != '') $db->whereLike('a.order_code', '%' . $param['order_code'] . '%');
@@ -130,11 +131,11 @@ public function __construct(App $app)
         $total = ceil($count / $param['size']);
         $page = $param['page'] > $total ? $total : $param['page'];
         $list = $db
-            ->field("a.id,b.apply_id,b.apply_name,a.addtime,a.action_uid,a.action_name,a.order_status,a.order_type,a.order_process,a.order_code,a.order_id,a.roleid,a.wait_name")
+            ->field("a.id,b.apply_id,b.apply_name,a.addtime,a.action_uid,a.action_name,a.order_status,a.order_type,a.order_process,a.order_code,a.order_id,a.roleid,a.wait_name,p.api_url")
             ->page($page, $param['size'])
             ->order("a.addtime desc")
             ->append(['handle_user_list'])
-            ->withAttr('handle_user_list',function($val,$da){
+            ->withAttr('handle_user_list', function ($val, $da) {
                 return [];
             })
             ->select()
@@ -155,17 +156,120 @@ public function __construct(App $app)
             $value['order_name'] = $var['order_name'];
             $value['status_name'] = $var['status_name'];
 
+            //找到流程对应记录的所有人(创建人 or 申请人 or 采购员)
+            $holder_id = 0;
+            switch ($value['order_type']) {
+                //1.采购单流程
+                case 'CGD':
+                    $holder_id = Db::name('purchease_order')->where(['id' => $value['order_id'], 'is_del' => 0])->value('cgder_id', 0);
+                    break;
+                //2.采购单入库流程
+                case 'RKD':
+                    $holder_id = Db::name('purchease_in')->where(['id' => $value['order_id'], 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //3.备货申请单流程
+                case 'BHD':
+                    $holder_id = Db::name('purchease')->where(['id' => $value['order_id'], 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //4.销售订单流程
+                case 'XSQRD':
+                    $holder_id = Db::name('sale')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //5.发货申请单流程
+                case 'CKD':
+                    $holder_id = Db::name('order_out')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //6.售后申请单流程
+                case 'SHD':
+                    $holder_id = Db::name('order_return')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //7.售后退货单流程
+                case 'CKTHD':
+                    $holder_id = Db::name('order_back')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //8.销售退货单流程
+                case 'XSTHD':
+                    $holder_id = Db::name('sale_return')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //9.采购工差单流程
+                case 'CGGCD':
+                    $holder_id = Db::name('purchease_diff')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //10.销售工差单流程
+                case 'XSGCD':
+                    $holder_id = Db::name('sale_diff')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //11.调拨单流程
+                case 'DBD':
+                    $holder_id = Db::name('allot_stock')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //12.盘点单流程
+                case 'PDD':
+                    $holder_id = Db::name('good_check')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //13.议价单流程
+                case 'YJD':
+                    $holder_id = Db::name('bargain_order')->where(['id' => 'order_id', 'is_del' => 0])->value('createrid', 0);
+                    break;
+                //14.项目单流程
+                case 'PRO':
+                    $holder_id = Db::name('project')->where(['id' => 'order_id', 'is_del' => 0])->value('createrid', 0);
+                    break;
+                //15.商品成本流程
+                case 'SPCB':
+                    $holder_id = Db::name('good_basic')->where(['id' => 'order_id', 'is_del' => 0])->value('chargerid', 0);
+                    break;
+                //16.商品上线流程
+                case 'SPSX':
+                    $holder_id = Db::name('good')->where(['id' => 'order_id', 'is_del' => 0])->value('createrid', 0);
+                    break;
+                //17.活动流程
+                case 'HD':
+                    $holder_id = Db::name('good_activity')->where(['id' => 'order_id', 'is_del' => 0])->value('createrid', 0);
+                    break;
+                //19.有赞商品上架流程
+                case 'YZSX':
+                    $holder_id = Db::name('good_basic')->where(['id' => 'order_id', 'is_del' => 0])->value('createrid', 0);
+                    break;
+                //20.有赞订单审核流程
+//                case 'YZQRD':
+//                    $holder_id = Db::name('')->where(['id' => 'order_id', 'is_del' => 0])->value('', 0);
+//                    break;
+                //22.离职交接流程
+                case 'LZJJ':
+                    $holder_id = Db::name('resign_info')->where(['id' => 'order_id', 'is_del' => 0])->value('hand_uid', 0);
+                    break;
+                //23.采购单退货流程
+                case 'CGTHD':
+                    $holder_id = Db::name('purchease_return')->where(['id' => 'order_id', 'is_del' => 0])->value('apply_id', 0);
+                    break;
+                //24.竞价单流程
+                case 'ZXD':
+                    $holder_id = Db::name('consult_order')->where(['id' => 'order_id', 'is_del' => 0])->value('createrid', 0);
+                    break;
+                //25.商品下线流程
+                case 'GOL':
+                    $holder_id = Db::name('good_offline_log')->where(['id' => 'order_id', 'is_del' => 0])->value('createrid', 0);
+                    break;
+            }
+
+
+            //根据记录的所有人判断哪些人能看到它的记录
+            $uids_1 = $this->get_uids_by_group_share($holder_id, $value['api_url']);
+
             //根据角色筛选
-            $users=Db::name('user_role')
-                ->alias('a')
+            $uids_2 = Db::name('user_role')
                 ->where([
-                    ['a.is_del','=',0],
-                    ['a.roleid','in',$value['roleid']],
-                    ['b.nickname','<>',''],
-                    ['b.is_del', '=', 0],
-                    ['a.roleid', '<>', 1]//超级管理员不在这个范围内
-                ])->leftJoin('depart_user b','b.uid=a.uid')
-                ->column('b.nickname');
+                    ['is_del', '=', 0],
+                    ['roleid', 'in', $value['roleid']],
+                    ['status', '=', 1],
+                    ['roleid', '<>', 1],//超级管理员不在这个范围内
+                ])
+                ->column('uid');
+
+            $uids = array_intersect($uids_1['1'], $uids_2);
+
+            $users = Db::name('depart_user')->where(['is_del' => 0, 'status' => 1])->whereIn('uid', $uids)->column('nickname');
 
             //当前操作人
             $value['handle_user_list'] = $value['wait_name'] ? array_merge($users, [$value['wait_name']]) : $users;
@@ -196,4 +300,80 @@ public function all(){
     return app_show(0,"获取成功",$list);
 }
 
+//我能被哪些人看到?
+    private function get_uids_by_group_share(int $uid = 0, string $api_url = '')
+    {
+        //原始数据
+        $data = [1 => [$uid], 2 => [$uid], 3 => []];
+
+        //用户组
+        $group = Db::name('data_group_userid')
+            ->alias('a')
+            ->leftJoin('data_group b', 'b.id=a.data_group_id')
+            ->where([
+                'a.is_del' => 0,
+                'a.status' => 1,
+                'a.uid' => $uid,
+                'b.is_del' => 0,
+                'b.status' => 1,
+            ])->order('a.data_group_id')
+            ->column('b.type', 'a.data_group_id');
+
+        $group_user = Db::name('data_group_userid')
+            ->where([
+                'is_del' => 0,
+                'status' => 1,
+            ])->whereIn('data_group_id', array_keys($group))
+            ->field('id,data_group_id,uid')
+            ->order('uid')
+            ->cursor();
+
+        foreach ($group_user as $g_u) {
+            $data[$group[$g_u['data_group_id']]][] = $g_u['uid'];
+        }
+
+        //当前请求的接口地址
+        if ($api_url == '') $api_url = app('http')->getName() . '/' . request()->pathinfo();
+        $menu_id = Db::name('admin_menu')
+            ->where(['is_del' => 0, 'menu_api' => $api_url])
+            ->value('id', 0);
+
+        if ($menu_id) {
+            //共享规则
+            $share = Db::name('data_share')
+                ->field('id,type,uid,data_group_id')
+                ->where([
+                    'is_del' => 0,
+                    'status' => 1,
+                ])
+                ->whereFindInSet('menu_ids', $menu_id)
+                ->where(function ($query) use ($uid, $group) {
+                    return $query->where('source_uid', $uid)->whereOr('source_data_group_id', 'in', array_keys($group));
+                })
+                ->cursor();
+
+            foreach ($share as $s) {
+                $source_group_uid = Db::name('data_group_userid')
+                    ->where([
+                        'is_del' => 0,
+                        'status' => 1,
+                        'data_group_id' => $s['data_group_id'],
+                    ])->order('uid')->column('uid');
+
+                //$s['source_uid'] ? [$s['source_uid']] : []  排除默认值0
+                $data[$s['type']] = array_merge($data[$s['type']], $s['uid'] ? [$s['uid']] : [], $source_group_uid);
+            }
+        }
+
+        unset($data[3]);
+
+        $data[0] = array_merge($data[1], $data[2]);
+
+        sort($data[0]);
+        $data[0] = array_unique($data[0]);
+
+        return $data;
+
+    }
+
 }

+ 1 - 1
app/admin/route/app.php

@@ -197,7 +197,7 @@ Route::rule("feeddel","admin/Resign/delFeed");
 Route::rule("feedchange","admin/Resign/changeFeed");
 Route::rule("feedinfo","admin/Resign/infoFeed");
 
-Route::rule("cgdlist","admin/Purch/list");
+Route::rule("cgdlist","admin/Purch/list");//采购单列表
 Route::rule("cgdinfo","admin/Purch/info");
 Route::rule("cgdedit","admin/Purch/edit");
 Route::rule("cgdeditnew","admin/Purch/editNew");//修改采购单的供应商