//*调用服务器API(获取可以处理的文件) //1、使用JSON通信协议(调用[待化验任务API]) String retData = null; { JToken json = JToken.Parse(Global.jsonTemplate); json["actionName"] = "待化验任务API"; json["action"] = "awaitLaboratory"; json["paramInfo"]["kindId"] = Global.ExeCodeColData;//种类编码 //json["paramInfo"]["lab_orgdm"] = Global.ExeCodeColData;//设备机构代码 String jsonStr = JsonConvert.SerializeObject(json); jsonStr = HttpUtility.UrlEncode(jsonStr);//编码后发送字符串,否则中文会出现乱码 retData = HttpUtil.HttpPost(Global.ServerCallPath, "json=" + jsonStr);//调用服务器接口 } //判断是否返回了数据 if (!String.IsNullOrEmpty(retData) && !String.IsNullOrEmpty(retData.Trim())) { //格式化数据 retData = retData.Trim(); //转换JSON对象 JToken retDataJson = JToken.Parse(retData); ////---模拟数据开始--- //JArray jsonArrTemp = JArray.Parse("[{tmuid:'aaa123',fileName:'aaa123_ypmc_20171117153900.png'},{tmuid:'bbb123',fileName:'bbb123_ypmc_20171117153900.png'}]"); //retDataJson["data"] = jsonArrTemp; //retDataJson["bReturn"] = "true"; //retDataJson["sReturn"] = "获取数据成功![待化验任务API(awaitLaboratory)]"; ////---模拟数据结束--- //判断(调用[待化验任务API])返回的结果是否成功 if (retDataJson["bReturn"].ToString().ToLower().Trim() == "true") { //2、调用化验任务API获得任务编号,去匹配文件名,如果没匹配到,继续轮询化验结果目录。 //取出有效数据 JToken retDataJson_Data = retDataJson["data"]; foreach (JToken item in retDataJson_Data)//遍历数组 { //获取服务器上的数据 String tmuid = item["tmuid"].ToString(); String serFileName = item["fileName"].ToString().Trim();//获取服务器提供的文件名 bool bStatus = false;//false:默认未找到此任务编号对应的文件 string strStatus = ""; //遍历本地文件名 foreach (string itemFileName in files) { String localFileName = Path.GetFileName(itemFileName);//本地文件名 //不使用服务端的文件扩展名,将文件扩展名与本地文件同步 serFileName = Path.GetExtension(serFileName) != "" ? serFileName.Replace(Path.GetExtension(serFileName), Path.GetExtension(localFileName)) : serFileName + Path.GetExtension(localFileName); //判断文件如果不存在,则跳出 if (!File.Exists(itemFileName)) continue; //判断服务器返回的TMUID,匹配文件名 if (itemFileName.ToLower().IndexOf(tmuid.ToLower()) > 0) { //*调用服务器API(上传文件) //3、如果匹配成功后上传pdf文件,同时修改文件名(任务id+样品名称+时间),(调用[接收解析API])获得返回结果,如果成功提示成功并且把文件移动到成功文件夹,如果失败提示失败,把文件移动到失败文件夹 String retData_UpLoadFile = null; { JToken json = JToken.Parse(Global.jsonTemplate); json["actionName"] = "接收解析API(上传文件API)"; json["action"] = "labUpLoadFile"; json["paramInfo"]["kindId"] = Global.ExeCodeColData;//种类编码 json["paramInfo"]["taskId"] = tmuid;//任务编码 json["paramInfo"]["localFileName"] = localFileName;//本地文件名 json["paramInfo"]["serFileName"] = serFileName;//服务端传来的文件名 json["paramInfo"]["suffix"] = Path.GetExtension(serFileName).Replace(".", "");//本地文件扩展名 //json["paramInfo"]["lab_orgdm"] = Global.ExeCodeColData;//设备机构代码 String jsonStr = JsonConvert.SerializeObject(json); jsonStr = HttpUtility.UrlEncode(jsonStr);//编码后发送字符串,否则中文会出现乱码 retData_UpLoadFile = HttpUtil.UploadRequest(Global.ServerCallPath + "?json=" + jsonStr, itemFileName);//调用服务器接口(上传文件到服务器) } //判断是否返回了数据 if (!String.IsNullOrEmpty(retData_UpLoadFile) && !String.IsNullOrEmpty(retData_UpLoadFile.Trim())) { //格式化数据 retData_UpLoadFile = retData_UpLoadFile.Trim(); //转换JSON对象 JToken retData_UpLoadFileJson = JToken.Parse(retData_UpLoadFile); //*4.保存成功和失败文件的目录要每天创建当天的文件夹 string srcDirFile = itemFileName;//源目录文件 string destDirFileSucceed = Global.PollingDirPathSucceed + "\" + time_rq + "\" + serFileName;//目的目录文件(成功) string destDirFileFailure = Global.PollingDirPathFailure + "\" + time_rq + "\" + serFileName;//目的目录文件(失败) //判断(调用[接收解析API(labUpLoadFile)])返回结果是否成功 if (retData_UpLoadFileJson["bReturn"].ToString().ToLower().Trim() == "true") { //调用成功:把文件移动到成功文件夹,同时修改文件名(任务id+样品名称+时间) //移动文件(自动创建目录) if (FileUtil.moveFile(srcDirFile, destDirFileSucceed, true)) { //打印日志(移动文件成功) strStatus = time + " - " + "成功" + " - " + localFileName + " to " + serFileName + " - " + retData_UpLoadFileJson["sReturn"].ToString(); //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus); } else { //打印日志(移动文件失败) strStatus = time + " - " + "失败" + " - " + localFileName + " to " + serFileName + " - 移动文件失败!"; //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus); } } else { //调用失败:把文件移动到失败文件夹 //调用[接收解析API(labUpLoadFile)]API失败 //打印日志 strStatus = time + " - " + "失败" + " - " + localFileName + " to " + serFileName + " - " + retData_UpLoadFileJson["sReturn"].ToString(); //移动文件(自动创建目录) if (!FileUtil.moveFile(srcDirFile, destDirFileFailure, true)) { //移动文件失败 strStatus += " - 移动文件失败!"; } //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus); } } else { //调用[接收解析API(labUpLoadFile)]API失败 //打印日志 strStatus = time + " - " + "失败" + " - " + localFileName + " to " + serFileName + " - 调用[接收解析API(labUpLoadFile)]API失败!返回的数据为空!!"; //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus ); } //找到此任务编号对应的文件(赋值成功标识) LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus); bStatus = true; break; } } //判断是否找到此任务编号对应的文件 if (!bStatus) { strStatus = time + " - " + "失败" + " - 未找到此任务编号对应的文件:" + tmuid + " to " + serFileName; LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus); } //加入列表 listFiles.Items.Insert(0, strStatus); } } else { //调用[待化验任务API(awaitLaboratory)]API失败 LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + retDataJson["sReturn"].ToString()); } } else { //调用[待化验任务API(awaitLaboratory)]API失败 LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:调用[待化验任务API(awaitLaboratory)]API失败!返回的数据为空!!"); }