def detail(request, workflow_id): """展示SQL工单详细页面""" workflow_detail = get_object_or_404(SqlWorkflow, pk=workflow_id) if not can_view(request.user, workflow_id): raise PermissionDenied # 自动审批不通过的不需要获取下列信息 if workflow_detail.status != 'workflow_autoreviewwrong': # 获取当前审批和审批流程 audit_auth_group, current_audit_auth_group = Audit.review_info(workflow_id, 2) # 是否可审核 is_can_review = Audit.can_review(request.user, workflow_id, 2) # 是否可执行 is_can_execute = can_execute(request.user, workflow_id) # 是否可定时执行 is_can_timingtask = can_timingtask(request.user, workflow_id) # 是否可取消 is_can_cancel = can_cancel(request.user, workflow_id) # 是否可查看回滚信息 is_can_rollback = can_rollback(request.user, workflow_id) # 获取审核日志 try: audit_id = Audit.detail_by_workflow_id(workflow_id=workflow_id, workflow_type=WorkflowDict.workflow_type['sqlreview']).audit_id last_operation_info = Audit.logs(audit_id=audit_id).latest('id').operation_info except Exception as e: logger.debug(f'无审核日志记录,错误信息{e}') last_operation_info = '' else: audit_auth_group = '系统自动驳回' current_audit_auth_group = '系统自动驳回' is_can_review = False is_can_execute = False is_can_timingtask = False is_can_cancel = False is_can_rollback = False last_operation_info = None # 获取定时执行任务信息 if workflow_detail.status == 'workflow_timingtask': job_id = Const.workflowJobprefix['sqlreview'] + '-' + str(workflow_id) job = task_info(job_id) if job: run_date = job.next_run else: run_date = '' else: run_date = '' # 获取是否开启手工执行确认 manual = SysConfig().get('manual') context = {'workflow_detail': workflow_detail, 'last_operation_info': last_operation_info, 'is_can_review': is_can_review, 'is_can_execute': is_can_execute, 'is_can_timingtask': is_can_timingtask, 'is_can_cancel': is_can_cancel, 'is_can_rollback': is_can_rollback, 'audit_auth_group': audit_auth_group, 'manual': manual, 'current_audit_auth_group': current_audit_auth_group, 'run_date': run_date} return render(request, 'detail.html', context)
def detail_content(request): """获取工单内容""" workflow_id = request.GET.get('workflow_id') workflow_detail = get_object_or_404(SqlWorkflow, pk=workflow_id) if not can_view(request.user, workflow_id): raise PermissionDenied if workflow_detail.status in ['workflow_finish', 'workflow_exception']: rows = workflow_detail.sqlworkflowcontent.execute_result else: rows = workflow_detail.sqlworkflowcontent.review_content review_result = ReviewSet() if rows: try: # 检验rows能不能正常解析 loaded_rows = json.loads(rows) # 兼容旧数据'[[]]'格式,转换为新格式[{}] if isinstance(loaded_rows[-1], list): for r in loaded_rows: review_result.rows += [ReviewResult(inception_result=r)] rows = review_result.json() except IndexError: review_result.rows += [ ReviewResult( id=1, sql=workflow_detail.sqlworkflowcontent.sql_content, errormessage="Json decode failed." "执行结果Json解析失败, 请联系管理员") ] rows = review_result.json() except json.decoder.JSONDecodeError: review_result.rows += [ ReviewResult( id=1, sql=workflow_detail.sqlworkflowcontent.sql_content, # 迫于无法单元测试这里加上英文报错信息 errormessage="Json decode failed." "执行结果Json解析失败, 请联系管理员") ] rows = review_result.json() else: rows = workflow_detail.sqlworkflowcontent.review_content result = {"rows": json.loads(rows)} return HttpResponse(json.dumps(result), content_type='application/json')
def detail(request, workflow_id): """展示SQL工单详细页面""" workflow_detail = get_object_or_404(SqlWorkflow, pk=workflow_id) if not can_view(request.user, workflow_id): raise PermissionDenied if workflow_detail.status in ['workflow_finish', 'workflow_exception']: rows = workflow_detail.sqlworkflowcontent.execute_result else: rows = workflow_detail.sqlworkflowcontent.review_content # 自动审批不通过的不需要获取下列信息 if workflow_detail.status != 'workflow_autoreviewwrong': # 获取当前审批和审批流程 audit_auth_group, current_audit_auth_group = Audit.review_info( workflow_id, 2) # 是否可审核 is_can_review = Audit.can_review(request.user, workflow_id, 2) # 是否可执行 is_can_execute = can_execute(request.user, workflow_id) # 是否可定时执行 is_can_timingtask = can_timingtask(request.user, workflow_id) # 是否可取消 is_can_cancel = can_cancel(request.user, workflow_id) # 是否可查看回滚信息 is_can_rollback = can_rollback(request.user, workflow_id) # 获取审核日志 try: audit_id = Audit.detail_by_workflow_id( workflow_id=workflow_id, workflow_type=WorkflowDict.workflow_type['sqlreview']).audit_id last_operation_info = Audit.logs( audit_id=audit_id).latest('id').operation_info except Exception as e: logger.debug(f'无审核日志记录,错误信息{e}') last_operation_info = '' else: audit_auth_group = '系统自动驳回' current_audit_auth_group = '系统自动驳回' is_can_review = False is_can_execute = False is_can_timingtask = False is_can_cancel = False is_can_rollback = False last_operation_info = None # 获取定时执行任务信息 if workflow_detail.status == 'workflow_timingtask': job_id = Const.workflowJobprefix['sqlreview'] + '-' + str(workflow_id) job = task_info(job_id) if job: run_date = job.next_run else: run_date = '' else: run_date = '' # 获取是否开启手工执行确认 manual = SysConfig().get('manual') review_result = ReviewSet() if rows: try: # 检验rows能不能正常解析 loaded_rows = json.loads(rows) # 兼容旧数据'[[]]'格式,转换为新格式[{}] if isinstance(loaded_rows[-1], list): for r in loaded_rows: review_result.rows += [ReviewResult(inception_result=r)] rows = review_result.json() except IndexError: review_result.rows += [ ReviewResult( id=1, sql=workflow_detail.sqlworkflowcontent.sql_content, errormessage="Json decode failed." "执行结果Json解析失败, 请联系管理员") ] rows = review_result.json() except json.decoder.JSONDecodeError: review_result.rows += [ ReviewResult( id=1, sql=workflow_detail.sqlworkflowcontent.sql_content, # 迫于无法单元测试这里加上英文报错信息 errormessage="Json decode failed." "执行结果Json解析失败, 请联系管理员") ] rows = review_result.json() else: rows = workflow_detail.sqlworkflowcontent.review_content context = { 'workflow_detail': workflow_detail, 'rows': rows, 'last_operation_info': last_operation_info, 'is_can_review': is_can_review, 'is_can_execute': is_can_execute, 'is_can_timingtask': is_can_timingtask, 'is_can_cancel': is_can_cancel, 'is_can_rollback': is_can_rollback, 'audit_auth_group': audit_auth_group, 'manual': manual, 'current_audit_auth_group': current_audit_auth_group, 'run_date': run_date } return render(request, 'detail.html', context)
def sqlcrondetail(request, workflow_id): """展示SQL工单详细页面""" workflow_detail = get_object_or_404(SqlWorkflow, pk=workflow_id) if not can_view(request.user, workflow_id): raise PermissionDenied if workflow_detail.status in ['workflow_finish', 'workflow_exception']: rows = workflow_detail.sqlworkflowcontent.execute_result else: rows = workflow_detail.sqlworkflowcontent.review_content # 自动审批不通过的不需要获取下列信息 if workflow_detail.status != 'workflow_autoreviewwrong': # 获取当前审批和审批流程 audit_auth_group, current_audit_auth_group = Audit.review_info( workflow_id, 2) # 是否可审核 is_can_review = Audit.can_review(request.user, workflow_id, 2) # 是否可执行 is_can_execute = False # 是否可定时执行 is_can_timingtask = False # 是否可取消 is_can_cancel = can_cancel(request.user, workflow_id) # 是否可查看回滚信息 is_can_rollback = False # 获取审核日志 try: audit_id = Audit.detail_by_workflow_id( workflow_id=workflow_id, workflow_type=WorkflowDict.workflow_type['sqlreview']).audit_id last_operation_info = Audit.logs( audit_id=audit_id).latest('id').operation_info except Exception as e: logger.debug(f'无审核日志记录,错误信息{e}') last_operation_info = '' else: audit_auth_group = '系统自动驳回' current_audit_auth_group = '系统自动驳回' is_can_review = False is_can_execute = False is_can_timingtask = False is_can_cancel = False is_can_rollback = False last_operation_info = None # 获取是否开启手工执行确认 manual = SysConfig().get('manual') review_result = ReviewSet() if rows: try: # 检验rows能不能正常解析 loaded_rows = json.loads(rows) # 兼容旧数据'[[]]'格式,转换为新格式[{}] if isinstance(loaded_rows[-1], list): for r in loaded_rows: review_result.rows += [ReviewResult(inception_result=r)] rows = review_result.json() except IndexError: review_result.rows += [ ReviewResult( id=1, sql=workflow_detail.sqlworkflowcontent.sql_content, errormessage="Json decode failed." "执行结果Json解析失败, 请联系管理员") ] rows = review_result.json() except json.decoder.JSONDecodeError: review_result.rows += [ ReviewResult( id=1, sql=workflow_detail.sqlworkflowcontent.sql_content, # 迫于无法单元测试这里加上英文报错信息 errormessage="Json decode failed." "执行结果Json解析失败, 请联系管理员") ] rows = review_result.json() else: rows = workflow_detail.sqlworkflowcontent.review_content schedule = workflow_detail.schedule context = { 'workflow_detail': workflow_detail, 'rows': rows, 'last_operation_info': last_operation_info, 'is_can_review': is_can_review, 'is_can_execute': is_can_execute, 'is_can_timingtask': is_can_timingtask, 'is_can_cancel': is_can_cancel, 'is_can_rollback': is_can_rollback, 'audit_auth_group': audit_auth_group, 'current_audit_auth_group': current_audit_auth_group, 'next_run': schedule.next_run, 'receivers': workflow_detail.receivers.all(), 'schedule_period': { 'O': '单次执行', 'H': '每小时执行一次', 'D': '每天执行一次', 'W': '每周执行一次', 'M': '每月执行一次', 'Y': '每年执行一次', 'I': f'每{schedule.minutes}分钟执行一次' }[schedule.schedule_type] } return render(request, 'sqlcron/detail.html', context)