<?php namespace app\admin\controller\emergency; use app\admin\controller\Curd; use app\admin\service\approval\ApprovalFlowBuilder; use app\admin\service\common\ListDataUtil; use app\admin\service\third\DingTalk; use support\Request; use support\spark\model\calibre\Messages; use support\spark\model\emergency\TravelReport; use support\spark\model\system\AdminOrg; use support\spark\model\system\AdminRole; use support\spark\model\system\AdminUser; use support\spark\model\system\ApprovalFlow; use support\spark\model\system\ApprovalFlowLine; use support\spark\model\system\ApprovalFlowLineNode; use support\View; /** * 信行报é€æŽ§åˆ¶å™¨ */ class TravelReportController extends Curd { /** * 获å–用户 * @return \support\Response */ public function getUser() { $adminUserModel = new AdminUser(); $where[] = ['status', '=', 1]; $where[] = ['id', '>', 1]; return sparkSuccess(dataReturn(0, 'ok', $adminUserModel->getAllList($where))); } public function processRole(Request $request) { $param = $request->all(); // 如果å˜åœ¨ subResource å‚æ•° if ($param['subResource'] ?? false) { $subResource = []; $keyword = trim($param['keyword'] ?? ''); // æ ¹æ® subResource å‚数执行相应的æ“作 switch ($param['subResource']) { case 'processRole': $subResource = ApprovalFlow::where('flow_code', 'XINXINGBAOSONG')->first()->flow_path; break; case 'approvalFlowLine': $subResource = ApprovalFlowLine::with('nodes.approvalRole', 'nodes.approvalActualUser')->find($param['id']); break; default: return sparkSuccess(dataReturn(-1, '未知å资æº')); } return sparkSuccess(dataReturn(0, '获å–å资æºæˆåŠŸ', $subResource)); } } public function sumbit(Request $request) { $param = $request->post(); //获å–管ç†å‘˜id $admin_id = admin_id(); $id = $param['id']; //获å–消æ¯è¯¦æƒ… $travelItem = TravelReport::find($id)->toArray(); //组织详情 $current_org = AdminOrg::find($travelItem['org_id']); //状æ€è®¾ç½®ä¸ºå·²è¯» TravelReport::where('id', $id)->update(['is_read' => 1]); //判æ–是å¦æœ‰å®¡æ‰¹æµç¨‹ if ($travelItem['approval_id'] != null) { //撤销审批 self::unSubmitApproval($id); return sparkSuccess(dataReturn(0, '撤销æˆåŠŸ')); } //æ交审批 self::submitApproval($param, $current_org); //更新消æ¯ä¿¡æ¯ return sparkSuccess(dataReturn(0, 'æ“作æˆåŠŸ')); } public function unSubmitApproval($id) { $travel = TravelReport::find($id); /** @var ApprovalFlowLine $approvalFlowLine */ $approvalFlowLine = $travel->approvalFlowLine; $approvalFlowLine->nodes()->delete(); $approvalFlowLine->delete(); $approvalFlowLineNode = new ApprovalFlowLineNode(); $nodes = $approvalFlowLineNode->getAllList(['approval_flow_line_id' => $travel->approval_id]); //åˆ é™¤å¾…åŠžä»»åŠ¡ $res = ''; foreach ($nodes as $item) { if ($item['talkId']) { $uids_ary = explode(',', $item['flow_line_node_user_ids']); foreach ($uids_ary as $v) { $adminInfo = AdminUser::find($v); if (!$adminInfo) { continue; } if (!$adminInfo->unionId) { continue; } $res = DingTalk::delTask($adminInfo->unionId, $item['talkId']); } } } $travel->update([ 'approval_id' => null, 'update_time' => now() ]); } //推é€å®¡æ‰¹ public function submitApproval(array $postData, AdminOrg $model): void { $lineRoleIds = array_column($postData['processRoles'], 'roleid'); $lineRoles = AdminRole::findMany($lineRoleIds); $applicantOrg = $model; $approvalFlow = ApprovalFlow::where('flow_code', 'XINXINGBAOSONG')->first(); $builder = new ApprovalFlowBuilder($applicantOrg, $approvalFlow); $builder->setTitle("{$applicantOrg->name}信行报é€å®¡æ‰¹"); $builder->setSummary("信行报é€å®¡æ‰¹"); $builder->setContentUrl("https://anquansys.sxlq.com:37100/admin/calibre/list?messageId=" . $postData['id']); foreach ($lineRoles as $role) { $builder->addNode($role); } // Db::beginTransaction(); try { $line = $builder->build(); (new TravelReport())->where('id', '=', $postData['id'])->update([ 'approval_id' => $line->id, 'update_time' => now() ]); //获å–第一个 å‘é€é’‰é’‰æ¶ˆæ¯ $approvalFlowLineNode = new ApprovalFlowLineNode(); $first_node = $approvalFlowLineNode->where('approval_flow_line_id', $line->id)->orderBy('id', 'asc')->limit(1)->get(); $title = $applicantOrg->name . '信行报é€'; $open_url = "https://anquansys.sxlq.com:37100/admin/calibre/list?messageId=" . $postData['id']; if (count($first_node) && $first_node[0]['flow_line_node_user_ids']) { $uids_ary = explode(',', $first_node[0]['flow_line_node_user_ids']); $unionIds = []; $adminUser = new AdminUser(); foreach ($uids_ary as $v) { $adminInfo = AdminUser::find($v); if (!$adminInfo) { continue; } if ($adminInfo->unionId) { $unionIds[] = $adminInfo->unionId; } elseif (!$adminInfo->unionId && $adminInfo->mobile) { $res = DingTalk::getUserInfo($adminInfo->mobile); if (!$res) { continue; } $unionIds[] = $res; $adminUser->updateById(['unionId' => $res], $adminInfo->id); } } if (count($unionIds) > 0) { $talk_info = DingTalk::createTaskDo($unionIds, $title, $open_url, $first_node[0]['id']); $approvalFlowLineNode->updateById(['talkId' => $talk_info['id']], $first_node[0]['id']); } } // DB::commit(); } catch (\Exception $e) { // Db::rollBack(); // 回滚事务 throw $e; } } public function callback(Request $request) { $param = $request->post(); $status = $param['status']; $approval_flow_line_id = $param['approval_flow_line_id']; if ($status == 'COMPLETE') { (new TravelReport())->where('approval_id', $approval_flow_line_id)->update(['is_read' => 1]); } return sparkSuccess(dataReturn(0, 'æ“作æˆåŠŸ')); } public function index() { if (request()->isAjax()) { $param = request()->get(); $where = []; // 通过session获å–当å‰æ•°æ®èŒƒå›´å…¬å¸ $orgInfo = getOrgSelfAndChildrenOrgsById(); $org = end($orgInfo); if ($org['org_type'] === 'type_corporation') { $where[] = ['company_org_id', '=', $org['id']]; } elseif ($org['org_type'] === 'type_company') { $where[] = ['project_org_id', '=', $org['id']]; } else { $where[] = ['org_id', '=', $org['id']]; } //报é€äººç›é€‰ if ($param['username']) { $user = AdminUser::where('name', 'like', '%' . $param['username'] . '%')->first()->toArray(); $where[] = ['userid', '=', $user['id']]; } //æ ¹æ®ç”µè¯ç›é€‰ if ($param['mobile']) { $user = AdminUser::where('mobile', 'like', '%' . $param['mobile'] . '%')->first()->toArray(); $where[] = ['userid', '=', $user['id']]; } $resourceOnDuty = new TravelReport(); $list = $resourceOnDuty->with('user')->where($where)->orderBy('id', 'desc')->paginate($param['limit']); return sparkSuccess(dataReturn(0, 'success', $list)); } $org_id = request()->get('org_id'); return view('emergency/travelReport/index', ['org_id' => $org_id]); } public function add() { if (request()->isAjax()) { $param = request()->post(); $orgInfo = getOrgFromLevel4($param['org_id']); dump(array_merge($param, $orgInfo)); (new TravelReport())->insertOne(array_merge($param, $orgInfo)); return sparkSuccess(dataReturn(0, 'æ·»åŠ æˆåŠŸ')); } View::assign([ 'orgList' => asTreeArray((new AdminOrg()) ->getAllList([['status', '=', 1]], ['id', 'name', 'pid']), 'pid'), ]); return view('emergency/travelReport/add'); } public function edit() { if (request()->isAjax()) { $param = request()->post(); $res = (new TravelReport())->updateById($param, $param['id']); return sparkSuccess(dataReturn(0, '修改æˆåŠŸ')); } $id = request()->get('id'); $row = (new TravelReport())->getInfoById($id); View::assign([ 'orgList' => asTreeArray((new AdminOrg()) ->getAllList([['status', '=', 1]], ['id', 'name', 'pid']), 'pid'), 'info' => $row ]); return view('emergency/travelReport/edit'); } public function del() { $id = request()->get('id'); $resourceEquipment = new TravelReport(); $resourceEquipment->delById($id); return sparkSuccess(dataReturn(0, 'åˆ é™¤æˆåŠŸ')); } }