VOL_常用记录!!-----后端

目录


注意事项:后台扩展必须写在代码生成的Partial部分类里面
防止代码生成后覆盖你的扩展的代码

1.后台配置appsettings.json说明

csharp 复制代码
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "VirtualPath": {
    "StaticFile": "E:\\Web\\Static", //配置的虚拟目录文件所在路径
    "FolderName": "/Static" //访问时此路径时的别名
  },
  "AppUrls": {
  },
  "Connection": {
    "DBType": "MySql", //MySql/MsSql/PgSql  //数据库类型,如果使用的是sqlserver此处应设置为MsSql
    //sqlserver连接字符串
    //"DbConnectionString": "Data Source=JXX2835\\SQLEXPRESS;Initial Catalog=netcore_demo;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;",

    //mysql连接字符串(升级EFCore3.1到时已将mysql连接字符串修改,2019-12-20)
    "DbConnectionString": " Data Source=127.0.0.1;Database=netcoredev1;AllowLoadLocalInfile=true;User ID=root;Password=666666;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;",

    //PgSql连接字符串
    //  "DbConnectionString": "Host=132.232.2.109;Port=5432;User id=postgres;password=jxx_abcd;Database=netcoredev;",
    "RedisConnectionString": "127.0.0.1,Password=123456,SyncTimeout=15000", //redis连接字符串(最好加密)
    "UseRedis": "false" //是否使用redis,如果不使用,默认使用Memory内置缓存
  },
  "Secret": { //秘钥配置
    "JWT": "BB3647441FFA4B5DB4E64A29B53CE525", //JWT
    "Audience": "vol.core",
    "Issuer": "vol.core.owner",
    "User": "C5ABA9E202D94C43A3CA66002BF77FAF", //
    "DB": "3F8B7B38AD3D484A89ACA513CBD79F36",
    "Redis": "E6D90DDBC70C4F4EA3C312B6FCB473C8"
  },
  //================跨域请求 (CORS)配置(2019-12-20新增),
  //================.netcore3.1必须配置此属性,多个url用豆号隔开,url为vue站点的地址,可以将发布后的地址也同时配置上
  "CorsUrls": "http://localhost:8081,http://localhost:8080,http://localhost:7080,http://localhost:9980,http://127.0.0.1:9980,http://localhost:9990,http://www.volcore.xyz",
  "ExpMinutes": "120", //PC登录默认-JWT有效期(分钟=默认120),
  "CreateMember": { //对表插入数据时,需要记录创建人/创建时间/创建日期,配置UserIdField/UserNameField/DateField分别为对应数据库的创建人CreateID,创建人Creator,创建时间CreateDate字段(新建数据时,由框架默认完成给这几个字段赋值,字段区分大小写)或可手动调用T.SetCreateDefaultVal()完成设置创建人/创建时间/创建日期
    //如果表的主键是GUID,界面查询时默认会用到DateField对应的实体(数据库)字段进行排序
    //表添加这两个字段新建时就会自动添加创建人的和日期修改也是一样
    "UserIdField": "CreateID",
    "UserNameField": "Creator",
    "DateField": "CreateDate"
  },
  "ModifyMember": { //修改同上
    "UserIdField": "ModifyID",
    "UserNameField": "Modifier",
    "DateField": "ModifyDate"
  }, //演示系统过滤Action,只有超级管理员才能操作,其他用户只有只读权限
  "GlobalFilter": {
    "Message": "演示环境,当前帐号没有开启此功能权限",
    "Enable": "false", //开启Action过滤
    "Actions": [ "Update", "Del", "Add", "SavePermission", "Save", "CreatePage", "CreateVuePage", "CreateEntityModel", "SaveEidt", "CreateServices", "Import", "Upload", "Audit", "ModifyPwd" ]
  },
  "Mail": {
    "Address": "code283591387@163.com", //发件的邮箱
    "Host": "smtp.163.com",
    "Name": "VOL", //发送人名称
    "Port": 25,
    "EnableSsl": false,
    "AuthPwd": "授权密码" //授权密码(对应邮箱设置里面去开启)
  },
  "QuartzAccessKey": "65EC9387355E4717899C552963CE59FF", //定时任务的值,请自行修改
  "WeChat": {
    "appid": "wx2f2d6e605d60671f",
    "secret": "微信开放平台里找"
  }
}

2.service.cs扩展 表/明细表(CRUD导入导出)前后做一些操作 数据(CRUD导入导出)前后的处理参数或数据

写在Partial部分类里面

具体文档链接点击链接:

新版:后台基础代码扩展实现链接

旧版:后台基础代码扩展实现链接

2.编辑

  • 数据库表的字段前校验表请求的字段原有表中存不存在
csharp 复制代码
public override WebResponseContent Update(SaveModel saveModel)
{
    //编辑方法保存数据库前处理
    UpdateOnExecuting = (Demo_Catalog catalog, object addList, object updateList, List<object> delKeys) =>
    {
    	//如果数据库的分类编号与前端请求的分类编号相同
    	//并且该记录的主键id和请求的不同说明已存在
    	//这边也可以用写原生sql解决
    	repository.DapperContext.ExecuteScalar
    	("select * from .....")
        if (repository.Exists(x => x.CatalogCode == catalog.CatalogCode && x.CatalogId != catalog.CatalogId))
        {
            return webResponse.Error(CatalogCode  + "分类编号已存在");
        }
        return webResponse.OK();
    };
    return base.Update(saveModel);
}

3.新建

  • 数据库表的字段前校验表请求的字段原有表中存不存在
csharp 复制代码
public override WebResponseContent Add(SaveModel saveDataModel)
{
    // 在保存数据库前的操作,所有数据都验证通过了,这一步执行完就执行数据库保存
    AddOnExecuting = (Demo_Catalog catalog, object list) =>
    {
        if (repository.Exists(x => x.CatalogCode == catalog.CatalogCode))
        {
            return webResponse.Error("分类编号已存在");
        }
        return webResponse.OK();
    };

    return base.Add(saveDataModel);
}

4.查询

  • 前台提交的原生的查询条件--设置原生查询的sql语句
  • 通过UserContext获取当前的用户的信息--做一些查询的权限(查询当前用户对应的数据)
csharp 复制代码
public override PageGridData<Demo_Catalog> GetPageData(PageDataOptions options)
{
    //此处是从前台提交的原生的查询条件,这里可以自己过滤
    //QueryRelativeList = (List<SearchParameters> parameters) =>
    //{

    //};

	// searchBefore(param) {
    //   //界面查询前,可以给param.wheres添加查询参数
    //   //返回false,则不会执行查询
    //	前端查询前添加的值(对象也可以  后端用getObject就行) param.value = 1;
    //   return true;
    // },
	//获取前端查询前添加的值
    //if (options.Value.GetInt()==1)
    //{
    //    Console.WriteLine("1");
    //}

    2020.08.15
    设置原生查询的sql语句,这里必须返回select * 表所有字段
    (先内部过滤数据,内部调用EF方法FromSqlRaw,自己写的sql注意sql注入的问题),不会影响界面上提交的查询

	//查询当前时间的数据
    //string date = DateTime.Now.AddHours(-10).ToString("yyyy-MM-dd");
    //QuerySql = $@"select * from Demo_Catalog   where createdate>'{date}'";

    //    repository.DapperContext.ex
    //PageGridData<Demo_Catalog> gridData = new PageGridData<Demo_Catalog>()
    //{
    //     rows=new List<Demo_Catalog>() { },
    //      total=100
    //};

	//查询当前用户对应的数据
    //QueryRelativeExpression = (IQueryable<Demo_Catalog> queryable) =>
    //{
    //    queryable = queryable.Where(x => x.CreateID == UserContext.Current.UserId);
    //    return queryable;
    //};
    return base.GetPageData(options);
}

5.导出

csharp 复制代码
public override WebResponseContent Export(PageDataOptions pageData)
{
    //设置最大导出的数量
    Limit = 100000;
    //指定导出的字段(2020.05.07)
    //  ExportColumns = x => new { x.CatalogCode, x.CatalogName };

    //查询要导出的数据后,在生成excel文件前处理
    //list导出的实体,ignore过滤不导出的字段
    //ExportOnExecuting = (List<Demo_Catalog> list, List<string> ignore) =>
    //{
    //    list.ForEach(item =>
    //    {
    //        item.CatalogCode = "11";//所有分类编号全是11
    //    });
    //    ignore.Add("Remark");//忽略Remark字段
    //    return webResponse.OK();
    //};

    return base.Export(pageData);
}

6.导入

csharp 复制代码
 /// <summary>
    /// 导入
    /// </summary>
    /// <param name="files"></param>
    /// <returns></returns>
    public override WebResponseContent Import(List<IFormFile> files)
    {
        //(2020.05.07)
        //设置导入的字段(如果指定了上面导出模板的字段,这里配置应该与上面DownLoadTemplate方法里配置一样)
        //如果不设置导入的字段DownLoadTemplateColumns,默认显示所有界面上所有可以看到的字段
        DownLoadTemplateColumns = x => new { x.SellNo, x.TranNo, x.Remark, x.CreateDate };

        /// <summary>
        /// 2022.06.20增加原生excel读取方法(导入时可以自定义读取excel内容)
        /// string=当前读取的excel单元格的值
        /// ExcelWorksheet=excel对象
        /// ExcelRange当前excel单元格对象
        /// int=当前读取的第几行
        /// int=当前读取的第几列
        /// string=返回的值
        /// </summary>
        ImportOnReadCellValue = (string value, ExcelWorksheet worksheet, ExcelRange excelRange, int rowIndex, int columnIndex) =>
        {
            string 表头列名 = worksheet.Cells[1, columnIndex].Value?.ToString();
            //这里可以返回处理后的值,值最终写入到model字段上
            return value;
        };

        //导入保存前处理(可以对list设置新的值)
        ImportOnExecuting = (List<SellOrder> list) =>
        {
            //设置webResponse.Code = "-1"会中止后面代码执行,与返回 webResponse.Error()一样,区别在于前端提示的是成功或失败
            //webResponse.Code = "-1";
            //webResponse.Message = "测试强制返回";
            //return webResponse.OK("ok");

            return webResponse.OK();
        };

        //导入后处理(已经写入到数据库了)
        ImportOnExecuted = (List<SellOrder> list) =>
        {
            return webResponse.OK();
        };
        return base.Import(files);
    }
相关推荐
白茶等风121386 小时前
C#_封装详解
开发语言·c#
friklogff10 小时前
【C#生态园】虚拟现实与增强现实:C#开发库全面评估
c#·ar·vr
VB.Net10 小时前
EmguCV学习笔记 VB.Net 12.1 二维码解析
opencv·计算机视觉·c#·图像·vb.net·二维码·emgucv
MustardJim13 小时前
Visual Studio 引入外部静态库与动态库
c++·visual studio
虚假程序设计15 小时前
pythonnet python图像 C# .NET图像 互转
开发语言·人工智能·python·opencv·c#·.net
我是苏苏16 小时前
Web开发:ABP框架3——入门级别的接口增删改查实现原理
c#·web开发·abp
Zhen (Evan) Wang16 小时前
.NET 6 API + Dapper + SQL Server 2014
数据库·c#·.net
VB.Net16 小时前
EmguCV学习笔记 VB.Net 12.3 OCR
opencv·计算机视觉·c#·ocr·图像·vb.net·emgucv
俊哥V16 小时前
[备忘]测算.net中对象所占用的内存
c#·.net·内存
闻缺陷则喜何志丹16 小时前
HObject复制耗时试用
c#·指针·halcon·key·图形图形·用时·非安全代码