using System; using Abp.Auditing; using Abp.Authorization; using Abp.Domain.Repositories; using IwbZero.AppServiceBase; using ShwasherSys.Authorization.Permissions; using ShwasherSys.ProductInfo.Dto; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Dynamic.Core; using System.Reflection; using System.Threading.Tasks; using System.Web.Mvc; using Abp.Application.Services.Dto; using Castle.Core.Internal; using IwbZero.Helper; using MiniExcelLibs; using NPOI.SS.Formula.Functions; namespace ShwasherSys.ProductInfo { [AbpAuthorize] public class StandardsAppService : ShwasherAsyncCrudAppService, IStandardsAppService { public StandardsAppService(IRepository repository, IRepository standardCatalogRepository, IRepository standardDetailRepository) : base(repository, "StandardName") { StandardCatalogRepository = standardCatalogRepository; StandardDetailRepository = standardDetailRepository; KeyIsAuto = false; } protected override string GetPermissionName { get; set; } = PermissionNames.PagesProductInfoStandards; protected override string GetAllPermissionName { get; set; } = PermissionNames.PagesProductInfoStandards; protected override string CreatePermissionName { get; set; } = PermissionNames.PagesProductInfoStandardsCreate; protected override string UpdatePermissionName { get; set; } = PermissionNames.PagesProductInfoStandardsUpdate; protected override string DeletePermissionName { get; set; } = PermissionNames.PagesProductInfoStandardsDelete; protected IRepository StandardCatalogRepository { get; } protected IRepository StandardDetailRepository { get; } [DisableAuditing] public List GetStandardsList() { var objList = new List(); var entitys = Repository.GetAll(); foreach (var standard in entitys) { objList.Add(new SelectListItem() { Text = standard.StandardName, Value = standard.Id+"" }); } return objList; } [DisableAuditing] public async Task> GetAllCatalog(PagedRequestDto input) { CheckGetAllPermission(); var query = StandardCatalogRepository.GetAll(); if (input.SearchList != null && input.SearchList.Count > 0) { List objList = new List(); foreach (var o in input.SearchList) { if (o.KeyWords.IsNullOrEmpty()) continue; objList.Add(new LambdaObject() { FieldType = (LambdaFieldType)o.FieldType, FieldName = o.KeyField, FieldValue = o.KeyWords, ExpType = (LambdaExpType)o.ExpType }); } var exp = objList.GetExp(); if (exp != null) { query = query.Where(exp); } } var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = query.OrderBy(i=>i.Id); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await AsyncQueryableExecuter.ToListAsync(query); var dtos = new PagedResultDto( totalCount, ObjectMapper.Map>(entities) ); return dtos; } [DisableAuditing] public async Task> GetDetail(PagedRequestDto input) { CheckGetAllPermission(); var query = StandardDetailRepository.GetAll(); if (input.SearchList != null && input.SearchList.Count > 0) { List objList = new List(); foreach (var o in input.SearchList) { if (o.KeyWords.IsNullOrEmpty()) continue; if (o.KeyField == "innerDiameter") { var innerDi = Convert.ToDecimal(o.KeyWords); query = query.Where(i=> innerDi>=i.InnerDiameter1&& innerDi <= i.InnerDiameter2); continue; } if (o.KeyField == "outDiameter") { var outDi = Convert.ToDecimal(o.KeyWords); query = query.Where(i => outDi >= i.OutDiameter1 && outDi <= i.OutDiameter2); continue; } objList.Add(new LambdaObject() { FieldType = (LambdaFieldType)o.FieldType, FieldName = o.KeyField, FieldValue = o.KeyWords, ExpType = (LambdaExpType)o.ExpType }); } var exp = objList.GetExp(); if (exp != null) { query = query.Where(exp); } } var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = query.OrderBy(i => i.Specs); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await AsyncQueryableExecuter.ToListAsync(query); var dtos = new PagedResultDto( totalCount, ObjectMapper.Map>(entities) ); return dtos; } [DisableAuditing] public async Task> GetDetailView(PagedRequestDto input) { CheckGetAllPermission(); var de = StandardDetailRepository.GetAll(); var cq = StandardCatalogRepository.GetAll(); var query = from detail in de join catalog in cq on detail.StandardId equals catalog.Id into l from lua in l.DefaultIfEmpty() select new StandardDetailDto { Id = detail.Id, StandardId = detail.StandardId, Height1 = detail.Height1, Height2 = detail.Height2, InnerChamfer1 = detail.InnerChamfer1, InnerChamfer2 = detail.InnerChamfer2, InnerDiameter1 = detail.InnerDiameter1, InnerDiameter2 = detail.InnerDiameter2, OutChamfer1 = detail.OutChamfer1, OutChamfer2 = detail.OutChamfer2, OutDiameter1 = detail.OutDiameter1, OutDiameter2 = detail.OutDiameter2, Thickness1 = detail.Thickness1, Thickness2 = detail.Thickness2, ThousandWeigh = detail.ThousandWeigh, StandardName = detail.StandardName, StandardAbbrName = lua.StandardAbbrName, StandardAbbr = lua.StandardAbbr, StandardFullName = lua.StandardName, Specs = detail.Specs }; if (input.SearchList != null && input.SearchList.Count > 0) { List objList = new List(); foreach (var o in input.SearchList) { if (o.KeyWords.IsNullOrEmpty()) continue; if (o.KeyField == "innerDiameter") { var innerDi = Convert.ToDecimal(o.KeyWords); query = query.Where(i => innerDi >= i.InnerDiameter1 && innerDi <= i.InnerDiameter2); continue; } if (o.KeyField == "outDiameter") { var outDi = Convert.ToDecimal(o.KeyWords); query = query.Where(i => outDi >= i.OutDiameter1 && outDi <= i.OutDiameter2); continue; } objList.Add(new LambdaObject() { FieldType = (LambdaFieldType)o.FieldType, FieldName = o.KeyField, FieldValue = o.KeyWords, ExpType = (LambdaExpType)o.ExpType }); } var exp = objList.GetExp(); if (exp != null) { query = query.Where(exp); } } var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = query.OrderBy(i => i.StandardId); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await AsyncQueryableExecuter.ToListAsync(query); var dtos = new PagedResultDto( totalCount, entities //ObjectMapper.Map>(entities) ); return dtos; } [DisableAuditing] public async Task GetCatalog(int id) { var entity = await StandardCatalogRepository.GetAsync(id); return entity; } #region 数据测试导入 [DisableAuditing] public async Task ImportData() { //using var stream = File.OpenRead("C:\\Users\\Lenovo\\Desktop\\项目文档目录\\shwasher\\垫圈标准目录.xlsx"); //var rows = (await stream.QueryAsync(true)).ToList(); ////rows[0].序号 //foreach (dynamic row in rows) //{ // //var ss = row["序号"]; // StandardCatalog catalog = new StandardCatalog() // { // Id = Convert.ToInt32(row.序号), // StandardAbbr=row.简写, // StandardAbbrName = row.标准简称, // StandardName = row.标准完整名称, // Rigidity = row.硬度, // Param = row.参数, // Drawing = row.图纸 // }; // await StandardCatalogRepository.InsertAsync(catalog); //} using var stream = File.OpenRead("C:\\Users\\Lenovo\\Desktop\\项目文档目录\\shwasher\\标准明细整理-导入数据.xlsx"); var rows = (await stream.QueryAsync(true)).ToList(); //rows[0].序号 foreach (dynamic row in rows) { //var ss = row["序号"]; int standardId = Convert.ToInt32(row.编号); string standardName = row.名称 + ""; string specs = row.规格 + ""; string innerDiameter1 = SplitEx(row.内径); string innerDiameter2 = SplitEx(row.内径, 1); string outDiameter1 = SplitEx(row.外径); string outDiameter2 = SplitEx(row.外径, 1); string thickness1 = SplitEx(row.厚度); string thickness2 = SplitEx(row.厚度, 1); string innerChamfer1 = SplitEx(row.内倒角); string innerChamfer2 = SplitEx(row.内倒角, 1); string outChamfer1 = SplitEx(row.外倒角); string outChamfer2 = SplitEx(row.外倒角, 1); string height1 = SplitEx(row.高度); string height2 = SplitEx(row.高度, 1); string thousandWeigh = row.千件重 + ""; StandardDetail detail = new StandardDetail() { StandardId = standardId, StandardName = standardName, Specs = specs, InnerDiameter1 = Convert.ToDecimal(innerDiameter1), InnerDiameter2 = Convert.ToDecimal(innerDiameter2), OutDiameter1 = Convert.ToDecimal(outDiameter1), OutDiameter2 = Convert.ToDecimal(outDiameter2), OutChamfer1 = Convert.ToDecimal(outChamfer1), OutChamfer2 = Convert.ToDecimal(outChamfer2), InnerChamfer1 = Convert.ToDecimal(innerChamfer1), InnerChamfer2 = Convert.ToDecimal(innerChamfer2), Thickness1 = Convert.ToDecimal(thickness1), Thickness2 = Convert.ToDecimal(thickness2), Height1 = Convert.ToDecimal(height1), Height2 = Convert.ToDecimal(height2), ThousandWeigh = Convert.ToDecimal(thousandWeigh.IsNullOrEmpty() ? "0" : thousandWeigh) }; await StandardDetailRepository.InsertAsync(detail); } } private string SplitEx(dynamic input, int index = 0) { string str = input?.ToString(); if (str.IsNullOrEmpty()) { return "0"; } string[] split=null; if (str.IndexOf("~", StringComparison.Ordinal)>0) { split = str?.Split(new[] { '~' }, StringSplitOptions.None); }else if (str.IndexOf("/", StringComparison.Ordinal) > 0) { split = str?.Split(new[] { '/' }, StringSplitOptions.None); } else { return str.Trim(); } //如果没有数值用0 //if (split?.Length == 0) //{ // return "0"; //} //如果只有一个数值,那最大和最小值相同 //if (split?.Length == 1 && index == 1) //{ // return split[0].Trim(); //} return split?[index].Trim(); } [DisableAuditing] public async Task ImportData2() { var standardDetails = await StandardDetailRepository.GetAllListAsync(); foreach (var detail in standardDetails) { var standardCatalog = await StandardCatalogRepository.GetAsync(detail.StandardId); detail.StandardName = standardCatalog.StandardAbbr + " M" + detail.Specs; await StandardDetailRepository.UpdateAsync(detail); //detail.Specs = detail.Specs.TrimStart(); //await StandardDetailRepository.UpdateAsync(detail); } } #endregion } }