|
@@ -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;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|