/// <summary> /// 将图片数据上传到MES中。 /// </summary> /// <param name="element">图片设备配置。</param> /// <returns>true:转置成功。false:转置失败。</returns> public void Execute(ImageDeviceElement element) { bool blFindFiles = false; bool blTransferDataResult = true; string strTransferDataMsg = ""; try { //获取源文件夹路径。 string sourcePath = this.GetSourcePath(element); if (string.IsNullOrEmpty(sourcePath)) { blTransferDataResult = false; strTransferDataMsg = string.Format("获取 {0} 源文件夹路径失败。", element.Name); } //获取目标文件夹路径。 string sourceRootPath = element.SourcePathRoot.TrimEnd(Path.DirectorySeparatorChar); string targetRootPath = element.TargetPathRoot.TrimEnd(Path.DirectorySeparatorChar); //string targetPath = sourcePath.Replace(sourceRootPath, targetRootPath); string targetPath = this.GetTargetPath(element); if (Directory.Exists(targetPath) == false) { Directory.CreateDirectory(targetPath); } //获取源文件夹下的未移转图片。 DirectoryInfo diSourcePath = new DirectoryInfo(sourcePath); string searchPattern = string.Format("*.{0}", element.FileExtensionName); FileInfo[] fileInfos = diSourcePath.GetFiles(searchPattern, SearchOption.AllDirectories); if (fileInfos != null && fileInfos.Length > 0) { blFindFiles = true; } DateTime dtMaxTime = DateTime.MinValue; //遍历文件夹文件。 int maxNumberForLoop = 5; int nIndexOfFile = 0; if (fileInfos.Length > maxNumberForLoop) { SortAsFileCreationTime(ref fileInfos); } IList <LotAttribute> lstLotAttribute = new List <LotAttribute>(); foreach (FileInfo fiItem in fileInfos) { if (nIndexOfFile > maxNumberForLoop) { break; } nIndexOfFile = nIndexOfFile + 1; string targetFileName = fiItem.FullName.Replace(sourcePath, targetPath); Directory.CreateDirectory(Path.GetDirectoryName(targetFileName)); #region //更新批次属性数据。 try { bool blFlag = true; //复制源文件到目标文件夹下。 // blFlag = this.MoveFile(element, fiItem.FullName, targetFileName); string lotNumber = ""; if (blFlag) { #endregion #region //更新 Lot属性 lotNumber = fiItem.Name.Replace(fiItem.Extension, string.Empty).ToUpper().Split('_', '-')[0]; lotNumber = lotNumber.Trim(); #region//获取批次所在工序及状态 using (LotQueryServiceClient client = new LotQueryServiceClient()) { PagingConfig cfg = new PagingConfig() { Where = string.Format("LOT_NUMBER = '{0} '", lotNumber), OrderBy = "EditTime Desc" }; MethodReturnResult <IList <LotTransaction> > result = client.GetTransaction(ref cfg); if (result.Code <= 0 && result.Data != null && result.Data.Count > 0 && result.Data[0].RouteStepName == "功率测试" && result.Data[0].Activity == EnumLotActivity.TrackOut) { string attributeName = string.Format("{0}ImagePath", element.Type); string attributeValue = targetFileName.Replace(targetRootPath, element.HttpPathRoot); attributeValue = attributeValue.Replace('\\', '/'); //获取批次属性是否已存在EL3的属性,如果不存在,则更新EL3图片属性 using (LotAttributeServiceClient client2 = new LotAttributeServiceClient()) { PagingConfig cfg1 = new PagingConfig() { Where = string.Format("Key.LotNumber = '{0}'and Key.AttributeName='ELImagePath'", lotNumber), OrderBy = "EditTime Desc" }; MethodReturnResult <IList <LotAttribute> > result2 = client.GetAttribute(ref cfg1); if (result2.Code <= 0 && result2.Data != null && result2.Data.Count > 0) { blFlag = this.MoveFile(element, fiItem.FullName, targetFileName); FileInfo[] fileInfos1 = diSourcePath.GetFiles(searchPattern, SearchOption.AllDirectories); foreach (FileInfo fiItem1 in fileInfos1) { if (nIndexOfFile > maxNumberForLoop) { break; } nIndexOfFile = nIndexOfFile + 1; targetFileName = fiItem1.FullName.Replace(sourcePath, targetPath); Directory.CreateDirectory(Path.GetDirectoryName(targetFileName)); File.Delete(fiItem1.FullName); } attributeValue = targetFileName.Replace(targetRootPath, element.HttpPathRoot); LotAttribute obj = new LotAttribute() { Key = new LotAttributeKey() { LotNumber = lotNumber, AttributeName = attributeName }, AttributeValue = attributeValue, Editor = "system", EditTime = DateTime.Now }; using (LotAttributeServiceClient client1 = new LotAttributeServiceClient()) { MethodReturnResult result1 = client1.Modify(obj); if (result.Code > 0) { strTransferDataMsg = string.Format("更新批次号{0}错误:{1}", lotNumber, result.Message); LogMessage(false, element.Type + ":" + strTransferDataMsg); client.Close(); } else { LogMessage(true, element.Type + ":" + lotNumber); } client.Close(); } } else { LotAttribute obj = new LotAttribute() { Key = new LotAttributeKey() { LotNumber = lotNumber, AttributeName = attributeName }, AttributeValue = attributeValue, Editor = "system", EditTime = DateTime.Now }; using (LotAttributeServiceClient client1 = new LotAttributeServiceClient()) { MethodReturnResult result1 = client1.Modify(obj); if (result.Code > 0) { strTransferDataMsg = string.Format("更新批次号{0}错误:{1}", lotNumber, result.Message); LogMessage(false, element.Type + ":" + strTransferDataMsg); client.Close(); } else { LogMessage(true, element.Type + ":" + lotNumber); } client.Close(); } blFlag = this.MoveFile(element, fiItem.FullName, targetFileName); File.Delete(fiItem.FullName); } } } else { result.Message = "组件批次不在功率测试出站"; strTransferDataMsg = string.Format("批次号{0}错误:{1}", lotNumber, result.Message); blFlag = this.MoveFile(element, fiItem.FullName, targetFileName); File.Delete(fiItem.FullName); } #endregion } } } catch (Exception ex) { LogMessage(false, element.Type + ":" + ex.Message); } #endregion } } catch (Exception ex) { blTransferDataResult = false; LogMessage(false, element.Type + ":" + ex.Message); } if (blFindFiles == false) { strTransferDataMsg = ""; LogMessage(true, element.Type + ":" + strTransferDataMsg); } }