abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之九(三十五)

abp(net core)+easyui+efcore实现仓储管理系统目录

abp(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五)

abp(net core)+easyui+efcore实现仓储管理系统——EasyUI前端页面框架 (十八)

 
 
 
       在上面abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之八(三十四) 文章的学习之后。我们通过前面的八篇文章已经学习了通过WebAPI接口与控制器去实现新增、删除与修改功能。接下来,我们要在控制器中实现查询功能。

 

、查询组织信息

      1. 在Visual Studio 2017的“解决方案资源管理器”中,右键单击在领域层“ABP.TPLMS.Web.Mvc”项目中的Views\Orgs目录。 找到Index.cshmtl文件,添加一个查询条件相关代码。如下图。

 

具体代码如下:

 <div id="dg-button">
            <form name="searchform" method="post" action="" id="searchform">             

                <label for="Name">组织名称:</label>
                <input name="Name" id="Name" class="easyui-validatebox" data-options="width:200" />
                <label for="Code">组织代码:</label>
                <input name="Code" id="Code" class="easyui-validatebox" data-options="width:150" />
                <label for="CustomCode">海关代码:</label>

                <input name="CustomCode" id="CustomCode" class="easyui-validatebox" data-options="width:100" />
                <a href="#" id="search" class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="Search()">查询</a>               
            </form>
        </div>

 

      2.Visual Studio 2017的“解决方案资源管理器”中,右键单击“ABP.TPLMS.Application”项目的 “Orgs”文件夹中,找到Paged OrgResultRequestDto.cs文件,添加查询条件属性。代码如下。

public class PagedOrgResultRequestDto : PagedResultRequestDto
    {

        public string Keyword { get; set; }
        public string OrgName { get; set; }
        public string OrgCode { get; set; }
        public string CustomCode { get; set; }
    }
}

 

      3. 在Visual Studio 2017的“解决方案资源管理器”中,右键单击在领域层“ABP.TPLMS.Web.Mvc”项目中的Controller目录。找到“OrgsController.cs”文件。如下图。

 

具体代码如下:

   [DontWrapResult]
        [HttpPost]
        public string List()
        {           

            PagedOrgResultRequestDto paged = new PagedOrgResultRequestDto();
            paged.MaxResultCount = MAX_COUNT;
            paged.OrgName = Request.Form["Name"].ToString();
            paged.OrgCode = Request.Form["Code"].ToString();
            paged.CustomCode = Request.Form["CustomCode"].ToString();

            var userList = _orgAppService.GetAll(paged).GetAwaiter().GetResult().Items;

            int total = userList.Count;
            var json = JsonEasyUI(userList, total);
            return json;
        }

 

     4. Visual Studio 2017的“解决方案资源管理器”中,找到领域层“ABP.TPLMS.Web.Mvc”项目中的wwwroot目录下的view-resources\Orgs文件夹下,找到Index.js文件,在工具栏(toolbar)中添加查询条件。如下图画框处

 

       5.在Index.js文件添加一个查询方法Search,代码如下。

function Search() {
    var _$form = $('form[name=searchform]');
    var params = _$form.serializeFormToObject();
    $('#dgOrg').treegrid({ queryParams: params });
}
     6.在Visual Studio 2017中按F5运行应用程序。

    7.在浏览器中的地址栏中输入“http://localhost:5000/”,然后输入管理员用户名进行登录。

    8.在主界面的菜单中,选择“Business->组织管理”菜单项,浏览器中呈现一个货物信息列表与四个按钮。如下图。

         9. 接下来,我们要实现根据查询条件进行查询的功能。Visual Studio 2017的“解决方案资源管理器”中,右键单击“ABP.TPLMS.Application”项目的 “Orgs”文件夹中,找到OrgAppService.cs文件。重写CreateFilteredQuery方法。代码如下。关于GetParentOrgs方法,在这里要说明一点,这个方法的具体作用是找到我们查询到的组织信息的所有上级组织。这个方法通过递归算法来查找条件当前查询条件的组织信息中的第一条的所有上级组织信息。如果这个方法有缺陷,可以自行修正。如果不调用GetParentOrgs方法,会出现什么结果,可以自行试验。

  protected override IQueryable<Org> CreateFilteredQuery(PagedOrgResultRequestDto input)
        {
            var qry= base.CreateFilteredQuery(input)
                .Where(t=>t.Name.Contains(input.OrgName))
                .Where(t => t.BizCode.Contains(input.OrgCode))
                .Where(t => t.CustomCode.Contains(input.CustomCode));

            List<Org> list = qry.ToList<Org>();

            var qry1 = base.CreateFilteredQuery(input);
            List<Org> listParent = new List<Org>();
            GetParentOrgs(listParent, list[0].ParentId, qry1);
            return qry.Union<Org>(listParent);
        }

        private void GetParentOrgs(List<Org> orgs, int ParentId, IQueryable<Org> listOrgs)
        {
            List<Org> liOrgs = listOrgs.Where(x => x.Id == ParentId).ToList();
            if (liOrgs == null || liOrgs .Count <= 0)
            {

                return;
            }
            else
            {
                for (int i = 0; i < liOrgs.Count; i++)
                {
                    var org = liOrgs[i];
                    if (!orgs.Contains(org))
                    {
                        orgs.Add(org);
                    }                    
                   GetParentOrgs(orgs, org.ParentId, listOrgs);
                }
            }
        }

 

      10. 重复上面的第6、7、8步。然后在“组织名称”查询条件中输入“北”,然后点击“查询”按钮,然而查询出所有货物代码中有“北”的货物信息。如下图。

       11.“海关代码”查询条件中输入“1111”,然后点击“查询”按钮,然而查询出所有“海关代码”中有“1111”的相关组织信息。如下图。

      12.“组织代码”查询条件中输入“B”,然后点击“查询”按钮,然而查询出所有“组织代码”中有“B”的相关组织信息。如下图。

 

posted @ 2020-01-18 12:23  DotNet菜园  阅读(...)  评论(...编辑  收藏