- A+
所属分类:.NET技术
C#TMS系统代码-基础页面BaseCity学习
本人纯新手,刚进公司跟领导报道,我说我是java全栈,他问我会不会C#,我说大学学过,他说这个TMS系统就给你来管了。外包已经把代码给我了,这几天先把增删改查的代码背一下,说不定后面就要赶鸭子上架了
Service页面
//using => import 导入 using Microsoft.AspNetCore.Mvc; using SHZY.BaseData.Entitys.TMS.Dto.City; using SHZY.BaseData.Interfaces.TMS; ...... //声明命名空间 namespace SHZY.BaseData.TMS { //接口调用记录 [ApiDescriptionSettings(Tag = "BaseData", Name = "TmsBaseCity", Order = 200)] //路由匹配 [Route("api/TMS/BaseData/[controller]")] // : => implements 实现多接口 public class TmsBaseCityService : ITmsBaseCityService, IDynamicApiController, ITransient { //Dao private readonly ISqlSugarRepository<TmsBaseCityEntity> _repository;//city的各种方法 private readonly ITenant _db;//数据库事务 private readonly IUserManager _userManager;//用户管理 ...... //初始化新实例 public TmsBaseCityService( ISqlSugarRepository<TmsBaseCityEntity> tmsBaseCityRepository, ISqlSugarClient context, IUserManager userManager, ISqlSugarRepository<TmsBaseCityEntity> cityRepository) { _repository = tmsBaseCityRepository; _db = context.AsTenant(); _userManager = userManager; } //各种方法 ...... } }
查询单个City
//get请求,id做参数 [HttpGet("{id}")] //async-异步请求? Task-等待任务 dynamic-可变类型 public async Task<dynamic> GetInfo(string id) { //await-等待这行完成 FirstOrDefaultAsync-返回结果集第一个,后面匿名函数查询规则id匹配 Adapt-转类型 //链式写法,我不知道后面怎么打断点调试 return (await _repository.FirstOrDefaultAsync(x => x.Id == id)).Adapt<TmsBaseCityInfoOutput>(); }
查询City分页List
[HttpGet("")] //[FromQuery]-请求查询字符串参数,JSON格式(一般用于get) public async Task<dynamic> GetList([FromQuery] TmsBaseCityListQueryInput input) { //开查 var queryable = _repository.Context.Queryable<TmsBaseCityEntity>() //判断查询参数是否为空,不为空用Contains判断是否包含(有多个也能满足) .WhereIF(!string.IsNullOrEmpty(input.name), it => it.Name.Contains(input.name)) ....... //直接where里面的条件 .Where(it => it.DeleteMark == null) //把结果集数据转成要输出的类 //似乎每种业务场景都会有变种类,这个是查询List的输出类 这是TMS系统的格式要求? .Select(it => new TmsBaseCityListOutput { id = it.Id, countryNo = it.CountryNo, ...... }) //两个或多个表的行合并到一个结果集中 .MergeTable(); //判断排序,为什么不用OrderByIF连着写算了 if (!string.IsNullOrEmpty(input.sidx)) { queryable.OrderBy(input.sidx + " " + input.sort); } else { queryable.OrderBy(it => it.id); } //带上页数和条数转分页 如果不分页直接ToListAsync()返回 var data = await queryable.ToPagedListAsync(input.currentPage, input.pageSize); //转PageResult分页类型 return PageResult<TmsBaseCityListOutput>.SqlSugarPageResult(data); }
新增City
[HttpPost("")] //[FromBody]-请求正文,JSON格式(一般用于post) public async Task Create([FromBody] TmsBaseCityCrInput input) { //AnyAsync判断有没有满足条件的结果(即数据库已有要新增的对象) if (await _repository.AnyAsync(it => it.CountryNo == input.countryNo && it.ProvinceNo == input.provinceNo && it.ProvinceName == input.provinceName && it.No == input.no && it.Name == input.name && it.DeleteMark == null)) //抛出错误,ErrorCode是枚举,里面有各种报错信息 throw Oops.Oh(ErrorCode.COM1004); var entity = input.Adapt<TmsBaseCityEntity>(); //Insertable-插入数据 IgnoreColumns-忽略为null的列 CallEntityMethod-在插入数据库之前,对实体类的某个方法进行调用 ExecuteCommandAsync-执行 var isOk = await _repository.Context.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(it => it.Creator()).ExecuteCommandAsync(); //如果isOk不大于0,抛出错误 if (!(isOk > 0)) throw Oops.Oh(ErrorCode.COM1000); }
更新City
//put请求,id做参 [HttpPut("{id}")] public async Task Update(string id, [FromBody] TmsBaseCityUpInput input) { //AnyAsync判断有没有满足条件的结果(数据库id不同其他数据相同) if (await _repository.AnyAsync(it => it.CountryNo == input.countryNo && it.ProvinceNo == input.provinceNo && it.ProvinceName == input.provinceName && it.No == input.no && it.Name == input.name && it.DeleteMark == null && it.Id != input.id)) throw Oops.Oh(ErrorCode.COM1004); //Adapt转一下类型 var entity = input.Adapt<TmsBaseCityEntity>(); //Updateable-修改数据 UpdateColumns-修改那些数据列 ExecuteCommandAsync-执行 var isOk = await _repository.Context.Updateable(entity).UpdateColumns(it => new { it.CountryNo, ...... }).ExecuteCommandAsync(); if (!(isOk > 0)) throw Oops.Oh(ErrorCode.COM1001); }
删除City
//Delete请求 [HttpDelete("{id}")] public async Task Delete(string id) { //没有删掉,只是更改DeleteMark,这里的写法类似写sql了 //ExecuteCommandHasChangeAsync-返回一个布尔值表示是否有变更 var isOk = await _repository.Context.Updateable<TmsBaseCityEntity>().SetColumns(it => new TmsBaseCityEntity() { DeleteTime = DateTime.Now, DeleteMark = 1, DeleteUserId = _userManager.UserId }).Where(it => it.Id.Equals(id)).ExecuteCommandHasChangeAsync(); if (!isOk) throw Oops.Oh(ErrorCode.COM1002); }
批量删除City
//这里为啥不用Delete? [HttpPost("batchRemove")] public async Task BatchRemove([FromBody] List<string> ids) { //In(it => it.Id, ids) 把数据全部先查出来 var entitys = await _repository.Context.Queryable<TmsBaseCityEntity>().In(it => it.Id, ids).ToListAsync(); if (entitys.Count > 0) { try { //开启事务 _db.BeginTran(); //批量删除城市信息维护,这边用的Where(it => ids.Contains(it.Id)) var isOk = await _repository.Context.Updateable<TmsBaseCityEntity>().SetColumns(it => new TmsBaseCityEntity() { DeleteTime = DateTime.Now, DeleteMark = 1, DeleteUserId = _userManager.UserId }).Where(it => ids.Contains(it.Id)).ExecuteCommandHasChangeAsync(); //关闭事务 _db.CommitTran(); } catch (Exception) { //回滚事务 _db.RollbackTran(); throw Oops.Oh(ErrorCode.COM1002); } } }
导出
[HttpGet("Actions/Export")] public async Task<dynamic> Export([FromQuery] TmsBaseCityListQueryInput input) { var exportData = new List<TmsBaseCityListOutput>(); //导出全部或者当前数据 if (input.dataType == 0) //创建粘土对象转List<TmsBaseCityListOutput> exportData = Clay.Object(await GetList(input)).Solidify<PageResult<TmsBaseCityListOutput>>().list; else exportData = await GetNoPagingList(input); //导出数据列,JSON格式字符串直接ToList<ParamsModel>()手工转 List<ParamsModel> paramList = "[{"value":"国家代码","field":"countryNo"},{"value":"省份代码","field":"provinceNo"},{"value":"省份名称","field":"provinceName"},{"value":"城市代码","field":"no"},{"value":"城市名称","field":"name"},{"value":"有效标志","field":"enabledMark"},]".ToList<ParamsModel>(); //配置ExcelConfig ExcelConfig excelconfig = new ExcelConfig(); excelconfig.FileName = "城市信息维护.xls"; excelconfig.HeadFont = "微软雅黑"; excelconfig.HeadPoint = 10; excelconfig.IsAllSizeColumn = true; excelconfig.ColumnModel = new List<ExcelColumnModel>(); //selectKey=>用户选中的数据列 foreach (var item in input.selectKey.Split(',').ToList()) { var isExist = paramList.Find(p => p.field == item); //找到之后加入ColumnModel if (isExist != null) excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value }); } //临时文件储存路径 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; //导出 ExcelExportHelper<TmsBaseCityListOutput>.Export(exportData, excelconfig, addPath); //excel文件路径 var fileName = _userManager.UserId + "|" + addPath + "|xls"; return new { //文件名 name = excelconfig.FileName, //加密 url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "SHZY") }; }