Abp(net core)+easyui+efcore實現倉儲管理系統目錄
有了前一篇文章(abp(net core)+easyui+efcore實現倉儲管理系統——模組管理升級(六十) ),對於模組管理的升級過程中解決升級中出現的問題的一些經驗。我們對組織管理這個模組進行升級。
一、新增Profile定義檔案
1. 在Visual Studio 2022的“解決方案資源管理器”中,右鍵單擊“ABP.TPLMS.Application”專案,使用滑鼠左鍵展開“Orgs” > “Dto”資料夾
2. 使用滑鼠右鍵單擊“Dto”資料夾,然後選擇“新增” > “類”。 將類命名為 OrgMapProfile,然後選擇“新增”。程式碼如下。
using ABP.TPLMS.Authorization.Users;
using ABP.TPLMS.Entitys;
using ABP.TPLMS.Users.Dto;
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ABP.TPLMS.Orgs.Dto
{
public class OrgMapProfile:Profile
{
public OrgMapProfile()
{
CreateMap<OrgDto, Org>();
CreateMap<OrgDto, CreateUpdateOrgDto>();
CreateMap<CreateUpdateOrgDto, Org>();
}
}
}
二、修改OrgAppService類
3.在Visual Studio 2022的“解決方案資源管理器”中,在“Orgs”資料夾中找到OrgAppService.cs檔案,雙擊在文字編輯器中開啟,修改程式碼如下。
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using Abp.Domain.Repositories;
using Abp.Web.Models;
using ABP.TPLMS.Entitys;
using ABP.TPLMS.Modules.Dto;
using ABP.TPLMS.Orgs.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ABP.TPLMS.Orgs
{
public class OrgAppService : AsyncCrudAppService<Org, OrgDto, int, PagedOrgResultRequestDto,
CreateUpdateOrgDto, CreateUpdateOrgDto>, IOrgAppService
{
public OrgAppService(IRepository<Org, int> repository)
: base(repository)
{
}
[DontWrapResult]
public PagedOrgResultDto<OrgDto> GetAllOrgs(PagedOrgResultRequestDto input)
{
PagedOrgResultDto<OrgDto> orgs = new PagedOrgResultDto<OrgDto>();
input.SkipCount = 0;//這裡需要進行引數傳遞
input.MaxResultCount= 1000;
var allOrgs=GetAllAsync(input);
IReadOnlyList<OrgDto> result = AddParentOrgs(input, allOrgs.Result.Items).AsReadOnly();
orgs.Rows = result;
orgs.Total = result.Count;
return orgs;
}
private List<OrgDto> AddParentOrgs(PagedOrgResultRequestDto input,IReadOnlyList<OrgDto> list)
{
List<OrgDto> result = new List<OrgDto>();
if (list == null)
return result;
var qry1 = base.CreateFilteredQuery(input);
List<Org> listParent = new List<Org>();
GetParentOrgs(listParent, list[0].ParentId, qry1);
foreach (var item in listParent)
{
result.Add(ObjectMapper.Map<OrgDto>(item));
}
result.AddRange(list.ToArray());
return result;
}
protected override IQueryable<Org> CreateFilteredQuery(PagedOrgResultRequestDto input)
{
var qry = base.CreateFilteredQuery(input)
.Where(t => t.Name.Contains(input.OrgName == null ? string.Empty : input.OrgName))
.Where(t => t.BizCode.Contains(input.OrgCode == null ? string.Empty : input.OrgCode))
.Where(t => t.CustomCode.Contains(input.CustomCode == null ? string.Empty : input.CustomCode));
return qry;
}
private void GetParentOrgs(List<Org> orgs, int ParentId, IQueryable<Org> listOrgs)
{
List<Org> drs = listOrgs.Where(x => x.Id == ParentId).ToList();
if (drs == null || drs.Count <= 0)
{
return;
}
else
{
for (int i = 0; i < drs.Count; i++)
{
var dr = drs[i];
if (!orgs.Contains(dr))
{
orgs.Add(dr);
}
GetParentOrgs(orgs, dr.ParentId, listOrgs);
}
}
}
}
}
4. 上面程式碼中需要特別注意的一點,是GetAllOrgs方法中的input.SkipCount=0這一行程式碼,如果將這一行程式碼註釋掉,在進行條件查詢時,會報錯。在組織管理頁面的海關程式碼中輸入“2011”,然後點選“查詢”按鈕。如下圖。
5.Visual Studio 2022會彈出一個用記未處理的異常,錯誤資訊,如下圖。
6.在Visual Studio 2022的解決方案資源管理器中,將剛才註釋掉的那一條程式碼“input.SkipCount=0”,還原。按F5執行應用程式。
7.在瀏覽器中的登入頁面中輸入管理員使用者名稱和密碼進行登入。
8.在主介面的選單中,選擇“Business->組織管理”選單項,瀏覽器中呈現一個組織資訊列表與四個按鈕。組織資訊能正常顯示。如下圖。
9. 在“組織管理”列表頁面的海關程式碼輸入框中輸入“2011”,然後點選“查詢”按鈕。如下圖。
10.這一次程式執行正常,查詢出了結果,結果如下圖。
11.在“組織管理”列表頁面中使用滑鼠點選“新增”按鈕,彈出“新增組織資訊”介面。如下圖。
12.在“新增組織資訊”中填寫完資訊,然後點選“儲存”按鈕,將新新增的組織資訊儲存到資料庫。如下圖。