//using System; //using System.Collections.Generic; //using System.Linq; //using System.Text; //using System.Threading.Tasks; //using System.Net; //using System.IO; //using System.Collections.Specialized; //using System.Threading; //using System.Collections.Concurrent; //using System.Diagnostics; //using SqlSugar; //using Newtonsoft.Json; //using HXX.Scanner.Database; //using HXX.Scanner.Common; //using HXX.Scanner.Biz.Socket; //namespace HXX.Scanner.Biz //{ // /// // /// 文件上传类 // /// // public class upf // { // /// // /// 文件基本信息,来自数据库 // /// // public tb_file_info entity { get; set; } // /// // /// 文件当初状态,判断是否允许做上传的动作 // /// // public ResponseEntity result { get; set; } // /// // /// seqNumber // /// // //public int seqNumber { get; set; } // /// // /// upload type // /// // public upload_type_enum upload_type { get; set; } // } // /// // /// 文件上传业务 // /// // public class http_manager // { // public http_manager() // { // ////测试状态禁止上传 // //if (config_environment.scan_type == ScanType.Test_Panel_1_Side || config_environment.scan_type == ScanType.Test_Panel_2_Sides) // //{ // // return; // //} // //else // //{ // // url_upload = config_environment.web_parameter.uploadUrl + config_manager.Get("uploadFileUrl"); // //} // url_upload = config_environment.web_parameter.uploadUrl; // } // /// // /// url // /// // private string url_upload; // /// // /// 上传失败的处理方法 // /// // public static del_on_net_broken on_net_broken; // /// // /// 上传结果通知 // /// // public static del_http_notify on_http_notify; // /// // /// 上传结果通知2 // /// // public static del_http_notify2 on_http_notify2; // /// // /// 文件上传队列 // /// // private static ConcurrentQueue queue = new ConcurrentQueue(); // //public void Upload(tb_file_info _entity, ResponseEntity _result) // //{ // // var e_q = new upf() { entity = _entity, result = _result, seqNumber = 0 }; // // queue.Enqueue(e_q); // //} // /// // /// 检查队列是否为空 // /// // /// // public static bool check_is_queue_empty() // { // //return false; // return queue.IsEmpty; // } // /// // /// 进上传队列 // /// // /// // public void Upload(upf e_q) // { // queue.Enqueue(e_q); // } // //public static void start_http_upload() // //{ // // Task.Run(() => // // { // // while (true) // // { // // if (!queue.IsEmpty) // // { // // queue.TryDequeue(out upf eq); // // if (eq != null) // // { // // new http_manager().Upload_1(eq.entity, eq.result, eq.seqNumber); // // } // // } // // else // // { // // Thread.Sleep(100); // // } // // } // // }); // //} // /// // /// 队列上传线程 // /// // public static void start_http_upload() // { // Task.Run(() => // { // while (true) // { // if (!queue.IsEmpty) // { // //队列不空,取一个待上传实体 // queue.TryDequeue(out upf eq); // if (eq != null) // { // //真实上传业务 // //开始计时 // Stopwatch sw = new Stopwatch(); // sw.Start(); // while (true) // { // //判断图片转换和保存数据库操作是否完成 // if ((eq.upload_type == upload_type_enum.normal && eq.result != null && eq.result.Status == 1) // || eq.upload_type == upload_type_enum.reUpload) // { // //告诉网页端开始上传 // //if (eq.entity.fi_zipId == 1) // //{ // // var response = new response_uploading() { batchNumber = eq.entity.fi_batchSeq, subjectCode = eq.entity.fi_subjectCode }; // // on_http_notify2(JsonConvert.SerializeObject(response)); // //} // //http上传 // eq.result = new http_manager().Upload_1(eq); // break; // } // else // { // //数据操作超时 // if (sw.ElapsedMilliseconds > 10000) // { // eq.result.Status = 0; // eq.result.Message = "保存图片超时"; // sw.Stop(); // break; // } // else // { // Thread.Sleep(100); // } // } // } // //真实上传业务 // //test // //if (testflag) // //{ // // eq.result.Status = 1; // //} // //else // //{ // // eq.result.Status = 0; // //} // //testflag = !testflag; // //test // AfterUpload(eq); // } // } // else // { // Thread.Sleep(100); // } // } // }); // } // static bool testflag = true; // private static void AfterUpload(upf eq) // { // //Thread.Sleep(1000); // try // { // if (eq.result.Status == 1 || eq.result.Status == 200) // { // entity_server_upload server_response = null; // try // { // server_response = JsonConvert.DeserializeObject(eq.result.Data.data_string); // } // catch (Exception ee) // { // LogManager.WriteLog(ee.Message); // } // var db_list = new biz_db().get_by_sn(eq.entity.fi_SN); // foreach (var entity in db_list) // { // var fileName = Path.GetFileName(entity.fi_full_name); // var path = Path.GetDirectoryName(entity.fi_full_name); // path = path.Replace("ready", "complete"); // fileName = Path.Combine(path, fileName); // try // { // if (File.Exists(fileName)) // { // File.Delete(fileName); // } // //把上传成功的文件,从ready移动到complete中 // File.Move(entity.fi_full_name, fileName); // } // catch (Exception e1) // { // LogManager.WriteLog(e1.Message); // response_error error = new response_error(e1.Message); // on_http_notify2(JsonConvert.SerializeObject(error)); // } // var url = get_url_from_server_response(entity, server_response); // //上传成功,更新数据库标志 // new biz_db().update_upload_flag_by_id(entity.fi_id, 1, url); // new biz_db().update_file_name(entity.fi_id, fileName); // } // } // else if (eq.result.Status == -1) // { // return; // } // else // { // new biz_db().update_upload_flag_by_SN(eq.entity.fi_SN.Value, -1); // } // //socket发送结果 // if (eq.upload_type == upload_type_enum.normal) // { // notify_nomral(eq); // } // else // { // notify_reUpload(eq); // } // } // catch (Exception ee) // { // LogManager.WriteLog(eq.result.Message); // response_error error = new response_error(ee.Message); // on_http_notify2(JsonConvert.SerializeObject(error)); // } // } // private static string get_url_from_server_response(tb_file_info db_entity, entity_server_upload server_response) // { // string result = string.Empty; // try // { // var data = server_response.data.Where(x => x.Contains("_" + db_entity.fi_zipId + ".")).FirstOrDefault(); // if (!string.IsNullOrEmpty(data)) // { // result = data; // } // } // catch (Exception ee) // { // LogManager.WriteLog(ee.Message); // } // return result; // } // private static void notify_nomral(upf eq) // { // var entity = eq.entity; // var qty = new biz_db().get_upload_count_by_batchNumber(eq.entity.fi_batchSeq, eq.entity.fi_subjectCode); // var response1 = new response_uploadNumber() { number = qty.qty_success, batchNumber = eq.entity.fi_batchSeq }; // //var response2 = new response_fainNumber() { number = qty.qty_fail, batchNumber = eq.entity.fi_batchSeq }; // on_http_notify(eq); // on_http_notify2(JsonConvert.SerializeObject(response1)); // //on_http_notify2(JsonConvert.SerializeObject(response2)); // //if (queue.IsEmpty) // //{ // // var response_finish = new response_uploadFinish() { subjectCode = entity.fi_subjectCode, batchNumber = entity.fi_batchSeq }; // // var upload_count = new biz_db().get_upload_count_by_batchNumber(entity.fi_batchSeq, entity.fi_subjectCode); // // response_finish.scanNumber = new biz_db().get_count_by_batchNumber(entity.fi_batchSeq, entity.fi_subjectCode); // // response_finish.uploadNumber = upload_count.qty_success; // // response_finish.failedNumber = upload_count.qty_fail; // // on_http_notify2(JsonConvert.SerializeObject(response_finish)); // //} // } // public static void notify_scan_finish() // { // Task.Run(() => // { // if (config_environment.scan_type2 == ScanType.Formal) // { // while (!queue.IsEmpty) // { // Thread.Sleep(100); // } // var response_finish = new response_uploadFinish(); // try // { // response_finish.subjectCode = config_environment.web_parameter.subjectCode; // response_finish.batchNumber = config_environment.web_parameter.batchNumber; // var upload_count = new biz_db().get_upload_count_by_batchNumber(config_environment.web_parameter.batchNumber, config_environment.web_parameter.subjectCode); // response_finish.scanNumber = new biz_db().get_count_by_batchNumber(config_environment.web_parameter.batchNumber, config_environment.web_parameter.subjectCode); // response_finish.uploadNumber = upload_count.qty_success; // response_finish.failedNumber = upload_count.qty_fail; // } // catch (Exception ee) // { // response_finish.code = 500; // response_finish.msg = ee.Message; // LogManager.WriteLog(ee.Message); // } // on_http_notify2(JsonConvert.SerializeObject(response_finish)); // } // }); // } // private static void notify_reUpload(upf eq) // { // var response1 = new response_reUpload_single_finish(); // response1.fileIndex = get_ids_whenUpload(eq.entity.fi_SN); // response1.batchNumber = eq.entity.fi_batchSeq; // response1.subjectCode = eq.entity.fi_subjectCode; // if (eq.result.Status == 1 || eq.result.Status == -1 || eq.result.Status == 200) // { // response1.uploadState = 0; // } // else // { // response1.uploadState = 1; // } // on_http_notify2(JsonConvert.SerializeObject(response1)); // if (queue.IsEmpty) // { // var response_finish = new response_reUpload_all_finish() { subjectCode = eq.entity.fi_subjectCode, batchNumber = eq.entity.fi_batchSeq, number = biz_reUpload.current_list.Count(x => x.fi_side == 1) }; // string id_list = string.Empty; // foreach(var record in biz_reUpload.current_list) // { // id_list += "," + record.fi_id; // } // if (id_list.Length > 0) // { // id_list = id_list.Substring(1); // } // response_finish.failedNumber = new biz_db().get_not_upload_status(id_list); // on_http_notify(eq); // on_http_notify2(JsonConvert.SerializeObject(response_finish)); // } // } // /// // /// 单任务上传 // /// // /// // /// // /// // /// // //private ResponseEntity Upload_1(tb_file_info entity, ResponseEntity result, int seqNumber) // private ResponseEntity Upload_1(upf eq) // { // if (eq.entity != null) // { // if (eq.upload_type == upload_type_enum.normal && eq.result.Status == 1) // { // try // { // //根据实体获取json // var content = get_json(eq.entity); // eq.result = content.Item1; // if (eq.result.Status == 1) // { // eq.result = upload_try(eq, eq.result.Message, content.Item2); // } // else if (eq.result.Status == -1) // { // //双面的第一面,等待第二面到来再传 // return eq.result; // } // } // catch (Exception ee) // { // eq.result.Status = 0; // eq.result.Message = ee.Message; // } // //biz_scanFinish.Work(eq.entity, eq.result); // } // else if (eq.upload_type == upload_type_enum.reUpload) // { // try // { // //根据实体获取json // var content = get_json(eq.entity); // eq.result = content.Item1; // if (eq.result.Status == 1) // { // eq.result = upload_try(eq, eq.result.Message, content.Item2); // } // else if (eq.result.Status == -1) // { // //双面的第一面,等待第二面到来再传 // return eq.result; // } // else // { // var response3 = new response_reUpload_error() // { // batchNumber = eq.entity.fi_batchSeq, // subjectCode = eq.entity.fi_subjectCode, // code = 500, // msg = eq.result.Message, // }; // on_http_notify2(JsonConvert.SerializeObject(response3)); // } // } // catch (Exception ee) // { // eq.result.Status = 0; // eq.result.Message = ee.Message; // LogManager.WriteLog(ee.Message); // } // } // } // return eq.result; // } // private string get_seqNumbers_whenUpload(long? sn) // { // string result = ""; // var list = new biz_db().get_by_sn(sn); // if (list[0].fi_schema != list.Count) // { // throw new Exception("Paper Schema does not match Paper Count"); // } // foreach(var record in list) // { // result += "," + record.fi_zipId; // } // if (result.Length > 0) // { // result = result.Substring(1); // } // return result; // } // private static string get_ids_whenUpload(long? sn) // { // string result = ""; // var list = new biz_db().get_by_sn(sn); // foreach (var record in list) // { // result += "," + record.fi_id; // } // if (result.Length > 0) // { // result = result.Substring(1); // } // return result; // } // /// // /// 3次上传尝试 // /// // /// // /// // /// // private ResponseEntity upload_try(upf eq, string json, List file_list) // { // var result = new ResponseEntity(); // int try_count = 0; // ////////// // var entity = JsonConvert.DeserializeObject(json); // ///////// // NameValueCollection param_list = new NameValueCollection(); // //new // param_list.Add("seqNumbers", get_seqNumbers_whenUpload(eq.entity.fi_SN)); // param_list.Add("paperSchema", eq.entity.fi_schema.ToString()); // //new // //old // param_list.Add("seqNumber", eq.entity.fi_zipId.ToString()); // param_list.Add("schema", eq.entity.fi_schema.ToString()); // //old // param_list.Add("jsonParam", config_environment.web_parameter.jsonParam); // while (try_count < 3) // { // try_count++; // result = upload_try2(param_list, file_list); // if (result.Status == 1) // { // break; // } // else // { // Thread.Sleep(100); // } // } // return result; // } // /// // /// 具体上传逻辑 // /// // /// // /// // /// // private ResponseEntity upload_try2(NameValueCollection param_list, List file_list) // { // ResponseEntity result = new ResponseEntity(); // try // { // var response_string = http_helper.HttpUploadFile2(url_upload, file_list, "files", "multipart/form-data", config_environment.web_parameter.token, param_list); // try // { // result.Data = JsonConvert.DeserializeObject(response_string); // } // catch (Exception ee2) // { // if (ee2.Message.StartsWith("Unexpected character")) // { // result.Data = new response_http_uploadImg2() { code = 200 }; // } // else // { // throw ee2; // } // } // result.Data.data_string = response_string; // if (result.Data.code == 200) // { // result.Status = 1; // result.Message = "ok"; // } // else // { // result.Status = result.Data.code; // result.Message = result.Data.msg; // LogManager.WriteLog(response_string); // } // } // catch (Exception ee) // { // LogManager.WriteLog(ee); // if (ee.Message.Contains("未能解析此远程名称")) // { // on_net_broken(); // } // else if (ee.Message.Contains("超时") || ee.Message.Contains("timeout")) // { // result.Status = -2; // result.Message = "http上传超时"; // } // else // { // result.Status = 0; // result.Message = "http上传文件失败:" + ee.Message; // } // } // return result; // } // /// // /// 根据实体获取json // /// // /// // /// // /// // private Tuple, List> get_json(tb_file_info entity) // { // ResponseEntity result_entity = new ResponseEntity(); // List result_path = new List(); // try // { // List file_list = new List(); // //单面 // if (entity.fi_schema == 1) // { // file_list.Add(entity); // } // //双面 // else // { // file_list = new biz_db().get_by_sn(entity.fi_SN); // if (file_list.Count < 2) // { // var ss = entity.fi_side; // var ss2 = entity.fi_full_name; // result_entity.Status = -1; // result_entity.Message = "第1面,等待第2面再传"; // return new Tuple, List>(result_entity, result_path); // } // if (file_list.Count(x => x.fi_upload_flag == 1) == file_list.Count) // { // result_entity.Status = -1; // result_entity.Message = "已全部上传"; // return new Tuple, List>(result_entity, result_path); // } // } // if (file_list.Count == 1 || file_list.Count == 2) // { // bool flag = true; // foreach (var f in file_list) // { // if (!File.Exists(f.fi_full_name)) // { // flag = false; // break; // } // } // if (flag) // { // var req = new request_http_uploadImg(); // req.token = config_environment.web_parameter.token; // req.fileCount = file_list.Count; // req.isTest = file_list[0].fi_isTest; // req.fileMetaInfo = new List(); // req.zipId = file_list[0].fi_zipId; // req.examId = file_list[0].fi_examId; // req.examPaperId = file_list[0].fi_examPaperId; // //req.seqNumber = file_list[0].fi_schema; // //req.seqNumber = file_manager.get_seqNumber(); // //req.seqNumber = seqNumber; // req.schoolId = config_environment.web_parameter.schoolId; // req.accountId = file_list[0].fi_accountId.ToString(); // //req.completedAmount = new biz_db().get_count_by_seq(config_environment.web_parameter.batchNumber, req.zipId); // req.completedAmount = new biz_db().get_count_by_seq(file_list[0].fi_batchSeq, req.zipId, config_environment.web_parameter.paperSchema); // //req.batchNumber = file_list[0].fi_batchNumber; // req.batchNumber = entity.fi_batchSeq; // req.schema = entity.fi_schema == null ? "1" : entity.fi_schema.ToString(); // foreach (var f in file_list) // { // var sub = new subRequest_http_uploadImg(); // sub.fileName = f.fi_name; // req.fileMetaInfo.Add(sub); // result_path.Add(f.fi_full_name); // } // result_entity.Status = 1; // result_entity.Message = JsonConvert.SerializeObject(req); // } // else // { // result_entity.Status = 0; // result_entity.Message = "未能找到用于上传的文件"; // } // } // else // { // result_entity.Status = 0; // result_entity.Message = "db错误,未能找到用于上传的文件记录"; // } // } // catch (Exception ee) // { // LogManager.WriteLog(ee); // result_entity.Status = 0; // result_entity.Message = ee.Message; // } // return new Tuple, List>(result_entity, result_path); // } // } //}