Weben_CMSרÓôúÂëÉú³ÉÆ÷/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>(); Weben_CMSרÓôúÂëÉú³ÉÆ÷/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> Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/AppService/AppServiceÄ£°å.txt
@@ -1,4 +1,4 @@ using CMS.Plugin.$NameSpacePath$.Application.Contracts.Dtos.$EntityName$; using 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âMultipleThrowException = false, CancellationToken cancellationToken = default) { return await _$EntityInstanceName$Repository.GetSingleByFilterAsync(whereConditions, isâMultipleThrowException); } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/AppService/IAppServiceÄ£°å.txt
@@ -1,29 +1,49 @@ using CMS.Plugin.$NameSpacePath$.Application.Contracts.Dtos.$EntityName$; using 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âMultipleThrowException = false, CancellationToken cancellationToken = default); } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/ControllerÄ£°å.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(); } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/Domain/IRepositoryÄ£°å.txt
@@ -1,16 +1,16 @@ using CmsQueryExtensions.Extension; using 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âMultipleThrowException = false, CancellationToken cancellationToken = default); } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/Entity/CreateDtoÄ£°å.txt
@@ -14,4 +14,9 @@ /// æ¯å¦ç¦ç¨ /// </summary> public bool? IsDisabled { get; set; } = false; /// <summary> /// å建人 /// </summary> public string CreatorName { get; set; } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/Entity/UpdateDtoÄ£°å.txt
@@ -10,4 +10,9 @@ /// å¹¶åæ³ /// </summary> public string ConcurrencyStamp { get; set; } /// <summary> /// ä¿®æ¹äºº /// </summary> public string LastModifierName { get; set; } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/EntityFrameworkCore/EfCoreRepositoryÄ£°å.txt
@@ -1,9 +1,10 @@ using CMS.Plugin.$NameSpacePath$.Domain.$EntityName$; using 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âMultipleThrowException = false, CancellationToken cancellationToken = default) { if (isâMultipleThrowException) { 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)); } } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/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; Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/³£ÓÃ.txt
@@ -10,4 +10,9 @@ $EntityInstanceName$ $PageMenuInstanceName$ $PageMenuInstanceName$ $TableName$ $OrderBy$ Weben_CMSרÓôúÂëÉú³ÉÆ÷/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; } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/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; } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/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âMultipleThrowException = 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âMultipleThrowException = false, CancellationToken cancellationToken = default); } Weben_CMSרÓôúÂëÉú³ÉÆ÷/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âMultipleThrowException = false, CancellationToken cancellationToken = default) { return await wmsMaterialRepository.GetSingleByFilterAsync(whereConditions, isâMultipleThrowException); } } 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âMultipleThrowException = false, CancellationToken cancellationToken = default) { return await _wmsMaterialRepository.GetSingleByFilterAsync(whereConditions, isâMultipleThrowException); } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/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âMultipleThrowException = 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âMultipleThrowException = false, CancellationToken cancellationToken = default); } Weben_CMSרÓôúÂëÉú³ÉÆ÷/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âMultipleThrowException = false, CancellationToken cancellationToken = default) { if (isâMultipleThrowException) { 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âMultipleThrowException = false, CancellationToken cancellationToken = default) { if (isâMultipleThrowException) { 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)); } } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/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" }; } } } Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialµ¼³öÄ£°å.xlsxBinary files differ