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
}
}