翼度科技»论坛 编程开发 .net 查看内容

C#TMS系统学习(BaseCity页面)

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
C#TMS系统代码-基础页面BaseCity学习

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

举报 回复 使用道具