Browse Source

修改基类中修改方法

集成Redis
郑勃旭 2 years ago
parent
commit
87ee098932
  1. 151
      WinIn.FasterZ.Wms.Be/WinIn.FasterZ.Wms/WinIn.FasterZ.Wms/src/WinIn.FasterZ.Wms.Application/AppBase/ZbxBase.cs
  2. 2
      WinIn.FasterZ.Wms.Be/WinIn.FasterZ.Wms/WinIn.FasterZ.Wms/src/WinIn.FasterZ.Wms.EntityFrameworkCore/Z_Business/StoreWorkOrder/StoreWorkOrderEfCoreQueryableExtensions.cs
  3. 2
      WinIn.FasterZ.Wms.Be/WinIn.FasterZ.Wms/WinIn.FasterZ.Wms/src/WinIn.FasterZ.Wms.HttpApi.Host/appsettings.json

151
WinIn.FasterZ.Wms.Be/WinIn.FasterZ.Wms/WinIn.FasterZ.Wms/src/WinIn.FasterZ.Wms.Application/AppBase/ZbxBase.cs

@ -1,39 +1,36 @@
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.Identity;
namespace WinIn.FasterZ.Wms.AppBase;
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Localization;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using Omu.ValueInjecter;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.Domain.Repositories;
using WinIn.FasterZ.Store.AppBase;
using WinIn.FasterZ.Store.AppBase.Filters;
using WinIn.FasterZ.Store.AppBase.TableColumnTypeDto;
using WinIn.FasterZ.Store.Enums;
using WinIn.FasterZ.Wms.AppBase.Extensions;
using WinIn.FasterZ.Wms.AppBaseBusiness.ExportCustomUserSetting;
using WinIn.FasterZ.Wms.Localization;
using Mapper = AutoMapper.Mapper;
namespace WinIn.FasterZ.Wms.AppBase;
public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto, TCreateInput, TUpdateInput> :
CrudAppService<TEntity, TEntityDto, TKey,
@ -42,19 +39,33 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
where TEntity : class, IEntity<TKey>
where TEntityDto : IEntityDto<TKey>
{
#region 定义
/// <summary>
/// redis缓存时间 分钟
/// </summary>
private const int CacheMinute = 30;
private readonly IRepository<TEntity, TKey> _repository;
protected IStringLocalizer<WmsResource> Localizer =>
private IStringLocalizer<WmsResource> Localizer =>
LazyServiceProvider.LazyGetRequiredService<IStringLocalizer<WmsResource>>();
protected ExportCustomUserSettingAppService ExportCustomUserSettingAppService =>
private ExportCustomUserSettingAppService ExportCustomUserSettingAppService =>
LazyServiceProvider.LazyGetRequiredService<ExportCustomUserSettingAppService>();
private IDistributedCache<TEntity> Cache =>
LazyServiceProvider.LazyGetRequiredService<IDistributedCache<TEntity>>();
private IMapper _mapper;
#endregion
/// <summary>
/// 构造方法
/// 构造方法
/// </summary>
/// <param name="repository"></param>
public ZbxBase(IRepository<TEntity, TKey> repository) : base(repository)
protected ZbxBase(IRepository<TEntity, TKey> repository) : base(repository)
{
_repository = repository;
}
@ -172,6 +183,7 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
TryToSetTenantId(entity);
await Repository.InsertAsync(entity, true);
return await MapToGetOutputDtoAsync(entity);
}
@ -193,17 +205,36 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
/// <param name="input"></param>
/// <returns></returns>
[HttpPut("api/[controller]/base/update-by-id")]
public override async Task<TEntityDto> UpdateAsync(TKey id, TUpdateInput input)
public new async Task<TEntityDto> UpdateAsync(TKey id, TEntityDto input)
{
//return base.UpdateAsync(id, input);
await CheckUpdatePolicyAsync().ConfigureAwait(false);
var entity = await GetEntityByIdAsync(id).ConfigureAwait(false);
entity.FromObject(input!);
Type t1 = null;
Type t2 = null;
#region 给所有字表的 Id和MasterId赋值 否则默认的会是000000-000-....的id 插入时会报错
var propertyInfos = entity.GetType().GetProperties();
var dtolist = input.GetType().GetProperties();
foreach (var propertyInfo in dtolist)
{
if (propertyInfo.Name == "Details"
&& propertyInfo.PropertyType.IsGenericType
&& propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{
var listProperty = typeof(TEntityDto).GetProperty("Details");
if (listProperty != null)
{
t1 = listProperty.PropertyType.GetGenericArguments()[0];
}
}
}
foreach (var propertyInfo in propertyInfos)
{
//判断是否是List集合
@ -212,33 +243,33 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
&& propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{
var listProperty = typeof(TEntity).GetProperty("Details");
// 获取 List 的元素类型
if (listProperty != null)
{
var listItemType = listProperty.PropertyType.GetGenericArguments()[0];
t2= listProperty.PropertyType.GetGenericArguments()[0];
// 获取元素类型的 ID 属性
var detailIdProperty = listItemType.GetProperty("Id");
//var detailIdProperty = listItemType.GetProperty("Id");
var masterIdProperty = listItemType.GetProperty("MasterId");
if (detailIdProperty != null)
{
// 获取 List 属性的值
var list = (IList)listProperty.GetValue(entity);
// 遍历 List 集合中的每个元素,给 ID 属性赋值
if (list != null)
{
foreach (var item in list)
{
if ((Guid)detailIdProperty.GetValue(item)! == Guid.Empty)
{
detailIdProperty.SetValue(item, Guid.NewGuid());
}
}
}
}
//if (detailIdProperty != null)
//{
// // 获取 List 属性的值
// var list = (IList)listProperty.GetValue(entity);
// // 遍历 List 集合中的每个元素,给 ID 属性赋值
// if (list != null)
// {
// foreach (var item in list)
// {
// if ((Guid)detailIdProperty.GetValue(item)! == Guid.Empty)
// {
// detailIdProperty.SetValue(item, Guid.NewGuid());
// }
// }
// }
//}
if (masterIdProperty != null)
{
@ -258,10 +289,20 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
}
}
var config = new MapperConfiguration(cfg =>
{
// 动态创建映射关系
cfg.CreateMap(typeof(TEntityDto), typeof(TEntity));
cfg.CreateMap(t1,t2);
});
_mapper = new Mapper(config);
var tt = _mapper.Map(input, entity);
#endregion
await Repository.UpdateAsync(entity, true);
await Cache.SetAsync(entity.Id.ToString(), entity, GetCacheTime());
return await MapToGetOutputDtoAsync(entity);
}
@ -456,7 +497,7 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
for (var i = 0; i < mainProperties.Length + splitDetailsColumnNumber + detailProperties.Length; i++)
{
var colWidth = Math.Max(sheet.GetColumnWidth(i) + 150, 265 * 15);
if (colWidth > 255 * 256)//excel列有最大宽度限制
if (colWidth > 255 * 256) //excel列有最大宽度限制
{
colWidth = 6000;
}
@ -470,7 +511,7 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
for (var i = 0; i < mainProperties.Length; i++)
{
var colWidth = Math.Max(sheet.GetColumnWidth(i) + 150, 265 * 15);
if (colWidth > 255 * 256)//excel列有最大宽度限制
if (colWidth > 255 * 256) //excel列有最大宽度限制
{
colWidth = 6000;
}
@ -516,6 +557,20 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
return tableColumnTypeDtos;
}
/// <summary>
/// 【基础】-【获取 增 改 查基础的Dto数据类型】
/// </summary>
/// <returns></returns>
[HttpPost("api/[controller]/base/get-cache-by-id/{id}")]
public virtual async Task<TEntityDto> GetCacheByIdAsync(TKey id)
{
var entity = await Cache.GetOrAddAsync(
$"{typeof(TEntityDto).Name}:{id}".ToString(),
async () => await GetEntityByIdAsync(id), GetCacheTime);
var dto = ObjectMapper.Map<TEntity, TEntityDto>(entity!);
return dto;
}
#endregion
#region 私有处理
@ -565,7 +620,7 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
var createTimePropertyInfo = typeof(TEntity).GetProperty(nameof(AuditedEntity.CreationTime));
if (createTimePropertyInfo != null)
{
entities = entities.OrderBy(nameof(AuditedEntity.CreationTime) +" DESC");
entities = entities.OrderBy(nameof(AuditedEntity.CreationTime) + " DESC");
}
else
{
@ -653,6 +708,22 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
return count;
}
/// <summary>
/// 获取缓存redis时间
/// </summary>
/// <returns></returns>
private static DistributedCacheEntryOptions GetCacheTime()
{
Random random = new Random();
//解决雪崩 添加随机缓存时间
var time = CacheMinute + random.Next(10, 30);
return new DistributedCacheEntryOptions()
{
AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(time)
};
}
#region Excel导出的样式设置
/// <summary>

2
WinIn.FasterZ.Wms.Be/WinIn.FasterZ.Wms/WinIn.FasterZ.Wms/src/WinIn.FasterZ.Wms.EntityFrameworkCore/Z_Business/StoreWorkOrder/StoreWorkOrderEfCoreQueryableExtensions.cs

@ -13,7 +13,7 @@ public static class StoreWorkOrderEfCoreQueryableExtensions
}
return queryable
// .Include(x => x.xxx) // TODO: AbpHelper generated
.Include(x => x.Details) // TODO: AbpHelper generated
;
}
}

2
WinIn.FasterZ.Wms.Be/WinIn.FasterZ.Wms/WinIn.FasterZ.Wms/src/WinIn.FasterZ.Wms.HttpApi.Host/appsettings.json

@ -15,7 +15,7 @@
"KeyPrefix": "DY_AuthSiteCenter"
},
"AuthServer": {
"Authority": "http://192.168.0.240:60080",
"Authority": "http://dev.ccwin-in.com:60080",
"RequireHttpsMetadata": "false",
"SwaggerClientId": "Wms_Swagger"
},

Loading…
Cancel
Save