validator; } protected function buildQueryConfig(Request $request, string $scene = 'default'): array { $p = $request->all(); $config = []; $config['model'] = $this->modelClass; switch ($scene) { case 'index': $config['order']['id'] = 'desc'; $config['with'] = [ 'instance', 'approver', 'instance.flows', 'instance.initiator', 'instance.bizInfo' ]; // $config['dataLimit']['type'] = 'relation'; // $config['dataLimit']['userId'] = $request->user->uid; // $config['dataLimit']['userField'] = 'approver_id'; break; case 'todo': if ($p['scene'] === 'todo') { // if (!in_array(1, $request->user->role_ids)) { // $config['where']['approver_id'] = $request->user->uid; // } $roles_id = array_intersect([1,5,6], $request->user->role_ids); if(count($roles_id) == 0){ if(in_array(4, $request->user->role_ids)){ $report = User::where('report_to',$request->user->uid)->pluck('id')->toArray(); $report = array_merge($report, [$request->user->uid]); $config['where']['approver_id'] = ['in',$report]; } elseif (in_array(5, $request->user->role_ids)){ //内勤 $userGroupMember = UserGroupMembers::where('user_id',$request->user->uid) ->where('is_leader',1) ->first(); if($userGroupMember){ $report = UserGroupMembers::where('user_id',$request->user->uid) ->pluck('id') ->toArray(); $report = array_merge($report, [$request->user->uid]); $config['where']['salesperson_id'] = ['in',$report]; }else{ //内勤没有负责的组时 $config['where']['salesperson_id'] = $request->user->uid; } } else { $config['where']['approver_id'] = $request->user->uid; } } $config['where']['status'] = 'pending'; $config['where']['instance.status'] = 'processing'; } if ($p['scene'] === 'history') { if (!in_array(1, $request->user->role_ids)) { $config['where']['approver_id'] = $request->user->uid; } $config['where']['status'] = ['!=', 'pending']; } $config['order']['id'] = 'desc'; $config['with'] = [ 'instance', 'approver', 'instance.flows', 'instance.initiator', 'instance.bizInfo' ]; break; case 'show': $config['where']['id'] = $p['id']; break; case 'store': break; case 'update': $config['where']['id'] = $p['id']; break; case 'destroy': $config['where']['id'] = $p['id']; break; case 'logs': $config['where']['instance_id'] = $p['instance_id']; $config['order']['id'] = 'desc'; break; case 'border': $config['where']['id'] = $p['id']; $config['order']['id'] = 'desc'; $config['with'] = [ 'instance', 'approver', 'instance.flows', 'instance.initiator', 'instance.bizInfo' ]; break; } return $config; } public function serviceApprove(Request $request) { $param = $request->all(); $appro = new \app\common\utils\approval\service\ApprovalFlowService(); return $appro->approve($param['instance_id'], $request->user->uid, $param['action'], $param['comment']); } public function serviceLogs(Request $request) { $config = $this->buildQueryConfig($request, 'logs'); $item = $this->logicListAll($config); return $this->postProcess('Logs', $item); } public function serviceBusinessOrder(Request $request, array $data = []) { $config = $this->buildQueryConfig($request, 'border'); $config = $this->borderConfig($config, $data['flow_type']); $item = $this->logicShow($config); $bizInfo = []; $service = match ($data['flow_type']) { 'stock_orders' => new \app\common\service\StockOrdersService(), 'stock_orders_nullify' => new \app\common\service\StockOrdersService(), 'purchase_orders' => new \app\common\service\PurchaseOrdersService(), default => new \app\common\service\StockOrdersService() }; $bizInfo = $service->formatData($item->instance->bizInfo); return $this->postProcess('Border', $bizInfo); } public function borderConfig($config, $type = 'stock_orders') { $with = match ($type) { 'stock_orders' => [ 'instance.bizInfo.items', 'instance.bizInfo.items.options', 'instance.bizInfo.items.moneyValues', 'instance.bizInfo.accounts', 'instance.bizInfo.moneyValues', 'instance.bizInfo.salesperson', ], 'stock_orders_nullify' => [ 'instance.bizInfo.items', 'instance.bizInfo.items.options', 'instance.bizInfo.items.moneyValues', 'instance.bizInfo.accounts', 'instance.bizInfo.moneyValues', 'instance.bizInfo.salesperson', ], 'purchase_orders' => [ 'instance.bizInfo.items', 'instance.bizInfo.items.stockOrder', 'instance.bizInfo.items.stockOrderItems' ] }; $config['with'] = array_merge($config['with'], $with); return $config; } public function transferApproval(Request $request, array $data = []) { $service = new \app\common\utils\approval\service\ApprovalFlowService(); $result = $service->transferApproval($data['instance_id'], $data['step_index'], $request->user->uid, $data['to_uid'], $data['reason'], 'name'); return $result; } public function serviceApprovalTimeline(Request $request, array $data = []) { $instance = \app\common\model\ApprovalInstances::where('biz_id', $data['id'])->where('flow_type', $data['flow_type'])->first(); if (!$instance) { return []; } $result = \app\common\model\ApprovalRecords::where('instance_id', $instance->id)->with('approver')->orderBy('id', 'desc')->get(); return $result; } }