From 448177c5f07c2a63071fe3ebb5bb79894b0606ed Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周二, 13 5月 2025 17:57:36 +0800 Subject: [PATCH] 3 --- Weben_CMS专用代码生成器/Code/Templete/EntityFrameworkCore/EfCoreRepository模板.txt | 118 +++ Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs | 12 Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs | 12 Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs | 327 ++++---- Weben_CMS专用代码生成器/Code/Utility/CommonHelper.cs | 1 Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs | 114 +- Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs | 352 ++++---- Weben_CMS专用代码生成器/Code/MainForm.cs | 3 Weben_CMS专用代码生成器/Code/Templete/AppService/IAppService模板.txt | 59 + Weben_CMS专用代码生成器/Code/Model/GenerateCodeParam.cs | 6 Weben_CMS专用代码生成器/Code/Templete/Entity/CreateDto模板.txt | 5 Weben_CMS专用代码生成器/Code/Templete/Entity/UpdateDto模板.txt | 5 Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs | 759 ++++++++++---------- Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs | 109 +- Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterial导出模板.xlsx | 0 Weben_CMS专用代码生成器/Code/Templete/Domain/IRepository模板.txt | 49 + Weben_CMS专用代码生成器/Code/常用.txt | 7 Weben_CMS专用代码生成器/Code/Templete/AppService/AppService模板.txt | 166 +++- Weben_CMS专用代码生成器/Code/Templete/Controller模板.txt | 56 + 19 files changed, 1,215 insertions(+), 945 deletions(-) diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/MainForm.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/MainForm.cs" index 6e9bc75..23b5274 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/MainForm.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/MainForm.cs" @@ -241,7 +241,8 @@ EntityInstanceName = tableAlias, LikeQueryAttrs = _tb_LikeQueryAttrs, LikeQueryAttrsName = _tb_LikeQueryAttrsName, - ValidateRepeatName = this.tb_ValidateRepeatName.Text + ValidateRepeatName = this.tb_ValidateRepeatName.Text, + TableName = tableName }; //澶勭悊鏋氫妇绫诲瀷 List<EnumModel> enumList = new List<EnumModel>(); diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Model/GenerateCodeParam.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Model/GenerateCodeParam.cs" index f12717a..4a47b92 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Model/GenerateCodeParam.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Model/GenerateCodeParam.cs" @@ -53,6 +53,12 @@ /// </summary> public List<ColumnModel> ColumnNameList { get; set; } = new List<ColumnModel>(); + + /// <summary> + /// 琛ㄥ悕 + /// </summary> + public string TableName { get; set; } + /// <summary> /// 瀹炰綋鍚嶇О /// </summary> diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/AppService\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/AppService\346\250\241\346\235\277.txt" index 4687685..2a60352 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/AppService\346\250\241\346\235\277.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/AppService\346\250\241\346\235\277.txt" @@ -1,4 +1,4 @@ -using CMS.Plugin.$NameSpacePath$.Application.Contracts.Dtos.$EntityName$; +锘縰sing CMS.Plugin.$NameSpacePath$.Application.Contracts.Dtos.$EntityName$; using CMS.Plugin.$NameSpacePath$.Application.Contracts.Services; using CMS.Plugin.$NameSpacePath$.Domain.Shared; using CmsQueryExtensions; @@ -10,37 +10,38 @@ using Volo.Abp.Data; using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectMapping; +using CmsQueryExtensions.Entitys; namespace CMS.Plugin.$NameSpacePath$.Application.Implements; /// <summary> -/// $ChinaComment$应用服务 +/// $ChinaComment$搴旂敤鏈嶅姟 /// </summary> public class $EntityName$AppService : CMSPluginAppService, I$EntityName$AppService { - private readonly I$EntityName$Repository $EntityInstanceName$Repository; + private readonly I$EntityName$Repository _$EntityInstanceName$Repository; /// <summary> /// Initializes a new instance of the <see cref="$EntityName$AppService"/> class. /// </summary> /// <param name="$EntityName$Repository">The task job repository.</param> - public $EntityName$AppService(I$EntityName$Repository _$EntityName$Repository) + public $EntityName$AppService(I$EntityName$Repository $EntityInstanceName$Repository) { - $EntityInstanceName$Repository = _$EntityName$Repository; + _$EntityInstanceName$Repository = $EntityInstanceName$Repository; } /// <summary> - /// 获取指定$ChinaComment$ + /// 鑾峰彇鎸囧畾$ChinaComment$ /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual async Task<$EntityName$Dto> GetAsync(Guid id) { - return ObjectMapper.Map<$EntityName$, $EntityName$Dto>(await $EntityInstanceName$Repository.GetAsync(id)); + return ObjectMapper.Map<$EntityName$, $EntityName$Dto>(await _$EntityInstanceName$Repository.GetAsync(id)); } /// <summary> - /// 分页获取$ChinaComment$ + /// 鍒嗛〉鑾峰彇$ChinaComment$ /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -53,36 +54,36 @@ input.Sorting = nameof($EntityName$.Sort); } - #region 动态构造查询条件 + #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� - //动态构造查询条件 + //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� var whereConditions = DynamicGetQueryParams(input); #endregion - var count = await $EntityInstanceName$Repository.GetCountAsync(whereConditions); - var list = await $EntityInstanceName$Repository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); + var count = await _$EntityInstanceName$Repository.GetCountAsync(whereConditions); + var list = await _$EntityInstanceName$Repository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); return new PagedResultDto<$EntityName$Dto>(count, ObjectMapper.Map<List<$EntityName$>, List<$EntityName$Dto>>(list)); } /// <summary> - /// 动态构造查询条件 + /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� /// </summary> - /// <param name="input">输入参数</param> + /// <param name="input">杈撳叆鍙傛暟</param> /// <returns></returns> private FunReturnResultModel<Expression<Func<$EntityName$, bool>>> DynamicGetQueryParams(Get$EntityName$Input input) { - //动态构造查询条件 + //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� var whereConditions = WhereConditionsExtensions.GetWhereConditions<$EntityName$, Get$EntityName$Input>(input); if (!whereConditions.IsSuccess) { - throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg); + throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg); } - //也可再次自定义构建查询条件 + //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠� Expression<Func<$EntityName$, bool>> extendExpression = a => a.IsDeleted == false; - // 使用 System.Linq.PredicateBuilder 的 And + // 浣跨敤 System.Linq.PredicateBuilder 鐨� And var pres = (System.Linq.Expressions.Expression<Func<$EntityName$, bool>>)(whereConditions.data); whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); @@ -90,7 +91,7 @@ } /// <summary> - /// 新建$ChinaComment$ + /// 鏂板缓$ChinaComment$ /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -99,20 +100,21 @@ { await CheckCreateOrUpdateDtoAsync(input); - var exist = await $EntityInstanceName$Repository.NameExistAsync(input.$ValidateRepeatName$); + var exist = await _$EntityInstanceName$Repository.NameExistAsync(input.$ValidateRepeatName$); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.$ValidateRepeatName$]); } - var maxSort = await $EntityInstanceName$Repository.GetMaxSortAsync(); + var maxSort = await _$EntityInstanceName$Repository.GetMaxSortAsync(); var sort = input.Sort ?? maxSort; var insertObj = ObjectMapper.Map<$EntityName$CreateDto, $EntityName$>(input); insertObj.Sort = sort; input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); - await $EntityInstanceName$Repository.InsertAsync(insertObj); + insertObj.CreatorName = input.CreatorName;//鍒涘缓浜� + await _$EntityInstanceName$Repository.InsertAsync(insertObj); //if (input.Sort.HasValue && insertObj.Sort != maxSort) //{ @@ -123,7 +125,7 @@ } /// <summary> - /// 更新$ChinaComment$ + /// 鏇存柊$ChinaComment$ /// </summary> /// <param name="id"></param> /// <param name="input"></param> @@ -133,8 +135,8 @@ { await CheckCreateOrUpdateDtoAsync(input); - var updateObj = await $EntityInstanceName$Repository.GetAsync(id); - var exist = await $EntityInstanceName$Repository.NameExistAsync(input.$ValidateRepeatName$, updateObj.Id); + var updateObj = await _$EntityInstanceName$Repository.GetAsync(id); + var exist = await _$EntityInstanceName$Repository.NameExistAsync(input.$ValidateRepeatName$, updateObj.Id); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.$ValidateRepeatName$]); @@ -145,32 +147,34 @@ $UpdateAttributes$ - await $EntityInstanceName$Repository.UpdateAsync(updateObj); + updateObj.LastModifierName = input.LastModifierName;//淇敼浜� + + await _$EntityInstanceName$Repository.UpdateAsync(updateObj); return ObjectMapper.Map<$EntityName$, $EntityName$Dto>(updateObj); } /// <summary> - /// 克隆$ChinaComment$ + /// 鍏嬮殕$ChinaComment$ /// </summary> /// <param name="ids"></param> /// <returns></returns> - public async Task<List<$EntityName$Dto>> CloneAsync(IEnumerable<Guid> ids) + public async Task<List<$EntityName$Dto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) { //var $EntityInstanceName$s = new List<$EntityName$>(); //if (ids != null) //{ - // var sort = await $EntityInstanceName$Repository.GetMaxSortAsync(); + // var sort = await _$EntityInstanceName$Repository.GetMaxSortAsync(); // foreach (var id in ids) // { - // var $EntityName$ = await $EntityInstanceName$Repository.FindAsync(id); + // var $EntityName$ = await _$EntityInstanceName$Repository.FindAsync(id); // if ($EntityName$ != null) // { // var name = $EntityName$.Name + $EntityName$Consts.CloneTag; // var notExist = false; // while (!notExist) // { - // var exist = await $EntityInstanceName$Repository.NameExistAsync(name); + // var exist = await _$EntityInstanceName$Repository.NameExistAsync(name); // if (exist || $EntityInstanceName$s.Any(x => x.Name == name)) // { // name += $EntityName$Consts.CloneTag; @@ -180,7 +184,7 @@ // notExist = true; // } - // //$EntityName$ = await $EntityInstanceName$Repository.InsertAsync($EntityName$.Clone(GuidGenerator.Create(), name, sort++)); + // //$EntityName$ = await _$EntityInstanceName$Repository.InsertAsync($EntityName$.Clone(GuidGenerator.Create(), name, sort++)); // $EntityInstanceName$s.Add($EntityName$); // } // } @@ -191,21 +195,21 @@ } /// <summary> - /// 删除单个$ChinaComment$ + /// 鍒犻櫎鍗曚釜$ChinaComment$ /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual Task DeleteAsync(Guid id) { - return $EntityInstanceName$Repository.DeleteAsync(id); + return _$EntityInstanceName$Repository.DeleteAsync(id); } /// <summary> - /// 删除多个$ChinaComment$ + /// 鍒犻櫎澶氫釜$ChinaComment$ /// </summary> /// <param name="ids"></param> /// <returns></returns> - public async Task DeleteManyAsync(IEnumerable<Guid> ids) + public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) { foreach (var id in ids) { @@ -213,15 +217,37 @@ } } + /// <summary> + /// 鐗╃悊鍒犻櫎$ChinaComment$ + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) + { + _$EntityInstanceName$Repository.DeletePermanentlyAsync(id); + } + /// <summary> - /// 调整排序$ChinaComment$ + /// 鎵归噺鐗╃悊鍒犻櫎$ChinaComment$锛堢洿鎺ュ垹闄わ紝涓嶈蒋鍒犻櫎锛� + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) + { + _$EntityInstanceName$Repository.BatchDeletePermanentlyAsync(ids); + } + + /// <summary> + /// 璋冩暣鎺掑簭$ChinaComment$ /// </summary> /// <param name="id"></param> /// <param name="sort"></param> /// <returns></returns> public virtual async Task AdjustSortAsync(Guid id, int sort) { - var list = await $EntityInstanceName$Repository.GetListAsync(null, nameof($EntityName$.Sort)); + var list = await _$EntityInstanceName$Repository.GetListAsync(null, nameof($EntityName$.Sort)); if (list != null && list.Any()) { var initSort = 1; @@ -248,16 +274,16 @@ } } - await $EntityInstanceName$Repository.UpdateManyAsync(list); + await _$EntityInstanceName$Repository.UpdateManyAsync(list); } /// <summary> - /// 导入$ChinaComment$ + /// 瀵煎叆$ChinaComment$ /// </summary> /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public async Task ImportAsync($EntityName$sImportModel input) + public async Task ImportAsync($EntityName$sImportModel input, MyCurrentUser myCurrentUser) { Check.NotNull(input, nameof(input)); @@ -267,14 +293,14 @@ if (importItems != null && importItems.Any()) { - #region 导入校验 + #region 瀵煎叆鏍¢獙 - // 判断名称是否重复,并输出第几行重复 + // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� var duplicate$EntityName$s = importItems.GroupBy(x => x.$ValidateRepeatName$).Where(x => x.Count() > 1).ToList(); if (duplicate$EntityName$s?.Any() == true) { - var duplicate$EntityName$Msgs = duplicate$EntityName$s.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key} 名称重复"); - var errorMsg = $"导入失败!配置, {string.Join(",", duplicate$EntityName$Msgs)},终止导入"; + var duplicate$EntityName$Msgs = duplicate$EntityName$s.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key} 鍚嶇О閲嶅"); + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicate$EntityName$Msgs)}锛岀粓姝㈠鍏�"; throw new UserFriendlyException(errorMsg); } @@ -289,11 +315,11 @@ if (impItem.$ValidateRepeatName$.IsNullOrWhiteSpace()) { - var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:$EntityName$名称不能为空"; + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細$EntityName$鍚嶇О涓嶈兘涓虹┖"; throw new UserFriendlyException(errorMsg); } - var old$EntityName$ = await $EntityInstanceName$Repository.FindByNameAsync(impItem.$ValidateRepeatName$); + var old$EntityName$ = await _$EntityInstanceName$Repository.FindByNameAsync(impItem.$ValidateRepeatName$); if (old$EntityName$ != null) { var $EntityInstanceName$UpdateDto = new $EntityName$UpdateDto @@ -315,37 +341,39 @@ } } - // 新增 + // 鏂板 foreach (var $EntityInstanceName$Dto in $EntityInstanceName$CreateDtos) { try { + $EntityInstanceName$Dto.Item.CreatorName = myCurrentUser.UserAccount;//鍒涘缓浜� await CreateAsync($EntityInstanceName$Dto.Item); } catch (Exception e) { - var errorMsg = $"导入失败!配置,第{$EntityInstanceName$Dto.RowIndex}行:{e.Message},终止导入"; + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊$EntityInstanceName$Dto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; throw new UserFriendlyException(errorMsg); } } - // 更新 + // 鏇存柊 foreach (var $EntityInstanceName$Dto in $EntityInstanceName$UpdateDtos) { try { + $EntityInstanceName$Dto.Item.LastModifierName = myCurrentUser.UserAccount;//淇敼浜� await UpdateAsync($EntityInstanceName$Dto.Id, $EntityInstanceName$Dto.Item); } catch (Exception e) { - var errorMsg = $"导入失败!配置,第{$EntityInstanceName$Dto.RowIndex}行:{e.Message},终止导入"; + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊$EntityInstanceName$Dto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; throw new UserFriendlyException(errorMsg); } } } /// <summary> - /// 导出$ChinaComment$ + /// 瀵煎嚭$ChinaComment$ /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -358,20 +386,20 @@ input.Sorting = nameof($EntityName$.Sort); } - #region 动态构造查询条件 + #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� - //动态构造查询条件 + //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� var whereConditions = DynamicGetQueryParams(input); #endregion - var list = await $EntityInstanceName$Repository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); + var list = await _$EntityInstanceName$Repository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); var result = ObjectMapper.Map<List<$EntityName$>, List<$EntityName$Dto>>(list); var sheets = new Dictionary<string, object> { - ["配置"] = ExportHelper.ConvertListToExportData(result), + ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result), }; var fileName = "$PageMenuName$"; @@ -379,7 +407,7 @@ } /// <summary> - /// 校验$ChinaComment$,当新建或更新时 + /// 鏍¢獙$ChinaComment$锛屽綋鏂板缓鎴栨洿鏂版椂 /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -389,4 +417,28 @@ $UpdateAttributesForCheckCreateOrUpdateDtoAsync$ return Task.CompletedTask; } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇$ChinaComment$鍒楄〃 + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<List<$EntityName$>> GetListByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, CancellationToken cancellationToken = default) + { + return await _$EntityInstanceName$Repository.GetListByFilterAsync(whereConditions); + } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜$ChinaComment$ + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<$EntityName$> GetSingleByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) + { + return await _$EntityInstanceName$Repository.GetSingleByFilterAsync(whereConditions, is鈥婱ultipleThrowException); + } } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/IAppService\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/IAppService\346\250\241\346\235\277.txt" index d314fbf..6ed0b79 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/IAppService\346\250\241\346\235\277.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/AppService/IAppService\346\250\241\346\235\277.txt" @@ -1,29 +1,49 @@ -using CMS.Plugin.$NameSpacePath$.Application.Contracts.Dtos.$EntityName$; +锘縰sing CMS.Plugin.$NameSpacePath$.Application.Contracts.Dtos.$EntityName$; using Volo.Abp.Application.Services; +using CmsQueryExtensions.Entitys; +using System.Linq.Expressions; +using CMS.Plugin.$NameSpacePath$.Domain.$EntityName$; namespace CMS.Plugin.$NameSpacePath$.Application.Contracts.Services; /// <summary> -/// $ChinaComment$应用服务接口 +/// $ChinaComment$搴旂敤鏈嶅姟鎺ュ彛 /// </summary> public interface I$EntityName$AppService : ICrudAppService<$EntityName$Dto, Guid, Get$EntityName$Input, $EntityName$CreateDto, $EntityName$UpdateDto> { /// <summary> - /// 克隆$ChinaComment$ + /// 鍏嬮殕$ChinaComment$ /// </summary> /// <param name="ids"></param> /// <returns></returns> - Task<List<$EntityName$Dto>> CloneAsync(IEnumerable<Guid> ids); + Task<List<$EntityName$Dto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); /// <summary> - /// 删除$ChinaComment$ + /// 鍒犻櫎$ChinaComment$ /// </summary> /// <param name="ids"></param> /// <returns></returns> - Task DeleteManyAsync(IEnumerable<Guid> ids); + Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); /// <summary> - /// 调整排序$ChinaComment$ + /// 鐗╃悊鍒犻櫎$ChinaComment$ + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); + + + /// <summary> + /// 鎵归噺鐗╃悊鍒犻櫎$ChinaComment$锛堢洿鎺ュ垹闄わ紝涓嶈蒋鍒犻櫎锛� + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); + + /// <summary> + /// 璋冩暣鎺掑簭$ChinaComment$ /// </summary> /// <param name="id"></param> /// <param name="sort"></param> @@ -31,16 +51,35 @@ Task AdjustSortAsync(Guid id, int sort); /// <summary> - /// 导入$ChinaComment$ + /// 瀵煎叆$ChinaComment$ /// </summary> /// <param name="input"></param> /// <returns></returns> - Task ImportAsync($EntityName$sImportModel input); + Task ImportAsync($EntityName$sImportModel input, MyCurrentUser myCurrentUser); /// <summary> - /// 导出$ChinaComment$ + /// 瀵煎嚭$ChinaComment$ /// </summary> /// <param name="input"></param> /// <returns></returns> Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(Get$EntityName$Input input); + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇$ChinaComment$鍒楄〃 + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task<List<$EntityName$>> GetListByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, CancellationToken cancellationToken = default); + + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜$ChinaComment$ + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + Task<$EntityName$> GetSingleByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Controller\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Controller\346\250\241\346\235\277.txt" index 20a3e30..2bec172 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Controller\346\250\241\346\235\277.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Controller\346\250\241\346\235\277.txt" @@ -1,5 +1,6 @@ using Ao.Lang; using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; +using CMS.Framework.AspNetCore.Users; using CMS.Plugin.$NameSpacePath$.Application.Contracts.Dtos.$EntityName$; using CMS.Plugin.$NameSpacePath$.Application.Contracts.Services; using Microsoft.AspNetCore.Authorization; @@ -9,6 +10,7 @@ using System.Reflection; using Volo.Abp; using Volo.Abp.Application.Dtos; +using CmsQueryExtensions.Entitys; namespace CMS.Plugin.$NameSpacePath$.Controller { @@ -24,20 +26,22 @@ public class $EntityName$Controller : ControllerBase { private readonly I$EntityName$AppService _$EntityInstanceName$AppService; + private readonly ICurrentUser _currentUser; /// <summary> /// Initializes a new instance of the <see cref="$EntityName$Controller"/> class. /// </summary> /// <param name="$EntityInstanceName$AppService">The $EntityInstanceName$ application service.</param> - public $EntityName$Controller(I$EntityName$AppService $EntityInstanceName$AppService) + public $EntityName$Controller(I$EntityName$AppService $EntityInstanceName$AppService, ICurrentUser currentUser) { _$EntityInstanceName$AppService = $EntityInstanceName$AppService; + _currentUser = currentUser; } /// <summary> /// 获取$ChinaComment$ /// </summary> - /// <param name="id">标识符.</param> + /// <param name="id">主键ID</param> /// <returns></returns> [HttpGet] [Route("{id}")] @@ -49,7 +53,7 @@ /// <summary> /// 分页获取$ChinaComment$的列表. /// </summary> - /// <param name="input">输入.</param> + /// <param name="input">查询参数</param> /// <returns></returns> [HttpGet] [Route("Page")] @@ -61,71 +65,90 @@ /// <summary> /// 创建$ChinaComment$ /// </summary> - /// <param name="input">输入.</param> + /// <param name="input">创建参数</param> /// <returns></returns> //[Authorize] [HttpPost] public virtual Task<$EntityName$Dto> CreateAsync($EntityName$CreateDto input) { + input.CreatorName = _currentUser.UserAccount;//创建人 return _$EntityInstanceName$AppService.CreateAsync(input); } /// <summary> /// 更新$ChinaComment$ /// </summary> - /// <param name="id">标识符.</param> - /// <param name="input">输入.</param> + /// <param name="id">主键ID</param> + /// <param name="input">更新参数</param> /// <returns></returns> //[Authorize] [HttpPut] [Route("{id}")] public virtual Task<$EntityName$Dto> UpdateAsync(Guid id, $EntityName$UpdateDto input) { + input.LastModifierName = _currentUser.UserAccount;//修改人 return _$EntityInstanceName$AppService.UpdateAsync(id, input); } /// <summary> /// 克隆$ChinaComment$ /// </summary> - /// <param name="ids">Id集合.</param> + /// <param name="ids">Id集合</param> /// <returns></returns> //[Authorize] [HttpPost] [Route("Clone")] public virtual Task<List<$EntityName$Dto>> CloneAsync([FromBody] IEnumerable<Guid> ids) { - return _$EntityInstanceName$AppService.CloneAsync(ids); + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + return _$EntityInstanceName$AppService.CloneAsync(ids, myCurrentUser); } /// <summary> /// 删除$ChinaComment$ /// </summary> - /// <param name="id">标识符.</param> + /// <param name="id">主键ID</param> /// <returns></returns> //[Authorize] [HttpDelete] [Route("{id}")] public virtual Task DeleteAsync(Guid id) { - return _$EntityInstanceName$AppService.DeleteAsync(id); + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//逻辑删除 + return _wmsMaterialAppService.DeletePermanentlyAsync(id, myCurrentUser);//物理删除 } /// <summary> /// 批量删除$ChinaComment$ /// </summary> - /// <param name="ids">The ids.</param> + /// <param name="ids">主键ID集合</param> /// <returns></returns> //[Authorize] [HttpDelete] public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) { - return _$EntityInstanceName$AppService.DeleteManyAsync(ids); + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//逻辑删除 + return _wmsMaterialAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//物理删除 } /// <summary> /// 调整排序$ChinaComment$ /// </summary> - /// <param name="id">标识符.</param> + /// <param name="id">主键ID</param> /// <returns></returns> [HttpPut] [Route("{id}/AdjustSort/{sort}")] @@ -155,10 +178,15 @@ throw new UserFriendlyException("请检查导入的表格"); } + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; await _$EntityInstanceName$AppService.ImportAsync(new $EntityName$sImportModel { $EntityName$s = $EntityInstanceName$Rows, - }); + },myCurrentUser); return Ok(); } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Domain/IRepository\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Domain/IRepository\346\250\241\346\235\277.txt" index 9ec6318..bf1f6f9 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Domain/IRepository\346\250\241\346\235\277.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Domain/IRepository\346\250\241\346\235\277.txt" @@ -1,16 +1,16 @@ -using CmsQueryExtensions.Extension; +锘縰sing CmsQueryExtensions.Extension; using System.Linq.Expressions; using Volo.Abp.Domain.Repositories; namespace CMS.Plugin.$NameSpacePath$.Domain.$EntityName$; /// <summary> -/// $ChinaComment$仓储 +/// $ChinaComment$浠撳偍 /// </summary> public interface I$EntityName$Repository : IBasicRepository<$EntityName$, Guid> { /// <summary> - /// 按照名称查找$ChinaComment$ + /// 鎸夌収鍚嶇О鏌ユ壘$ChinaComment$ /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> @@ -18,7 +18,7 @@ Task<$EntityName$> FindByNameAsync(string name, CancellationToken cancellationToken = default); /// <summary> - /// 验证名称是否存在$ChinaComment$ + /// 楠岃瘉鍚嶇О鏄惁瀛樺湪$ChinaComment$ /// </summary> /// <param name="name"></param> /// <param name="id"></param> @@ -26,13 +26,13 @@ Task<bool> NameExistAsync(string name, Guid? id = null); /// <summary> - /// 获取最大排序$ChinaComment$ + /// 鑾峰彇鏈�澶ф帓搴�$ChinaComment$ /// </summary> /// <returns></returns> Task<int> GetMaxSortAsync(); /// <summary> - /// 获取分页列表$ChinaComment$ + /// 鑾峰彇鍒嗛〉鍒楄〃$ChinaComment$ /// </summary> /// <param name="whereConditions"></param> /// <param name="sorting"></param> @@ -44,10 +44,45 @@ Task<List<$EntityName$>> GetListAsync(FunReturnResultModel<Expression<Func<$EntityName$, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); /// <summary> - /// 获取总数$ChinaComment$ + /// 鑾峰彇鎬绘暟$ChinaComment$ /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<$EntityName$, bool>>> whereConditions, CancellationToken cancellationToken = default); + + /// <summary> + /// 鐗╃悊鍒犻櫎$ChinaComment$ + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default); + + + /// <summary> + /// 鎵归噺鐗╃悊鍒犻櫎$ChinaComment$锛堢洿鎺ュ垹闄わ紝涓嶈蒋鍒犻櫎锛� + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default); + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇$ChinaComment$鍒楄〃 + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task<List<$EntityName$>> GetListByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, CancellationToken cancellationToken = default); + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜$ChinaComment$ + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + Task<$EntityName$> GetSingleByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/CreateDto\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/CreateDto\346\250\241\346\235\277.txt" index c5f75e8..a5bab12 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/CreateDto\346\250\241\346\235\277.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/CreateDto\346\250\241\346\235\277.txt" @@ -14,4 +14,9 @@ /// 是否禁用 /// </summary> public bool? IsDisabled { get; set; } = false; + + /// <summary> + /// 创建人 + /// </summary> + public string CreatorName { get; set; } } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/UpdateDto\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/UpdateDto\346\250\241\346\235\277.txt" index 9e3ef76..43b29af 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/UpdateDto\346\250\241\346\235\277.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Entity/UpdateDto\346\250\241\346\235\277.txt" @@ -10,4 +10,9 @@ /// 并发戳 /// </summary> public string ConcurrencyStamp { get; set; } + + /// <summary> + /// 修改人 + /// </summary> + public string LastModifierName { get; set; } } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/EntityFrameworkCore/EfCoreRepository\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/EntityFrameworkCore/EfCoreRepository\346\250\241\346\235\277.txt" index f988f2f..39ea7e4 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/EntityFrameworkCore/EfCoreRepository\346\250\241\346\235\277.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/EntityFrameworkCore/EfCoreRepository\346\250\241\346\235\277.txt" @@ -1,9 +1,10 @@ -using CMS.Plugin.$NameSpacePath$.Domain.$EntityName$; +锘縰sing CMS.Plugin.$NameSpacePath$.Domain.$EntityName$; using CMS.Plugin.$NameSpacePath$.EntityFrameworkCore.Extensions; using CmsQueryExtensions.Extension; using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; using System.Linq.Expressions; +using Volo.Abp; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -11,7 +12,7 @@ namespace CMS.Plugin.$NameSpacePath$.EntityFrameworkCore.Repositories; /// <summary> -/// $ChinaComment$仓储实现 +/// $ChinaComment$浠撳偍瀹炵幇 /// </summary> public class EfCore$EntityName$Repository : EfCoreRepository<ICMSPluginDbContext, $EntityName$, Guid>, I$EntityName$Repository { @@ -25,7 +26,7 @@ } /// <summary> - /// 按照名称查找$ChinaComment$ + /// 鎸夌収鍚嶇О鏌ユ壘$ChinaComment$ /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> @@ -40,9 +41,9 @@ } /// <summary> - /// 验证名称是否存在$ChinaComment$ + /// 楠岃瘉鍚嶇О鏄惁瀛樺湪$ChinaComment$ /// </summary> - /// <param name="name">校验值</param> + /// <param name="name">鏍¢獙鍊�</param> /// <param name="id"></param> /// <returns></returns> public async Task<bool> NameExistAsync(string name, Guid? id = null) @@ -51,7 +52,7 @@ } /// <summary> - /// 获取最大排序$ChinaComment$ + /// 鑾峰彇鏈�澶ф帓搴�$ChinaComment$ /// </summary> /// <returns></returns> public async Task<int> GetMaxSortAsync() @@ -69,7 +70,7 @@ } /// <summary> - /// 获取分页列表$ChinaComment$ + /// 鑾峰彇鍒嗛〉鍒楄〃$ChinaComment$ /// </summary> /// <param name="whereConditions"></param> /// <param name="sorting"></param> @@ -90,7 +91,7 @@ } /// <summary> - /// 获取总数$ChinaComment$ + /// 鑾峰彇鎬绘暟$ChinaComment$ /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> @@ -110,4 +111,105 @@ return (await GetQueryableAsync()) .Where(x => !x.IsDeleted).IncludeDetails(); } + + /// <summary> + /// 鐗╃悊鍒犻櫎$ChinaComment$ + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default) + { + var entity = await (await GetDbSetAsync()) + .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken)); + + if (entity == null) + { + throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof($EntityName$), id); + } + + // 2. 鑾峰彇 DbContext 骞舵墽琛屽垹闄� + var dbContext = await GetDbContextAsync(); + + // 鐩存帴鎵ц SQL 鍒犻櫎 + var sql = $"DELETE FROM $TableName$ WHERE Id ='{entity.Id.ToString()}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); + } + + /// <summary> + /// 鎵归噺鐗╃悊鍒犻櫎$ChinaComment$锛堢洿鎺ュ垹闄わ紝涓嶈蒋鍒犻櫎锛� + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default) + { + // 1. 鏌ヨ绗﹀悎鏉′欢鐨勫疄浣擄紙鏈蒋鍒犻櫎鐨勮褰曪級 + var entities = await (await GetDbSetAsync()) + .Where(x => ids.Contains(x.Id) && !x.IsDeleted) + .ToListAsync(GetCancellationToken(cancellationToken)); + + if (!entities.Any()) + { + // 濡傛灉娌℃湁闇�瑕佸垹闄ょ殑璁板綍锛岀洿鎺ヨ繑鍥烇紙閬垮厤涓嶅繀瑕佺殑鏁版嵁搴撴搷浣滐級 + return; + } + + // 2. 鑾峰彇 DbContext 骞舵墽琛屾壒閲忓垹闄� + var dbContext = await GetDbContextAsync(); + + var idsToDelete = entities.Select(e => e.Id).ToList(); + + // 鐩存帴鎵ц SQL 鍒犻櫎 + var sql = $"DELETE FROM $TableName$ WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})"; + await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); + } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇$ChinaComment$鍒楄〃 + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<List<$EntityName$>> GetListByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .WhereIf(whereConditions != null, whereConditions) + .Where(x => !x.IsDeleted) + .OrderByDescending(x => x.$OrderBy$) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜$ChinaComment$ + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<$EntityName$> GetSingleByFilterAsync(Expression<Func<$EntityName$, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) + { + if (is鈥婱ultipleThrowException) + { + var entitys = await (await GetDbSetAsync()) + .WhereIf(whereConditions != null, whereConditions) + .Where(x => !x.IsDeleted) + .OrderByDescending(x => x.$OrderBy$) + .ToListAsync(GetCancellationToken(cancellationToken)); + if (entitys?.Count > 1) + { + throw new UserFriendlyException("鏌ヨ鍒板鏉¤褰�"); + } + return entitys?.FirstOrDefault(); + } + else + { + return await (await GetDbSetAsync()) + .WhereIf(whereConditions != null, whereConditions) + .Where(x => !x.IsDeleted) + .OrderByDescending(x => x.$OrderBy$) + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + } + } } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Utility/CommonHelper.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Utility/CommonHelper.cs" index d845681..c2e293b 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Utility/CommonHelper.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Utility/CommonHelper.cs" @@ -72,6 +72,7 @@ str = str.Replace("$EntityName$", param.EntityName);//瀹炰綋绫诲悕 str = str.Replace("$Modulelogo$", param.Modulelogo);//妯″潡绠�鍐� str = str.Replace("$EntityInstanceName$", param.EntityInstanceName);//瀹炰緥鍚� + str = str.Replace("$TableName$", param.TableName);//琛ㄥ悕 //濡傛灉涓虹┖锛岀郴缁熼粯璁ゆ墍鏈夊瓧绗︿覆鐨勫睍绀哄垪鏌ヨ var str_LikeQueryAttrs = param.LikeQueryAttrs; diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/\345\270\270\347\224\250.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/\345\270\270\347\224\250.txt" index fcfe59b..ac6e907 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/\345\270\270\347\224\250.txt" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/\345\270\270\347\224\250.txt" @@ -10,4 +10,9 @@ $EntityInstanceName$ -$PageMenuInstanceName$ \ No newline at end of file +$PageMenuInstanceName$ + + +$TableName$ + +$OrderBy$ \ No newline at end of file diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs" index e0bd364..b9a795c 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs" @@ -13,10 +13,10 @@ /// <summary> /// 鏄惁绂佺敤 /// </summary> - public bool? IsDisabled { get; set; } = false; - - /// <summary> - /// 鍒涘缓浜� - /// </summary> - public string CreatorName { get; set; } + public bool? IsDisabled { get; set; } = false; + + /// <summary> + /// 鍒涘缓浜� + /// </summary> + public string CreatorName { get; set; } } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs" index 977a051..d75143d 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs" @@ -9,10 +9,10 @@ /// <summary> /// 骞跺彂鎴� /// </summary> - public string ConcurrencyStamp { get; set; } - - /// <summary> - /// 淇敼浜� - /// </summary> - public string LastModifierName { get; set; } + public string ConcurrencyStamp { get; set; } + + /// <summary> + /// 淇敼浜� + /// </summary> + public string LastModifierName { get; set; } } diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs" index 14494c6..21a4b8d 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs" @@ -1,87 +1,85 @@ -using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; -using Volo.Abp.Application.Services; -using CmsQueryExtensions.Entitys; -using System.Linq.Expressions; -using CMS.Plugin.HIAWms.Domain.WmsMaterial; - - -namespace CMS.Plugin.HIAWms.Application.Contracts.Services; - +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; +using Volo.Abp.Application.Services; +using CmsQueryExtensions.Entitys; +using System.Linq.Expressions; +using CMS.Plugin.HIAWms.Domain.WmsMaterial; + +namespace CMS.Plugin.HIAWms.Application.Contracts.Services; + /// <summary> /// 鐗╂枡鍩虹淇℃伅琛ㄥ簲鐢ㄦ湇鍔℃帴鍙� /// </summary> -public interface IWmsMaterialAppService : ICrudAppService<WmsMaterialDto, Guid, GetWmsMaterialInput, WmsMaterialCreateDto, WmsMaterialUpdateDto> -{ +public interface IWmsMaterialAppService : ICrudAppService<WmsMaterialDto, Guid, GetWmsMaterialInput, WmsMaterialCreateDto, WmsMaterialUpdateDto> +{ /// <summary> /// 鍏嬮殕鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="ids"></param> /// <returns></returns> - Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); - + Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); + /// <summary> /// 鍒犻櫎鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="ids"></param> /// <returns></returns> - Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); - - /// <summary> - /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="id">鐗╂枡ID</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); - - - /// <summary> - /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 - /// </summary> - /// <param name="ids">瑕佸垹闄ょ殑鐗╂枡ID鍒楄〃</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); - + Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); + + /// <summary> + /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); + + + /// <summary> + /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); + /// <summary> /// 璋冩暣鎺掑簭鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="id"></param> /// <param name="sort"></param> /// <returns></returns> - Task AdjustSortAsync(Guid id, int sort); - + Task AdjustSortAsync(Guid id, int sort); + /// <summary> /// 瀵煎叆鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="input"></param> /// <returns></returns> - Task ImportAsync(WmsMaterialsImportModel input, MyCurrentUser myCurrentUser); - + Task ImportAsync(WmsMaterialsImportModel input, MyCurrentUser myCurrentUser); + /// <summary> /// 瀵煎嚭鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="input"></param> /// <returns></returns> - Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInput input); - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default); - - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - /// <exception cref="UserFriendlyException"></exception> - Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); - -} + Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInput input); + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default); + + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); +} diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs" index 05035a2..d38fece 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs" @@ -1,132 +1,129 @@ -using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; -using CMS.Plugin.HIAWms.Application.Contracts.Services; -using CMS.Plugin.HIAWms.Domain.Shared; -using CmsQueryExtensions; -using CMS.Plugin.HIAWms.Domain.WmsMaterial; -using CmsQueryExtensions.Extension; -using System.Linq.Expressions; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Data; -using Volo.Abp.ObjectExtending; -using Volo.Abp.ObjectMapping; -using CmsQueryExtensions.Entitys; - - -namespace CMS.Plugin.HIAWms.Application.Implements; - +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; +using CMS.Plugin.HIAWms.Application.Contracts.Services; +using CMS.Plugin.HIAWms.Domain.Shared; +using CmsQueryExtensions; +using CMS.Plugin.HIAWms.Domain.WmsMaterial; +using CmsQueryExtensions.Extension; +using System.Linq.Expressions; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; +using Volo.Abp.ObjectMapping; +using CmsQueryExtensions.Entitys; + +namespace CMS.Plugin.HIAWms.Application.Implements; + /// <summary> /// 鐗╂枡鍩虹淇℃伅琛ㄥ簲鐢ㄦ湇鍔� /// </summary> -public class WmsMaterialAppService : CMSPluginAppService, IWmsMaterialAppService -{ - private readonly IWmsMaterialRepository wmsMaterialRepository; - +public class WmsMaterialAppService : CMSPluginAppService, IWmsMaterialAppService +{ + private readonly IWmsMaterialRepository _wmsMaterialRepository; + /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialAppService"/> class. /// </summary> /// <param name="WmsMaterialRepository">The task job repository.</param> - public WmsMaterialAppService(IWmsMaterialRepository _WmsMaterialRepository) - { - wmsMaterialRepository = _WmsMaterialRepository; - } - + public WmsMaterialAppService(IWmsMaterialRepository wmsMaterialRepository) + { + _wmsMaterialRepository = wmsMaterialRepository; + } + /// <summary> /// 鑾峰彇鎸囧畾鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="id"></param> /// <returns></returns> - public virtual async Task<WmsMaterialDto> GetAsync(Guid id) - { - return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(await wmsMaterialRepository.GetAsync(id)); - } - + public virtual async Task<WmsMaterialDto> GetAsync(Guid id) + { + return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(await _wmsMaterialRepository.GetAsync(id)); + } + /// <summary> /// 鍒嗛〉鑾峰彇鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="input"></param> /// <returns></returns> - public virtual async Task<PagedResultDto<WmsMaterialDto>> GetListAsync(GetWmsMaterialInput input) - { - Check.NotNull(input, nameof(input)); - - if (input.Sorting.IsNullOrWhiteSpace()) - { - input.Sorting = nameof(WmsMaterial.Sort); - } - + public virtual async Task<PagedResultDto<WmsMaterialDto>> GetListAsync(GetWmsMaterialInput input) + { + Check.NotNull(input, nameof(input)); + + if (input.Sorting.IsNullOrWhiteSpace()) + { + input.Sorting = nameof(WmsMaterial.Sort); + } + #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� - + //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� - var whereConditions = DynamicGetQueryParams(input); - - #endregion - - var count = await wmsMaterialRepository.GetCountAsync(whereConditions); - var list = await wmsMaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); - - return new PagedResultDto<WmsMaterialDto>(count, ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list)); - } - + var whereConditions = DynamicGetQueryParams(input); + + #endregion + + var count = await _wmsMaterialRepository.GetCountAsync(whereConditions); + var list = await _wmsMaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); + + return new PagedResultDto<WmsMaterialDto>(count, ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list)); + } + /// <summary> /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� /// </summary> /// <param name="input">杈撳叆鍙傛暟</param> /// <returns></returns> - private FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> DynamicGetQueryParams(GetWmsMaterialInput input) - { + private FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> DynamicGetQueryParams(GetWmsMaterialInput input) + { //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� - var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterial, GetWmsMaterialInput>(input); - if (!whereConditions.IsSuccess) - { - throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg); - } - + var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterial, GetWmsMaterialInput>(input); + if (!whereConditions.IsSuccess) + { + throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg); + } + //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠� - Expression<Func<WmsMaterial, bool>> extendExpression = a => a.IsDeleted == false; + Expression<Func<WmsMaterial, bool>> extendExpression = a => a.IsDeleted == false; // 浣跨敤 System.Linq.PredicateBuilder 鐨� And - var pres = (System.Linq.Expressions.Expression<Func<WmsMaterial, bool>>)(whereConditions.data); - whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); - - return whereConditions; - } - - - + var pres = (System.Linq.Expressions.Expression<Func<WmsMaterial, bool>>)(whereConditions.data); + whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); + + return whereConditions; + } + /// <summary> /// 鏂板缓鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public virtual async Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input) - { - await CheckCreateOrUpdateDtoAsync(input); - - var exist = await wmsMaterialRepository.NameExistAsync(input.MaterialCode); - if (exist) - { - throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); - } - - var maxSort = await wmsMaterialRepository.GetMaxSortAsync(); - var sort = input.Sort ?? maxSort; - - var insertObj = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input); - insertObj.Sort = sort; - input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); - - insertObj.CreatorName = input.CreatorName;//鍒涘缓浜� - await wmsMaterialRepository.InsertAsync(insertObj); - + public virtual async Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input) + { + await CheckCreateOrUpdateDtoAsync(input); + + var exist = await _wmsMaterialRepository.NameExistAsync(input.MaterialCode); + if (exist) + { + throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); + } + + var maxSort = await _wmsMaterialRepository.GetMaxSortAsync(); + var sort = input.Sort ?? maxSort; + + var insertObj = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input); + insertObj.Sort = sort; + input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); + + insertObj.CreatorName = input.CreatorName;//鍒涘缓浜� + await _wmsMaterialRepository.InsertAsync(insertObj); + //if (input.Sort.HasValue && insertObj.Sort != maxSort) //{ // await AdjustSortAsync(insertObj.Id, insertObj.Sort); //} - - return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(insertObj); - } - + + return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(insertObj); + } + /// <summary> /// 鏇存柊鐗╂枡鍩虹淇℃伅琛� /// </summary> @@ -134,21 +131,21 @@ /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public virtual async Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) - { - await CheckCreateOrUpdateDtoAsync(input); - - var updateObj = await wmsMaterialRepository.GetAsync(id); - var exist = await wmsMaterialRepository.NameExistAsync(input.MaterialCode, updateObj.Id); - if (exist) - { - throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); - } - - updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); - input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); - - updateObj.MaterialCode = input.MaterialCode; + public virtual async Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) + { + await CheckCreateOrUpdateDtoAsync(input); + + var updateObj = await _wmsMaterialRepository.GetAsync(id); + var exist = await _wmsMaterialRepository.NameExistAsync(input.MaterialCode, updateObj.Id); + if (exist) + { + throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); + } + + updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); + + updateObj.MaterialCode = input.MaterialCode; updateObj.IsValid = input.IsValid; updateObj.IsSelfMade = input.IsSelfMade; updateObj.Num = input.Num; @@ -170,320 +167,320 @@ updateObj.RedundantField2 = input.RedundantField2; updateObj.RedundantField3 = input.RedundantField3; updateObj.Remark = input.Remark; - - updateObj.LastModifierName = input.LastModifierName;//淇敼浜� - - await wmsMaterialRepository.UpdateAsync(updateObj); - - return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(updateObj); - } - + + + updateObj.LastModifierName = input.LastModifierName;//淇敼浜� + + await _wmsMaterialRepository.UpdateAsync(updateObj); + + return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(updateObj); + } + /// <summary> /// 鍏嬮殕鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="ids"></param> /// <returns></returns> - public async Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) - { + public async Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) + { //var wmsMaterials = new List<WmsMaterial>(); //if (ids != null) //{ - // var sort = await wmsMaterialRepository.GetMaxSortAsync(); + // var sort = await _wmsMaterialRepository.GetMaxSortAsync(); // foreach (var id in ids) // { - // var WmsMaterial = await wmsMaterialRepository.FindAsync(id); + // var WmsMaterial = await _wmsMaterialRepository.FindAsync(id); // if (WmsMaterial != null) // { // var name = WmsMaterial.Name + WmsMaterialConsts.CloneTag; // var notExist = false; // while (!notExist) // { - // var exist = await wmsMaterialRepository.NameExistAsync(name); + // var exist = await _wmsMaterialRepository.NameExistAsync(name); // if (exist || wmsMaterials.Any(x => x.Name == name)) // { // name += WmsMaterialConsts.CloneTag; // continue; // } - + // notExist = true; // } - - // //WmsMaterial = await wmsMaterialRepository.InsertAsync(WmsMaterial.Clone(GuidGenerator.Create(), name, sort++)); + + // //WmsMaterial = await _wmsMaterialRepository.InsertAsync(WmsMaterial.Clone(GuidGenerator.Create(), name, sort++)); // wmsMaterials.Add(WmsMaterial); // } // } //} - + //return ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(wmsMaterials); - return new List<WmsMaterialDto>(); - } - + return new List<WmsMaterialDto>(); + } + /// <summary> /// 鍒犻櫎鍗曚釜鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="id"></param> /// <returns></returns> - public virtual Task DeleteAsync(Guid id) - { - return wmsMaterialRepository.DeleteAsync(id); - } - + public virtual Task DeleteAsync(Guid id) + { + return _wmsMaterialRepository.DeleteAsync(id); + } + /// <summary> /// 鍒犻櫎澶氫釜鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="ids"></param> /// <returns></returns> - public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) - { - foreach (var id in ids) - { - await DeleteAsync(id); - } - } - - /// <summary> - /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="id">鐗╂枡ID</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) - { - wmsMaterialRepository.DeletePermanentlyAsync(id); - } - - /// <summary> - /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 - /// </summary> - /// <param name="ids">瑕佸垹闄ょ殑鐗╂枡ID鍒楄〃</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) - { - wmsMaterialRepository.BatchDeletePermanentlyAsync(ids); - } - + public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) + { + foreach (var id in ids) + { + await DeleteAsync(id); + } + } + + /// <summary> + /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) + { + _wmsMaterialRepository.DeletePermanentlyAsync(id); + } + + /// <summary> + /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) + { + _wmsMaterialRepository.BatchDeletePermanentlyAsync(ids); + } + /// <summary> /// 璋冩暣鎺掑簭鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="id"></param> /// <param name="sort"></param> /// <returns></returns> - public virtual async Task AdjustSortAsync(Guid id, int sort) - { - var list = await wmsMaterialRepository.GetListAsync(null, nameof(WmsMaterial.Sort)); - if (list != null && list.Any()) - { - var initSort = 1; - list.ForEach(x => x.AdjustSort(initSort++)); - var entity = list.FirstOrDefault(x => x.Id == id); - if (entity != null) - { - if (sort == 1) - { - list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); - } - else if (entity.Sort > sort) - { - list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); - list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); - } - else if (entity.Sort < sort) - { - list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); - list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); - } - - entity.AdjustSort(sort); - } - } - - await wmsMaterialRepository.UpdateManyAsync(list); - } - + public virtual async Task AdjustSortAsync(Guid id, int sort) + { + var list = await _wmsMaterialRepository.GetListAsync(null, nameof(WmsMaterial.Sort)); + if (list != null && list.Any()) + { + var initSort = 1; + list.ForEach(x => x.AdjustSort(initSort++)); + var entity = list.FirstOrDefault(x => x.Id == id); + if (entity != null) + { + if (sort == 1) + { + list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); + } + else if (entity.Sort > sort) + { + list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); + list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); + } + else if (entity.Sort < sort) + { + list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); + list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); + } + + entity.AdjustSort(sort); + } + } + + await _wmsMaterialRepository.UpdateManyAsync(list); + } + /// <summary> /// 瀵煎叆鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public async Task ImportAsync(WmsMaterialsImportModel input, MyCurrentUser myCurrentUser) - { - - Check.NotNull(input, nameof(input)); - - var wmsMaterialCreateDtos = new List<(int RowIndex, WmsMaterialCreateDto Item)>(); - var wmsMaterialUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialUpdateDto Item)>(); - var importItems = input.WmsMaterials; - - if (importItems != null && importItems.Any()) - { + public async Task ImportAsync(WmsMaterialsImportModel input, MyCurrentUser myCurrentUser) + { + Check.NotNull(input, nameof(input)); + + var wmsMaterialCreateDtos = new List<(int RowIndex, WmsMaterialCreateDto Item)>(); + var wmsMaterialUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialUpdateDto Item)>(); + var importItems = input.WmsMaterials; + + if (importItems != null && importItems.Any()) + { #region 瀵煎叆鏍¢獙 - + // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� - var duplicateWmsMaterials = importItems.GroupBy(x => x.MaterialCode).Where(x => x.Count() > 1).ToList(); - if (duplicateWmsMaterials?.Any() == true) - { - var duplicateWmsMaterialMsgs = duplicateWmsMaterials.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key} 鍚嶇О閲嶅"); - var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWmsMaterialMsgs)}锛岀粓姝㈠鍏�"; - throw new UserFriendlyException(errorMsg); - } - - #endregion - - foreach (var impItem in importItems) - { - if (impItem.MaterialCode.IsNullOrWhiteSpace()) - { - continue; - } - - if (impItem.MaterialCode.IsNullOrWhiteSpace()) - { - var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細WmsMaterial鍚嶇О涓嶈兘涓虹┖"; - throw new UserFriendlyException(errorMsg); - } - - var oldWmsMaterial = await wmsMaterialRepository.FindByNameAsync(impItem.MaterialCode); - if (oldWmsMaterial != null) - { - var wmsMaterialUpdateDto = new WmsMaterialUpdateDto - { + var duplicateWmsMaterials = importItems.GroupBy(x => x.MaterialCode).Where(x => x.Count() > 1).ToList(); + if (duplicateWmsMaterials?.Any() == true) + { + var duplicateWmsMaterialMsgs = duplicateWmsMaterials.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key} 鍚嶇О閲嶅"); + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWmsMaterialMsgs)}锛岀粓姝㈠鍏�"; + throw new UserFriendlyException(errorMsg); + } + + #endregion + + foreach (var impItem in importItems) + { + if (impItem.MaterialCode.IsNullOrWhiteSpace()) + { + continue; + } + + if (impItem.MaterialCode.IsNullOrWhiteSpace()) + { + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細WmsMaterial鍚嶇О涓嶈兘涓虹┖"; + throw new UserFriendlyException(errorMsg); + } + + var oldWmsMaterial = await _wmsMaterialRepository.FindByNameAsync(impItem.MaterialCode); + if (oldWmsMaterial != null) + { + var wmsMaterialUpdateDto = new WmsMaterialUpdateDto + { MaterialCode = impItem.MaterialCode, - IsValid = impItem.IsValid, - IsSelfMade = impItem.IsSelfMade, - Num = impItem.Num, - SelfNum = impItem.SelfNum, - MaterialName = impItem.MaterialName, - NullLength = impItem.NullLength, - PurchaseType = impItem.PurchaseType, - MaterialType = impItem.MaterialType, - PrimaryUnit = impItem.PrimaryUnit, - Standard = impItem.Standard, - OuterDiameter = impItem.OuterDiameter, - WallThickness = impItem.WallThickness, - MaterialQuality = impItem.MaterialQuality, - Length = impItem.Length, - IsMainBranch = impItem.IsMainBranch, - Factory = impItem.Factory, - Certification = impItem.Certification, - RedundantField1 = impItem.RedundantField1, - RedundantField2 = impItem.RedundantField2, - RedundantField3 = impItem.RedundantField3, - Remark = impItem.Remark, - - }; - - wmsMaterialUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsMaterialUpdateDto)); - } - else - { - var wmsMaterialCreateDto = new WmsMaterialCreateDto - { +IsValid = impItem.IsValid, +IsSelfMade = impItem.IsSelfMade, +Num = impItem.Num, +SelfNum = impItem.SelfNum, +MaterialName = impItem.MaterialName, +NullLength = impItem.NullLength, +PurchaseType = impItem.PurchaseType, +MaterialType = impItem.MaterialType, +PrimaryUnit = impItem.PrimaryUnit, +Standard = impItem.Standard, +OuterDiameter = impItem.OuterDiameter, +WallThickness = impItem.WallThickness, +MaterialQuality = impItem.MaterialQuality, +Length = impItem.Length, +IsMainBranch = impItem.IsMainBranch, +Factory = impItem.Factory, +Certification = impItem.Certification, +RedundantField1 = impItem.RedundantField1, +RedundantField2 = impItem.RedundantField2, +RedundantField3 = impItem.RedundantField3, +Remark = impItem.Remark, + + }; + + wmsMaterialUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsMaterialUpdateDto)); + } + else + { + var wmsMaterialCreateDto = new WmsMaterialCreateDto + { MaterialCode = impItem.MaterialCode, - IsValid = impItem.IsValid, - IsSelfMade = impItem.IsSelfMade, - Num = impItem.Num, - SelfNum = impItem.SelfNum, - MaterialName = impItem.MaterialName, - NullLength = impItem.NullLength, - PurchaseType = impItem.PurchaseType, - MaterialType = impItem.MaterialType, - PrimaryUnit = impItem.PrimaryUnit, - Standard = impItem.Standard, - OuterDiameter = impItem.OuterDiameter, - WallThickness = impItem.WallThickness, - MaterialQuality = impItem.MaterialQuality, - Length = impItem.Length, - IsMainBranch = impItem.IsMainBranch, - Factory = impItem.Factory, - Certification = impItem.Certification, - RedundantField1 = impItem.RedundantField1, - RedundantField2 = impItem.RedundantField2, - RedundantField3 = impItem.RedundantField3, - Remark = impItem.Remark, - - }; - - wmsMaterialCreateDtos.Add((impItem.RowIndex, wmsMaterialCreateDto)); - } - } - } - +IsValid = impItem.IsValid, +IsSelfMade = impItem.IsSelfMade, +Num = impItem.Num, +SelfNum = impItem.SelfNum, +MaterialName = impItem.MaterialName, +NullLength = impItem.NullLength, +PurchaseType = impItem.PurchaseType, +MaterialType = impItem.MaterialType, +PrimaryUnit = impItem.PrimaryUnit, +Standard = impItem.Standard, +OuterDiameter = impItem.OuterDiameter, +WallThickness = impItem.WallThickness, +MaterialQuality = impItem.MaterialQuality, +Length = impItem.Length, +IsMainBranch = impItem.IsMainBranch, +Factory = impItem.Factory, +Certification = impItem.Certification, +RedundantField1 = impItem.RedundantField1, +RedundantField2 = impItem.RedundantField2, +RedundantField3 = impItem.RedundantField3, +Remark = impItem.Remark, + + }; + + wmsMaterialCreateDtos.Add((impItem.RowIndex, wmsMaterialCreateDto)); + } + } + } + // 鏂板 - foreach (var wmsMaterialDto in wmsMaterialCreateDtos) - { - try - { - wmsMaterialDto.Item.CreatorName = myCurrentUser.UserAccount;//鍒涘缓浜� - await CreateAsync(wmsMaterialDto.Item); - } - catch (Exception e) - { - var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsMaterialDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; - throw new UserFriendlyException(errorMsg); - } - } - + foreach (var wmsMaterialDto in wmsMaterialCreateDtos) + { + try + { + wmsMaterialDto.Item.CreatorName = myCurrentUser.UserAccount;//鍒涘缓浜� + await CreateAsync(wmsMaterialDto.Item); + } + catch (Exception e) + { + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsMaterialDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; + throw new UserFriendlyException(errorMsg); + } + } + // 鏇存柊 - foreach (var wmsMaterialDto in wmsMaterialUpdateDtos) - { - try - { - wmsMaterialDto.Item.LastModifierName = myCurrentUser.UserAccount;//淇敼浜� - await UpdateAsync(wmsMaterialDto.Id, wmsMaterialDto.Item); - } - catch (Exception e) - { - var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsMaterialDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; - throw new UserFriendlyException(errorMsg); - } - } - } - + foreach (var wmsMaterialDto in wmsMaterialUpdateDtos) + { + try + { + wmsMaterialDto.Item.LastModifierName = myCurrentUser.UserAccount;//淇敼浜� + await UpdateAsync(wmsMaterialDto.Id, wmsMaterialDto.Item); + } + catch (Exception e) + { + var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsMaterialDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; + throw new UserFriendlyException(errorMsg); + } + } + } + /// <summary> /// 瀵煎嚭鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="input"></param> /// <returns></returns> - public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInput input) - { - Check.NotNull(input, nameof(input)); - - if (input.Sorting.IsNullOrWhiteSpace()) - { - input.Sorting = nameof(WmsMaterial.Sort); - } - + public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInput input) + { + Check.NotNull(input, nameof(input)); + + if (input.Sorting.IsNullOrWhiteSpace()) + { + input.Sorting = nameof(WmsMaterial.Sort); + } + #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� - + //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠� - var whereConditions = DynamicGetQueryParams(input); - - #endregion - - - var list = await wmsMaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); - var result = ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list); - - var sheets = new Dictionary<string, object> - { - ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result), - }; - - var fileName = "鐗╂枡淇℃伅"; - return (sheets, fileName); - } - + var whereConditions = DynamicGetQueryParams(input); + + #endregion + + + var list = await _wmsMaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); + var result = ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list); + + var sheets = new Dictionary<string, object> + { + ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result), + }; + + var fileName = "鐗╂枡淇℃伅"; + return (sheets, fileName); + } + /// <summary> /// 鏍¢獙鐗╂枡鍩虹淇℃伅琛紝褰撴柊寤烘垨鏇存柊鏃� /// </summary> /// <param name="input"></param> /// <returns></returns> - protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialCreateOrUpdateDtoBase input) - { - Check.NotNull(input, nameof(input)); - Check.NotNullOrWhiteSpace(input.MaterialCode, "鐗╂枡缂栫爜锛堝敮涓�鏍囪瘑锛�", 64); + protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialCreateOrUpdateDtoBase input) + { + Check.NotNull(input, nameof(input)); + Check.NotNullOrWhiteSpace(input.MaterialCode, "鐗╂枡缂栫爜锛堝敮涓�鏍囪瘑锛�", 64); Check.NotNull(input.IsValid, "鏄惁鏈夋晥鐗╂枡"); Check.NotNull(input.Num, "鏁伴噺"); Check.NotNullOrWhiteSpace(input.MaterialName, "鐗╂枡鍚嶇О", 128); @@ -493,31 +490,31 @@ Check.NotNull(input.WallThickness, "澹佸帤锛堝崟浣嶏細mm锛�"); Check.NotNull(input.Length, "闀垮害锛堝崟浣嶏細m锛�"); Check.NotNull(input.IsMainBranch, "鏄惁涓轰富鏀"); - - return Task.CompletedTask; - } - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - public async Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default) - { - return await wmsMaterialRepository.GetListByFilterAsync(whereConditions); - } - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - /// <exception cref="UserFriendlyException"></exception> - public async Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) - { - return await wmsMaterialRepository.GetSingleByFilterAsync(whereConditions, is鈥婱ultipleThrowException); - } -} + + return Task.CompletedTask; + } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default) + { + return await _wmsMaterialRepository.GetListByFilterAsync(whereConditions); + } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) + { + return await _wmsMaterialRepository.GetSingleByFilterAsync(whereConditions, is鈥婱ultipleThrowException); + } +} diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs" index 179c018..387b0bc 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs" @@ -1,37 +1,36 @@ -using CmsQueryExtensions.Extension; -using System.Linq.Expressions; -using Volo.Abp; -using Volo.Abp.Domain.Repositories; - -namespace CMS.Plugin.HIAWms.Domain.WmsMaterial; - +using CmsQueryExtensions.Extension; +using System.Linq.Expressions; +using Volo.Abp.Domain.Repositories; + +namespace CMS.Plugin.HIAWms.Domain.WmsMaterial; + /// <summary> /// 鐗╂枡鍩虹淇℃伅琛ㄤ粨鍌� /// </summary> -public interface IWmsMaterialRepository : IBasicRepository<WmsMaterial, Guid> -{ +public interface IWmsMaterialRepository : IBasicRepository<WmsMaterial, Guid> +{ /// <summary> /// 鎸夌収鍚嶇О鏌ユ壘鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default); - + Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default); + /// <summary> /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="name"></param> /// <param name="id"></param> /// <returns></returns> - Task<bool> NameExistAsync(string name, Guid? id = null); - + Task<bool> NameExistAsync(string name, Guid? id = null); + /// <summary> /// 鑾峰彇鏈�澶ф帓搴忕墿鏂欏熀纭�淇℃伅琛� /// </summary> /// <returns></returns> - Task<int> GetMaxSortAsync(); - + Task<int> GetMaxSortAsync(); + /// <summary> /// 鑾峰彇鍒嗛〉鍒楄〃鐗╂枡鍩虹淇℃伅琛� /// </summary> @@ -42,50 +41,48 @@ /// <param name="includeDetails"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); - + Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); + /// <summary> /// 鑾峰彇鎬绘暟鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default); - - /// <summary> - /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="id">鐗╂枡ID</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default); - - - /// <summary> - /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 - /// </summary> - /// <param name="ids">瑕佸垹闄ょ殑鐗╂枡ID鍒楄〃</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default); - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default); - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - /// <exception cref="UserFriendlyException"></exception> - Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); - - -} + Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default); + + /// <summary> + /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default); + + + /// <summary> + /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default); + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default); + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); +} diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs" index 55d4f80..5030cc9 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs" @@ -1,75 +1,74 @@ -using CMS.Plugin.HIAWms.Domain.WmsMaterial; -using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; -using CmsQueryExtensions.Extension; -using Microsoft.EntityFrameworkCore; -using RestSharp; -using System.Linq.Dynamic.Core; -using System.Linq.Expressions; -using Volo.Abp; -using Volo.Abp.Domain.Repositories.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore; - - -namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories; - +using CMS.Plugin.HIAWms.Domain.WmsMaterial; +using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions; +using CmsQueryExtensions.Extension; +using Microsoft.EntityFrameworkCore; +using System.Linq.Dynamic.Core; +using System.Linq.Expressions; +using Volo.Abp; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + + +namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories; + /// <summary> /// 鐗╂枡鍩虹淇℃伅琛ㄤ粨鍌ㄥ疄鐜� /// </summary> -public class EfCoreWmsMaterialRepository : EfCoreRepository<ICMSPluginDbContext, WmsMaterial, Guid>, IWmsMaterialRepository -{ +public class EfCoreWmsMaterialRepository : EfCoreRepository<ICMSPluginDbContext, WmsMaterial, Guid>, IWmsMaterialRepository +{ /// <summary> /// Initializes a new instance of the <see cref="EfCoreWmsMaterialRepository"/> class. /// </summary> /// <param name="dbContextProvider">The database context provider.</param> - public EfCoreWmsMaterialRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) - : base(dbContextProvider) - { - } - + public EfCoreWmsMaterialRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) + : base(dbContextProvider) + { + } + /// <summary> /// 鎸夌収鍚嶇О鏌ユ壘鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public virtual async Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()) - .IncludeDetails() - .Where(x => !x.IsDeleted) - .OrderByDescending(x => x.CreationTime) - .FirstOrDefaultAsync(t => t.MaterialCode == name, GetCancellationToken(cancellationToken)); - } - + public virtual async Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .IncludeDetails() + .Where(x => !x.IsDeleted) + .OrderByDescending(x=>x.CreationTime) + .FirstOrDefaultAsync(t => t.MaterialCode == name, GetCancellationToken(cancellationToken)); + } + /// <summary> /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="name">鏍¢獙鍊�</param> /// <param name="id"></param> /// <returns></returns> - public async Task<bool> NameExistAsync(string name, Guid? id = null) - { - return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == name); - } - + public async Task<bool> NameExistAsync(string name, Guid? id = null) + { + return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == name); + } + /// <summary> /// 鑾峰彇鏈�澶ф帓搴忕墿鏂欏熀纭�淇℃伅琛� /// </summary> /// <returns></returns> - public async Task<int> GetMaxSortAsync() - { - var hasAny = await (await GetQueryableAsync()) - .Where(x => !x.IsDeleted).AnyAsync(); - if (!hasAny) - { - return 1; - } - - var sort = await (await GetQueryableAsync()) - .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); - return sort + 1; - } - + public async Task<int> GetMaxSortAsync() + { + var hasAny = await (await GetQueryableAsync()) + .Where(x => !x.IsDeleted).AnyAsync(); + if (!hasAny) + { + return 1; + } + + var sort = await (await GetQueryableAsync()) + .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); + return sort + 1; + } + /// <summary> /// 鑾峰彇鍒嗛〉鍒楄〃鐗╂枡鍩虹淇℃伅琛� /// </summary> @@ -80,138 +79,137 @@ /// <param name="includeDetails"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public async Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()) - .IncludeDetails(includeDetails) - .WhereIf(whereConditions != null, whereConditions.data) - .Where(x => !x.IsDeleted) - .OrderByDescending(x => x.CreationTime) - .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - + public async Task<List<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .WhereIf(whereConditions != null, whereConditions.data) + .Where(x => !x.IsDeleted) + .OrderByDescending(x=>x.CreationTime) + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + /// <summary> /// 鑾峰彇鎬绘暟鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default) - { - return await (await GetQueryableAsync()) - .WhereIf(whereConditions != null, whereConditions.data) - .Where(x => !x.IsDeleted) - .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); - } - - + public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .WhereIf(whereConditions != null, whereConditions.data) + .Where(x => !x.IsDeleted) + .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); + } + + /// <inheritdoc /> - public override async Task<IQueryable<WmsMaterial>> WithDetailsAsync() - { - return (await GetQueryableAsync()) - .Where(x => !x.IsDeleted).IncludeDetails(); - } - - - /// <summary> - /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="id">鐗╂枡ID</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default) - { - var entity = await (await GetDbSetAsync()) - .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken)); - - if (entity == null) - { - throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(WmsMaterial), id); - } - - // 2. 鑾峰彇 DbContext 骞舵墽琛屽垹闄� - var dbContext = await GetDbContextAsync(); - - // 鐩存帴鎵ц SQL 鍒犻櫎 - var sql = $"DELETE FROM scms_wmsmaterials WHERE Id ='{entity.Id.ToString()}'"; - await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); - } - - /// <summary> - /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 - /// </summary> - /// <param name="ids">瑕佸垹闄ょ殑鐗╂枡ID鍒楄〃</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default) - { - // 1. 鏌ヨ绗﹀悎鏉′欢鐨勫疄浣擄紙鏈蒋鍒犻櫎鐨勮褰曪級 - var entities = await (await GetDbSetAsync()) - .Where(x => ids.Contains(x.Id) && !x.IsDeleted) - .ToListAsync(GetCancellationToken(cancellationToken)); - - if (!entities.Any()) - { - // 濡傛灉娌℃湁闇�瑕佸垹闄ょ殑璁板綍锛岀洿鎺ヨ繑鍥烇紙閬垮厤涓嶅繀瑕佺殑鏁版嵁搴撴搷浣滐級 - return; - } - - // 2. 鑾峰彇 DbContext 骞舵墽琛屾壒閲忓垹闄� - var dbContext = await GetDbContextAsync(); - - var idsToDelete = entities.Select(e => e.Id).ToList(); - - // 鐩存帴鎵ц SQL 鍒犻櫎 - var sql = $"DELETE FROM scms_wmsmaterials WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})"; - await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); - } - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - public async Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()) - .WhereIf(whereConditions != null, whereConditions) - .Where(x => !x.IsDeleted) - .OrderByDescending(x => x.CreationTime) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - - /// <summary> - /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� - /// </summary> - /// <param name="whereConditions"></param> - /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - /// <exception cref="UserFriendlyException"></exception> - public async Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) - { - if (is鈥婱ultipleThrowException) - { - var entitys = await (await GetDbSetAsync()) - .WhereIf(whereConditions != null, whereConditions) - .Where(x => !x.IsDeleted) - .OrderByDescending(x => x.CreationTime) - .ToListAsync(GetCancellationToken(cancellationToken)); - if (entitys?.Count > 1) - { - throw new UserFriendlyException("鏌ヨ鍒板鏉¤褰�"); - } - return entitys?.FirstOrDefault(); - } - else - { - return await (await GetDbSetAsync()) - .WhereIf(whereConditions != null, whereConditions) - .Where(x => !x.IsDeleted) - .OrderByDescending(x => x.CreationTime) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); - } - } -} + public override async Task<IQueryable<WmsMaterial>> WithDetailsAsync() + { + return (await GetQueryableAsync()) + .Where(x => !x.IsDeleted).IncludeDetails(); + } + + /// <summary> + /// 鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="id">涓婚敭ID</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default) + { + var entity = await (await GetDbSetAsync()) + .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken)); + + if (entity == null) + { + throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(WmsMaterial), id); + } + + // 2. 鑾峰彇 DbContext 骞舵墽琛屽垹闄� + var dbContext = await GetDbContextAsync(); + + // 鐩存帴鎵ц SQL 鍒犻櫎 + var sql = $"DELETE FROM scms_wmsmaterials WHERE Id ='{entity.Id.ToString()}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); + } + + /// <summary> + /// 鎵归噺鐗╃悊鍒犻櫎鐗╂枡鍩虹淇℃伅琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 + /// </summary> + /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default) + { + // 1. 鏌ヨ绗﹀悎鏉′欢鐨勫疄浣擄紙鏈蒋鍒犻櫎鐨勮褰曪級 + var entities = await (await GetDbSetAsync()) + .Where(x => ids.Contains(x.Id) && !x.IsDeleted) + .ToListAsync(GetCancellationToken(cancellationToken)); + + if (!entities.Any()) + { + // 濡傛灉娌℃湁闇�瑕佸垹闄ょ殑璁板綍锛岀洿鎺ヨ繑鍥烇紙閬垮厤涓嶅繀瑕佺殑鏁版嵁搴撴搷浣滐級 + return; + } + + // 2. 鑾峰彇 DbContext 骞舵墽琛屾壒閲忓垹闄� + var dbContext = await GetDbContextAsync(); + + var idsToDelete = entities.Select(e => e.Id).ToList(); + + // 鐩存帴鎵ц SQL 鍒犻櫎 + var sql = $"DELETE FROM scms_wmsmaterials WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})"; + await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); + } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄥ垪琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<List<WmsMaterial>> GetListByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .WhereIf(whereConditions != null, whereConditions) + .Where(x => !x.IsDeleted) + .OrderByDescending(x => x.CreationTime) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + /// <summary> + /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜鐗╂枡鍩虹淇℃伅琛� + /// </summary> + /// <param name="whereConditions"></param> + /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<WmsMaterial> GetSingleByFilterAsync(Expression<Func<WmsMaterial, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) + { + if (is鈥婱ultipleThrowException) + { + var entitys = await (await GetDbSetAsync()) + .WhereIf(whereConditions != null, whereConditions) + .Where(x => !x.IsDeleted) + .OrderByDescending(x => x.CreationTime) + .ToListAsync(GetCancellationToken(cancellationToken)); + if (entitys?.Count > 1) + { + throw new UserFriendlyException("鏌ヨ鍒板鏉¤褰�"); + } + return entitys?.FirstOrDefault(); + } + else + { + return await (await GetDbSetAsync()) + .WhereIf(whereConditions != null, whereConditions) + .Where(x => !x.IsDeleted) + .OrderByDescending(x => x.CreationTime) + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + } + } +} diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs" index 284ccef..1d982b5 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs" @@ -1,215 +1,216 @@ -using Ao.Lang; -using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; -using CMS.Framework.AspNetCore.Users; -using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; -using CMS.Plugin.HIAWms.Application.Contracts.Services; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using MiniExcelLibs; -using System.Reflection; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using CmsQueryExtensions.Entitys; - -namespace CMS.Plugin.HIAWms.Controller -{ +using Ao.Lang; +using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; +using CMS.Framework.AspNetCore.Users; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; +using CMS.Plugin.HIAWms.Application.Contracts.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using MiniExcelLibs; +using System.Reflection; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using CmsQueryExtensions.Entitys; + +namespace CMS.Plugin.HIAWms.Controller +{ /// <summary> /// 鐗╂枡鍩虹淇℃伅琛ㄦ湇鍔� /// </summary> - [ApiController] - [TypeFilter(typeof(CMSLanguageFilter))] - [TypeFilter(typeof(CMSUowActionFilter))] - [TypeFilter(typeof(CMSAuditActionFilter))] - [TypeFilter(typeof(CMSExceptionFilter))] - [Route("api/v{version:apiVersion}/HIAWms/[controller]")] - public class WmsMaterialController : ControllerBase - { - private readonly IWmsMaterialAppService _wmsMaterialAppService; - private readonly ICurrentUser _currentUser; - + [ApiController] + [TypeFilter(typeof(CMSLanguageFilter))] + [TypeFilter(typeof(CMSUowActionFilter))] + [TypeFilter(typeof(CMSAuditActionFilter))] + [TypeFilter(typeof(CMSExceptionFilter))] + [Route("api/v{version:apiVersion}/HIAWms/[controller]")] + public class WmsMaterialController : ControllerBase + { + private readonly IWmsMaterialAppService _wmsMaterialAppService; + private readonly ICurrentUser _currentUser; + /// <summary> /// Initializes a new instance of the <see cref="WmsMaterialController"/> class. /// </summary> /// <param name="wmsMaterialAppService">The wmsMaterial application service.</param> - public WmsMaterialController(IWmsMaterialAppService wmsMaterialAppService, ICurrentUser currentUser) - { - _wmsMaterialAppService = wmsMaterialAppService; - _currentUser = currentUser; - } - + public WmsMaterialController(IWmsMaterialAppService wmsMaterialAppService, ICurrentUser currentUser) + { + _wmsMaterialAppService = wmsMaterialAppService; + _currentUser = currentUser; + } + /// <summary> /// 鑾峰彇鐗╂枡鍩虹淇℃伅琛� /// </summary> - /// <param name="id">鏍囪瘑绗�.</param> + /// <param name="id">涓婚敭ID</param> /// <returns></returns> - [HttpGet] - [Route("{id}")] - public virtual Task<WmsMaterialDto> GetAsync(Guid id) - { - return _wmsMaterialAppService.GetAsync(id); - } - + [HttpGet] + [Route("{id}")] + public virtual Task<WmsMaterialDto> GetAsync(Guid id) + { + return _wmsMaterialAppService.GetAsync(id); + } + /// <summary> /// 鍒嗛〉鑾峰彇鐗╂枡鍩虹淇℃伅琛ㄧ殑鍒楄〃. /// </summary> - /// <param name="input">杈撳叆.</param> + /// <param name="input">鏌ヨ鍙傛暟</param> /// <returns></returns> - [HttpGet] - [Route("Page")] - public virtual Task<PagedResultDto<WmsMaterialDto>> GetListAsync([FromQuery] GetWmsMaterialInput input) - { - return _wmsMaterialAppService.GetListAsync(input); - } - + [HttpGet] + [Route("Page")] + public virtual Task<PagedResultDto<WmsMaterialDto>> GetListAsync([FromQuery] GetWmsMaterialInput input) + { + return _wmsMaterialAppService.GetListAsync(input); + } + /// <summary> /// 鍒涘缓鐗╂枡鍩虹淇℃伅琛� /// </summary> - /// <param name="input">杈撳叆.</param> + /// <param name="input">鍒涘缓鍙傛暟</param> /// <returns></returns> //[Authorize] - [HttpPost] - public virtual Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input) - { - input.CreatorName = _currentUser.UserAccount;//鍒涘缓浜� - return _wmsMaterialAppService.CreateAsync(input); - } - + [HttpPost] + public virtual Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input) + { + input.CreatorName = _currentUser.UserAccount;//鍒涘缓浜� + return _wmsMaterialAppService.CreateAsync(input); + } + /// <summary> /// 鏇存柊鐗╂枡鍩虹淇℃伅琛� /// </summary> - /// <param name="id">鏍囪瘑绗�.</param> - /// <param name="input">杈撳叆.</param> + /// <param name="id">涓婚敭ID</param> + /// <param name="input">鏇存柊鍙傛暟</param> /// <returns></returns> //[Authorize] - [HttpPut] - [Route("{id}")] - public virtual Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) - { - input.LastModifierName = _currentUser.UserAccount;//淇敼浜� - return _wmsMaterialAppService.UpdateAsync(id, input); - } - + [HttpPut] + [Route("{id}")] + public virtual Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) + { + input.LastModifierName = _currentUser.UserAccount;//淇敼浜� + return _wmsMaterialAppService.UpdateAsync(id, input); + } + /// <summary> /// 鍏嬮殕鐗╂枡鍩虹淇℃伅琛� /// </summary> - /// <param name="ids">Id闆嗗悎.</param> + /// <param name="ids">Id闆嗗悎</param> /// <returns></returns> //[Authorize] - [HttpPost] - [Route("Clone")] - public virtual Task<List<WmsMaterialDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) - { - MyCurrentUser myCurrentUser = new MyCurrentUser() - { - UserAccount = _currentUser.UserAccount, - UserId = _currentUser.UserId - }; - return _wmsMaterialAppService.CloneAsync(ids, myCurrentUser); - } - + [HttpPost] + [Route("Clone")] + public virtual Task<List<WmsMaterialDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) + { + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + return _wmsMaterialAppService.CloneAsync(ids, myCurrentUser); + } + /// <summary> /// 鍒犻櫎鐗╂枡鍩虹淇℃伅琛� /// </summary> - /// <param name="id">鏍囪瘑绗�.</param> + /// <param name="id">涓婚敭ID</param> /// <returns></returns> //[Authorize] - [HttpDelete] - [Route("{id}")] - public virtual Task DeleteAsync(Guid id) - { - MyCurrentUser myCurrentUser = new MyCurrentUser() - { - UserAccount = _currentUser.UserAccount, - UserId = _currentUser.UserId - }; - //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//閫昏緫鍒犻櫎 - return _wmsMaterialAppService.DeletePermanentlyAsync(id, myCurrentUser);//鐗╃悊鍒犻櫎 - } - + [HttpDelete] + [Route("{id}")] + public virtual Task DeleteAsync(Guid id) + { + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//閫昏緫鍒犻櫎 + return _wmsMaterialAppService.DeletePermanentlyAsync(id, myCurrentUser);//鐗╃悊鍒犻櫎 + } + /// <summary> /// 鎵归噺鍒犻櫎鐗╂枡鍩虹淇℃伅琛� /// </summary> - /// <param name="ids">The ids.</param> + /// <param name="ids">涓婚敭ID闆嗗悎</param> /// <returns></returns> //[Authorize] - [HttpDelete] - public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) - { - MyCurrentUser myCurrentUser = new MyCurrentUser() - { - UserAccount = _currentUser.UserAccount, - UserId = _currentUser.UserId - }; - // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//閫昏緫鍒犻櫎 - return _wmsMaterialAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//鐗╃悊鍒犻櫎 - } - + [HttpDelete] + public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) + { + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//閫昏緫鍒犻櫎 + return _wmsMaterialAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//鐗╃悊鍒犻櫎 + } + /// <summary> /// 璋冩暣鎺掑簭鐗╂枡鍩虹淇℃伅琛� /// </summary> - /// <param name="id">鏍囪瘑绗�.</param> + /// <param name="id">涓婚敭ID</param> /// <returns></returns> - [HttpPut] - [Route("{id}/AdjustSort/{sort}")] - public virtual Task AdjustSortAsync(Guid id, int sort) - { - return _wmsMaterialAppService.AdjustSortAsync(id, sort); - } - + [HttpPut] + [Route("{id}/AdjustSort/{sort}")] + public virtual Task AdjustSortAsync(Guid id, int sort) + { + return _wmsMaterialAppService.AdjustSortAsync(id, sort); + } + /// <summary> /// 瀵煎叆鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <returns></returns> - [Authorize] - [HttpPost] - [Route("Import")] - public virtual async Task<IActionResult> ImportAsync(IFormFile file) - { - using var stream = new MemoryStream(); - await file.CopyToAsync(stream); - stream.Seek(0L, SeekOrigin.Begin); - - var sheetNames = stream.GetSheetNames(); - var wmsMaterialRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<WmsMaterialsImportModel.WmsMaterialImportModel>(stream, sheetName: "閰嶇疆").ToList() : new(); - - if (!wmsMaterialRows.Any()) - { - throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); - } - MyCurrentUser myCurrentUser = new MyCurrentUser() - { - UserAccount = _currentUser.UserAccount, - UserId = _currentUser.UserId - }; - await _wmsMaterialAppService.ImportAsync(new WmsMaterialsImportModel - { - WmsMaterials = wmsMaterialRows, - }, myCurrentUser); - - return Ok(); - } - + [Authorize] + [HttpPost] + [Route("Import")] + public virtual async Task<IActionResult> ImportAsync(IFormFile file) + { + using var stream = new MemoryStream(); + await file.CopyToAsync(stream); + stream.Seek(0L, SeekOrigin.Begin); + + var sheetNames = stream.GetSheetNames(); + var wmsMaterialRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<WmsMaterialsImportModel.WmsMaterialImportModel>(stream, sheetName: "閰嶇疆").ToList() : new(); + + if (!wmsMaterialRows.Any()) + { + throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); + } + + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + await _wmsMaterialAppService.ImportAsync(new WmsMaterialsImportModel + { + WmsMaterials = wmsMaterialRows, + },myCurrentUser); + + return Ok(); + } + /// <summary> /// 瀵煎嚭鐗╂枡鍩虹淇℃伅琛� /// </summary> /// <returns></returns> - [HttpGet] - [Route("Export")] - public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInput input) - { - input.MaxResultCount = int.MaxValue; - var exportData = await _wmsMaterialAppService.ExportAsync(input); - var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterial瀵煎嚭妯℃澘.xlsx"); - if (!System.IO.File.Exists(templatePath)) - { - templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsMaterial瀵煎嚭妯℃澘.xlsx"); - } - - var memoryStream = new MemoryStream(); - await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); - memoryStream.Seek(0L, SeekOrigin.Begin); - return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; - } - } -} + [HttpGet] + [Route("Export")] + public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInput input) + { + input.MaxResultCount = int.MaxValue; + var exportData = await _wmsMaterialAppService.ExportAsync(input); + var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterial瀵煎嚭妯℃澘.xlsx"); + if (!System.IO.File.Exists(templatePath)) + { + templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsMaterial瀵煎嚭妯℃澘.xlsx"); + } + + var memoryStream = new MemoryStream(); + await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); + memoryStream.Seek(0L, SeekOrigin.Begin); + return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; + } + } +} diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterial\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterial\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" index 2cc7419..14ed2fe 100644 --- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterial\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" +++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterial\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" Binary files differ -- Gitblit v1.9.3