//此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)); }
//查询 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)); }