/// <summary>
        /// 基础上传方法
        /// </summary>
        /// <param name="uuid"></param>
        /// <param name="experimentId"></param>
        /// <param name="courseId"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <param name="score"></param>
        /// <param name="ReportSummary"></param>
        /// <param name="reportModels"></param>
        /// <param name="responseAction"></param>
        /// <param name="status"></param>
        private static void UploadReport(string uuid, int experimentId, int courseId, long startTime, long endTime, double score, string ReportSummary, ExperimentReportModelBuilder[] reportModels, Step[] steps, Action <string> responseAction = null, int status = 1)
        {
            int timeUsed = (int)((endTime - startTime) * 0.001f);

            appId  = ticket == string.Empty ? string.Empty : appId;
            secret = ticket == string.Empty ? string.Empty : secret;

            ExperimentReport.Create(uuid, experimentId, courseId, startTime, endTime, timeUsed, score, ReportSummary, reportModels, report =>
            {
                UploadReport(report, responseAction);
            }, status, steps, appId, secret);
        }
        /// <summary>
        /// 最基本的上传
        /// </summary>
        /// <param name="experimentReport">实验报告</param>
        /// <param name="responseAction">响应事件</param>
        public static void UploadReport(ExperimentReport experimentReport, Action <string> responseAction = null)
        {
            string json = JsonConvert.SerializeObject(experimentReport);

            Debug.Log(json);

            Instance.StartCoroutine(StartUploadReport(json, p =>
            {
                try
                {
                    JObject back = JObject.Parse(p);
                    responseAction?.Invoke(urlOpenReport + experimentReport.courseId + "/0?reportId=" + back["reportId"].ToString());
                }
                catch
                {
                    responseAction("-1");
                }
            }));

            IEnumerator StartUploadReport(string reportJson, Action <string> responseActionReport)
            {
                UnityWebRequest webRequest = new UnityWebRequest(urlReport, "POST");
                WWWForm         form       = new WWWForm();

                form.AddField("jsonStr", reportJson);
                form.AddField("ticket", ticket);

                using (UnityWebRequest www = UnityWebRequest.Post(urlReport, form))
                {
                    yield return(www.SendWebRequest());

                    if (www.isNetworkError || www.isHttpError)
                    {
                        Debug.Log(www.error);
                        responseActionReport("-1");
                    }
                    else
                    {
                        Debug.Log("实验报告上传完毕!");
                        responseActionReport?.Invoke(www.downloadHandler.text);
                    }
                }
            }
        }