using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_Core.Utilities; using WIDESEA_ISystemRepository; using WIDESEA_ISystemService; using WIDESEA_Model.Models.System; namespace WIDESEA_SystemService { public class Sys_VehiService : ServiceBase, ISys_VehiService { public ISys_TraycodeinfoRepository _sys_Traycodeinfo; public ISys_VehicleRepository _VehicleRepository; ISys_TraycodeinfoRepository ISys_VehiService._sys_Traycodeinfo => _sys_Traycodeinfo; ISys_VehicleRepository ISys_VehiService.sys_Vehicle => _VehicleRepository; public Sys_VehiService(ISys_VehiRepository BaseDal, ISys_TraycodeinfoRepository _Traycodeinfo, ISys_VehicleRepository sys_Vehicle) : base(BaseDal) { _sys_Traycodeinfo = _Traycodeinfo; _VehicleRepository= sys_Vehicle; } public ISys_VehiRepository Repository => BaseDal; public WebResponseContent GetCachedata(string PalletCode) { try { string typeid = _sys_Traycodeinfo.QueryFirst(x => x.traycode_code == PalletCode)?.traycode_type; if (typeid != null) { // 获取 Vehicletraycoid 和对应的计数 var traycode_counts_with_count = BaseDal.QueryData(x => x.Vehicletraycoid == typeid) .GroupBy(x => x.Vehiclerpall) .Select(g => new { Vehicletraycoid = g.Key, Count = g.Count() }) .ToList(); // 获取 Vehicletraycoid 值的列表 var vehicletraycoids = traycode_counts_with_count.Select(x => x.Vehicletraycoid).ToList(); // 使用 Contains 来过滤 _VehicleRepository 中的数据 var typedata = _VehicleRepository.QueryData(x => vehicletraycoids.Contains(x.Vehicleid.ToString())) .ToList(); if (typedata != null) { return WebResponseContent.Instance.OK(data: typedata); } else { return WebResponseContent.Instance.OK(data: null); } } return WebResponseContent.Instance.OK(data: null); } catch (Exception ex) { return WebResponseContent.Instance.OK(data: null); throw; } } public WebResponseContent GetCacheList(string traycode_code,string barcode) { try { if(traycode_code != null) { string typeid = _sys_Traycodeinfo.QueryFirst(x => x.traycode_code.Contains(barcode))?.traycode_type; List traycode_materiel = BaseDal.QueryData(x => x.Vehicletraycoid == typeid && x.Vehiclerpall== traycode_code).Select(x => x.Vehi_name).ToList(); if (traycode_materiel != null) { return WebResponseContent.Instance.OK(data: traycode_materiel); } else { return WebResponseContent.Instance.Error($"未找到对应的数据,查找的字段:{typeid},类型{traycode_code}"); } } return WebResponseContent.Instance.Error("traycode_code为空"); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); throw; } } public WebResponseContent GetdataLis(string vehiclerpall) { try { if(vehiclerpall != null) { List traycode_materiel = BaseDal.QueryData(x => x.Vehiclerpall == vehiclerpall).Select(x => x.Vehi_name).Distinct().ToList(); if (traycode_materiel != null) { return WebResponseContent.Instance.OK(data: traycode_materiel); } else { return WebResponseContent.Instance.OK(data: null); } } return WebResponseContent.Instance.OK(data: null); } catch (Exception ex) { return WebResponseContent.Instance.OK(data: null); throw; } } /// /// 添加数据 /// /// /// public virtual WebResponseContent AddData(SaveModel saveModel) { try { if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0)//判断参数是否传入 { return WebResponseContent.Instance.Error("传参错误,参数不能为空"); } string validResult = typeof(Sys_Vehi).ValidateDicInEntity(saveModel.MainData, true, TProperties); if (!string.IsNullOrEmpty(validResult)) { return WebResponseContent.Instance.Error(validResult); } PropertyInfo keyPro = typeof(Sys_Vehi).GetKeyProperty(); if (keyPro == null) { return WebResponseContent.Instance.Error("请先设置主键"); } if (keyPro.PropertyType == typeof(Guid)) { saveModel.MainData.Add(keyPro.Name, Guid.NewGuid()); } else if (keyPro.PropertyType == typeof(int) || keyPro.PropertyType == typeof(long)) { SugarColumn? sugarColumn = keyPro.GetCustomAttribute(); if (sugarColumn?.IsIdentity ?? true) { saveModel.MainData.Remove(keyPro.Name.FirstLetterToUpper()); saveModel.MainData.Remove(keyPro.Name.FirstLetterToLower()); } } Sys_Vehi entity = saveModel.MainData.DicToModel(); List sys_Vehis = BaseDal.QueryData(x => x.Vehi_name == entity.Vehi_name && x.Vehicletraycoid == entity.Vehicletraycoid && x.Vehiclerpall == entity.Vehiclerpall).ToList(); if (sys_Vehis.Count > 0) { return WebResponseContent.Instance.Error("已添加该部件名称,不可再添加相同的!!!"); } if (saveModel.DetailData == null || saveModel.DetailData.Count == 0) { BaseDal.AddData(entity); return WebResponseContent.Instance.OK(); } if (typeof(Sys_Vehi).GetNavigatePro() == null) { return WebResponseContent.Instance.Error("未配置导航属性"); } Type detailType = typeof(Sys_Vehi).GetDetailType(); MethodInfo? methodInfo = GetType().GetMethod("AddDataIncludesDetail"); methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType }); object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData }); return obj as WebResponseContent; } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } } }