200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 2.1.4 Abp vNext 地磅无人值守 车辆物料实现接口

2.1.4 Abp vNext 地磅无人值守 车辆物料实现接口

时间:2020-07-25 07:20:19

相关推荐

2.1.4 Abp vNext 地磅无人值守 车辆物料实现接口

地磅无人值守项目 系列文章目录

文章目录

前言一、获取实体数据二、创建实体数据三、获取翻页数据四、更新实体数据五、删除实体数据六、CarTypeAppService全部代码总结

前言

提示:这里以车辆类型为例,其他业务代码已上传 gitee:

地磅无人值守系统,由车辆,车辆人员、物料、设备(地磅,摄像头、道闸、红外感应、打印机、音响等)模块组成,这些基础信息,配置信息由后台管理,某种程度上可以减轻系统售后维护的工作量。客户端主要任务是对接硬件设备,减少对业务依赖。

一、获取实体数据

ICarTypeRepository是仓储接口;

CarTypeManager是拓展仓储,作用是集中管理CarType仓储;

构造函数注入仓储:

private readonly ICarTypeRepository _repository;private readonly CarTypeManager _manager;public CarTypeAppService(ICarTypeRepository repository,CarTypeManager manager) : base(repository){_repository = repository;_manager = manager;}

局部示例代码:

/// <summary>/// 获取实体/// </summary>/// <param name="id">编号</param>/// <returns></returns>public override async Task<CarTypeDto> GetAsync(Guid id){var model = await _repository.GetAsync(id);return ObjectMapper.Map<CarType, CarTypeDto>(model);}

二、创建实体数据

局部示例代码:

/// <summary>/// 创建数据/// </summary>/// <param name="input"></param>/// <returns></returns>public override async Task<CarTypeDto> CreateAsync(CreateCarTypeDto input){// 获取当前租户input.TenantId = CurrentTenant.Id;// 数据映射var inputModel = ObjectMapper.Map<CreateCarTypeDto, CarType>(input);// 检查实体合法性await _manager.CreateAsync(inputModel);// 创建数据var model = await _repository.InsertAsync(inputModel);// 不用再进行save处理,abp会自动处理return ObjectMapper.Map<CarType, CarTypeDto>(model);}

三、获取翻页数据

局部示例代码:

/// <summary>/// 获取列表/// </summary>/// <param name="input"></param>/// <returns></returns>public override async Task<PagedResultDto<CarTypeDto>> GetListAsync(GetCarTypeListDto input){await CheckGetListPolicyAsync();if (input.Sorting.IsNullOrWhiteSpace()){input.Sorting = nameof(CarType.Orders) + " desc";}// 根据输入条件查询var query = _repository.WhereIf(!input.Filter.IsNullOrWhiteSpace(),(p => p.Name.Contains(input.Filter)));// 获取翻页数据var queryTake = query.OrderBy(input.Sorting).Skip(input.SkipCount).Take(input.MaxResultCount);// 执行数据库查询var queryResult = await AsyncExecuter.ToListAsync(queryTake);// 内外联查询时使用到,此查询没有内外联,可以忽略var infoDtos = queryResult.Select(x =>{var infoDto = ObjectMapper.Map<CarType, CarTypeDto>(x);return infoDto;}).ToList();// 获取数据条数var totalCount = await AsyncExecuter.CountAsync(query);return new PagedResultDto<CarTypeDto>(totalCount,infoDtos);}

四、更新实体数据

局部示例代码:

/// <summary>/// 更新数据/// </summary>/// <param name="id"></param>/// <param name="input"></param>/// <returns></returns>public override async Task<CarTypeDto> UpdateAsync(Guid id, UpdateCarTypeDto input){var model = await _repository.GetAsync(id);if (model.Name != input.Name){await _manager.ChangeNameAsync(model, input.Name);}model.Code = input.Code;model.Status = input.Status;model.Remark = input.Remark;model.Orders = input.Orders;model = await _repository.UpdateAsync(model, autoSave: true);return ObjectMapper.Map<CarType, CarTypeDto>(model);}

五、删除实体数据

局部示例代码:

/// <summary>/// 删除实体/// </summary>/// <param name="id">编号</param>/// <returns></returns>public override async Task DeleteAsync(Guid id){// 这里只是软删除await _repository.DeleteAsync(id);}

六、CarTypeAppService全部代码

CarTypeManager在 FloorScale.Domain 项目。

using System;using FloorScale.Permissions;using FloorScale.Base.CarTypes.Dtos;using Volo.Abp.Application.Dtos;using Volo.Abp.Application.Services;using Microsoft.AspNetCore.Authorization;using System.Threading.Tasks;using System.Linq;using System.Linq.Dynamic.Core;using System.Collections.Generic;namespace FloorScale.Base.CarTypes{public class CarTypeAppService : CrudAppService<CarType, CarTypeDto, Guid, GetCarTypeListDto, CreateCarTypeDto, UpdateCarTypeDto>,ICarTypeAppService{protected override string GetPolicyName { get; set; } = FloorScalePermissions.CarType.Default;protected override string GetListPolicyName { get; set; } = FloorScalePermissions.CarType.Default;protected override string CreatePolicyName { get; set; } = FloorScalePermissions.CarType.Create;protected override string UpdatePolicyName { get; set; } = FloorScalePermissions.CarType.Update;protected override string DeletePolicyName { get; set; } = FloorScalePermissions.CarType.Delete;private readonly ICarTypeRepository _repository;private readonly CarTypeManager _manager;public CarTypeAppService(ICarTypeRepository repository,CarTypeManager manager) : base(repository){_repository = repository;_manager = manager;}/// <summary>/// 获取实体/// </summary>/// <param name="id">编号</param>/// <returns></returns>public override async Task<CarTypeDto> GetAsync(Guid id){var model = await _repository.GetAsync(id);return ObjectMapper.Map<CarType, CarTypeDto>(model);}/// <summary>/// 获取列表/// </summary>/// <param name="input"></param>/// <returns></returns>public override async Task<PagedResultDto<CarTypeDto>> GetListAsync(GetCarTypeListDto input){await CheckGetListPolicyAsync();if (input.Sorting.IsNullOrWhiteSpace()){input.Sorting = nameof(CarType.Orders) + " desc";}// 根据输入条件查询var query = _repository.WhereIf(!input.Filter.IsNullOrWhiteSpace(),(p => p.Name.Contains(input.Filter)));// 获取翻页数据var queryTake = query.OrderBy(input.Sorting).Skip(input.SkipCount).Take(input.MaxResultCount);// 执行数据库查询var queryResult = await AsyncExecuter.ToListAsync(queryTake);// 内外联查询时使用到,此查询没有内外联,可以忽略var infoDtos = queryResult.Select(x =>{var infoDto = ObjectMapper.Map<CarType, CarTypeDto>(x);return infoDto;}).ToList();// 获取数据条数var totalCount = await AsyncExecuter.CountAsync(query);return new PagedResultDto<CarTypeDto>(totalCount,infoDtos);}/// <summary>/// 获取树状列表/// </summary>/// <returns></returns>public async Task<ListResultDto<TreeviewDto>> GetTreeviewAsync(string input){var query = _repository.Where(p => p.Status == true).WhereIf(!input.IsNullOrWhiteSpace(),model => model.Name.Contains(input) || model.Code.Contains(input)).OrderByDescending(p => p.Orders);var queryResult = await AsyncExecuter.ToListAsync(query);return new ListResultDto<TreeviewDto>(ObjectMapper.Map<List<CarType>, List<TreeviewDto>>(queryResult));}/// <summary>/// 创建数据/// </summary>/// <param name="input"></param>/// <returns></returns>[Authorize(FloorScalePermissions.Car.Create)]public override async Task<CarTypeDto> CreateAsync(CreateCarTypeDto input){// 获取当前租户input.TenantId = CurrentTenant.Id;// 数据映射var inputModel = ObjectMapper.Map<CreateCarTypeDto, CarType>(input);// 检查实体合法性await _manager.CreateAsync(inputModel);// 创建数据var model = await _repository.InsertAsync(inputModel);// 不用再进行save处理,abp会自动处理return ObjectMapper.Map<CarType, CarTypeDto>(model);}/// <summary>/// 更新数据/// </summary>/// <param name="id"></param>/// <param name="input"></param>/// <returns></returns>[Authorize(FloorScalePermissions.Car.Update)]public override async Task<CarTypeDto> UpdateAsync(Guid id, UpdateCarTypeDto input){var model = await _repository.GetAsync(id);if (model.Name != input.Name){await _manager.ChangeNameAsync(model, input.Name);}model.Code = input.Code;model.Status = input.Status;model.Remark = input.Remark;model.Orders = input.Orders;model = await _repository.UpdateAsync(model, autoSave: true);return ObjectMapper.Map<CarType, CarTypeDto>(model);}/// <summary>/// 删除实体/// </summary>/// <param name="id">编号</param>/// <returns></returns>[Authorize(FloorScalePermissions.Car.Delete)]public override async Task DeleteAsync(Guid id){// 这里只是软删除await _repository.DeleteAsync(id);}/// <summary>/// 获取最大排序/// </summary>/// <returns></returns>public async Task<int> GetOrdersAsync(){await CheckCreatePolicyAsync();return (_repository.Max(p => (int?)p.Orders) ?? 0) + 3;}}}

总结

业务需求简单的情况下,还是直接操作 ICarTypeRepository 方便些。需要规范的话,就把业务封装起来。

本章代码写得粗糙,有技术问题,欢迎交流。

下一章介绍swagger,接口文档分组问题。

源码放在gitee上:

/chaojunho/floor-scale-open

后续逐步更新

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。