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

目录

  • 1.后台配置appsettings.json说明
  • 2.service.cs扩展 表/明细表(CRUD导入导出)前后做一些操作 数据(CRUD导入导出)前后的处理参数或数据
    • 2.编辑
    • 3.新建
    • 4.查询
    • 5.导出
    • 6.导入


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

1.后台配置appsettings.json说明

{"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.编辑

  • 数据库表的字段前校验表请求的字段原有表中存不存在
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.新建

  • 数据库表的字段前校验表请求的字段原有表中存不存在
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获取当前的用户的信息–做一些查询的权限(查询当前用户对应的数据)
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.导出

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.导入

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencascade在vs和qt下改变视图方向和设置线框模式

一.改变视图方向&#xff08;以顶部视图为例&#xff09; 1.在qt的界面代码中设置好 2.在view.h中设置好槽函数 3.在lzzcad.cpp中设置槽与信号的连接&#xff0c;并在工具栏上显示 4.在view.cpp中给出函数实现 5.给出快捷键实现方式 二.设置线框模式 同上&#xff0c;加入函数…

力扣:93. 复原 IP 地址

回溯&#xff1a; 1.先定义一个接收的集合&#xff0c;之后再定义一个记录小数点的变量。之后编写回溯函数&#xff0c;终止条件为小数点的个数为3时&#xff0c;同时要判断最后一段的组合的值是否属于ip地址的范围。之后再用for循环来遍历ip地址的组合&#xff0c;先判断组合…

【软件设计模式之模板方法模式】

文章目录 前言一、什么是模板方法模式&#xff1f;二、模板方法模式的结构1. 抽象类定义2. 具体实现 三、模板方法模式的应用场景1. 算法重用2. 操作中的固定步骤3. 扩展框架的功能4. 提供回调方法5. 遵循开闭原则 四、模板方法模式的优缺点1. 优点代码复用扩展性好符合开闭原则…

[深度学习]yolov9+deepsort+pyqt5实现目标追踪

【YOLOv9DeepSORTPyQt5追踪介绍】 随着人工智能技术的飞速发展&#xff0c;目标追踪在视频监控、自动驾驶等领域的应用日益广泛。其中&#xff0c;YOLOv9作为先进的目标检测算法&#xff0c;结合DeepSORT多目标追踪算法和PyQt5图形界面库&#xff0c;能够为用户提供高效、直观…

Linux fdisk命令教程:硬盘分区的利器(附实例详解和注意事项)

Linux fdisk命令介绍 fdisk&#xff08;format disk&#xff09;是一个在Linux中用于创建和操作磁盘分区表的对话驱动命令。它是最常用的创建分区的工具之一。fdisk允许你在硬盘上创建和操作分区表。需要注意的是&#xff0c;fdisk是一个危险的工具&#xff0c;应该谨慎使用。…

前端笔记——var let const 之间的区别

Var&#xff1a; 关键字来声明变量。它有以下特点&#xff1a; var声明的变量作用域是函数级的&#xff0c;即在函数内部声明的变量在整个函数范围内可见。 var变量可以被重复声明&#xff0c;而不会引发错误。 var变量会存在变量提升&#xff08;hoisting&#xff09;现象&…

python-可视化篇-简单-条形图输出主要省份GDP排名情况

条形图输出主要省份GDP排名情况 代码 gdp广东:97277.77:107671.07 江苏:92595.40:99631.52 山东:76469.70:71067.5 浙江:56197.00:62353 河南:48055.90:54259.2 四川:40678.10:46615.82 湖北:39366.60:45828.31 湖南:36425.78:39752.12 河北:36010.30:35104.5 福建:35804.04:…

windows安装 RabbitMQ

首先打开 RabbitMQ 官网&#xff0c;点击 Get Started(开始) 点击 Download Installation(下载安装)。 这里提供了两种方式进行安装&#xff0c;我们使用第二种方法。 使用 chocolatey以管理用户身份使用官方安装程序 往下滑&#xff0c;第二种方法需要 Erlang 的依赖&#x…

iotdb集群模式部署

iotdb集群模式部署 重要声明:部署的版本要和脚本对应上,这里可以点击 来获取最新的脚本; 我使用的是1.3.0版本的iotdb 下面是我基于三个节点的部署步骤: 假如有三台物理机,里面安装了centos系统,它们的hostname分别是iotdb-1、iotdb-2、iotdb-3 1、设置网络 vim /…

1248 - Every derived table must have its own alias

该问题是子查询内的列名无法在外部查询中直接引用&#xff0c;使用别名来为子查询结果集命名&#xff0c;然后在外部查询中引用该别名。以下是一个修正后的查询语句&#xff1a; SELECT last_name, salary FROM (SELECT last_name, salary, RANK() OVER (ORDER BY salary DES…

avidemux-一个免费的视频编辑器,用于剪切、过滤和编码项目

avidemux-一个免费的视频编辑器&#xff0c;用于剪切、过滤和编码项目 avidemux-一个免费的视频编辑器&#xff0c;用于剪切、过滤和编码项目avidemux下载avidemux源代码参考资料 avidemux-一个免费的视频编辑器&#xff0c;用于剪切、过滤和编码项目 avidemux下载 avidemux …

mongoose httpserver浅析

文章目录 前言一、结构体及其功能二、函数MG_LOGmg_http_listenmg_mgr_poll question参考链接 前言 mongoose是一款基于C/C的网络库&#xff0c;可以实现TCP, UDP, HTTP, WebSocket, MQTT通讯。mongoose是的嵌入式网络程序更快、健壮&#xff0c;易于实现。 mongoose只有mong…

qt波位图

1&#xff0c;QPainter 绘制&#xff0c;先绘制这一堆蓝色的东西, 2&#xff0c;在用定时器&#xff1a;QTimer&#xff0c;配合绘制棕色的圆。用到取余&#xff0c;取整 #pragma once#include <QWidget> #include <QPaintEvent>#include <QTimer>QT_BEGIN_…

LangChain Agent v0.2.0简明教程 (上)

快速入门指南 – LangChain中文网 langchain源码剖析系列课程 九天玩转Langchain! 1. LangChain是什么2. LangChain Expression Language (LCEL)Runnable 接口3. Model I/O3.1 Prompt Templates3.2 Language Model3.3 Output ParsersUse case(Q&A with RAG)1. LangChain…

JavaScript中setout函数“bug”再研究

引言 在JavaScript中setout中函数不加双引号引发错误的问题-CSDN博客 上篇文章中笔者讲解了settimeout全局函数&#xff0c;关于引用函数时加不加双引号会使得延迟是否正常出现的“bug” 这里再详细阐述一下 实现方法 首先打开vscode&#xff0c;分别写入如下代码 <!DOC…

【踩坑】PyTorch中指定GPU不生效和GPU编号不一致问题

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 指定GPU不生效问题 解释&#xff1a;就是使用os.environ["CUDA_VISIBLE_DEVICES"] "1"后&#xff0c;后面使用起来仍然是cuda0. 解决&#xff1a;在最开头就使用 import os os.environ[&…

sentinel整合nacos在gateway中实现限流

sentinel整合nacos在gateway中实现限流 一、应用层面完成网关整合nacos和sentinel实现限流 前沿 启动nacos与sentinel的jar的启动&#xff0c;这里不细讲 sentinel官网 https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 sentinel 下载地址 https://github.com/…

Spring中事务失效的场景

一:异常捕获处理 事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉 解决 在catch块添加throw new RuntimeException(e)抛出 二: 抛出检查异常 原因: Spring默认只会回滚非检查异常 解决: 配置rollbackFor属性 Transa…

使用uniapp实现小程序获取wifi并连接

一、背景 因业务需求&#xff0c;需要在小程序实现发现wifi和连接wifi。但由于Andriod和IOS有差异&#xff0c;所以实现起来有所区别。 先看官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/device/wifi.html 把连接基础流程了解后&#xff0c;发现二者流…

LeetCode题练习与总结:最接近的三数之和

一、题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 二、解题思路 解决这个问题的关键在于找到一个有效的算法来遍历数组并找到三…