change 结构调整

This commit is contained in:
李鹏军 2024-02-28 11:40:15 +08:00
parent 752f65b1e2
commit 37e225e456
69 changed files with 875 additions and 804 deletions

View File

@ -19,14 +19,15 @@ using Volo.Abp.Json;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
[assembly: HostingStartup(typeof(HostingStartup))] [assembly: HostingStartup(typeof(HostingStartup))]
namespace SJZY.Track.Api namespace SJZY.Track.Api
{ {
[DependsOn( [DependsOn(
typeof(AbpAutofacModule), typeof(AbpAutofacModule),
typeof(SjzyAbpCodeModule), typeof(SjzyAbpCodeModule),
typeof(ApplicationModule),
typeof(AbpAspNetCoreMvcModule), typeof(AbpAspNetCoreMvcModule),
typeof(AbpAspNetCoreSerilogModule), typeof(AbpAspNetCoreSerilogModule),
typeof(ApplicationModule),
typeof(SJZYTrackRepositoryModule) typeof(SJZYTrackRepositoryModule)
)] )]
public class SJZYTrackApiModule : AbpModule public class SJZYTrackApiModule : AbpModule
@ -49,7 +50,9 @@ namespace SJZY.Track.Api
//Json格式化全局处理 //Json格式化全局处理
context.Services.Configure<MvcNewtonsoftJsonOptions>(options => context.Services.Configure<MvcNewtonsoftJsonOptions>(options =>
{ {
options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();//.DefaultContractResolver(); options.SerializerSettings.ContractResolver =
new Newtonsoft.Json.Serialization.
CamelCasePropertyNamesContractResolver(); //.DefaultContractResolver();
options.SerializerSettings.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss")); options.SerializerSettings.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss"));
options.SerializerSettings.Converters.Add(new LongJsonConverter()); options.SerializerSettings.Converters.Add(new LongJsonConverter());
}); });
@ -59,7 +62,6 @@ namespace SJZY.Track.Api
context.Services.AddRedis(); context.Services.AddRedis();
} }
public override void OnApplicationInitialization(ApplicationInitializationContext context) public override void OnApplicationInitialization(ApplicationInitializationContext context)
@ -79,6 +81,7 @@ namespace SJZY.Track.Api
app.UsePrometheus(); app.UsePrometheus();
#region 启动提示 #region 启动提示
Console.WriteLine($@" Console.WriteLine($@"
+-------------------------------------------------------+ +-------------------------------------------------------+
| | | |
@ -89,8 +92,8 @@ namespace SJZY.Track.Api
| | | |
+-------------------------------------------------------+ +-------------------------------------------------------+
"); ");
#endregion #endregion
} }
} }
}
}

View File

@ -1,7 +1,7 @@
using AutoMapper; using AutoMapper;
using SJZY.Track.Application.Dtos.Demo; using SJZY.Track.Application.Dtos.Demo;
using SJZY.Track.Domain.DemoAggregate; using SJZY.Track.Domain.Aggregates.DemoAggregate;
using SJZY.Track.Domain.DemoAggregate.Dtos; using SJZY.Track.Domain.Dtos.Demo;
namespace SJZY.Track.Application.AutoMapper; namespace SJZY.Track.Application.AutoMapper;
@ -12,7 +12,8 @@ internal class AutoMapperProfile : Profile
CreateMap<UnifyPageResultDto<DemoEntity>, UnifyPageResultDto<GetDemoListByPageOutput>>(MemberList.None); CreateMap<UnifyPageResultDto<DemoEntity>, UnifyPageResultDto<GetDemoListByPageOutput>>(MemberList.None);
CreateMap<GetDemoListByPageInput, DemoValueObject>(MemberList.None).ReverseMap(); CreateMap<GetDemoListByPageInput, DemoValueObject>(MemberList.None).ReverseMap();
CreateMap<UnifyPageResultDto<GetDemoListByPageInput>, UnifyPageResultDto<DemoValueObject>>(MemberList.None).ReverseMap(); CreateMap<UnifyPageResultDto<GetDemoListByPageInput>, UnifyPageResultDto<DemoValueObject>>(MemberList.None)
.ReverseMap();
/* /*
代码说明: 代码说明:
MemberList.None的意思是,忽略源对象和目标对象的属性匹配检查,其他可选值:MemberList.Source(检查是否映射了所有源成员)、MemberList.Destination(检查是否映射了所有目标成员) MemberList.None的意思是,忽略源对象和目标对象的属性匹配检查,其他可选值:MemberList.Source(检查是否映射了所有源成员)、MemberList.Destination(检查是否映射了所有目标成员)
@ -28,6 +29,5 @@ internal class AutoMapperProfile : Profile
CreateMap<DemoEntity, DemoInput>(MemberList.None).ReverseMap(); CreateMap<DemoEntity, DemoInput>(MemberList.None).ReverseMap();
CreateMap<DemoEntity, GetDemoListByPageOutput>(MemberList.None); CreateMap<DemoEntity, GetDemoListByPageOutput>(MemberList.None);
CreateMap<DemoEntity, DemoDetailSaveInput>(MemberList.None).ReverseMap(); CreateMap<DemoEntity, DemoDetailSaveInput>(MemberList.None).ReverseMap();
} }
} }

View File

@ -1,22 +1,21 @@
using AutoMapper; using AutoMapper;
using SJZY.Track.Application.Dtos.TrackTemplates; using SJZY.Track.Application.Dtos.TrackTemplates;
using SJZY.Track.Domain.TrackTemplateAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.TrackTemplateAggregate.Dtos; using SJZY.Track.Domain.Dtos.TrackTemplate;
namespace SJZY.Track.Application.AutoMapper namespace SJZY.Track.Application.AutoMapper;
/// <summary>
/// 轨迹模版自动映射
/// </summary>
public class TrackTemplateAutoMapperProfile : Profile
{ {
/// <summary> public TrackTemplateAutoMapperProfile()
/// 轨迹模版自动映射
/// </summary>
public class TrackTemplateAutoMapperProfile : Profile
{ {
public TrackTemplateAutoMapperProfile() CreateMap<GetTrackTemplateDetailVO, GetTrackTemplateDetailDto>(MemberList.None);
{
CreateMap<GetTrackTemplateDetailVO, GetTrackTemplateDetailDto>(MemberList.None);
//CreateMap<UnifyResultDto<GetTrackTemplateDetailVO>, UnifyResultDto<GetTrackTemplateDetailDto>>(MemberList.None); //CreateMap<UnifyResultDto<GetTrackTemplateDetailVO>, UnifyResultDto<GetTrackTemplateDetailDto>>(MemberList.None);
CreateMap<EditTrackTemplateContentInput, TrackTemplateContentEntity>(MemberList.None); CreateMap<EditTrackTemplateContentInput, TrackTemplateContentEntity>(MemberList.None);
}
} }
} }

View File

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
namespace SJZY.Track.Application.Dtos.ProvideServices; namespace SJZY.Track.Application.Dtos.ProvideServices;
@ -22,7 +23,6 @@ public class CreateOrderInput
public OrderDetails Details { get; set; } public OrderDetails Details { get; set; }
} }
public class OrderTemplateInfo public class OrderTemplateInfo
{ {
/// <summary> /// <summary>
@ -43,22 +43,22 @@ public class OrderDetails
/// 目的港口 /// 目的港口
/// </summary> /// </summary>
public string? ArrivalPort { get; set; } public string? ArrivalPort { get; set; }
/// <summary> /// <summary>
/// 起运港口 /// 起运港口
/// </summary> /// </summary>
public string? LeavePort { get; set; } public string? LeavePort { get; set; }
/// <summary> /// <summary>
/// 目的国家,必填 /// 目的国家,必填
/// </summary> /// </summary>
public string ArrivalCountry { get; set; } public string ArrivalCountry { get; set; }
/// <summary> /// <summary>
/// 起运国家,必填 /// 起运国家,必填
/// </summary> /// </summary>
public string LeaveCountry { get; set; } public string LeaveCountry { get; set; }
/// <summary> /// <summary>
/// 目的城市,必填 /// 目的城市,必填
/// </summary> /// </summary>
@ -68,7 +68,7 @@ public class OrderDetails
/// 起运城市,必填 /// 起运城市,必填
/// </summary> /// </summary>
public string LeaveCity { get; set; } public string LeaveCity { get; set; }
public List<FligthInfo> FligthInfos { get; set; } public List<FligthInfo> FligthInfos { get; set; }
} }
@ -78,7 +78,7 @@ public class FligthInfo
/// 航班号 /// 航班号
/// </summary> /// </summary>
public string FlightNo { get; set; } public string FlightNo { get; set; }
/// <summary> /// <summary>
/// 班期 /// 班期
/// </summary> /// </summary>

View File

@ -1,26 +1,15 @@
using System.ComponentModel.DataAnnotations; using SJZY.Track.Domain.Aggregates.OrderAggregate;
namespace SJZY.Track.Application.Dtos.ProvideServices; namespace SJZY.Track.Application.Dtos.ProvideServices;
public class LinkOrderInput public class LinkOrderInput
{ {
/// <summary>
/// false解绑,true关联,必填
/// </summary>
public bool IsLink { get; set; }
public NoInfo NoInfo { get; set; } public NoInfo NoInfo { get; set; }
public List<NoInfo> LinkedOrderInfos { get; set; } public List<NoInfo> LinkedOrderInfos { get; set; }
}
public class NoInfo
{
/// <summary>
/// 订单类型
/// </summary>
public int NoType { get; set; }
/// <summary>
/// 订单号
/// </summary>
[Required]
[MaxLength(100)]
public string OrderNo { get; set; }
} }

View File

@ -1,79 +1,45 @@
using SJZY.Expand.ABP.Core.Common; using SJZY.Expand.ABP.Core.Common;
using SJZY.Track.Application.Dtos.Demo; using SJZY.Track.Application.Dtos.Demo;
using SJZY.Track.Domain.DemoAggregate; using SJZY.Track.Domain.Aggregates.DemoAggregate;
using SJZY.Track.Domain.DemoAggregate.Dtos; using SJZY.Track.Domain.Dtos.Demo;
namespace SJZY.Track.Application.Services.Demo namespace SJZY.Track.Application.Services.Demo;
/// <summary>
/// 接口请求完整样例
/// </summary>
[ApiExplorerSettings(GroupName = "Demo")]
public class InterFaceDemoService : ApplicationService
{ {
/// <summary> #region 构造函数
/// 接口请求完整样例
/// </summary> private readonly IDemoRepository _demoRepository;
[ApiExplorerSettings(GroupName = "Demo")]
public class InterFaceDemoService : ApplicationService public InterFaceDemoService(IDemoRepository demoRepository)
{ {
#region 构造函数 _demoRepository = demoRepository;
private readonly IDemoRepository _demoRepository; }
public InterFaceDemoService(IDemoRepository demoRepository)
#endregion
#region 增删改
/// <summary>
/// 增删改
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("InterFace/Edit")]
public async Task<LongIdBaseDto> Edit(DemoInput input)
{
var res = new LongIdBaseDto();
if (input.Option == OptionType.新增)
{ {
_demoRepository = demoRepository; var entity = ObjectMapper.Map<DemoInput, DemoEntity>(input);
res.Id = await _demoRepository.InsertReturnIdentityAsync(entity);
} }
#endregion else if (input.Option == OptionType.修改 || input.Option == OptionType.删除)
#region 增删改
/// <summary>
/// 增删改
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("InterFace/Edit")]
public async Task<LongIdBaseDto> Edit(DemoInput input)
{
var res = new LongIdBaseDto();
if (input.Option == OptionType.新增)
{
var entity = ObjectMapper.Map<DemoInput, DemoEntity>(input);
res.Id = await _demoRepository.InsertReturnIdentityAsync(entity);
}
else if (input.Option == OptionType.修改 || input.Option == OptionType.删除)
{
var demoInfo = await _demoRepository.GetById1(input.Id);
if (demoInfo == null)
{
//校验数据是否存在...
throw new BusinessException(message: "未找到指定编号下的数据");
}
res.Id = demoInfo.Id;
if (input.Option == OptionType.删除)
{
//await _demoRepository.DeleteAsync(demoInfo); //真删除
//软删除
demoInfo.IsDeleted = true;
await _demoRepository.UpdateAsync(demoInfo);
}
else
{
var entity = ObjectMapper.Map(input, demoInfo);
await _demoRepository.UpdateAsync(entity);
}
}
return res;
}
#endregion
#region 局部更新最佳实践
/// <summary>
/// 局部更新最佳实践
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="BusinessException"></exception>
[HttpPost("InterFace/UpdatePartColumns")]
public async Task<IdBaseDto> UpdatePartColumns(DemoInput input)
{ {
var demoInfo = await _demoRepository.GetById1(input.Id); var demoInfo = await _demoRepository.GetById1(input.Id);
if (demoInfo == null) if (demoInfo == null)
@ -82,152 +48,204 @@ namespace SJZY.Track.Application.Services.Demo
throw new BusinessException(message: "未找到指定编号下的数据"); throw new BusinessException(message: "未找到指定编号下的数据");
} }
//更新同时忽略某几项参数 res.Id = demoInfo.Id;
await _demoRepository.UpdatePartColumns(demoInfo); if (input.Option == OptionType.删除)
{
//await _demoRepository.DeleteAsync(demoInfo); //真删除
return new IdBaseDto() { Id = input.Id }; //软删除
} demoInfo.IsDeleted = true;
#endregion await _demoRepository.UpdateAsync(demoInfo);
}
#region 分页查询接口 else
/// <summary> {
/// 分页查询 var entity = ObjectMapper.Map(input, demoInfo);
/// </summary> await _demoRepository.UpdateAsync(entity);
/// <param name="input"></param> }
/// <returns></returns>
[HttpPost("InterFace/GetListByPage")]
public async Task<UnifyPageResultDto<GetDemoListByPageOutput>> GetListByPage(GetDemoListByPageInput input)
{
//分页时返回值统一用 PageResultDto<> 类型
var list = await _demoRepository.GetListByPage(input.PageSize, input.PageIndex, input.Name);
var res = ObjectMapper.Map<UnifyPageResultDto<DemoEntity>, UnifyPageResultDto<GetDemoListByPageOutput>>(list);
return res;
}
#endregion
#region 入参转换
/// <summary>
/// 入参转换
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("InterFace/InputToValueObject")]
public async Task<List<GetDemoListByPageOutput>> InputToValueObject(GetDemoListByPageInput input)
{
var obj = ObjectMapper.Map<GetDemoListByPageInput, DemoValueObject>(input);
var list = await _demoRepository.InputToValueObject(obj);
var res = ObjectMapper.Map<List<DemoEntity>, List<GetDemoListByPageOutput>>(list);
return res;
}
#endregion
#region 原生sql
/// <summary>
/// 原生sql
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
[HttpPost("InterFace/OriginalSql")]
public async Task<UnifyPageResultDto<DemoValueObject>> OriginalSql(DemoValueObject obj)
{
var list = await _demoRepository.OriginalSql(obj);
return list;
} }
#endregion return res;
#region 自定义返回结果格式
/// <summary>
/// 自定义返回结果格式
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Demo/CustomerResult")]
[CustomerResult]
public async Task<MyCustomerResultOutput> GetListAsync()
{
/*
说明:
理论上我们有全公司级别的返回值约定,不管是前端调后端,还是后端微服务间的调用,都应完全遵循该规范。
但不排除有些特殊情况下,必须要返回自定义格式的场景。
*/
var res = new MyCustomerResultOutput();
res.Code = "200";
res.Message = "这是一个自定义返回结果";
return res;
}
#endregion
#region 约定类型下返回null
/// <summary>
/// 约定类型下返回null
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Demo/ReturnNull")]
public async Task<MyCustomerResultOutput> ReturnNull()
{
MyCustomerResultOutput res = null;
return res;
}
#endregion
#region
/// <summary>
/// 没有返回值
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Demo/WithoutReturnObject")]
public async Task<UnifyResultDto> WithoutReturnObject()
{
return null;
}
#endregion
#region 主从关系实体存储
/// <summary>
/// 主从关系实体存储
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
[HttpPost("InterFace/EntityRelationSave")]
public async Task<UnifyResultDto> EntityRelationSave(DemoDetailSaveInput input)
{
var obj = ObjectMapper.Map<DemoDetailSaveInput, DemoEntity>(input);
var res = await _demoRepository.EntityRelationSave(obj);
return new UnifyResultDto(res);
}
#endregion
#region 数据缓存
/// <summary>
/// 数据缓存
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("InterFace/GetDataCache")]
public async Task<DemoEntity> GetDataCache(IdBaseDto input)
{
var res = await _demoRepository.GetDataCache(input.Id);
return res;
}
#endregion
//[HttpPost("InterFace/AAAA")]
//public async Task<UnifyResultDto> AAAA()
//{
// var result = await _httpClientProxy.Service.GetSystemTokenAsync("Track");
// return result;
//}
} }
#endregion
#region 局部更新最佳实践
/// <summary>
/// 局部更新最佳实践
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="BusinessException"></exception>
[HttpPost("InterFace/UpdatePartColumns")]
public async Task<IdBaseDto> UpdatePartColumns(DemoInput input)
{
var demoInfo = await _demoRepository.GetById1(input.Id);
if (demoInfo == null)
{
//校验数据是否存在...
throw new BusinessException(message: "未找到指定编号下的数据");
}
//更新同时忽略某几项参数
await _demoRepository.UpdatePartColumns(demoInfo);
return new IdBaseDto() { Id = input.Id };
}
#endregion
#region 分页查询接口
/// <summary>
/// 分页查询
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("InterFace/GetListByPage")]
public async Task<UnifyPageResultDto<GetDemoListByPageOutput>> GetListByPage(GetDemoListByPageInput input)
{
//分页时返回值统一用 PageResultDto<> 类型
var list = await _demoRepository.GetListByPage(input.PageSize, input.PageIndex, input.Name);
var res = ObjectMapper.Map<UnifyPageResultDto<DemoEntity>, UnifyPageResultDto<GetDemoListByPageOutput>>(list);
return res;
}
#endregion
#region 入参转换
/// <summary>
/// 入参转换
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("InterFace/InputToValueObject")]
public async Task<List<GetDemoListByPageOutput>> InputToValueObject(GetDemoListByPageInput input)
{
var obj = ObjectMapper.Map<GetDemoListByPageInput, DemoValueObject>(input);
var list = await _demoRepository.InputToValueObject(obj);
var res = ObjectMapper.Map<List<DemoEntity>, List<GetDemoListByPageOutput>>(list);
return res;
}
#endregion
#region 原生sql
/// <summary>
/// 原生sql
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
[HttpPost("InterFace/OriginalSql")]
public async Task<UnifyPageResultDto<DemoValueObject>> OriginalSql(DemoValueObject obj)
{
var list = await _demoRepository.OriginalSql(obj);
return list;
}
#endregion
#region 自定义返回结果格式
/// <summary>
/// 自定义返回结果格式
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Demo/CustomerResult")]
[CustomerResult]
public async Task<MyCustomerResultOutput> GetListAsync()
{
/*
说明:
理论上我们有全公司级别的返回值约定,不管是前端调后端,还是后端微服务间的调用,都应完全遵循该规范。
但不排除有些特殊情况下,必须要返回自定义格式的场景。
*/
var res = new MyCustomerResultOutput();
res.Code = "200";
res.Message = "这是一个自定义返回结果";
return res;
}
#endregion
#region 约定类型下返回null
/// <summary>
/// 约定类型下返回null
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Demo/ReturnNull")]
public async Task<MyCustomerResultOutput> ReturnNull()
{
MyCustomerResultOutput res = null;
return res;
}
#endregion
#region
/// <summary>
/// 没有返回值
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Demo/WithoutReturnObject")]
public async Task<UnifyResultDto> WithoutReturnObject()
{
return null;
}
#endregion
#region 主从关系实体存储
/// <summary>
/// 主从关系实体存储
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
[HttpPost("InterFace/EntityRelationSave")]
public async Task<UnifyResultDto> EntityRelationSave(DemoDetailSaveInput input)
{
var obj = ObjectMapper.Map<DemoDetailSaveInput, DemoEntity>(input);
var res = await _demoRepository.EntityRelationSave(obj);
return new UnifyResultDto(res);
}
#endregion
#region 数据缓存
/// <summary>
/// 数据缓存
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("InterFace/GetDataCache")]
public async Task<DemoEntity> GetDataCache(IdBaseDto input)
{
var res = await _demoRepository.GetDataCache(input.Id);
return res;
}
#endregion
//[HttpPost("InterFace/AAAA")]
//public async Task<UnifyResultDto> AAAA()
//{
// var result = await _httpClientProxy.Service.GetSystemTokenAsync("Track");
// return result;
//}
} }

View File

@ -1,7 +1,7 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using SJZY.Track.Application.Dtos.ProvideServices; using SJZY.Track.Application.Dtos.ProvideServices;
using SJZY.Track.Domain; using SJZY.Track.Domain;
using SJZY.Track.Domain.OrderAggregate; using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.UserCenter.HttpApi.Services; using SJZY.UserCenter.HttpApi.Services;
namespace SJZY.Track.Application.Services.ProvideServices; namespace SJZY.Track.Application.Services.ProvideServices;
@ -10,13 +10,15 @@ namespace SJZY.Track.Application.Services.ProvideServices;
/// 订单服务 /// 订单服务
/// </summary> /// </summary>
[ApiExplorerSettings(GroupName = "提供接口")] [ApiExplorerSettings(GroupName = "提供接口")]
public class OrderService: ApplicationService public class OrderService : ApplicationService
{ {
private readonly IOrderRepository _orderRepository; private readonly IOrderRepository _orderRepository;
private readonly IBasicQuery<OrderLinkEntity> _orderLinkQuery;
public OrderService(IOrderRepository orderRepository) public OrderService(IOrderRepository orderRepository, IBasicQuery<OrderLinkEntity> orderLinkQuery)
{ {
_orderRepository = orderRepository; _orderRepository = orderRepository;
_orderLinkQuery = orderLinkQuery;
} }
/// <summary> /// <summary>
@ -44,10 +46,10 @@ public class OrderService: ApplicationService
}; };
using var tran = TransactionHelper.GetReadCommitted(); using var tran = TransactionHelper.GetReadCommitted();
// 创建订单 // 创建订单
var orderId = await _orderRepository.InsertReturnIdentityAsync(order); var orderId = await _orderRepository.InsertReturnIdentityAsync(order);
// 创建订单模板 // 创建订单模板
var templates = input.Templates.Select(x => new OrderTemplateEntity var templates = input.Templates.Select(x => new OrderTemplateEntity
{ {
@ -60,7 +62,7 @@ public class OrderService: ApplicationService
return true; return true;
} }
/// <summary> /// <summary>
/// 关联订单 /// 关联订单
/// </summary> /// </summary>
@ -69,13 +71,23 @@ public class OrderService: ApplicationService
[HttpPost("Order/Link")] [HttpPost("Order/Link")]
public async Task<bool> LinkOrderAsync(LinkOrderInput input) public async Task<bool> LinkOrderAsync(LinkOrderInput input)
{ {
// var distinctOrderNos = input.LinkedOrderInfos.Distinct().ToList(); //todo:去重
// var distinctOrderInfos = input.LinkedOrderInfos.Distinct().ToList();
if (await _orderRepository.IsAnyAsync(x => x.IsEqual(input.NoInfo)))
{
}
// var links = input.LinkedOrderInfos.Select(x => new OrderLinkEntity // var links = input.LinkedOrderInfos.Select(x => new OrderLinkEntity
// { // {
// LinkOrderId = x., // OrderNo = x.OrderNo,
// OrderId = 0 // OrderType = x.NoType
// }) // }).ToList();
//
// foreach (var link in links)
// {
// if (await _orderLinkQuery.IsAnyAsync(x => x.))
// }
// _orderRepository.LinkOrderAsync(); // _orderRepository.LinkOrderAsync();
return true; return true;

View File

@ -1,9 +1,7 @@
using SJZY.Track.Application.Dtos.ProvideServices; using SJZY.Track.Application.Dtos.ProvideServices;
using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.TrackTemplateAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Application.Dtos.ProvideServices;
using SJZY.Track.Repository.TrackDetails;
namespace SJZY.Track.Application.Services.ProvideServices; namespace SJZY.Track.Application.Services.ProvideServices;

View File

@ -1,72 +1,66 @@
using SJZY.Track.Application.Dtos.TrackStatus; using SJZY.Track.Application.Dtos.TrackStatus;
using SJZY.Track.Application.Dtos.TrackTemplates; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.TrackStatusAggregate;
using SJZY.Track.Domain.TrackTemplateAggregate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Services.TrackStatus namespace SJZY.Track.Application.Services.TrackStatus;
/// <summary>
/// 轨迹状态
/// </summary>
[ApiExplorerSettings(GroupName = "轨迹状态")]
[Route("/Track/Status")]
public class TrackStatusService : ApplicationService, ITransientDependency
{ {
/// <summary> private readonly ITrackStatusRepository _trackStatusRepository;
/// 轨迹状态
/// </summary> public TrackStatusService(
[ApiExplorerSettings(GroupName = "轨迹状态")] ITrackStatusRepository trackStatusRepository
[Route("/Track/Status")] )
public class TrackStatusService : ApplicationService, ITransientDependency
{ {
private readonly ITrackStatusRepository _trackStatusRepository; this._trackStatusRepository = trackStatusRepository;
public TrackStatusService(
ITrackStatusRepository trackStatusRepository
)
{
this._trackStatusRepository=trackStatusRepository;
}
/// <summary>
/// 轨迹状态编辑
/// </summary>
/// <returns></returns>
[HttpPost("Edit")]
public async Task<UnifyResultDto> EditAsync(EditTrackStatusInput input)
{
return input.Options switch
{
OptionType.新增 => await AddAsync(input),
OptionType.修改 => await UpdateAsync(input),
OptionType.删除 => await DeleteAsync(input),
_ => throw new BusinessException(message: "当前操作动作不合法")
};
}
#region 私有方法
private async Task<UnifyResultDto> AddAsync(EditTrackStatusInput input)
{
var entity = ObjectMapper.Map<EditTrackStatusInput, TrackStatusEntity>(input);
var isTrue = await _trackStatusRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackStatusInput input)
{
var templateEntity = await _trackStatusRepository.GetFirstAsync(a => a.Id == input.Id);
ObjectMapper.Map(input, templateEntity);
var isTrue = await _trackStatusRepository.UpdateAsync(templateEntity);
return new UnifyResultDto("200", "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackStatusInput input)
{
var isTrue = await _trackStatusRepository.SoftDeleteAsync(x => x.Id == input.Id);
return new UnifyResultDto("200", "删除成功", isTrue);
}
#endregion
} }
}
/// <summary>
/// 轨迹状态编辑
/// </summary>
/// <returns></returns>
[HttpPost("Edit")]
public async Task<UnifyResultDto> EditAsync(EditTrackStatusInput input)
{
return input.Options switch
{
OptionType.新增 => await AddAsync(input),
OptionType.修改 => await UpdateAsync(input),
OptionType.删除 => await DeleteAsync(input),
_ => throw new BusinessException(message: "当前操作动作不合法")
};
}
#region 私有方法
private async Task<UnifyResultDto> AddAsync(EditTrackStatusInput input)
{
var entity = ObjectMapper.Map<EditTrackStatusInput, TrackStatusEntity>(input);
var isTrue = await _trackStatusRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackStatusInput input)
{
var templateEntity = await _trackStatusRepository.GetFirstAsync(a => a.Id == input.Id);
ObjectMapper.Map(input, templateEntity);
var isTrue = await _trackStatusRepository.UpdateAsync(templateEntity);
return new UnifyResultDto("200", "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackStatusInput input)
{
var isTrue = await _trackStatusRepository.SoftDeleteAsync(x => x.Id == input.Id);
return new UnifyResultDto("200", "删除成功", isTrue);
}
#endregion
}

View File

@ -1,10 +1,10 @@
using Microsoft.Extensions.Localization; using System.Linq.Expressions;
using Microsoft.Extensions.Localization;
using SJZY.Expand.ABP.Core.Localization; using SJZY.Expand.ABP.Core.Localization;
using SJZY.Track.Application.Dtos.TrackTemplates; using SJZY.Track.Application.Dtos.TrackTemplates;
using SJZY.Track.Application.Localization; using SJZY.Track.Application.Localization;
using SJZY.Track.Domain.TrackTemplateAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.TrackTemplateAggregate.Dtos; using SJZY.Track.Domain.Dtos.TrackTemplate;
using System.Linq.Expressions;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Services.TrackTemplates; namespace SJZY.Track.Application.Services.TrackTemplates;
@ -113,7 +113,8 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("GetContentPage")] [HttpPost("GetContentPage")]
public async Task<UnifyPageResultDto<GetTrackTemplateContentPageOutputVO>> GetContentPageAsync([FromBody] GetTrackTemplateContentPageInputVO input) public async Task<UnifyPageResultDto<GetTrackTemplateContentPageOutputVO>> GetContentPageAsync(
[FromBody] GetTrackTemplateContentPageInputVO input)
{ {
return await _trackTemplateRepository.GetContentPageAsync(input); return await _trackTemplateRepository.GetContentPageAsync(input);
} }
@ -140,7 +141,7 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
if (input.Options != OptionTypeNoNull.删除) if (input.Options != OptionTypeNoNull.删除)
{ {
Expression<Func<TrackTemplateContentEntity, bool>> isAnyExp = x => Expression<Func<TrackTemplateContentEntity, bool>> isAnyExp = x =>
x.TrackTemplateId == input.TrackTemplateId && x.TrackContentId == input.TrackContentId; x.TrackTemplateId == input.TrackTemplateId && x.TrackContentId == input.TrackContentId;
if (input.Options == OptionTypeNoNull.修改) isAnyExp.And(x => x.Id != input.Id); if (input.Options == OptionTypeNoNull.修改) isAnyExp.And(x => x.Id != input.Id);
if (await _trackTemplateRepository.IsAnyAsync(isAnyExp)) if (await _trackTemplateRepository.IsAnyAsync(isAnyExp))
@ -159,7 +160,8 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
case OptionTypeNoNull.修改: case OptionTypeNoNull.修改:
var oldEntity = await _trackTemplateRepository.GetByIdAsync(input.Id!.Value) ?? throw new BusinessException(message: _stringLocalizer["NotFindData"]); var oldEntity = await _trackTemplateRepository.GetByIdAsync(input.Id!.Value) ??
throw new BusinessException(message: _stringLocalizer["NotFindData"]);
ObjectMapper.Map(input, oldEntity); ObjectMapper.Map(input, oldEntity);
@ -174,7 +176,8 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
break; break;
default: default:
throw new BusinessException(message: _stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum, nameof(EditTrackTemplateContentInput.Options)]); throw new BusinessException(message: _stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum,
nameof(EditTrackTemplateContentInput.Options)]);
} }
return true; return true;

View File

@ -1,7 +1,7 @@
namespace SJZY.Track.Domain.DemoAggregate; namespace SJZY.Track.Domain.Aggregates.DemoAggregate;
[SugarTable("t_demo_detail")] [SugarTable("t_demo_detail")]
public class DemoDetailEntity public class DemoDetailEntity : IEntity
{ {
/// <summary> /// <summary>
/// Id /// Id

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.DemoAggregate; namespace SJZY.Track.Domain.Aggregates.DemoAggregate;
/// <summary> /// <summary>
/// 测试表 /// 测试表
/// </summary> /// </summary>
[SugarTable("t_demo")] [SugarTable("t_demo")]
public class DemoEntity : IFullAuditedBasicEntitys public class DemoEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// Id /// Id
@ -33,5 +33,4 @@ public class DemoEntity : IFullAuditedBasicEntitys
[Navigate(NavigateType.OneToMany, nameof(DemoDetailEntity.DemoId))] [Navigate(NavigateType.OneToMany, nameof(DemoDetailEntity.DemoId))]
public List<DemoDetailEntity> DemoDetailList { get; set; } public List<DemoDetailEntity> DemoDetailList { get; set; }
} }

View File

@ -1,6 +1,6 @@
using SJZY.Track.Domain.DemoAggregate.Dtos; using SJZY.Track.Domain.Dtos.Demo;
namespace SJZY.Track.Domain.DemoAggregate namespace SJZY.Track.Domain.Aggregates.DemoAggregate
{ {
public interface IDemoRepository public interface IDemoRepository
{ {

View File

@ -1,6 +1,6 @@
using SJZY.Track.Domain.OrderAggregate.Dtos; using SJZY.Track.Domain.Dtos.Order;
namespace SJZY.Track.Domain.OrderAggregate; namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
public interface IOrderRepository : IBasicRepository<OrderEntity> public interface IOrderRepository : IBasicRepository<OrderEntity>
{ {

View File

@ -1,12 +1,13 @@
namespace SJZY.Track.Domain.OrderAggregate; using System.ComponentModel.DataAnnotations;
namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
/// <summary> /// <summary>
/// 轨迹订单主表 /// 轨迹订单主表
/// </summary> /// </summary>
[SugarTable("t_order")] [SugarTable("t_order")]
public class OrderEntity : IFullAuditedBasicEntitys public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>
@ -67,4 +68,25 @@ public class OrderEntity : IFullAuditedBasicEntitys
[SugarColumn(ColumnName = "SubSystemId")] [SugarColumn(ColumnName = "SubSystemId")]
public int SubSystemId { get; set; } public int SubSystemId { get; set; }
public bool IsEqual(NoInfo noInfo)
{
return OrderType == noInfo.NoType && OrderNo == noInfo.OrderNo;
}
}
public struct NoInfo
{
/// <summary>
/// 订单类型,必填
/// </summary>
[Required]
public int NoType { get; set; }
/// <summary>
/// 订单号,必填
/// </summary>
[Required]
[MaxLength(100)]
public string OrderNo { get; set; }
} }

View File

@ -1,13 +1,12 @@
namespace SJZY.Track.Domain.OrderAggregate; namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
/// <summary> /// <summary>
/// 轨迹订单关联表(1:N) /// 轨迹订单关联表(1:N)
/// </summary> /// </summary>
[SugarTable("t_order_link")] [SugarTable("t_order_link")]
public class OrderLinkEntity : ICreateBaicEntity, public class OrderLinkEntity : ICreateBaicEntity,
ISoftDeleteBasicEntity ISoftDeleteBasicEntity, IEntity
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>
@ -19,19 +18,19 @@ public class OrderLinkEntity : ICreateBaicEntity,
/// </summary> /// </summary>
[SugarColumn(ColumnName = "OrderType")] [SugarColumn(ColumnName = "OrderType")]
public int OrderType { get; set; } public int OrderType { get; set; }
/// <summary> /// <summary>
/// 订单号 /// 订单号
/// </summary> /// </summary>
[SugarColumn(ColumnName = "OrderNo")] [SugarColumn(ColumnName = "OrderNo")]
public string OrderNo { get; set; } public string OrderNo { get; set; }
/// <summary> /// <summary>
/// 关联的订单类型 /// 关联的订单类型
/// </summary> /// </summary>
[SugarColumn(ColumnName = "LinkOrderType")] [SugarColumn(ColumnName = "LinkOrderType")]
public int LinkOrderType { get; set; } public int LinkOrderType { get; set; }
/// <summary> /// <summary>
/// 关联的订单号 /// 关联的订单号
/// </summary> /// </summary>
@ -42,12 +41,12 @@ public class OrderLinkEntity : ICreateBaicEntity,
/// 创建人 /// 创建人
/// </summary> /// </summary>
public int CreateUserId { get; set; } public int CreateUserId { get; set; }
/// <summary> /// <summary>
/// 创建时间 /// 创建时间
/// </summary> /// </summary>
public DateTime? CreateTime { get; set; } public DateTime? CreateTime { get; set; }
/// <summary> /// <summary>
/// 是否删除(已解绑) /// 是否删除(已解绑)
/// </summary> /// </summary>

View File

@ -1,12 +1,11 @@
namespace SJZY.Track.Domain.OrderAggregate; namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
/// <summary> /// <summary>
/// 轨迹订单模板表(1:N) /// 轨迹订单模板表(1:N)
/// </summary> /// </summary>
[SugarTable("t_order_template")] [SugarTable("t_order_template")]
public class OrderTemplateEntity : ICreateBaicEntity public class OrderTemplateEntity : ICreateBaicEntity, IEntity
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>

View File

@ -0,0 +1,5 @@
namespace SJZY.Track.Domain.Aggregates.TrackContentAggregate;
public interface ITrackContentRepository : IBasicRepository<TrackContentEntity>
{
}

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackContentAggregate; namespace SJZY.Track.Domain.Aggregates.TrackContentAggregate;
/// <summary> /// <summary>
/// 轨迹内容 /// 轨迹内容
/// </summary> /// </summary>
[SugarTable("t_track_content")] [SugarTable("t_track_content")]
public class TrackContentEntity : IFullAuditedBasicEntitys public class TrackContentEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackContentAggregate; namespace SJZY.Track.Domain.Aggregates.TrackContentAggregate;
/// <summary> /// <summary>
/// 轨迹内容映射表 /// 轨迹内容映射表
/// </summary> /// </summary>
[SugarTable("t_track_content_map")] [SugarTable("t_track_content_map")]
public class TrackContentMapEntity : IFullAuditedBasicEntitys public class TrackContentMapEntity : IFullAuditedBasicEntitys, IEntity
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,7 +1,6 @@
using SJZY.Track.Domain.TrackDetailsAggregate; using SJZY.Track.Domain.Dtos.TrackDetails;
using SJZY.Track.Repository.TrackDetails.Dtos;
namespace SJZY.Track.Repository.TrackDetails; namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
public interface ITrackDetailsRepository public interface ITrackDetailsRepository
{ {

View File

@ -1,9 +1,9 @@
using Nest; using Nest;
using SJZY.Expand.ElasticSearch; using SJZY.Expand.ElasticSearch;
namespace SJZY.Track.Domain.TrackDetailsAggregate; namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
[ElasticsearchType(Name = IndexName)] [ElasticsearchType(RelationName = IndexName)]
public class TrackDetailsIndex : IdBaseIndex public class TrackDetailsIndex : IdBaseIndex
{ {
public const string IndexName = "sjzy_track_details"; public const string IndexName = "sjzy_track_details";

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Domain.TrackFlagAggregate; namespace SJZY.Track.Domain.Aggregates.TrackFlagAggregate;
public interface ITrackFlagRepository : IBasicRepository<TrackFlagEntity> public interface ITrackFlagRepository : IBasicRepository<TrackFlagEntity>
{ {

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackFlagAggregate; namespace SJZY.Track.Domain.Aggregates.TrackFlagAggregate;
/// <summary> /// <summary>
/// 轨迹标记表 /// 轨迹标记表
/// </summary> /// </summary>
[SugarTable("t_track_flag")] [SugarTable("t_track_flag")]
public class TrackFlagEntity : IFullAuditedBasicEntitys public class TrackFlagEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,6 +1,5 @@
namespace SJZY.Track.Domain.TrackPullAggregate; namespace SJZY.Track.Domain.Aggregates.TrackPullAggregate;
public interface ITrackPullConfigRepository : IBasicRepository<TrackPullConfigEntity> public interface ITrackPullConfigRepository : IBasicRepository<TrackPullConfigEntity>
{ {
} }

View File

@ -1,12 +1,11 @@
namespace SJZY.Track.Domain.TrackPullAggregate; namespace SJZY.Track.Domain.Aggregates.TrackPullAggregate;
/// <summary> /// <summary>
/// 轨迹拉取配置表 /// 轨迹拉取配置表
/// </summary> /// </summary>
[SugarTable("t_track_pull_config")] [SugarTable("t_track_pull_config")]
public class TrackPullConfigEntity : IFullAuditedBasicEntitys public class TrackPullConfigEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>
@ -42,5 +41,4 @@ public class TrackPullConfigEntity : IFullAuditedBasicEntitys
/// </summary> /// </summary>
[SugarColumn(ColumnName = "TrackTemplateId")] [SugarColumn(ColumnName = "TrackTemplateId")]
public int TrackTemplateId { get; set; } public int TrackTemplateId { get; set; }
} }

View File

@ -1,12 +1,11 @@
namespace SJZY.Track.Domain.TrackPullAggregate; namespace SJZY.Track.Domain.Aggregates.TrackPullAggregate;
/// <summary> /// <summary>
/// 轨迹拉取内容配置表 /// 轨迹拉取内容配置表
/// </summary> /// </summary>
[SugarTable("t_track_pull_content_config")] [SugarTable("t_track_pull_content_config")]
public class TrackPullContentConfigEntity : IFullAuditedBasicEntitys public class TrackPullContentConfigEntity : IFullAuditedBasicEntitys, IEntity
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>
@ -66,5 +65,4 @@ public class TrackPullContentConfigEntity : IFullAuditedBasicEntitys
/// </summary> /// </summary>
[SugarColumn(ColumnName = "TrackTimeZone")] [SugarColumn(ColumnName = "TrackTimeZone")]
public string TrackTimeZone { get; set; } public string TrackTimeZone { get; set; }
} }

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackPullAggregate; namespace SJZY.Track.Domain.Aggregates.TrackPullAggregate;
/// <summary> /// <summary>
/// 轨迹拉取/推送参数配置 /// 轨迹拉取/推送参数配置
/// </summary> /// </summary>
[SugarTable("t_track_push_pull_params_config")] [SugarTable("t_track_push_pull_params_config")]
public class TrackPushPullParamsConfigEntity : IFullAuditedBasicEntitys public class TrackPushPullParamsConfigEntity : IFullAuditedBasicEntitys, IEntity
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Domain.TrackPushAggregate; namespace SJZY.Track.Domain.Aggregates.TrackPushAggregate;
public interface ITrackPushConfigRepository : IBasicRepository<TrackPushConfigEntity> public interface ITrackPushConfigRepository : IBasicRepository<TrackPushConfigEntity>
{ {

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackPushAggregate; namespace SJZY.Track.Domain.Aggregates.TrackPushAggregate;
/// <summary> /// <summary>
/// 轨迹推送配置表 /// 轨迹推送配置表
/// </summary> /// </summary>
[SugarTable("t_track_push_config")] [SugarTable("t_track_push_config")]
public class TrackPushConfigEntity : IFullAuditedBasicEntitys public class TrackPushConfigEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackPushAggregate; namespace SJZY.Track.Domain.Aggregates.TrackPushAggregate;
/// <summary> /// <summary>
/// 轨迹推送内容配置表 /// 轨迹推送内容配置表
/// </summary> /// </summary>
[SugarTable("t_track_push_content_config")] [SugarTable("t_track_push_content_config")]
public class TrackPushContentConfigEntity : IFullAuditedBasicEntitys public class TrackPushContentConfigEntity : IFullAuditedBasicEntitys, IEntity
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,6 +1,5 @@
namespace SJZY.Track.Domain.TrackStatusAggregate; namespace SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
public interface ITrackStatusRepository : IBasicRepository<TrackStatusEntity> public interface ITrackStatusRepository : IBasicRepository<TrackStatusEntity>
{ {
} }

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackStatusAggregate; namespace SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
/// <summary> /// <summary>
/// 轨迹状态表 /// 轨迹状态表
/// </summary> /// </summary>
[SugarTable("t_track_status")] [SugarTable("t_track_status")]
public class TrackStatusEntity : IFullAuditedBasicEntitys public class TrackStatusEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,6 +1,6 @@
using SJZY.Track.Domain.TrackTemplateAggregate.Dtos; using SJZY.Track.Domain.Dtos.TrackTemplate;
namespace SJZY.Track.Domain.TrackTemplateAggregate; namespace SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
public interface ITrackTemplateRepository : IBasicRepository<TrackTemplateEntity> public interface ITrackTemplateRepository : IBasicRepository<TrackTemplateEntity>
{ {
@ -15,7 +15,8 @@ public interface ITrackTemplateRepository : IBasicRepository<TrackTemplateEntity
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
Task<UnifyPageResultDto<GetTrackTemplateContentPageOutputVO>> GetContentPageAsync(GetTrackTemplateContentPageInputVO input); Task<UnifyPageResultDto<GetTrackTemplateContentPageOutputVO>> GetContentPageAsync(
GetTrackTemplateContentPageInputVO input);
/// <summary> /// <summary>
/// 轨迹模板内容详情 /// 轨迹模板内容详情

View File

@ -1,10 +1,10 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate; namespace SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
/// <summary> /// <summary>
/// 轨迹模板内容表(1:N) /// 轨迹模板内容表(1:N)
/// </summary> /// </summary>
[SugarTable("t_track_template_content")] [SugarTable("t_track_template_content")]
public class TrackTemplateContentEntity : IFullAuditedBasicEntitys public class TrackTemplateContentEntity : IFullAuditedBasicEntitys, IEntity
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键

View File

@ -1,12 +1,11 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate; namespace SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
/// <summary> /// <summary>
/// 轨迹模板表 /// 轨迹模板表
/// </summary> /// </summary>
[SugarTable("t_track_template")] [SugarTable("t_track_template")]
public class TrackTemplateEntity : IFullAuditedBasicEntitys public class TrackTemplateEntity : IFullAuditedBasicEntitys, IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>
@ -30,5 +29,4 @@ public class TrackTemplateEntity : IFullAuditedBasicEntitys
/// </summary> /// </summary>
[SugarColumn(ColumnName = "SubSystemId")] [SugarColumn(ColumnName = "SubSystemId")]
public int SubSystemId { get; set; } public int SubSystemId { get; set; }
} }

View File

@ -1,18 +0,0 @@
namespace SJZY.Track.Domain.DemoAggregate.Dtos
{
public class DemoValueObject
{
public string Name { get; set; }
/// <summary>
/// 当前页码
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 每页大小
/// </summary>
public int PageSize { get; set; }
}
}

View File

@ -0,0 +1,16 @@
namespace SJZY.Track.Domain.Dtos.Demo;
public class DemoValueObject
{
public string Name { get; set; }
/// <summary>
/// 当前页码
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 每页大小
/// </summary>
public int PageSize { get; set; }
}

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Domain.OrderAggregate.Dtos; namespace SJZY.Track.Domain.Dtos.Order;
public class OrderTemplateDto public class OrderTemplateDto
{ {

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Repository.TrackDetails.Dtos; namespace SJZY.Track.Domain.Dtos.TrackDetails;
public class TrackDetailsQueryInput : PageInfoInput public class TrackDetailsQueryInput : PageInfoInput
{ {

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate.Dtos; namespace SJZY.Track.Domain.Dtos.TrackTemplate;
public class GetPageTrackTemplateVO : PageInfoInput public class GetPageTrackTemplateVO : PageInfoInput
{ {

View File

@ -0,0 +1,41 @@
namespace SJZY.Track.Domain.Dtos.TrackTemplate;
public class GetTrackTemplateContentDetailOutputVO
{
public int Id { get; set; }
/// <summary>
/// 是否可删
/// </summary>
public bool IsCanDelete { get; set; }
/// <summary>
/// 是否对外
/// </summary>
public bool IsExternal { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 轨迹内容
/// </summary>
public string TrackContent { get; set; }
/// <summary>
/// 轨迹内容id
/// </summary>
public int TrackContentId { get; set; }
/// <summary>
/// 轨迹状态
/// </summary>
public string TrackStatus { get; set; }
/// <summary>
/// 轨迹状态id
/// </summary>
public int TrackStatusId { get; set; }
}

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate.Dtos; namespace SJZY.Track.Domain.Dtos.TrackTemplate;
public class GetTrackTemplateContentPageInputVO : PageInfoInput public class GetTrackTemplateContentPageInputVO : PageInfoInput
{ {

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate.Dtos; namespace SJZY.Track.Domain.Dtos.TrackTemplate;
public class GetTrackTemplateContentPageOutputVO public class GetTrackTemplateContentPageOutputVO
{ {

View File

@ -1,4 +1,4 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate.Dtos; namespace SJZY.Track.Domain.Dtos.TrackTemplate;
/// <summary> /// <summary>
/// 获取轨迹模版明细 /// 获取轨迹模版明细

View File

@ -0,0 +1,5 @@
namespace SJZY.Track.Domain.Dtos.TrackTemplate;
public class TemplateContentDto
{
}

View File

@ -7,3 +7,4 @@ global using System;
global using System.Collections.Generic; global using System.Collections.Generic;
global using System.Linq.Expressions; global using System.Linq.Expressions;
global using System.Threading.Tasks; global using System.Threading.Tasks;
global using SJZY.Track.Domain.SeedWork;

View File

@ -0,0 +1,38 @@
namespace SJZY.Track.Domain;
public interface IBasicQuery<T> where T : IEntity
{
/// <summary>
/// top 1
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
Task<T> GetFirstAsync(Expression<Func<T, bool>> whereExpression);
Task<TResult> GetFirstAsync<TResult>(Expression<Func<T, bool>> whereExpression,
Expression<Func<T, TResult>> resultExpression);
/// <summary>
/// get list
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
Task<List<T>> GetListAsync(Expression<Func<T, bool>> whereExpression);
Task<List<TResult>> GetListAsync<TResult>(Expression<Func<T, bool>> whereExpression,
Expression<Func<T, TResult>> resultExpression);
/// <summary>
/// count
/// </summary>
/// <param name="exp"></param>
/// <returns></returns>
Task<int> CountAsync(Expression<Func<T, bool>> exp);
/// <summary>
/// exists
/// </summary>
/// <param name="exp"></param>
/// <returns></returns>
Task<bool> IsAnyAsync(Expression<Func<T, bool>> exp);
}

View File

@ -1,39 +1,7 @@
namespace SJZY.Track.Domain; namespace SJZY.Track.Domain;
public interface IBasicRepository<T> public interface IBasicRepository<T> : IBasicQuery<T> where T : IAggregateRoot
{ {
/// <summary>
/// top 1
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
Task<T> GetFirstAsync(Expression<Func<T, bool>> whereExpression);
Task<TResult> GetFirstAsync<TResult>(Expression<Func<T, bool>> whereExpression, Expression<Func<T, TResult>> resultExpression);
/// <summary>
/// get list
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
Task<List<T>> GetListAsync(Expression<Func<T, bool>> whereExpression);
Task<List<TResult>> GetListAsync<TResult>(Expression<Func<T, bool>> whereExpression, Expression<Func<T, TResult>> resultExpression);
/// <summary>
/// count
/// </summary>
/// <param name="exp"></param>
/// <returns></returns>
Task<int> CountAsync(Expression<Func<T, bool>> exp);
/// <summary>
/// exists
/// </summary>
/// <param name="exp"></param>
/// <returns></returns>
Task<bool> IsAnyAsync(Expression<Func<T, bool>> exp);
/// <summary> /// <summary>
/// update /// update
/// </summary> /// </summary>

View File

@ -12,12 +12,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="TrackContentAggregate\Dtos\" /> <Folder Include="Aggregates\"/>
<Folder Include="TrackFlagAggregate\Dtos\" />
<Folder Include="TrackPullAggregate\Dtos\" />
<Folder Include="TrackPushAggregate\Dtos\" />
<Folder Include="TrackStatusAggregate\Dtos\" />
<Folder Include="TrackStatusAggregate\Dtos\" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,5 @@
namespace SJZY.Track.Domain.SeedWork;
public interface IAggregateRoot : IEntity
{
}

View File

@ -0,0 +1,5 @@
namespace SJZY.Track.Domain.SeedWork;
public interface IEntity
{
}

View File

@ -1,6 +0,0 @@
namespace SJZY.Track.Domain.TrackContentAggregate
{
public interface ITrackContentRepository : IBasicRepository<TrackContentEntity>
{
}
}

View File

@ -1,42 +0,0 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate.Dtos
{
public class GetTrackTemplateContentDetailOutputVO
{
public int Id { get; set; }
/// <summary>
/// 是否可删
/// </summary>
public bool IsCanDelete { get; set; }
/// <summary>
/// 是否对外
/// </summary>
public bool IsExternal { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 轨迹内容
/// </summary>
public string TrackContent { get; set; }
/// <summary>
/// 轨迹内容id
/// </summary>
public int TrackContentId { get; set; }
/// <summary>
/// 轨迹状态
/// </summary>
public string TrackStatus { get; set; }
/// <summary>
/// 轨迹状态id
/// </summary>
public int TrackStatusId { get; set; }
}
}

View File

@ -1,6 +0,0 @@
namespace SJZY.Track.Domain.TrackTemplateAggregate.Dtos;
public class TemplateContentDto
{
}

View File

@ -0,0 +1,25 @@
using System.Linq.Expressions;
using SJZY.Track.Domain;
using SJZY.Track.Domain.SeedWork;
namespace SJZY.Track.Repository;
public class BasicQuery<T> : SimpleClient<T>, IBasicQuery<T> where T : class, IEntity, new()
{
public BasicQuery()
{
Context = SqlsugarScopeBasic.GetContextSafely("default");
}
public async Task<TResult> GetFirstAsync<TResult>(Expression<Func<T, bool>> whereExpression,
Expression<Func<T, TResult>> resultExpression)
{
return await Context.Queryable<T>().Where(whereExpression).Select(resultExpression).FirstAsync();
}
public async Task<List<TResult>> GetListAsync<TResult>(Expression<Func<T, bool>> whereExpression,
Expression<Func<T, TResult>> resultExpression)
{
return await Context.Queryable<T>().Where(whereExpression).Select(resultExpression).ToListAsync();
}
}

View File

@ -1,5 +1,6 @@
using SJZY.Track.Domain; using System.Linq.Expressions;
using System.Linq.Expressions; using SJZY.Track.Domain;
using SJZY.Track.Domain.SeedWork;
using Volo.Abp; using Volo.Abp;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;
@ -8,25 +9,8 @@ namespace SJZY.Track.Repository;
/// 仓储基类实现 /// 仓储基类实现
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
public class BasicRepository<T> : SimpleClient<T>, IBasicRepository<T> where T : class, new() public class BasicRepository<T> : BasicQuery<T>, IBasicRepository<T> where T : class, IAggregateRoot, new()
{ {
public BasicRepository()
{
Context = SqlsugarScopeBasic.GetContextSafely("default");
}
public async Task<TResult> GetFirstAsync<TResult>(Expression<Func<T, bool>> whereExpression,
Expression<Func<T, TResult>> resultExpression)
{
return await Context.Queryable<T>().Where(whereExpression).Select(resultExpression).FirstAsync();
}
public async Task<List<TResult>> GetListAsync<TResult>(Expression<Func<T, bool>> whereExpression,
Expression<Func<T, TResult>> resultExpression)
{
return await Context.Queryable<T>().Where(whereExpression).Select(resultExpression).ToListAsync();
}
public async Task<bool> UpdateAsync(T entity, Expression<Func<T, object>> ignoreColumns) public async Task<bool> UpdateAsync(T entity, Expression<Func<T, object>> ignoreColumns)
{ {
return await Context.Updateable(entity) return await Context.Updateable(entity)

View File

@ -1,84 +1,87 @@
using SJZY.Track.Domain.DemoAggregate; using System.Transactions;
using SJZY.Track.Domain.DemoAggregate.Dtos; using SJZY.Track.Domain.Aggregates.DemoAggregate;
using System.Transactions; using SJZY.Track.Domain.Dtos.Demo;
namespace SJZY.Track.Repository namespace SJZY.Track.Repository;
public class DemoRepository : BasicRepository<DemoEntity>, IDemoRepository, IScopedDependency
{ {
public class DemoRepository : BasicRepository<DemoEntity>, IDemoRepository, IScopedDependency /*
一般情况下常规的增删改方法不需要自己实现,只需要按照 BasicRepository 中的格式原封不动的暴露出去即可,
比如这里接口 只声明了 UpdateAsync 和 InsertReturnIdentityAsync 接口的定义,但是这两个方法的实现我们不用写,直接交给父类实现即可
*/
#region 根据主键获取单条数据
/// <summary>
/// 根据主键获取单条数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Task<DemoEntity> GetById1(int id)
{ {
/* /*
一般情况下常规的增删改方法不需要自己实现,只需要按照 BasicRepository 中的格式原封不动的暴露出去即可,
比如这里接口 只声明了 UpdateAsync 和 InsertReturnIdentityAsync 接口的定义,但是这两个方法的实现我们不用写,直接交给父类实现即可 //以下两种方法都不会因为没找到数据而抛异常
var model1 = base.GetFirst(m => m.Id == 0);
var model = base.GetSingle(m => m.Id == 0);
//同样的写法在linq下,如果不加 OrDefault 一定会报错
var model = base.GetList().Single(m => m.Id == 0);
var model1 = base.GetList().First(m => m.Id == 0);
*/ */
return base.GetSingleAsync(it => it.Id == id);
}
#region 根据主键获取单条数据 #endregion
/// <summary> #region 分页获取
/// 根据主键获取单条数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Task<DemoEntity> GetById1(int id)
{
/*
//以下两种方法都不会因为没找到数据而抛异常
var model1 = base.GetFirst(m => m.Id == 0);
var model = base.GetSingle(m => m.Id == 0);
/// <summary>
/// 分页获取
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<UnifyPageResultDto<DemoEntity>> GetListByPage(int pageSize, int pageindex, string name)
{
var list = await AsQueryable()
.WhereIF(!string.IsNullOrEmpty(name), a => a.Name.Contains(name))
.ToPagedListAsync(pageindex, pageSize);
//同样的写法在linq下,如果不加 OrDefault 一定会报错 return list;
var model = base.GetList().Single(m => m.Id == 0); }
var model1 = base.GetList().First(m => m.Id == 0);
*/ #endregion
return base.GetSingleAsync(it => it.Id == id);
}
#endregion #region 参数为实体
#region 分页获取 /// <summary>
/// 参数很多的时候,定义模型接受参数
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public async Task<List<DemoEntity>> InputToValueObject(DemoValueObject obj)
{
var list = await AsQueryable().ToListAsync();
return list;
}
/// <summary> #endregion
/// 分页获取
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<UnifyPageResultDto<DemoEntity>> GetListByPage(int pageSize, int pageindex, string name)
{
var list = await AsQueryable()
.WhereIF(!string.IsNullOrEmpty(name), a => a.Name.Contains(name))
.ToPagedListAsync(pageindex, pageSize);
return list; #region 执行原生sql语句
}
#endregion
#region 参数为实体 /// <summary>
/// 执行原生sql语句
/// <summary> /// </summary>
/// 参数很多的时候,定义模型接受参数 /// <param name="obj"></param>
/// </summary> /// <returns></returns>
/// <param name="obj"></param> public async Task<UnifyPageResultDto<DemoValueObject>> OriginalSql(DemoValueObject obj)
/// <returns></returns> {
public async Task<List<DemoEntity>> InputToValueObject(DemoValueObject obj) var parameters = new List<SugarParameter>();
{ var sql = @$"
var list = await AsQueryable().ToListAsync();
return list;
}
#endregion
#region 执行原生sql语句
/// <summary>
/// 执行原生sql语句
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public async Task<UnifyPageResultDto<DemoValueObject>> OriginalSql(DemoValueObject obj)
{
var parameters = new List<SugarParameter>();
var sql = @$"
select select
a.id, a.id,
a.Name, a.Name,
@ -89,110 +92,117 @@ namespace SJZY.Track.Repository
{" and a.Name like @Name ".WhereIF(!string.IsNullOrEmpty(obj.Name), obj.Name, ref parameters)} {" and a.Name like @Name ".WhereIF(!string.IsNullOrEmpty(obj.Name), obj.Name, ref parameters)}
order by a.id desc "; order by a.id desc ";
var list = await Context.SqlQueryable<DemoValueObject>(sql) var list = await Context.SqlQueryable<DemoValueObject>(sql)
.AddParameters(parameters) .AddParameters(parameters)
.ToPagedListAsync(obj.PageIndex, obj.PageSize); .ToPagedListAsync(obj.PageIndex, obj.PageSize);
return list; return list;
} }
#endregion #endregion
#region 简单事务 #region 简单事务
public async Task Transaction()
public async Task Transaction()
{
using (var ts = new TransactionScope())
{ {
await base.InsertAsync(new DemoEntity { Name = "1111" });
await base.InsertAsync(new DemoEntity { Name = "222" });
await base.InsertAsync(new DemoEntity { Name = "3333" });
using (var ts = new TransactionScope()) //throw new BusinessException("E05632","手动抛异常");
{ await base.InsertAsync(new DemoEntity { Name = "4444" });
await base.InsertAsync(new DemoEntity { Name = "1111" }); ts.Complete();
await base.InsertAsync(new DemoEntity { Name = "222" });
await base.InsertAsync(new DemoEntity { Name = "3333" });
//throw new BusinessException("E05632","手动抛异常");
await base.InsertAsync(new DemoEntity { Name = "4444" });
ts.Complete();
}
} }
#endregion }
#region 夸方法事务 #endregion
public async Task MultipleMethodTrans1()
#region 夸方法事务
public async Task MultipleMethodTrans1()
{
await base.InsertAsync(new DemoEntity { Name = "---" });
await base.InsertAsync(new DemoEntity { Name = "+++" });
}
public async Task MultipleMethodTrans2()
{
//throw new BusinessException(message: "手动抛出异常");
await base.InsertAsync(new DemoEntity { Name = "xxx" });
}
#endregion
#region 事务嵌套
public async Task InternalTrans()
{
using (var ts = new TransactionScope())
{ {
await base.InsertAsync(new DemoEntity { Name = "---" }); await Transaction();
await base.InsertAsync(new DemoEntity { Name = "+++" }); await MultipleMethodTrans1();
}
public async Task MultipleMethodTrans2()
{
//throw new BusinessException(message: "手动抛出异常"); //throw new BusinessException(message: "手动抛出异常");
await base.InsertAsync(new DemoEntity { Name = "xxx" }); await base.InsertAsync(new DemoEntity { Name = "xxx" });
ts.Complete();
} }
#endregion
#region 事务嵌套
public async Task InternalTrans()
{
using (var ts = new TransactionScope())
{
await Transaction();
await MultipleMethodTrans1();
//throw new BusinessException(message: "手动抛出异常");
await base.InsertAsync(new DemoEntity { Name = "xxx" });
ts.Complete();
}
}
#endregion
#region 局部更新
public async Task UpdatePartColumns(DemoEntity entity)
{
Context.Updateable(entity).UpdateColumns(m => new { m.Description, m.Name }).ExecuteCommand();
// UPDATE `test` SET `Name`= 'string',`Description`= 'string' WHERE `id`= 5
Context.Updateable(entity).IgnoreColumns(m => new { m.CreateUserId, m.Age }).ExecuteCommand();
// UPDATE `test` SET`IsDeleted`= 0,`Name`= 'string',`Description`= 'string',`EnabledMark`= 0,`DeleteUserId`= 0,`DeleteTime`= '2022/8/13 23:42:36',`CreateTime`= '2015/5/12 0:00:00',`UpdateUserId`= 0,`UpdateTime`= '2022/8/13 23:55:27' WHERE `id`= 5
}
#endregion
#region 导航属性
/// <summary>
/// 导航属性
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<bool> EntityRelationSave(DemoEntity entity)
{
var res = await Context.InsertNav(entity).Include(m => m.DemoDetailList).ExecuteCommandAsync();
return res;
}
#endregion
#region 缓存
/// <summary>
/// 获取数据包含缓存
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<DemoEntity> GetDataCache(int id)
{
var redisKey = $"Demo:Endity:{id}";
var demo = await RedisHelper.Client.GetAsync<DemoEntity>(redisKey);
if (demo != null)
return demo;
var aa = Context.Ado.Connection;
demo = await base.GetSingleAsync(m => m.Id == id);
await RedisHelper.Client.SetAsync(redisKey, demo, 60 * 20);
return demo;
}
#endregion
} }
}
#endregion
#region 局部更新
public async Task UpdatePartColumns(DemoEntity entity)
{
Context.Updateable(entity).UpdateColumns(m => new { m.Description, m.Name }).ExecuteCommand();
// UPDATE `test` SET `Name`= 'string',`Description`= 'string' WHERE `id`= 5
Context.Updateable(entity).IgnoreColumns(m => new { m.CreateUserId, m.Age }).ExecuteCommand();
// UPDATE `test` SET`IsDeleted`= 0,`Name`= 'string',`Description`= 'string',`EnabledMark`= 0,`DeleteUserId`= 0,`DeleteTime`= '2022/8/13 23:42:36',`CreateTime`= '2015/5/12 0:00:00',`UpdateUserId`= 0,`UpdateTime`= '2022/8/13 23:55:27' WHERE `id`= 5
}
#endregion
#region 导航属性
/// <summary>
/// 导航属性
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<bool> EntityRelationSave(DemoEntity entity)
{
var res = await Context.InsertNav(entity).Include(m => m.DemoDetailList).ExecuteCommandAsync();
return res;
}
#endregion
#region 缓存
/// <summary>
/// 获取数据包含缓存
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<DemoEntity> GetDataCache(int id)
{
var redisKey = $"Demo:Endity:{id}";
var demo = await RedisHelper.Client.GetAsync<DemoEntity>(redisKey);
if (demo != null)
return demo;
var aa = Context.Ado.Connection;
demo = await base.GetSingleAsync(m => m.Id == id);
await RedisHelper.Client.SetAsync(redisKey, demo, 60 * 20);
return demo;
}
#endregion
}

View File

@ -1,5 +1,5 @@
using SJZY.Track.Domain.OrderAggregate; using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.OrderAggregate.Dtos; using SJZY.Track.Domain.Dtos.Order;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;

View File

@ -21,7 +21,8 @@ public class SJZYTrackRepositoryModule : AbpModule
context.Services.AddSqlsugar(options => context.Services.AddSqlsugar(options =>
{ {
options.AddRange(new List<SqlsugarOptions> { options.AddRange(new List<SqlsugarOptions>
{
new() new()
{ {
ConnectionString = configuration["ConnectionStrings:DefaultConnection"], ConnectionString = configuration["ConnectionStrings:DefaultConnection"],
@ -33,10 +34,6 @@ public class SJZYTrackRepositoryModule : AbpModule
); );
}, DataBaseContext.OnExcutingAction, "SJZY.Track.Repository"); }, DataBaseContext.OnExcutingAction, "SJZY.Track.Repository");
context.Services.AddScoped(typeof(IBasicRepository<>), typeof(BasicRepository<>));
context.Services.AddElasticSearch(options => context.Services.AddElasticSearch(options =>
{ {
options.NodeUrls = configuration.GetSection("ElasticSearch:NodeUrls").Get<List<string>>(); options.NodeUrls = configuration.GetSection("ElasticSearch:NodeUrls").Get<List<string>>();
@ -45,4 +42,10 @@ public class SJZYTrackRepositoryModule : AbpModule
options.Base64PassPassword = configuration["ElasticSearch:Base64PassPassword"]; options.Base64PassPassword = configuration["ElasticSearch:Base64PassPassword"];
}); });
} }
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddTransient(typeof(IBasicQuery<>), typeof(BasicQuery<>));
context.Services.AddTransient(typeof(IBasicRepository<>), typeof(BasicRepository<>));
}
} }

View File

@ -1,4 +1,4 @@
using SJZY.Track.Domain.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;

View File

@ -2,9 +2,8 @@ using Nest;
using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Expand.ElasticSearch.Services; using SJZY.Expand.ElasticSearch.Services;
using SJZY.Track.Domain.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Repository.TrackDetails; using SJZY.Track.Domain.Dtos.TrackDetails;
using SJZY.Track.Repository.TrackDetails.Dtos;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;

View File

@ -1,4 +1,4 @@
using SJZY.Track.Domain.TrackFlagAggregate; using SJZY.Track.Domain.Aggregates.TrackFlagAggregate;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;

View File

@ -1,7 +1,8 @@
using SJZY.Track.Domain.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;
public class TrackPullConfigRepository : BasicRepository<TrackPullConfigEntity>, ITrackPullConfigRepository, IScopedDependency public class TrackPullConfigRepository : BasicRepository<TrackPullConfigEntity>, ITrackPullConfigRepository,
IScopedDependency
{ {
} }

View File

@ -1,7 +1,8 @@
using SJZY.Track.Domain.TrackPushAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;
public class TrackPushConfigRepository : BasicRepository<TrackPushConfigEntity>, ITrackPushConfigRepository, IScopedDependency public class TrackPushConfigRepository : BasicRepository<TrackPushConfigEntity>, ITrackPushConfigRepository,
IScopedDependency
{ {
} }

View File

@ -1,12 +1,13 @@
namespace SJZY.Track.Repository.TrackPushRecord.Entitys using SJZY.Track.Domain.SeedWork;
namespace SJZY.Track.Repository.TrackPushRecord.Entitys
{ {
/// <summary> /// <summary>
/// 轨迹推送记录 /// 轨迹推送记录
/// </summary> /// </summary>
[SugarTable("t_track_push_record")] [SugarTable("t_track_push_record")]
public class TrackPushRecordEntity public class TrackPushRecordEntity : IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>
@ -54,6 +55,5 @@
/// </summary> /// </summary>
[SugarColumn(ColumnName = "TrackTotal")] [SugarColumn(ColumnName = "TrackTotal")]
public string TrackTotal { get; set; } public string TrackTotal { get; set; }
} }
} }

View File

@ -1,12 +1,13 @@
namespace SJZY.Track.Repository.TrackPushRecordDetails.Entitys using SJZY.Track.Domain.SeedWork;
namespace SJZY.Track.Repository.TrackPushRecordDetails.Entitys
{ {
/// <summary> /// <summary>
/// 轨迹推送明细表 /// 轨迹推送明细表
/// </summary> /// </summary>
[SugarTable("t_track_push_record_details")] [SugarTable("t_track_push_record_details")]
public class TrackPushRecordDetailsEntity public class TrackPushRecordDetailsEntity : IAggregateRoot
{ {
/// <summary> /// <summary>
/// 自增主键 /// 自增主键
/// </summary> /// </summary>
@ -42,6 +43,5 @@
/// </summary> /// </summary>
[SugarColumn(ColumnName = "PushRecordId")] [SugarColumn(ColumnName = "PushRecordId")]
public int PushRecordId { get; set; } public int PushRecordId { get; set; }
} }
} }

View File

@ -1,4 +1,4 @@
using SJZY.Track.Domain.TrackStatusAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;
@ -7,6 +7,4 @@ public class TrackStatusRepository : BasicRepository<TrackStatusEntity>, ITrackS
public TrackStatusRepository() public TrackStatusRepository()
{ {
} }
} }

View File

@ -1,13 +1,12 @@
using SJZY.Expand.ABP.Core.Common.Dto; using System.Linq.Expressions;
using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Domain.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
using SJZY.Track.Domain.TrackFlagAggregate; using SJZY.Track.Domain.Aggregates.TrackFlagAggregate;
using SJZY.Track.Domain.TrackStatusAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.TrackTemplateAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.TrackTemplateAggregate.Dtos; using SJZY.Track.Domain.Dtos.TrackTemplate;
using SJZY.Track.Domain.VEntities; using SJZY.Track.Domain.VEntities;
using SJZY.Track.Repository.Enum; using SJZY.Track.Repository.Enum;
using System.Linq.Expressions;
namespace SJZY.Track.Repository; namespace SJZY.Track.Repository;
@ -26,17 +25,18 @@ public class TrackTemplateRepository : BasicRepository<TrackTemplateEntity>, ITr
/// <returns></returns> /// <returns></returns>
public async Task<GetTrackTemplateDetailVO?> GetDetailAsync(int id) public async Task<GetTrackTemplateDetailVO?> GetDetailAsync(int id)
{ {
var detail = await Context.Queryable<TrackTemplateEntity>().LeftJoin<VSystemEntity>((a, b) => a.SubSystemId == b.Id) var detail = await Context.Queryable<TrackTemplateEntity>()
.LeftJoin<VSystemEntity>((a, b) => a.SubSystemId == b.Id)
.Where((a, b) => a.Id == id) .Where((a, b) => a.Id == id)
.Select((a, b) => new .Select((a, b) => new
GetTrackTemplateDetailVO GetTrackTemplateDetailVO
{ {
Id = a.Id, Id = a.Id,
Code = a.Code, Code = a.Code,
Name = a.Name, Name = a.Name,
SubSystemId = a.SubSystemId, SubSystemId = a.SubSystemId,
SubSystem = b.CnName SubSystem = b.CnName
}).FirstAsync(); }).FirstAsync();
return detail; return detail;
} }
@ -49,44 +49,47 @@ public class TrackTemplateRepository : BasicRepository<TrackTemplateEntity>, ITr
public async Task<UnifyPageResultDto<GetTrackTemplateListVO>> GetPageTrackTemplate(GetPageTrackTemplateVO input) public async Task<UnifyPageResultDto<GetTrackTemplateListVO>> GetPageTrackTemplate(GetPageTrackTemplateVO input)
{ {
UnifyPageResultDto<GetTrackTemplateListVO> pagedList = new UnifyPageResultDto<GetTrackTemplateListVO>(); UnifyPageResultDto<GetTrackTemplateListVO> pagedList = new UnifyPageResultDto<GetTrackTemplateListVO>();
pagedList = await Context.Queryable<TrackTemplateEntity>().LeftJoin<VSystemEntity>((a, b) => a.SubSystemId == b.Id) pagedList = await Context.Queryable<TrackTemplateEntity>()
.WhereIF(input.SubSystemId > 0, (a, b) => a.SubSystemId == input.SubSystemId) .LeftJoin<VSystemEntity>((a, b) => a.SubSystemId == b.Id)
.WhereIF(!input.Keywords.IsNullOrWhiteSpace(), (a, b) => a.Name.Contains(input.Keywords) || a.Code.Contains(input.Keywords)) .WhereIF(input.SubSystemId > 0, (a, b) => a.SubSystemId == input.SubSystemId)
.Select((a, b) => new GetTrackTemplateListVO .WhereIF(!input.Keywords.IsNullOrWhiteSpace(),
{ (a, b) => a.Name.Contains(input.Keywords) || a.Code.Contains(input.Keywords))
Id = a.Id, .Select((a, b) => new GetTrackTemplateListVO
Code = a.Code,
CreateTime = a.CreateTime,
Name = a.Name,
SubSystem = b.CnName
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
//如果轨迹模版id传值了,就置顶在第一条
if (input.TrackTemplateId>0&& (!pagedList.List.IsNullOrEmpty()))
{
if (input.PageIndex==1)
{ {
bool existCurrent = pagedList.List.Any(x => x.Id==input.TrackTemplateId); Id = a.Id,
Code = a.Code,
CreateTime = a.CreateTime,
Name = a.Name,
SubSystem = b.CnName
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
//如果轨迹模版id传值了,就置顶在第一条
if (input.TrackTemplateId > 0 && (!pagedList.List.IsNullOrEmpty()))
{
if (input.PageIndex == 1)
{
bool existCurrent = pagedList.List.Any(x => x.Id == input.TrackTemplateId);
if (existCurrent) if (existCurrent)
{ {
var item = pagedList.List.FirstOrDefault(x => x.Id==input.TrackTemplateId); var item = pagedList.List.FirstOrDefault(x => x.Id == input.TrackTemplateId);
pagedList.List.Remove(item); pagedList.List.Remove(item);
pagedList.List.Insert(0, item); pagedList.List.Insert(0, item);
} }
else else
{ {
var item = await Context.Queryable<TrackTemplateEntity>().LeftJoin<VSystemEntity>((a, b) => a.SubSystemId == b.Id) var item = await Context.Queryable<TrackTemplateEntity>()
.Where((a, b) => a.Id==input.TrackTemplateId) .LeftJoin<VSystemEntity>((a, b) => a.SubSystemId == b.Id)
.Select((a, b) => new GetTrackTemplateListVO .Where((a, b) => a.Id == input.TrackTemplateId)
{ .Select((a, b) => new GetTrackTemplateListVO
Id = a.Id, {
Code = a.Code, Id = a.Id,
CreateTime = a.CreateTime, Code = a.Code,
Name = a.Name, CreateTime = a.CreateTime,
SubSystem = b.CnName Name = a.Name,
}) SubSystem = b.CnName
.FirstAsync(); })
if (item!=null) .FirstAsync();
if (item != null)
{ {
var removeItem = pagedList.List.LastOrDefault(); var removeItem = pagedList.List.LastOrDefault();
pagedList.List.Remove(removeItem); pagedList.List.Remove(removeItem);
@ -100,28 +103,39 @@ public class TrackTemplateRepository : BasicRepository<TrackTemplateEntity>, ITr
} }
/// <inheritdoc/> /// <inheritdoc/>
public async Task<UnifyPageResultDto<GetTrackTemplateContentPageOutputVO>> GetContentPageAsync(GetTrackTemplateContentPageInputVO input) public async Task<UnifyPageResultDto<GetTrackTemplateContentPageOutputVO>> GetContentPageAsync(
GetTrackTemplateContentPageInputVO input)
{ {
return await Context.Queryable<TrackTemplateContentEntity>() return await Context.Queryable<TrackTemplateContentEntity>()
.InnerJoin<TrackContentEntity>((templateContent, trackContent) => templateContent.TrackContentId == trackContent.Id && !trackContent.IsDeleted) .InnerJoin<TrackContentEntity>((templateContent, trackContent) =>
.LeftJoin<TrackStatusEntity>((templateContent, trackContent, trackStatus) => trackContent.TrackStatusId == trackStatus.Id && !trackStatus.IsDeleted) templateContent.TrackContentId == trackContent.Id && !trackContent.IsDeleted)
.LeftJoin<VEnumValueInfoEntity>((templateContent, trackContent, trackStatus, enumValue) => enumValue.Property == EnumPropertyEnums.节点.GetDescription() && trackStatus.Node == enumValue.Enumkey && !enumValue.IsDeleted) .LeftJoin<TrackStatusEntity>((templateContent, trackContent, trackStatus) =>
.LeftJoin<TrackFlagEntity>((templateContent, trackContent, trackStatus, enumValue, trackFlag) => trackContent.TrackFlagId == trackFlag.Id && !trackFlag.IsDeleted) trackContent.TrackStatusId == trackStatus.Id && !trackStatus.IsDeleted)
.LeftJoin<VUserEntity>((templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser) => templateContent.CreateUserId == createUser.Id && !createUser.IsDeleted) .LeftJoin<VEnumValueInfoEntity>((templateContent, trackContent, trackStatus, enumValue) =>
.LeftJoin<VUserEntity>((templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser, updateUser) => templateContent.UpdateUserId == updateUser.Id && !updateUser.IsDeleted) enumValue.Property == EnumPropertyEnums.节点.GetDescription() && trackStatus.Node == enumValue.Enumkey &&
!enumValue.IsDeleted)
.LeftJoin<TrackFlagEntity>((templateContent, trackContent, trackStatus, enumValue, trackFlag) =>
trackContent.TrackFlagId == trackFlag.Id && !trackFlag.IsDeleted)
.LeftJoin<VUserEntity>((templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser) =>
templateContent.CreateUserId == createUser.Id && !createUser.IsDeleted)
.LeftJoin<VUserEntity>(
(templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser, updateUser) =>
templateContent.UpdateUserId == updateUser.Id && !updateUser.IsDeleted)
.Filter(null, true) .Filter(null, true)
.Where(templateContent => templateContent.TrackTemplateId == input.TrackTemplateId && !templateContent.IsDeleted) .Where(templateContent =>
.Select((templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser, updateUser) => new GetTrackTemplateContentPageOutputVO templateContent.TrackTemplateId == input.TrackTemplateId && !templateContent.IsDeleted)
{ .Select((templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser, updateUser) =>
Id = templateContent.Id, new GetTrackTemplateContentPageOutputVO
TrackStatus = trackStatus.Status, {
Node = enumValue.Disp, Id = templateContent.Id,
TrackFlag = trackFlag.Name, TrackStatus = trackStatus.Status,
CreateTime = templateContent.CreateTime, Node = enumValue.Disp,
CreateUser = createUser.Name, TrackFlag = trackFlag.Name,
UpdateTime = templateContent.UpdateTime, CreateTime = templateContent.CreateTime,
UpdateUser = updateUser.Name CreateUser = createUser.Name,
}, true) UpdateTime = templateContent.UpdateTime,
UpdateUser = updateUser.Name
}, true)
.ToPagedListAsync(input.PageIndex, input.PageSize); .ToPagedListAsync(input.PageIndex, input.PageSize);
} }
@ -129,8 +143,10 @@ public class TrackTemplateRepository : BasicRepository<TrackTemplateEntity>, ITr
public async Task<GetTrackTemplateContentDetailOutputVO> GetContentDetailAsync(int id) public async Task<GetTrackTemplateContentDetailOutputVO> GetContentDetailAsync(int id)
{ {
return await Context.Queryable<TrackTemplateContentEntity>() return await Context.Queryable<TrackTemplateContentEntity>()
.InnerJoin<TrackContentEntity>((templateContent, trackContent) => templateContent.TrackContentId == trackContent.Id && !trackContent.IsDeleted) .InnerJoin<TrackContentEntity>((templateContent, trackContent) =>
.LeftJoin<TrackStatusEntity>((templateContent, trackContent, trackStatus) => trackContent.TrackStatusId == trackStatus.Id && !trackStatus.IsDeleted) templateContent.TrackContentId == trackContent.Id && !trackContent.IsDeleted)
.LeftJoin<TrackStatusEntity>((templateContent, trackContent, trackStatus) =>
trackContent.TrackStatusId == trackStatus.Id && !trackStatus.IsDeleted)
.Filter(null, true) .Filter(null, true)
.Where(templateContent => templateContent.Id == id && !templateContent.IsDeleted) .Where(templateContent => templateContent.Id == id && !templateContent.IsDeleted)
.Select((templateContent, trackContent, trackStatus) => new GetTrackTemplateContentDetailOutputVO .Select((templateContent, trackContent, trackStatus) => new GetTrackTemplateContentDetailOutputVO