コード例 #1
0
ファイル: SellOrderService.cs プロジェクト: zxbe/Vue.NetCore
        //此SellOrderService.cs类由代码生成器生成,默认是没有任何代码,如果需要写业务代码,请在此类中实现
        //如果默认的增、删、改、查、导入、导出、审核满足不了业务,请参考下面的方法进行业务代码扩展(扩展代码是对ServiceFunFilter.cs的实现)

        //==============常用操作=======================
        //访问数据库
        //1、使用 repository. 使用原生EF  repository.DbContext
        //    repository.DbContext.Set<Sys_User>().Find()
        //    SellOrderRepository.Instance.Find()
        //    SellOrderListRepository.Instance.Find()
        //    DBServerProvider.SqlDapper
        //    DBServerProvider.DbContext
        //    以上方式都能访问数据库

        //2、使用EF事务 repository.DbContextBeginTransaction或 SellOrderRepository.Instance.DbContextBeginTransaction

        //3、Dapper 使用:repository.DapperContext , DBServerProvider.SqlDapper

        //4、获取Memory/Redis对象
        // base.CacheContext
        // AutofacContainerModule.GetService<ICacheService>()
        // VOL.Core.Utilities.HttpContext.Current.RequestServices
        // VOL.Core.Utilities.HttpContext.Current.RequestServices.GetService(typeof(ICacheService))

        //5、使用HttpContext:VOL.Core.Utilities.HttpContext

        //获取用户信息/权限
        //6、UserContext.Current/UserContext.Current.Permissions

        //7、获取配置信息appsettings.json
        // AppSetting   /    AppSetting.Configuration

        //8、查看权限验证规则 Vol.Core->Filters文件夹下权限控制类

        //9、其他封装了大量的常用扩展方法Vol.Core->Extensions文件夹下(如:字符串扩展、表达式扩展、实体验证(EntityProperties)扩展方法)

        //10、实体数据合法性校验(ServiceBase.cs有大量实体校验示例)
        //SellOrder order = new SellOrder();
        //校验指定字段x.TranNo, x.Auditor的类型、长度等合法性
        //order.ValidationEntity(x => new { x.TranNo, x.Auditor});

        //11、获取实体的配置信息,如:字段中文名称、最大长度、字段主键等信息
        // Type type = typeof(SellOrder);
        //获取主键字段
        // PropertyInfo key = type.GetKeyProperty();
        //获取主键字段名
        // type.GetKeyName();
        //判断某个字段是否有EditableAttribute属性
        //  key.ContainsCustomAttributes(typeof(EditableAttribute));

        //12、常用工具类Vol.Core->Utilities

        //写入日志 : Logger.Info();

        //其中有一部分真实扩展代码实现:Partial->Sys_UserService.cs  , Partial->Sys_RoleService ,Partial->Sys_DictionaryService


        public override PageGridData <SellOrder> GetPageData(PageDataOptions options)
        {
            //查询前可以自已设定查询表达式的条件
            QueryRelativeExpression = (IQueryable <SellOrder> queryable) =>
            {
                //当前用户只能操作自己(与下级角色)创建的数据,如:查询、删除、修改等操作
                IQueryable <int> userQuery = RoleContext.GetCurrentAllChildUser();
                queryable = queryable.Where(x => x.CreateID == UserContext.Current.UserId || userQuery.Contains(x.CreateID ?? 0));
                return(queryable);
            };

            //此处是从前台提交的原生的查询条件,这里可以自己过滤
            QueryRelativeList = (List <SearchParameters> parameters) =>
            {
            };
            //指定多个字段进行排序
            OrderByExpression = x => new Dictionary <object, QueryOrderBy>()
            {
                { x.CreateDate, QueryOrderBy.Desc },
                { x.SellNo, QueryOrderBy.Desc }
            };

            //查询完成后,在返回页面前可对查询的数据进行操作
            GetPageDataOnExecuted = (PageGridData <SellOrder> grid) =>
            {
                //可对查询的结果的数据操作
                List <SellOrder> sellOrders = grid.rows;
            };
            return(base.GetPageData(options));
        }
コード例 #2
0
        //查询
        public override PageGridData <SellOrder> GetPageData(PageDataOptions options)
        {
            //2020.08.15
            //设置原生查询的sql语句,这里必须返回select * 表所有字段
            //(先内部过滤数据,内部调用EF方法FromSqlRaw,自己写的sql注意sql注入的问题),不会影响界面上提交的查询

            /*
             *  string date = DateTime.Now.AddYears(-10).ToString("yyyy-MM-dd");
             *  QuerySql = $@"select * from SellOrder
             *                         where createdate>'{date}'
             *                             and  Order_Id in (select Order_Id from SellOrderList)
             *                             and CreateID={UserContext.Current.UserId}";
             */

            //2020.08.15
            //此处与上面QuerySql只需要实现其中一个就可以了
            //查询前可以自已设定查询表达式的条件
            QueryRelativeExpression = (IQueryable <SellOrder> queryable) =>
            {
                //当前用户只能操作自己(与下级角色)创建的数据,如:查询、删除、修改等操作
                IQueryable <int> userQuery = RoleContext.GetCurrentAllChildUser();
                queryable = queryable.Where(x => x.CreateID == UserContext.Current.UserId || userQuery.Contains(x.CreateID ?? 0));
                return(queryable);
            };

            //此处是从前台提交的原生的查询条件,这里可以自己过滤
            QueryRelativeList = (List <SearchParameters> parameters) =>
            {
            };
            //指定多个字段进行排序
            OrderByExpression = x => new Dictionary <object, QueryOrderBy>()
            {
                { x.CreateDate, QueryOrderBy.Desc },
                { x.SellNo, QueryOrderBy.Desc }
            };

            //查询完成后,在返回页面前可对查询的数据进行操作
            GetPageDataOnExecuted = (PageGridData <SellOrder> grid) =>
            {
                //可对查询的结果的数据操作
                List <SellOrder> sellOrders = grid.rows;
            };
            //查询table界面显示求和
            SummaryExpress = (IQueryable <SellOrder> queryable) =>
            {
                return(queryable.GroupBy(x => 1).Select(x => new
                {
                    //AvgPrice注意大小写和数据库字段大小写一样
                    Qty = x.Sum(o => o.Qty).ToString("f2")
                })
                       .FirstOrDefault());
            };

            return(base.GetPageData(options));
        }