using IvfTl.Control.Entity.DBEntitys; using IvfTl.Control.Entity.DTO; using IvfTl.Control.Entity.DTO.ApiRequestDTO; using IvfTl.Control.Entity.DTO.ApiResultDTO; using IvfTl.Control.Entity.DTO.ControllerResults; using IvfTl.Control.Entity.GlobalEntitys; using IvfTl.Control.Entity.GlobalEnums; using IvfTl.Control.Services; using IvfTl.Control.Services.HttpServices; using ivf_tl_UtilHelper; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace ivf_tl_Controller { public class HouseBinController { /// /// 日志事件 /// public event Action LogEvent; /// /// 异常日志事件 /// public event Action ExceptionLogEvent; private HttpService _httpService; private DBService _dBService; public HouseBinController(HttpService httpService, DBService dBService) { _httpService = httpService; _dBService= dBService; } private void ExLog(Exception ex, string name) { ExceptionLogEvent?.Invoke(ex, $"HouseBinController.{name}", null, LogEnum.RunException); } private void ErrorLog(string message, LogEnum logType) { LogEvent?.Invoke($"HouseBinController.{message}", logType); } /// /// 获取自动对焦数据 /// /// public List GetAutoFocusController(PositionRequestDTO autoFocusDTO) { try { List result = null; string body = JsonConvert.SerializeObject(autoFocusDTO); for (int i = 0; i < 3; i++) { result = ServiceAutoFocusData(body); if (result != null || (i == 2)) break; Thread.Sleep(500); } if (result == null) { return new List(); //result = DbGetPositionData(autoFocusDTO.wellSnList.Select(x => x.well).ToList(), autoFocusDTO.houseSn, autoFocusDTO.tlSn, 0); } else { DbUpdatePositionData(result, autoFocusDTO.houseSn, autoFocusDTO.tlSn, 0); } return result; } catch (Exception ex) { ExceptionLogEvent?.Invoke(ex, "HouseBinController.GetAutoFocusController", null, LogEnum.RunException); return new List(); } } /// /// 获取拍照数据 /// /// /// public PositionInfoResultDTO GetCCDPositionController(PositionRequestDTO autoFocusDTO) { try { string body = JsonConvert.SerializeObject(autoFocusDTO); PositionInfoResultDTO result = null; for (int i = 0; i < 3; i++) { result = ServiceCCDPositionData(body); if(result != null || (i == 2)) break; Thread.Sleep(500); //if(autoFocusPositionDTOs.complete == 0)//完成 //{ // List CCDPositionList = new List(); // foreach (var item in autoFocusPositionDTOs.positionVOList) // { // CCDPositionList.Add(ConvertHelper.ConvertToHouseWellPhoto(item)); // } // DbUpdatePositionData(CCDPositionList, autoFocusDTO.houseSn, autoFocusDTO.tlSn, 1); // return CCDPositionList; //} //else//未完成 //{ // return new List(); //} } return result; //return DbGetPositionData(autoFocusDTO.wellSnList.Select(x=>x.well).ToList(), autoFocusDTO.houseSn, autoFocusDTO.tlSn, 1); } catch (Exception ex) { ExceptionLogEvent?.Invoke(ex, "HouseBinController.GetCCDController", null, LogEnum.RunException); return null; } } #region 服务器操作 /// /// 服务器-->获取自动对焦起点数据 /// /// /// null表示查询失败,空集合表示查询成功,但是服务器没有返回数据 private List ServiceAutoFocusData(string body) { string funcName = "ServiceAutoFocusData"; try { string url = $"/api/tl/control/time-lapse-equipment/autofocus/position"; string apiResultString = _httpService.callWebService(url, body); if (string.IsNullOrEmpty(apiResultString)) return null; HttpResult> apiResult = JsonConvert.DeserializeObject>>(apiResultString); if (!apiResult.success) { ErrorLog($"{funcName}接口返回失败,返回值{apiResultString}", LogEnum.RunError); return null; } if (apiResult.data != null && apiResult.data.Any()) { List autofocusList = new List(); foreach (var item in apiResult.data) { autofocusList.Add(ConvertHelper.ConvertToHouseWellPhoto(item)); } return autofocusList; } ErrorLog($"{funcName}接口返回成功但是无数据 {apiResultString}", LogEnum.RunError); return null; } catch (Exception ex) { ExLog(ex, funcName); return null; } } /// /// 服务器-->获取拍照位置数据 /// /// /// null表示查询失败,空集合表示查询成功,但是服务器没有返回数据 private PositionInfoResultDTO ServiceCCDPositionData(string body) { string name = "ServiceCCDPositionData"; try { string url = $"/api/tl/control/time-lapse-equipment/ccd/position"; string apiResultString = _httpService.callWebService(url, body); if (string.IsNullOrEmpty(apiResultString)) return null; HttpResult apiResult = JsonConvert.DeserializeObject>(apiResultString); if (!apiResult.success) { ErrorLog($"{name}接口返回失败,返回值{apiResultString}", LogEnum.RunError); return null; } if (apiResult.data != null) return apiResult.data; ErrorLog($"{name}接口返回成功但是无数据 {apiResultString}", LogEnum.RunError); return null; } catch (Exception ex) { ExLog(ex, name); return null; } } #endregion #region 数据库操作 /// /// 更新电机位置 /// /// /// /// /// 0表示自动对焦 public void DbUpdatePositionData(List list,int houseSn, string tlsn, int positionType) { try { List houseWellPhotoDbList = new List(); foreach (var item in list) { houseWellPhotoDbList.Add(ConvertHelper.ConvertToHouseWellPhotoDB(item)); } _dBService.UpdatePosition(houseWellPhotoDbList, houseSn, tlsn, positionType); } catch (Exception ex) { ExceptionLogEvent?.Invoke(ex, "HouseBinController.DbUpdatePositionData", null, LogEnum.RunException); } } public List DbGetPositionData(List list, int houseSn, string tlsn, int positionType) { try { List result = new List(); var newList = _dBService.GetPosition(list, houseSn, tlsn, positionType); foreach (var item in newList) { result.Add(ConvertHelper.ConvertToHouseWellPhoto(item)); } return result; } catch (Exception ex) { ExceptionLogEvent?.Invoke(ex, "HouseBinController.DbGetPositionData", null, LogEnum.RunException); return new List(); } } #endregion } }