abp(net core)+easyui+efcore實現倉儲管理系統——模組管理升級之上(六十一)

DotNet菜園發表於2023-04-16

 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.在“新增組織資訊”中填寫完資訊,然後點選“儲存”按鈕,將新新增的組織資訊儲存到資料庫。如下圖。

 

 

 

 

相關文章