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 System;
using Volo.Abp.Identity;
namespace WinIn.FasterZ.Wms.AppBase;
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Linq.Dynamic.Core; using System.Linq.Dynamic.Core;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Reflection;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using NPOI.SS.UserModel; using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; using NPOI.XSSF.UserModel;
using Omu.ValueInjecter;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using WinIn.FasterZ.Store.AppBase;
using WinIn.FasterZ.Store.AppBase.Filters; using WinIn.FasterZ.Store.AppBase.Filters;
using WinIn.FasterZ.Store.AppBase.TableColumnTypeDto; using WinIn.FasterZ.Store.AppBase.TableColumnTypeDto;
using WinIn.FasterZ.Store.Enums; using WinIn.FasterZ.Store.Enums;
using WinIn.FasterZ.Wms.AppBase.Extensions; using WinIn.FasterZ.Wms.AppBase.Extensions;
using WinIn.FasterZ.Wms.AppBaseBusiness.ExportCustomUserSetting; using WinIn.FasterZ.Wms.AppBaseBusiness.ExportCustomUserSetting;
using WinIn.FasterZ.Wms.Localization; using WinIn.FasterZ.Wms.Localization;
using Mapper = AutoMapper.Mapper;
namespace WinIn.FasterZ.Wms.AppBase;
public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto, TCreateInput, TUpdateInput> : public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto, TCreateInput, TUpdateInput> :
CrudAppService<TEntity, TEntityDto, TKey, CrudAppService<TEntity, TEntityDto, TKey,
@ -42,19 +39,33 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
where TEntity : class, IEntity<TKey> where TEntity : class, IEntity<TKey>
where TEntityDto : IEntityDto<TKey> where TEntityDto : IEntityDto<TKey>
{ {
#region 定义
/// <summary>
/// redis缓存时间 分钟
/// </summary>
private const int CacheMinute = 30;
private readonly IRepository<TEntity, TKey> _repository; private readonly IRepository<TEntity, TKey> _repository;
protected IStringLocalizer<WmsResource> Localizer => private IStringLocalizer<WmsResource> Localizer =>
LazyServiceProvider.LazyGetRequiredService<IStringLocalizer<WmsResource>>(); LazyServiceProvider.LazyGetRequiredService<IStringLocalizer<WmsResource>>();
protected ExportCustomUserSettingAppService ExportCustomUserSettingAppService => private ExportCustomUserSettingAppService ExportCustomUserSettingAppService =>
LazyServiceProvider.LazyGetRequiredService<ExportCustomUserSettingAppService>(); LazyServiceProvider.LazyGetRequiredService<ExportCustomUserSettingAppService>();
private IDistributedCache<TEntity> Cache =>
LazyServiceProvider.LazyGetRequiredService<IDistributedCache<TEntity>>();
private IMapper _mapper;
#endregion
/// <summary> /// <summary>
/// 构造方法 /// 构造方法
/// </summary> /// </summary>
/// <param name="repository"></param> /// <param name="repository"></param>
public ZbxBase(IRepository<TEntity, TKey> repository) : base(repository) protected ZbxBase(IRepository<TEntity, TKey> repository) : base(repository)
{ {
_repository = repository; _repository = repository;
} }
@ -172,6 +183,7 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
TryToSetTenantId(entity); TryToSetTenantId(entity);
await Repository.InsertAsync(entity, true); await Repository.InsertAsync(entity, true);
return await MapToGetOutputDtoAsync(entity); return await MapToGetOutputDtoAsync(entity);
} }
@ -193,17 +205,36 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut("api/[controller]/base/update-by-id")] [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); //return base.UpdateAsync(id, input);
await CheckUpdatePolicyAsync().ConfigureAwait(false); await CheckUpdatePolicyAsync().ConfigureAwait(false);
var entity = await GetEntityByIdAsync(id).ConfigureAwait(false); var entity = await GetEntityByIdAsync(id).ConfigureAwait(false);
entity.FromObject(input!);
Type t1 = null;
Type t2 = null;
#region 给所有字表的 Id和MasterId赋值 否则默认的会是000000-000-....的id 插入时会报错 #region 给所有字表的 Id和MasterId赋值 否则默认的会是000000-000-....的id 插入时会报错
var propertyInfos = entity.GetType().GetProperties(); 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) foreach (var propertyInfo in propertyInfos)
{ {
//判断是否是List集合 //判断是否是List集合
@ -212,33 +243,33 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
&& propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>)) && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{ {
var listProperty = typeof(TEntity).GetProperty("Details"); var listProperty = typeof(TEntity).GetProperty("Details");
// 获取 List 的元素类型 // 获取 List 的元素类型
if (listProperty != null) if (listProperty != null)
{ {
var listItemType = listProperty.PropertyType.GetGenericArguments()[0]; var listItemType = listProperty.PropertyType.GetGenericArguments()[0];
t2= listProperty.PropertyType.GetGenericArguments()[0];
// 获取元素类型的 ID 属性 // 获取元素类型的 ID 属性
var detailIdProperty = listItemType.GetProperty("Id"); //var detailIdProperty = listItemType.GetProperty("Id");
var masterIdProperty = listItemType.GetProperty("MasterId"); var masterIdProperty = listItemType.GetProperty("MasterId");
if (detailIdProperty != null) //if (detailIdProperty != null)
{ //{
// 获取 List 属性的值 // // 获取 List 属性的值
var list = (IList)listProperty.GetValue(entity); // var list = (IList)listProperty.GetValue(entity);
// 遍历 List 集合中的每个元素,给 ID 属性赋值 // // 遍历 List 集合中的每个元素,给 ID 属性赋值
if (list != null) // if (list != null)
{ // {
foreach (var item in list) // foreach (var item in list)
{ // {
if ((Guid)detailIdProperty.GetValue(item)! == Guid.Empty) // if ((Guid)detailIdProperty.GetValue(item)! == Guid.Empty)
{ // {
detailIdProperty.SetValue(item, Guid.NewGuid()); // detailIdProperty.SetValue(item, Guid.NewGuid());
} // }
} // }
} // }
} //}
if (masterIdProperty != null) 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 #endregion
await Repository.UpdateAsync(entity, true); await Repository.UpdateAsync(entity, true);
await Cache.SetAsync(entity.Id.ToString(), entity, GetCacheTime());
return await MapToGetOutputDtoAsync(entity); 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++) for (var i = 0; i < mainProperties.Length + splitDetailsColumnNumber + detailProperties.Length; i++)
{ {
var colWidth = Math.Max(sheet.GetColumnWidth(i) + 150, 265 * 15); var colWidth = Math.Max(sheet.GetColumnWidth(i) + 150, 265 * 15);
if (colWidth > 255 * 256)//excel列有最大宽度限制 if (colWidth > 255 * 256) //excel列有最大宽度限制
{ {
colWidth = 6000; colWidth = 6000;
} }
@ -470,7 +511,7 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
for (var i = 0; i < mainProperties.Length; i++) for (var i = 0; i < mainProperties.Length; i++)
{ {
var colWidth = Math.Max(sheet.GetColumnWidth(i) + 150, 265 * 15); var colWidth = Math.Max(sheet.GetColumnWidth(i) + 150, 265 * 15);
if (colWidth > 255 * 256)//excel列有最大宽度限制 if (colWidth > 255 * 256) //excel列有最大宽度限制
{ {
colWidth = 6000; colWidth = 6000;
} }
@ -516,6 +557,20 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
return tableColumnTypeDtos; 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 #endregion
#region 私有处理 #region 私有处理
@ -565,7 +620,7 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
var createTimePropertyInfo = typeof(TEntity).GetProperty(nameof(AuditedEntity.CreationTime)); var createTimePropertyInfo = typeof(TEntity).GetProperty(nameof(AuditedEntity.CreationTime));
if (createTimePropertyInfo != null) if (createTimePropertyInfo != null)
{ {
entities = entities.OrderBy(nameof(AuditedEntity.CreationTime) +" DESC"); entities = entities.OrderBy(nameof(AuditedEntity.CreationTime) + " DESC");
} }
else else
{ {
@ -653,6 +708,22 @@ public class ZbxBase<TEntity, TEntityDto, TKey, TPagedAndSortedResultRequestDto,
return count; 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导出的样式设置 #region Excel导出的样式设置
/// <summary> /// <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 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" "KeyPrefix": "DY_AuthSiteCenter"
}, },
"AuthServer": { "AuthServer": {
"Authority": "http://192.168.0.240:60080", "Authority": "http://dev.ccwin-in.com:60080",
"RequireHttpsMetadata": "false", "RequireHttpsMetadata": "false",
"SwaggerClientId": "Wms_Swagger" "SwaggerClientId": "Wms_Swagger"
}, },

Loading…
Cancel
Save