| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Diagnostics; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Text.RegularExpressions; |
| | | using System.Threading.Tasks; |
| | | using AutoMapper; |
| | | using AutoMapper.Configuration.Conventions; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; |
| | | using SqlSugar; |
| | | using WIDESEA_ISerialPortRepository; |
| | | using WIDESEA_SerialPortRepository; |
| | |
| | | private IPutakeRepository _putakeRepository; |
| | | private IUnitOfWorkManage _unitOfWorkManage; |
| | | private ITorqueOpRepository _torqueOpRepository; |
| | | public ProcessServer(IProcessRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IPutakeRepository putakeRepository, ITorqueOpRepository torqueOpRepository) : base(BaseDal) |
| | | private readonly IMapper _mapper; |
| | | |
| | | public ProcessServer(IProcessRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IPutakeRepository putakeRepository, ITorqueOpRepository torqueOpRepository, IMapper mapper) : base(BaseDal) |
| | | { |
| | | _putakeRepository = putakeRepository; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _torqueOpRepository = torqueOpRepository; |
| | | _mapper = mapper; |
| | | } |
| | | |
| | | public override PageGridData<Dt_Process> GetPageData(PageDataOptions options) |
| | |
| | | return base.GetPageData(options); |
| | | } |
| | | |
| | | |
| | | |
| | | //è·åå¥çæ°é |
| | | /// <summary> |
| | | /// è·åå¥çæ°é |
| | | /// </summary> |
| | | /// <returns>è¿åçç»ãæ»æ¥éª¤ãå¥çæ°é</returns> |
| | | public WebResponseContent GetSleeveandStep() |
| | | { |
| | | try |
| | |
| | | { |
| | | try |
| | | { |
| | | var allProcesses = BaseDal.QueryData().OrderBy(x => x.SetpNum).ToList(); // æ setnum æåº |
| | | var allProcesses = BaseDal.QueryData().OrderBy(x => x.SetpNum).ToList(); // æ SetpNum æåº |
| | | Dt_Process proces = _mapper.Map<Dt_Process>(addProcessDTO); |
| | | |
| | | if (addProcessDTO.id == 0) // æ·»å |
| | | #region æ·»å |
| | | if (addProcessDTO.CraftID == 0) // æ·»å |
| | | { |
| | | // æ£æ¥æ¯å¦å·²ç»åå¨ç¸åç setnum |
| | | if (allProcesses.Any(x => x.SetpNum == addProcessDTO.setpNum && x.CraftType == addProcessDTO.craftstype)) |
| | | { |
| | | return new WebResponseContent { Status = false, Message = $"æ¥éª¤ {addProcessDTO.setpNum} å·²åå¨ï¼ä¸è½é夿·»å ï¼" }; |
| | | } |
| | | //// æ£æ¥æ¯å¦å·²ç»åå¨ç¸åç SetpNum |
| | | //if (allProcesses.Any(x => x.SetpNum == addProcessDTO.setpNum && x.CraftType == addProcessDTO.craftstype)) |
| | | //{ |
| | | // return new WebResponseContent { Status = false, Message = $"æ¥éª¤ {addProcessDTO.setpNum} å·²åå¨ï¼ä¸è½é夿·»å ï¼" }; |
| | | //} |
| | | |
| | | //// éè¦è°æ´åç»æ¥éª¤çåºå· |
| | | //foreach (var process in allProcesses.Where(x => x.SetpNum >= addProcessDTO.setpNum)) |
| | | //{ |
| | | // process.SetpNum++; // åç§»ä¸ä½ |
| | | // BaseDal.UpdateData(process); |
| | | //} |
| | | |
| | | // éè¦è°æ´åç»æ¥éª¤çåºå· |
| | | foreach (var process in allProcesses.Where(x => x.SetpNum >= addProcessDTO.setpNum)) |
| | | { |
| | | process.SetpNum++; // åç§»ä¸ä½ |
| | | BaseDal.UpdateData(process); |
| | | } |
| | | |
| | | // å建æ°å·¥èºæ¥éª¤ |
| | | var proces = new Dt_Process |
| | | { |
| | | Nodal=addProcessDTO.Nodal, |
| | | SetpNum = addProcessDTO.setpNum, |
| | | CraftType = addProcessDTO.craftstype, |
| | | CraftsStep = addProcessDTO.craftsstep, |
| | | CraftContent = addProcessDTO.craftcontent, |
| | | Tools = addProcessDTO.tools, |
| | | Material = addProcessDTO.material, |
| | | ArticleOneid = addProcessDTO.aritcleoneid, |
| | | ArticleOne = addProcessDTO.articleone, |
| | | ArticleTowid = addProcessDTO.aritcletowid, |
| | | ArticleTwo = addProcessDTO.articletwo, |
| | | CreateDate = DateTime.Now, |
| | | //为空就æ¯0ï¼ä¸ä¸ºç©ºå°±æ¯1 |
| | | TorqueSum = (string.IsNullOrEmpty(addProcessDTO.articleone) ? 0 : 1) + (string.IsNullOrEmpty(addProcessDTO.articletwo) ? 0 : 1) |
| | | }; |
| | | |
| | | var processList = allProcesses.Where(x => x.SetpNum >= addProcessDTO.SetpNum).ToList(); |
| | | |
| | | if (processList != null) |
| | | { |
| | | for (int i = 0; i < processList.Count; i++) |
| | | { |
| | | processList[i].SetpNum += 1; |
| | | } |
| | | } |
| | | |
| | | // å建æ°å·¥èºæ¥éª¤ |
| | | |
| | | proces.TorqueSum = (string.IsNullOrEmpty(addProcessDTO.ArticleOne) ? 0 : 1) + (string.IsNullOrEmpty(addProcessDTO.ArticleTwo) ? 0 : 1); |
| | | proces.CreateDate = DateTime.Now; |
| | | |
| | | //var proces = new Dt_Process |
| | | //{ |
| | | // Nodal = addProcessDTO.Nodal, |
| | | // SetpNum = addProcessDTO.setpNum, |
| | | // CraftType = addProcessDTO.craftstype, |
| | | // CraftsStep = addProcessDTO.craftsstep, |
| | | // CraftContent = addProcessDTO.craftcontent, |
| | | // Tools = addProcessDTO.tools, |
| | | // Material = addProcessDTO.material, |
| | | // ArticleOneid = addProcessDTO.aritcleoneid, |
| | | // ArticleOne = addProcessDTO.articleone, |
| | | // ArticleTowid = addProcessDTO.aritcletowid, |
| | | // ArticleTwo = addProcessDTO.articletwo, |
| | | // CreateDate = DateTime.Now, |
| | | // PointAxisXYZ = addProcessDTO.PointAxisXYZ, |
| | | // PointAxisHPB = addProcessDTO.PointAxisHPB, |
| | | // //为空就æ¯0ï¼ä¸ä¸ºç©ºå°±æ¯1 |
| | | // TorqueSum = (string.IsNullOrEmpty(addProcessDTO.articleone) ? 0 : 1) + (string.IsNullOrEmpty(addProcessDTO.articletwo) ? 0 : 1) |
| | | //}; |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.AddData(proces); |
| | | BaseDal.UpdateData(processList); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return new WebResponseContent { Status = true, Data = proces }; |
| | | } |
| | | #endregion |
| | | #region ä¿®æ¹ |
| | | else // æ´æ° |
| | | { |
| | | var existingProcess = allProcesses.FirstOrDefault(x => x.CraftID == addProcessDTO.id); |
| | | var existingProcess = allProcesses.FirstOrDefault(x => x.CraftID == addProcessDTO.CraftID); |
| | | if (existingProcess == null) |
| | | { |
| | | return new WebResponseContent { Status = false, Message = "æªæ¾å°è¯¥å·¥èºæ¥éª¤ï¼æ æ³æ´æ°ï¼" }; |
| | | } |
| | | |
| | | int oldSetNum = existingProcess.SetpNum; |
| | | int newSetNum = addProcessDTO.setpNum; |
| | | int newSetNum = addProcessDTO.SetpNum; |
| | | |
| | | if (oldSetNum == newSetNum) // å¦ææ²¡æ¹é¡ºåºï¼ç´æ¥æ´æ°å
¶ä»å
容 |
| | | if (existingProcess.SetpNum == addProcessDTO.SetpNum) // å¦ææ²¡æ¹é¡ºåºï¼ç´æ¥æ´æ°å
¶ä»å
容 |
| | | { |
| | | existingProcess.Nodal = addProcessDTO.Nodal; |
| | | existingProcess.CraftType = addProcessDTO.craftstype; |
| | | existingProcess.CraftsStep = addProcessDTO.craftsstep; |
| | | existingProcess.CraftContent = addProcessDTO.craftcontent; |
| | | existingProcess.Tools = addProcessDTO.tools; |
| | | existingProcess.Material = addProcessDTO.material; |
| | | existingProcess.ArticleOneid = addProcessDTO.aritcleoneid; |
| | | existingProcess.ArticleOne = addProcessDTO.articleone; |
| | | existingProcess.ArticleTowid = addProcessDTO.aritcletowid; |
| | | existingProcess.ArticleTwo = addProcessDTO.articletwo; |
| | | existingProcess.CreateDate = DateTime.Now; |
| | | existingProcess.TorqueSum = (string.IsNullOrEmpty(addProcessDTO.articleone) ? 0 : 1) + (string.IsNullOrEmpty(addProcessDTO.articletwo) ? 0 : 1); |
| | | proces.TorqueSum = (string.IsNullOrEmpty(addProcessDTO.ArticleOne) ? 0 : 1) + (string.IsNullOrEmpty(addProcessDTO.ArticleTwo) ? 0 : 1); |
| | | proces.ModifyDate = DateTime.Now; |
| | | |
| | | BaseDal.UpdateData(existingProcess); |
| | | return new WebResponseContent { Status = true, Data = existingProcess }; |
| | | //existingProcess.Nodal = addProcessDTO.Nodal; |
| | | //existingProcess.CraftType = addProcessDTO.craftstype; |
| | | //existingProcess.CraftsStep = addProcessDTO.craftsstep; |
| | | //existingProcess.CraftContent = addProcessDTO.craftcontent; |
| | | //existingProcess.Tools = addProcessDTO.tools; |
| | | //existingProcess.Material = addProcessDTO.material; |
| | | //existingProcess.ArticleOneid = addProcessDTO.aritcleoneid; |
| | | //existingProcess.ArticleOne = addProcessDTO.articleone; |
| | | //existingProcess.ArticleTowid = addProcessDTO.aritcletowid; |
| | | //existingProcess.ArticleTwo = addProcessDTO.articletwo; |
| | | //existingProcess.CreateDate = DateTime.Now; |
| | | //existingProcess.TorqueSum = (string.IsNullOrEmpty(addProcessDTO.articleone) ? 0 : 1) + (string.IsNullOrEmpty(addProcessDTO.articletwo) ? 0 : 1); |
| | | |
| | | BaseDal.UpdateData(proces); |
| | | return new WebResponseContent { Status = true, Data = proces }; |
| | | } |
| | | // æ´æ° TorqueSum |
| | | |
| | | |
| | | |
| | | |
| | | // è°æ´é¡ºåº |
| | | if (newSetNum < oldSetNum) // ååç§»å¨ï¼åç»æ°æ®å¾åç§» |
| | | { |
| | | foreach (var process in allProcesses.Where(x => x.SetpNum >= newSetNum && x.SetpNum < oldSetNum)) |
| | | var processList = allProcesses.Where(x => x.SetpNum >= newSetNum && x.SetpNum < oldSetNum).ToList(); |
| | | |
| | | for (int i = 0; i < processList.Count; i++) |
| | | { |
| | | process.SetpNum++; // åç§»ä¸ä½ |
| | | BaseDal.UpdateData(process); |
| | | processList[i].SetpNum += 1; |
| | | } |
| | | |
| | | BaseDal.UpdateData(processList); |
| | | //foreach (var process in allProcesses.Where(x => x.SetpNum >= newSetNum && x.SetpNum < oldSetNum)) |
| | | //{ |
| | | // process.SetpNum++; // åç§»ä¸ä½ |
| | | // BaseDal.UpdateData(process); |
| | | //} |
| | | } |
| | | else if (newSetNum > oldSetNum) // ååç§»å¨ï¼å颿°æ®å¾åç§» |
| | | { |
| | | foreach (var process in allProcesses.Where(x => x.SetpNum > oldSetNum && x.SetpNum <= newSetNum)) |
| | | var processList = allProcesses.Where(x => x.SetpNum > oldSetNum && x.SetpNum <= newSetNum).ToList(); |
| | | |
| | | for (int i = 0; i < processList.Count; i++) |
| | | { |
| | | process.SetpNum--; // åç§»ä¸ä½ |
| | | BaseDal.UpdateData(process); |
| | | processList[i].SetpNum -= 1; |
| | | } |
| | | |
| | | BaseDal.UpdateData(processList); |
| | | |
| | | //foreach (var process in allProcesses.Where(x => x.SetpNum > oldSetNum && x.SetpNum <= newSetNum)) |
| | | //{ |
| | | // process.SetpNum--; // åç§»ä¸ä½ |
| | | // BaseDal.UpdateData(process); |
| | | //} |
| | | } |
| | | |
| | | // æ´æ°å½åæ¥éª¤çæ°åºå· |
| | | existingProcess.SetpNum = newSetNum; |
| | | existingProcess.Nodal = addProcessDTO.Nodal; |
| | | existingProcess.CraftType = addProcessDTO.craftstype; |
| | | existingProcess.CraftsStep = addProcessDTO.craftsstep; |
| | | existingProcess.CraftContent = addProcessDTO.craftcontent; |
| | | existingProcess.Tools = addProcessDTO.tools; |
| | | existingProcess.Material = addProcessDTO.material; |
| | | existingProcess.ArticleOneid = addProcessDTO.aritcleoneid; |
| | | existingProcess.ArticleOne = addProcessDTO.articleone; |
| | | existingProcess.ArticleTowid = addProcessDTO.aritcletowid; |
| | | existingProcess.ArticleTwo = addProcessDTO.articletwo; |
| | | existingProcess.CreateDate = DateTime.Now; |
| | | proces.SetpNum = newSetNum; |
| | | proces.TorqueSum = (string.IsNullOrEmpty(addProcessDTO.ArticleOne) ? 0 : 1) + (string.IsNullOrEmpty(addProcessDTO.ArticleTwo) ? 0 : 1); |
| | | proces.ModifyDate = DateTime.Now; |
| | | |
| | | BaseDal.UpdateData(existingProcess); |
| | | return new WebResponseContent { Status = true, Data = existingProcess }; |
| | | //// æ´æ°å½åæ¥éª¤çæ°åºå· |
| | | //existingProcess.SetpNum = newSetNum; |
| | | //existingProcess.Nodal = addProcessDTO.Nodal; |
| | | //existingProcess.CraftType = addProcessDTO.craftstype; |
| | | //existingProcess.CraftsStep = addProcessDTO.craftsstep; |
| | | //existingProcess.CraftContent = addProcessDTO.craftcontent; |
| | | //existingProcess.Tools = addProcessDTO.tools; |
| | | //existingProcess.Material = addProcessDTO.material; |
| | | //existingProcess.ArticleOneid = addProcessDTO.aritcleoneid; |
| | | //existingProcess.ArticleOne = addProcessDTO.articleone; |
| | | //existingProcess.ArticleTowid = addProcessDTO.aritcletowid; |
| | | //existingProcess.ArticleTwo = addProcessDTO.articletwo; |
| | | //existingProcess.CreateDate = DateTime.Now; |
| | | |
| | | BaseDal.UpdateData(proces); |
| | | return new WebResponseContent { Status = true, Data = proces }; |
| | | } |
| | | #endregion |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | try |
| | | { |
| | | //æ ¹æ®ç»åä»»å¡å·è·å¾top表å
¨é¨æ°æ® |
| | | Dt_Process proNow = new Dt_Process(); |
| | | //æ ¹æ®ç»åä»»å¡å·è·å¾torqueOp表å
¨é¨æ°æ® |
| | | var torp = _torqueOpRepository.QueryData(x => x.GroupOp == group && x.TakeId == takeid); |
| | | |
| | | |
| | | //è·åModifier ="true" 表示æ¯å¼ºå¶æ§è¡ |
| | | var Mod = torp.Select(x => x.Modifier).FirstOrDefault(); |
| | | //var Mod = torp.Select(x => x.Modifier).FirstOrDefault(); |
| | | |
| | | //æ¥åºå·¥èºè¡¨ |
| | | var process = BaseDal.QueryData(x => x.CraftType == group); |
| | |
| | | |
| | | |
| | | //æ¿å°å·¥èºè¡¨ä¸æ¥éª¤ä¸º1ç |
| | | var proNoe = process.Where(x => x.SetpNum == 1);//è·å¾å·¥èºè¡¨ä¸çç¬¬ä¸æ¥ |
| | | //var proNoe = process.Where(x => x.SetpNum == 1);//è·å¾å·¥èºè¡¨ä¸çç¬¬ä¸æ¥ |
| | | if (torp.Count == 0) |
| | | { |
| | | return new WebResponseContent { Status = true, Message = "è¿åå·¥èºè¡¨ä¸çç¬¬ä¸æ¡", Data = new { proNoe, maxproce } }; |
| | | proNow = process.Where(x => x.SetpNum == 1).First(); |
| | | return new WebResponseContent { Status = true, Message = "è¿åå·¥èºè¡¨ä¸çç¬¬ä¸æ¡", Data = new { proNow, maxproce } }; |
| | | } |
| | | |
| | | var nowNum = torp.Max(x => x.ProcessSte);//è·å¾å½åæå¤§æ¥éª¤ |
| | | |
| | | var flag = torp.Where(a => a.ProcessSte == nowNum && a.Modifier == "true").FirstOrDefault(); |
| | | //op.Modifier="true" 表示æ¯å¼ºå¶æ§è¡ï¼å°±ä¸éè¦å¤æåºæç次æ°ï¼ç´æ¥è¿å op.ProcessSte+1 |
| | | if (Mod == "true") |
| | | //if (Mod == "true") |
| | | //{ |
| | | // var now = maxproce + 1; |
| | | // return new WebResponseContent { Status = true, Data = new { proNoe, maxproce, now } }; |
| | | //} |
| | | if (flag != null) |
| | | { |
| | | var now = maxproce + 1; |
| | | return new WebResponseContent { Status = true, Data = new { proNoe, maxproce, now } }; |
| | | proNow = process.Where(x => x.SetpNum == now).First(); |
| | | var finish= process.Where(x => x.SetpNum > now); |
| | | return new WebResponseContent { Status = true, Data = new { proNow, maxproce, now, finish } }; |
| | | } |
| | | |
| | | //妿åå¼è¡¨ä¸ææ°æ®å°±è¿åç»ä»å½åå·¥èºæ¥éª¤ |
| | | var maxpro = process.Where(x => x.SetpNum == nowNum); |
| | | |
| | | var maxpro = process.Where(x => x.SetpNum == nowNum).FirstOrDefault(); |
| | | if (maxpro != null) |
| | | { |
| | | if (maxpro.TorqueOneQuantity + maxpro.TorqueTwoQuantity > torp.Where(a => a.ProcessSte == nowNum).Count()) |
| | | { |
| | | proNow = maxpro; |
| | | var finish = process.Where(x => x.SetpNum < nowNum); |
| | | return new WebResponseContent { Status = true, Message = "è¿åå½åä»»å¡åå°ç大æ¥éª¤", Data = new { proNow, maxproce, finish } }; |
| | | } |
| | | else |
| | | { |
| | | var now = nowNum + 1; |
| | | proNow = process.Where(x => x.SetpNum == now).First(); |
| | | var finish = process.Where(x => x.SetpNum < now); |
| | | return new WebResponseContent { Status = true, Message = "è¿åå½åä»»å¡åå°ç大æ¥éª¤", Data = new { proNow, maxproce, finish } }; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return new WebResponseContent { Status = false, Message = "å·¥èºæ°æ®æè¯¯"}; |
| | | } |
| | | |
| | | //夿å½åæ¥éª¤çæåæ¬¡æ°æ¯å¦å®æï¼æ²¡å®æè¿åå½åæ¥éª¤ï¼å®æè¿åop.ProcessSte+1ï¼ç¶æå¼ç»false |
| | | |
| | | return new WebResponseContent { Status = true, Message = "è¿åå½åä»»å¡åå°ç大æ¥éª¤", Data = new { maxpro, maxproce } }; |
| | | //return new WebResponseContent { Status = true, Message = "è¿åå½åä»»å¡åå°ç大æ¥éª¤", Data = new { maxpro, maxproce } }; |
| | | |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å·¥èºä¸ä¸æ¥è·³è½¬ |
| | | /// </summary> |
| | | /// <param name="setpDTO">å½åçç»çä»»å¡å½åæ¥éª¤</param> |
| | | /// <param name="flag">æ¯å¦å¼ºå¶æ§è¡ï¼æ¯trueï¼å¦false</param> |
| | | /// <returns>è¿å1ãå½åæ¥éª¤ï¼2ãæå¤§æ¥éª¤ï¼3ã已宿çå·¥èº</returns> |
| | | public WebResponseContent Nextprocess(SetpDTO setpDTO, bool flag)//å¼ºå¶æ§è¡ç»ætrue |
| | | { |
| | | try |
| | |
| | | { |
| | | return new WebResponseContent { Status = true, Message = "没æå®æå½åæ¥éª¤", Data = new { nowdate, maxproce } }; |
| | | } |
| | | else if (practiceCount == TargetCount || (practiceCount != TargetCount && flag))//å¼ºå¶æ§è¡ åç«¯ç»æä¸ä¸ªflag=tureæ¶ |
| | | else if ((practiceCount == TargetCount && TargetCount == 0) || (practiceCount != TargetCount && flag))//å¼ºå¶æ§è¡ åç«¯ç»æä¸ä¸ªflag=tureæ¶ |
| | | { |
| | | //强å¶è·³è½¬ä¸ä¸æ¥ï¼æå
¥op表å½åæ¥éª¤ |
| | | op.TakeId = setpDTO.takeid; |
| | |
| | | int num = setpDTO.setnum + 1; |
| | | |
| | | //è¿åä¸ä¸æ¥æ¥éª¤ |
| | | var nex = process.Where(x => x.CraftType == setpDTO.group && x.SetpNum == num).FirstOrDefault(); |
| | | |
| | | var nex = process.Where(x => x.SetpNum == num).FirstOrDefault(); |
| | | var finish = process.Where(x => x.SetpNum < num).ToList(); |
| | | |
| | | _torqueOpRepository.AddData(op); |
| | | return new WebResponseContent { Status = true, Message = $"ä½ å·²å®æå½å第{setpDTO.setnum}ï¼åå¤ç¬¬{num}æ¥ä»»å¡", Data = new { nex, maxproce } }; |
| | | return new WebResponseContent { Status = true, Message = $"ä½ å·²å®æå½å第{setpDTO.setnum}ï¼åå¤ç¬¬{num}æ¥ä»»å¡", Data = new { nex, maxproce, finish } }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new WebResponseContent { Status = false, Message = "æ¥è¯¢å¤±è´¥ï¼" + ex.Message }; |
| | | } |
| | | } |
| | | |
| | | |
| | | public WebResponseContent PreviousProcess(SetpDTO setpDTO) |
| | | { |
| | |
| | | var maxproce = process.Max(x => x.SetpNum); |
| | | int num = setpDTO.setnum - 1; |
| | | var nex = process.Where(x => x.CraftType == setpDTO.group && x.SetpNum == num).FirstOrDefault(); |
| | | return new WebResponseContent { Status = true, Message = $"ä¸ä¸æ¥{setpDTO.setnum}", Data = new { nex, maxproce } }; |
| | | var finish = process.Where(x => x.SetpNum < num).ToList(); |
| | | return new WebResponseContent { Status = true, Message = $"ä¸ä¸æ¥{setpDTO.setnum}", Data = new { nex, maxproce, finish } }; |
| | | } |
| | | catch (Exception ex) |
| | | { |