Merge pull request 'S01-轨迹中台' (#25) from S01-轨迹中台 into test

Reviewed-on: http://192.168.80.50:3000/Dotnet/SJZY.Track.Api/pulls/25
This commit is contained in:
liuwenxiang 2024-03-02 14:41:54 +08:00
commit 383d12fbbd
36 changed files with 431 additions and 123 deletions

View File

@ -1,6 +1,6 @@
{ {
"Configuration": { "Configuration": {
"UseLocalConfiguration": true, //是否使用本地配置文件 "UseLocalConfiguration": false, //是否使用本地配置文件
"ConfiguraFileName": "appsettings.Development.json", //指定配置文件名称,开启UseLocalConfiguration时生效 "ConfiguraFileName": "appsettings.Development.json", //指定配置文件名称,开启UseLocalConfiguration时生效
"Apollo": { "Apollo": {
"AppId": "SJZY.Track.Configuration", "AppId": "SJZY.Track.Configuration",

View File

@ -7,10 +7,15 @@ public class GetPageTrackOrderInput : PageInfoInput
/// </summary> /// </summary>
public int SubSystemId { get; set; } public int SubSystemId { get; set; }
///// <summary>
///// 单号
///// </summary>
//public List<string>? OrderNos { get; set; }
/// <summary> /// <summary>
/// 单号 /// 单号
/// </summary> /// </summary>
public List<string>? OrderNos { get; set; } public string? OrderNos { get; set; }
/// <summary> /// <summary>
/// 创建时间开始 /// 创建时间开始
@ -83,6 +88,11 @@ public class TrackOrderDto
/// </summary> /// </summary>
public string? NewestTrackPlace { get; set; } public string? NewestTrackPlace { get; set; }
/// <summary>
/// 最新轨迹时间
/// </summary>
public DateTime? NewestTrackTime { get; set; }
/// <summary> /// <summary>
/// 是否完结 /// 是否完结
/// </summary> /// </summary>

View File

@ -7,17 +7,17 @@ public class EditTrackContentMapInput
/// <summary> /// <summary>
/// 映射子系统id /// 映射子系统id
/// </summary> /// </summary>
public int MapSubSystemId { get; set; } public int? MapSubSystemId { get; set; }
/// <summary> /// <summary>
/// 映射轨迹内容代码 /// 映射轨迹内容代码
/// </summary> /// </summary>
public string MapTrackContentCode { get; set; } public string? MapTrackContentCode { get; set; }
/// <summary> /// <summary>
/// 映射轨迹内容id /// 映射轨迹内容id
/// </summary> /// </summary>
public int MapTrackContentId { get; set; } public int? MapTrackContentId { get; set; }
/// <summary> /// <summary>
/// 操作类型 /// 操作类型
@ -27,15 +27,15 @@ public class EditTrackContentMapInput
/// <summary> /// <summary>
/// 源子系统id /// 源子系统id
/// </summary> /// </summary>
public int SubSystemId { get; set; } public int? SubSystemId { get; set; }
/// <summary> /// <summary>
/// 源轨迹内容代码 /// 源轨迹内容代码
/// </summary> /// </summary>
public string TrackContentCode { get; set; } public string? TrackContentCode { get; set; }
/// <summary> /// <summary>
/// 源轨迹内容id /// 源轨迹内容id
/// </summary> /// </summary>
public int TrackContentId { get; set; } public int? TrackContentId { get; set; }
} }

View File

@ -12,6 +12,11 @@
/// </summary> /// </summary>
public string? Keywords { get; set; } public string? Keywords { get; set; }
/// <summary>
/// 轨迹状态id
/// </summary>
public int TrackStatusId { get; set; }
/// <summary> /// <summary>
/// 选中的轨迹内容id /// 选中的轨迹内容id
/// </summary> /// </summary>

View File

@ -12,27 +12,27 @@ public class EditTrackPullConfigInput
/// <summary> /// <summary>
/// 拉取轨迹订单号 /// 拉取轨迹订单号
/// </summary> /// </summary>
public string OrderNoName { get; set; } public string? OrderNoName { get; set; }
/// <summary> /// <summary>
/// 返参解析对象 /// 返参解析对象
/// </summary> /// </summary>
public int ParseMethod { get; set; } public int? ParseMethod { get; set; }
/// <summary> /// <summary>
/// 定时任务(分钟) /// 定时任务(分钟)
/// </summary> /// </summary>
public int PullInterval { get; set; } public int? PullInterval { get; set; }
/// <summary> /// <summary>
/// 服务商id /// 服务商id
/// </summary> /// </summary>
public int ServiceProviderId { get; set; } public int? ServiceProviderId { get; set; }
/// <summary> /// <summary>
/// 子系统id /// 子系统id
/// </summary> /// </summary>
public int SubSystemId { get; set; } public int? SubSystemId { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹时区 /// 拉取轨迹时区
@ -62,7 +62,7 @@ public class EditTrackPullConfigInput
/// <summary> /// <summary>
/// 轨迹模板id /// 轨迹模板id
/// </summary> /// </summary>
public int TrackTemplateId { get; set; } public int? TrackTemplateId { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹发生时间 /// 拉取轨迹发生时间

View File

@ -7,7 +7,7 @@ public class UpdateTrackPullContentInput
/// <summary> /// <summary>
/// 服务商轨迹代码参数值 /// 服务商轨迹代码参数值
/// </summary> /// </summary>
public string TrackContentCodeValue { get; set; } public string? TrackContentCodeValue { get; set; }
/// <summary> /// <summary>
/// 轨迹内容id /// 轨迹内容id
@ -17,17 +17,17 @@ public class UpdateTrackPullContentInput
/// <summary> /// <summary>
/// 服务商轨迹内容参数值 /// 服务商轨迹内容参数值
/// </summary> /// </summary>
public string TrackContentValue { get; set; } public string? TrackContentValue { get; set; }
/// <summary> /// <summary>
/// 轨迹关键词(正向) /// 拉取轨迹关键字(正向)
/// </summary> /// </summary>
public string TrackKeyword { get; set; } public List<string>? TrackKeywords { get; set; }
/// <summary> /// <summary>
/// 轨迹关键词(反向) /// 拉取轨迹关键字(反向)
/// </summary> /// </summary>
public string TrackKeywordReverse { get; set; } public List<string>? TrackKeywordReverses { get; set; }
/// <summary> /// <summary>
/// 轨迹发生地参数值 /// 轨迹发生地参数值
@ -42,7 +42,7 @@ public class UpdateTrackPullContentInput
/// <summary> /// <summary>
/// 服务商轨迹状态参数值 /// 服务商轨迹状态参数值
/// </summary> /// </summary>
public string TrackStatusValue { get; set; } public string? TrackStatusValue { get; set; }
/// <summary> /// <summary>
/// 轨迹时区GMT /// 轨迹时区GMT

View File

@ -10,7 +10,7 @@ public class EditTrackPushConfigInput
/// <summary> /// <summary>
/// 推送扩展字段 /// 推送扩展字段
/// </summary> /// </summary>
public string ExpandFieldsName { get; set; } public string? ExpandFieldsName { get; set; }
public int? Id { get; set; } public int? Id { get; set; }
@ -27,7 +27,7 @@ public class EditTrackPushConfigInput
/// <summary> /// <summary>
/// 推送轨迹订单号 /// 推送轨迹订单号
/// </summary> /// </summary>
public string OrderNoName { get; set; } public string? OrderNoName { get; set; }
/// <summary> /// <summary>
/// 服务商id /// 服务商id
@ -42,40 +42,40 @@ public class EditTrackPushConfigInput
/// <summary> /// <summary>
/// 推送轨迹时区 /// 推送轨迹时区
/// </summary> /// </summary>
public string TackTimeZoneName { get; set; } public string? TackTimeZoneName { get; set; }
/// <summary> /// <summary>
/// 推送轨迹内容代码 /// 推送轨迹内容代码
/// </summary> /// </summary>
public string TrackContentCodeName { get; set; } public string? TrackContentCodeName { get; set; }
/// <summary> /// <summary>
/// 推送轨迹内容 /// 推送轨迹内容
/// </summary> /// </summary>
public string TrackContentName { get; set; } public string? TrackContentName { get; set; }
/// <summary> /// <summary>
/// 推送轨迹内容英文 /// 推送轨迹内容英文
/// </summary> /// </summary>
public string TrackEnContentName { get; set; } public string? TrackEnContentName { get; set; }
/// <summary> /// <summary>
/// 推送轨迹发生地 /// 推送轨迹发生地
/// </summary> /// </summary>
public string TrackPlaceName { get; set; } public string? TrackPlaceName { get; set; }
/// <summary> /// <summary>
/// 推送轨迹状态 /// 推送轨迹状态
/// </summary> /// </summary>
public string TrackStatusName { get; set; } public string? TrackStatusName { get; set; }
/// <summary> /// <summary>
/// 轨迹模板id /// 轨迹模板id
/// </summary> /// </summary>
public List<int> TrackTemplateIds { get; set; } public List<int>? TrackTemplateIds { get; set; }
/// <summary> /// <summary>
/// 推送轨迹发生时间 /// 推送轨迹发生时间
/// </summary> /// </summary>
public string TrackTimeName { get; set; } public string? TrackTimeName { get; set; }
} }

View File

@ -5,7 +5,7 @@ public class EditTrackPushContentInput
/// <summary> /// <summary>
/// 扩展字段参数值 /// 扩展字段参数值
/// </summary> /// </summary>
public string ExpandFieldsValue { get; set; } public string? ExpandFieldsValue { get; set; }
public int? Id { get; set; } public int? Id { get; set; }
@ -27,7 +27,7 @@ public class EditTrackPushContentInput
/// <summary> /// <summary>
/// 轨迹代码参数值 /// 轨迹代码参数值
/// </summary> /// </summary>
public string TrackContentCodeValue { get; set; } public string? TrackContentCodeValue { get; set; }
/// <summary> /// <summary>
/// 轨迹内容id /// 轨迹内容id
@ -37,12 +37,12 @@ public class EditTrackPushContentInput
/// <summary> /// <summary>
/// 轨迹内容参数值 /// 轨迹内容参数值
/// </summary> /// </summary>
public string TrackContentValue { get; set; } public string? TrackContentValue { get; set; }
/// <summary> /// <summary>
/// 轨迹内容英文参数值 /// 轨迹内容英文参数值
/// </summary> /// </summary>
public string TrackEnContentValue { get; set; } public string? TrackEnContentValue { get; set; }
/// <summary> /// <summary>
/// 轨迹推送配置id /// 轨迹推送配置id
@ -52,7 +52,7 @@ public class EditTrackPushContentInput
/// <summary> /// <summary>
/// 轨迹状态参数值 /// 轨迹状态参数值
/// </summary> /// </summary>
public string TrackStatusValue { get; set; } public string? TrackStatusValue { get; set; }
/// <summary> /// <summary>
/// 轨迹时区GMT /// 轨迹时区GMT

View File

@ -1,9 +1,11 @@
namespace SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Expand.ABP.Core.PublicMethords;
namespace SJZY.Track.Application.Contract.Dtos.TrackPush;
public class SortTrackPushContentInput public class SortTrackPushContentInput
{ {
/// <summary> /// <summary>
/// 排序信息 /// 排序信息
/// </summary> /// </summary>
public List<Dictionary<int, int>> SortInfo { get; set; } public List<DropdownListDataDto> SortInfo { get; set; }
} }

View File

@ -14,25 +14,20 @@ public class EditTrackTemplateContentInput
/// <summary> /// <summary>
/// 是否可删 /// 是否可删
/// </summary> /// </summary>
public bool IsCanDelete { get; set; } public bool? IsCanDelete { get; set; }
/// <summary> /// <summary>
/// 是否对外 /// 是否对外
/// </summary> /// </summary>
public bool IsExternal { get; set; } public bool? IsExternal { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary> /// <summary>
/// 轨迹内容id /// 轨迹内容id
/// </summary> /// </summary>
public int TrackContentId { get; set; } public int? TrackContentId { get; set; }
/// <summary> /// <summary>
/// 轨迹模板id /// 轨迹模板id
/// </summary> /// </summary>
public int TrackTemplateId { get; set; } public int? TrackTemplateId { get; set; }
} }

View File

@ -0,0 +1,11 @@
using SJZY.Expand.ABP.Core.PublicMethords;
namespace SJZY.Track.Application.Contract.Dtos.TrackTemplates;
public class SortTrackTemplateContentInput
{
/// <summary>
/// 排序信息
/// </summary>
public List<DropdownListDataDto> SortInfo { get; set; }
}

View File

@ -12,6 +12,16 @@ public class TrackPullAutoMapperProfile : Profile
CreateMap<EditTrackPullConfigInput, TrackPullConfigEntity>(MemberList.None); CreateMap<EditTrackPullConfigInput, TrackPullConfigEntity>(MemberList.None);
CreateMap<EditTrackPullConfigInput, TrackPushPullParamsConfigEntity>(MemberList.None).Ignore(dest => dest.Id) CreateMap<EditTrackPullConfigInput, TrackPushPullParamsConfigEntity>(MemberList.None).Ignore(dest => dest.Id)
.ForMember(dest => dest.IsPush, opt => opt.MapFrom(source => false)); .ForMember(dest => dest.IsPush, opt => opt.MapFrom(source => false));
CreateMap<UpdateTrackPullContentInput, TrackPullContentConfigEntity>(MemberList.None); CreateMap<UpdateTrackPullContentInput, TrackPullContentConfigEntity>(MemberList.None)
.ForMember(dest => dest.TrackKeyword, opt =>
{
opt.Condition(src => !src.TrackKeywords.IsNullOrEmpty());
opt.MapFrom(src => string.Join(',', src.TrackKeywords));
})
.ForMember(dest => dest.TrackKeywordReverse, opt =>
{
opt.Condition(src => !src.TrackKeywordReverses.IsNullOrEmpty());
opt.MapFrom(src => string.Join(',', src.TrackKeywordReverses));
});
} }
} }

View File

@ -91,12 +91,13 @@ namespace SJZY.Track.Application.Services.TrackContents
{ {
#region 业务逻辑校验 #region 业务逻辑校验
var trackContentEntity = await _trackContentRepository.GetFirstAsync(a => var trackContentEntitys = await _trackContentRepository.GetListAsync(a =>
a.SubSystemId == input.SubSystemId && (a.Code == input.Code || a.SubSystemId == input.SubSystemId && (a.Code == input.Code ||
a.Content == input.Content || a.EnContent == input.EnContent)); a.Content == input.Content || a.EnContent == input.EnContent));
if (trackContentEntity != null) if (trackContentEntitys.Any())
{ {
throw new BusinessException(message: _stringLocalizer["TrackContentExist"]); //throw new BusinessException(message: _stringLocalizer["TrackContentExist"]);
throw new BusinessException(message: "当前子系统下,轨迹代码或轨迹内容或轨迹内容英文存在");
} }
#endregion 业务逻辑校验 #endregion 业务逻辑校验
@ -111,12 +112,13 @@ namespace SJZY.Track.Application.Services.TrackContents
{ {
#region 业务逻辑校验 #region 业务逻辑校验
var trackContentEntity = await _trackContentRepository.GetFirstAsync(a => a.Id != input.Id && var trackContentEntitys = await _trackContentRepository.GetListAsync(a => a.Id != input.Id &&
a.SubSystemId == input.SubSystemId && (a.Code == input.Code || a.SubSystemId == input.SubSystemId && (a.Code == input.Code ||
a.Content == input.Content || a.EnContent == input.EnContent)); a.Content == input.Content || a.EnContent == input.EnContent));
if (trackContentEntity != null) if (trackContentEntitys.Any())
{ {
throw new BusinessException(message: _stringLocalizer["TrackContentExist"]); //throw new BusinessException(message: _stringLocalizer["TrackContentExist"]);
throw new BusinessException(message: "当前子系统下,轨迹代码或轨迹内容或轨迹内容英文存在");
} }
#endregion 业务逻辑校验 #endregion 业务逻辑校验
@ -201,12 +203,14 @@ namespace SJZY.Track.Application.Services.TrackContents
{ {
if (input.Options != OptionTypeNoNull.删除) if (input.Options != OptionTypeNoNull.删除)
{ {
if (input.TrackContentId == input.MapTrackContentId) throw new BusinessException(message: _stringLocalizer["IsTrackContentMapAny"]);
Expression<Func<TrackContentMapEntity, bool>> isMapAnyExp = x => Expression<Func<TrackContentMapEntity, bool>> isMapAnyExp = x =>
x.TrackContentId == input.TrackContentId && x.MapTrackContentId == input.MapTrackContentId; x.TrackContentId == input.TrackContentId && x.MapTrackContentId == input.MapTrackContentId;
if (input.Options == OptionTypeNoNull.修改) isMapAnyExp.And(x => x.Id != input.Id); if (input.Options == OptionTypeNoNull.修改) isMapAnyExp.And(x => x.Id != input.Id);
if (await _trackContentRepository.IsMapAnyAsync(isMapAnyExp)) if (await _trackContentRepository.IsMapAnyAsync(isMapAnyExp))
throw new BusinessException(message: _stringLocalizer["IsTrackContentMapAny"]); throw new BusinessException(message: _stringLocalizer["NotAllowedToMapOneself"]);
} }
switch (input.Options) switch (input.Options)

View File

@ -86,14 +86,13 @@ namespace SJZY.Track.Application.Services.TrackFlags
private async Task<UnifyResultDto> AddAsync(EditTrackFlagInput input) private async Task<UnifyResultDto> AddAsync(EditTrackFlagInput input)
{ {
#region 业务校验 #region 业务校验
var trackStatusEntitys = await _trackFlagRepository.GetListAsync(a =>
var trackStatusEntity = await _trackFlagRepository.GetFirstAsync(a =>
a.SubSystemId == input.SubSystemId && (a.Code == input.Code || a.Name == input.Flag)); a.SubSystemId == input.SubSystemId && (a.Code == input.Code || a.Name == input.Flag));
if (trackStatusEntity != null) if (trackStatusEntitys.Any())
{ {
throw new BusinessException(message: _stringLocalizer["TrackFlagExist"]); //throw new BusinessException(message: _stringLocalizer["TrackFlagExist"]);
throw new BusinessException(message: "当前子系统下已存在轨迹标记代码");
} }
#endregion #endregion
var entity = ObjectMapper.Map<EditTrackFlagInput, TrackFlagEntity>(input); var entity = ObjectMapper.Map<EditTrackFlagInput, TrackFlagEntity>(input);
@ -106,12 +105,13 @@ namespace SJZY.Track.Application.Services.TrackFlags
{ {
#region 业务校验 #region 业务校验
var trackStatusEntity = await _trackFlagRepository.GetFirstAsync(a => a.Id != input.Id && var trackStatusEntitys = await _trackFlagRepository.GetListAsync(a => a.Id != input.Id &&
a.SubSystemId == input.SubSystemId && (a.Code == input.Code || a.SubSystemId == input.SubSystemId && (a.Code == input.Code ||
a.Name == input.Flag)); a.Name == input.Flag));
if (trackStatusEntity != null) if (trackStatusEntitys.Any())
{ {
throw new BusinessException(message: _stringLocalizer["TrackFlagExist"]); //throw new BusinessException(message: _stringLocalizer["TrackFlagExist"]);
throw new BusinessException(message: "当前子系统下已存在轨迹标记代码");
} }
#endregion #endregion

View File

@ -5,9 +5,11 @@ using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Dtos.TrackPull; using SJZY.Track.Application.Contract.Dtos.TrackPull;
using SJZY.Track.Application.Localization; using SJZY.Track.Application.Localization;
using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.Common; using SJZY.Track.Domain.Dtos.Common;
using SJZY.Track.Domain.Dtos.TrackPull; using SJZY.Track.Domain.Dtos.TrackPull;
using SqlSugar;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Services.TrackPull; namespace SJZY.Track.Application.Services.TrackPull;
@ -91,7 +93,7 @@ public class TrackPullService : ApplicationService, ITransientDependency
Expression<Func<TrackPullConfigEntity, bool>> isAnyExp = x => Expression<Func<TrackPullConfigEntity, bool>> isAnyExp = x =>
x.SubSystemId == input.SubSystemId && x.TrackTemplateId == input.TrackTemplateId && x.SubSystemId == input.SubSystemId && x.TrackTemplateId == input.TrackTemplateId &&
x.ServiceProviderId == input.ServiceProviderId; x.ServiceProviderId == input.ServiceProviderId;
if (input.Options == OptionTypeNoNull.修改) isAnyExp.And(x => x.Id != input.Id); if (input.Options == OptionTypeNoNull.修改) isAnyExp = isAnyExp.And(x => x.Id != input.Id);
if (await _trackPullConfigRepository.IsAnyAsync(isAnyExp)) if (await _trackPullConfigRepository.IsAnyAsync(isAnyExp))
throw new BusinessException(message: _stringLocalizer["IsTrackPullConfigAny"]); throw new BusinessException(message: _stringLocalizer["IsTrackPullConfigAny"]);
@ -208,6 +210,18 @@ public class TrackPullService : ApplicationService, ITransientDependency
[HttpPost("UpdateContent")] [HttpPost("UpdateContent")]
public async Task<bool> UpdateContentAsync([FromBody] UpdateTrackPullContentInput input) public async Task<bool> UpdateContentAsync([FromBody] UpdateTrackPullContentInput input)
{ {
Expression<Func<TrackPullContentConfigEntity, bool>> isContentAnyExp = x => x.Id != input.Id && x.TrackPullConfigId == input.TrackPullConfigId;
var trackKeywordExp = Expressionable.Create<TrackPullContentConfigEntity>()
.And(x => x.TrackContentId == input.TrackContentId || x.TrackContentCodeValue == input.TrackContentCodeValue || x.TrackStatusValue == input.TrackStatusValue || x.TrackContentValue == input.TrackContentValue);
input.TrackKeywords?.ForEach(item => { trackKeywordExp.Or(x => SqlFunc.SplitIn(x.TrackKeyword, item)); });
isContentAnyExp = isContentAnyExp.And(trackKeywordExp.ToExpression());
if (await _trackPullConfigRepository.IsContentAnyAsync(isContentAnyExp))
throw new BusinessException(message: _stringLocalizer["IsTrackPullContentAny"]);
var oldTrackPullContentEntity = await _trackPullConfigRepository.GetContentByIdAsync(input.Id) ?? var oldTrackPullContentEntity = await _trackPullConfigRepository.GetContentByIdAsync(input.Id) ??
throw new BusinessException(message: _stringLocalizer["NotFindData"]); throw new BusinessException(message: _stringLocalizer["NotFindData"]);

View File

@ -4,7 +4,6 @@ using SJZY.Expand.ABP.Core.Localization;
using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Localization; using SJZY.Track.Application.Localization;
using SJZY.Track.Domain.Aggregates.DemoAggregate;
using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
@ -105,12 +104,14 @@ public class TrackPushService : ApplicationService, ITransientDependency
{ {
Expression<Func<TrackPushConfigEntity, bool>> isAnyExp = x => Expression<Func<TrackPushConfigEntity, bool>> isAnyExp = x =>
x.SubSystemId == input.SubSystemId && x.CustomId == input.CustomId && x.ServiceProviderId == input.ServiceProviderId; x.SubSystemId == input.SubSystemId && x.CustomId == input.CustomId && x.ServiceProviderId == input.ServiceProviderId;
if (input.Options == OptionTypeNoNull.修改) isAnyExp.And(x => x.Id != input.Id); if (input.Options == OptionTypeNoNull.修改) isAnyExp = isAnyExp.And(x => x.Id != input.Id);
var trackTemplateIdExp = Expressionable.Create<TrackPushConfigEntity>(); var trackTemplateIdExp = Expressionable.Create<TrackPushConfigEntity>();
foreach (var trackTemplateId in input.TrackTemplateIds) { trackTemplateIdExp.Or(x => SqlFunc.SplitIn(x.TrackTemplateId, trackTemplateId.ToString())); } foreach (var trackTemplateId in input.TrackTemplateIds) { trackTemplateIdExp.Or(x => SqlFunc.SplitIn(x.TrackTemplateId, trackTemplateId.ToString())); }
if (await _trackPushConfigRepository.IsAnyAsync(isAnyExp.And(trackTemplateIdExp.ToExpression()))) isAnyExp = isAnyExp.And(trackTemplateIdExp.ToExpression());
if (await _trackPushConfigRepository.IsAnyAsync(isAnyExp))
throw new BusinessException(message: _stringLocalizer["IsTrackPushConfigAny"]); throw new BusinessException(message: _stringLocalizer["IsTrackPushConfigAny"]);
} }
@ -198,8 +199,8 @@ public class TrackPushService : ApplicationService, ITransientDependency
if (input.Options != OptionTypeNoNull.删除) if (input.Options != OptionTypeNoNull.删除)
{ {
Expression<Func<TrackPushContentConfigEntity, bool>> isContentAnyExp = x => Expression<Func<TrackPushContentConfigEntity, bool>> isContentAnyExp = x =>
x.TrackPushConfigId == input.TrackPushConfigId && x.TrackContentId == input.TrackContentId; x.TrackPushConfigId == input.TrackPushConfigId && (x.TrackContentId == input.TrackContentId || x.TrackContentCodeValue == input.TrackContentCodeValue || x.TrackStatusValue == x.TrackStatusValue || x.TrackContentValue == input.TrackContentValue || x.TrackEnContentValue == input.TrackEnContentValue);
if (input.Options == OptionTypeNoNull.修改) isContentAnyExp.And(x => x.Id != input.Id); if (input.Options == OptionTypeNoNull.修改) isContentAnyExp = isContentAnyExp.And(x => x.Id != input.Id);
if (await _trackPushConfigRepository.IsContentAnyAsync(isContentAnyExp)) if (await _trackPushConfigRepository.IsContentAnyAsync(isContentAnyExp))
throw new BusinessException(message: _stringLocalizer["IsTrackPushContentAny"]); throw new BusinessException(message: _stringLocalizer["IsTrackPushContentAny"]);
@ -246,6 +247,17 @@ public class TrackPushService : ApplicationService, ITransientDependency
[HttpPost("SortContent")] [HttpPost("SortContent")]
public async Task<bool> SortContentAsync([FromBody] SortTrackPushContentInput input) public async Task<bool> SortContentAsync([FromBody] SortTrackPushContentInput input)
{ {
List<int> ids = input.SortInfo.Select(x => int.Parse(x.Key)).ToList();
var trackPushContentEntities = await _trackPushConfigRepository.GetContentListAsync(x => ids.Contains(x.Id));
trackPushContentEntities.ForEach(item =>
{
item.Sort = input.SortInfo.Single(x => x.Key == item.Id.ToString()).Value;
});
await _trackPushConfigRepository.UpdateContentRangeAsync(trackPushContentEntities);
return true; return true;
} }
} }

View File

@ -87,12 +87,13 @@ public class TrackStatusService : ApplicationService, ITransientDependency
{ {
#region 业务校验 #region 业务校验
var trackStatusEntity = await _trackStatusRepository.GetFirstAsync(a => a.SubSystemId == input.SubSystemId && var trackStatusEntitys = await _trackStatusRepository.GetListAsync(a => a.SubSystemId == input.SubSystemId &&
(a.Code == input.Code || (a.Code == input.Code ||
a.Status == input.TrackStatus || a.EnStatus == input.EntrackStatus)); a.Status == input.TrackStatus || a.EnStatus == input.EntrackStatus));
if (trackStatusEntity != null) if (trackStatusEntitys.Any())
{ {
throw new BusinessException(message: _stringLocalizer["TrackStatusExist"]); //throw new BusinessException(message: _stringLocalizer["TrackStatusExist"]);
throw new BusinessException(message: "当前子系统下,轨迹状态代码或轨迹状态或轨迹状态英文存在");
} }
#endregion #endregion
@ -107,12 +108,13 @@ public class TrackStatusService : ApplicationService, ITransientDependency
{ {
#region 业务校验 #region 业务校验
var trackStatusEntity = await _trackStatusRepository.GetFirstAsync(a => a.Id != input.Id && var trackStatusEntitys = await _trackStatusRepository.GetListAsync(a => a.Id != input.Id &&
a.SubSystemId == input.SubSystemId && (a.Code == input.Code || a.SubSystemId == input.SubSystemId && (a.Code == input.Code ||
a.Status == input.TrackStatus || a.EnStatus == input.EntrackStatus)); a.Status == input.TrackStatus || a.EnStatus == input.EntrackStatus));
if (trackStatusEntity != null) if (trackStatusEntitys.Any())
{ {
throw new BusinessException(message: _stringLocalizer["TrackStatusExist"]); //throw new BusinessException(message: _stringLocalizer["TrackStatusExist"]);
throw new BusinessException(message: "当前子系统下,轨迹状态代码或轨迹状态或轨迹状态英文存在");
} }
#endregion #endregion
@ -130,7 +132,8 @@ public class TrackStatusService : ApplicationService, ITransientDependency
var isExistStatus = await _trackContentRepository.GetFirstAsync(a => a.TrackStatusId==input.Id); var isExistStatus = await _trackContentRepository.GetFirstAsync(a => a.TrackStatusId==input.Id);
if (isExistStatus!=null) if (isExistStatus!=null)
{ {
throw new BusinessException(message: _stringLocalizer["IsExistTrackStatus"]); //throw new BusinessException(message: _stringLocalizer["IsExistTrackStatus"]);
throw new BusinessException(message: "轨迹内容已经绑定了该轨迹状态,请先删除轨迹内容后再删除该轨迹状态");
} }
#endregion #endregion
var isTrue = await _trackStatusRepository.SoftDeleteAsync(x => x.Id == input.Id); var isTrue = await _trackStatusRepository.SoftDeleteAsync(x => x.Id == input.Id);

View File

@ -1,9 +1,11 @@
using System.Linq.Expressions; using System.Linq.Expressions;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using SJZY.Expand.ABP.Core.Localization; using SJZY.Expand.ABP.Core.Localization;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Dtos.TrackTemplates; using SJZY.Track.Application.Contract.Dtos.TrackTemplates;
using SJZY.Track.Application.Localization; using SJZY.Track.Application.Localization;
using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.TrackTemplate; using SJZY.Track.Domain.Dtos.TrackTemplate;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -20,17 +22,20 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
private readonly IStringLocalizer<TrackLocalizationResource> _stringLocalizer; private readonly IStringLocalizer<TrackLocalizationResource> _stringLocalizer;
private readonly ITrackTemplateRepository _trackTemplateRepository; private readonly ITrackTemplateRepository _trackTemplateRepository;
private readonly ITrackPullConfigRepository _trackPullConfigRepository; private readonly ITrackPullConfigRepository _trackPullConfigRepository;
private readonly ITrackPushConfigRepository _trackPushConfigRepository;
/// <inheritdoc/> /// <inheritdoc/>
public TrackTemplateService( public TrackTemplateService(
IStringLocalizer<TrackLocalizationResource> stringLocalizer, IStringLocalizer<TrackLocalizationResource> stringLocalizer,
ITrackTemplateRepository trackTemplateRepository, ITrackTemplateRepository trackTemplateRepository,
ITrackPullConfigRepository trackPullConfigRepository ITrackPullConfigRepository trackPullConfigRepository,
ITrackPushConfigRepository trackPushConfigRepository
) )
{ {
_stringLocalizer = stringLocalizer; _stringLocalizer = stringLocalizer;
_trackTemplateRepository = trackTemplateRepository; _trackTemplateRepository = trackTemplateRepository;
_trackPullConfigRepository = trackPullConfigRepository; _trackPullConfigRepository = trackPullConfigRepository;
_trackPushConfigRepository = trackPushConfigRepository;
} }
/// <summary> /// <summary>
@ -97,7 +102,7 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
if (templateEntity != null) if (templateEntity != null)
{ {
//throw new BusinessException(message: _stringLocalizer["TemplateExist"]); //throw new BusinessException(message: _stringLocalizer["TemplateExist"]);
throw new BusinessException("轨迹代码重复"); throw new BusinessException(message: "模板代码已存在于当前选择的子系统下");
} }
#endregion 业务校验 #endregion 业务校验
@ -116,7 +121,7 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
a.Id != input.Id && a.SubSystemId == input.SubSystemId && a.Code == input.Code); a.Id != input.Id && a.SubSystemId == input.SubSystemId && a.Code == input.Code);
if (isExist != null) if (isExist != null)
{ {
throw new BusinessException(message: _stringLocalizer["TemplateExist"]); throw new BusinessException(message: "模板代码已存在于当前选择的子系统下");
} }
#endregion 业务校验 #endregion 业务校验
@ -133,10 +138,17 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
#region 业务校验 #region 业务校验
//查询看看在轨迹拉取里面有没有被占用 //查询看看在轨迹拉取里面有没有被占用
var isExisistTrackPullConfig = await _trackPullConfigRepository.GetFirstAsync(a => a.TrackTemplateId == input.Id); var isExisistTrackPullConfigs = await _trackPullConfigRepository.GetListAsync(a => a.TrackTemplateId == input.Id);
if (isExisistTrackPullConfig != null) if (isExisistTrackPullConfigs.Any())
{ {
throw new BusinessException(message: _stringLocalizer["IsExistTrackPullConfig"]); //throw new BusinessException(message: _stringLocalizer["IsExistTrackPullConfig"]);
throw new BusinessException(message: "轨迹拉取配置里已经绑定模版,请检查");
}
//轨迹推送里看看是否被占用
var isExisistTrackPushConfigs = await _trackPushConfigRepository.GetListAsync(a => a.TrackTemplateId.Contains(input.Id.ToString()));
if (isExisistTrackPushConfigs.Any())
{
throw new BusinessException(message: "轨迹推送配置里已经绑定模版,请检查");
} }
#endregion 业务校验 #endregion 业务校验
@ -181,11 +193,11 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
{ {
if (input.Options != OptionTypeNoNull.删除) if (input.Options != OptionTypeNoNull.删除)
{ {
Expression<Func<TrackTemplateContentEntity, bool>> isAnyExp = x => Expression<Func<TrackTemplateContentEntity, bool>> isContentAnyExp = 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.修改) isContentAnyExp = isContentAnyExp.And(x => x.Id != input.Id);
if (await _trackTemplateRepository.IsContentAnyAsync(isAnyExp)) if (await _trackTemplateRepository.IsContentAnyAsync(isContentAnyExp))
throw new BusinessException(message: _stringLocalizer["IsTrackTemplateContentAny"]); throw new BusinessException(message: _stringLocalizer["IsTrackTemplateContentAny"]);
} }
@ -223,4 +235,26 @@ public class TrackTemplateService : ApplicationService, ITransientDependency
return true; return true;
} }
/// <summary>
/// 轨迹模板内容排序
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("SortContent")]
public async Task<bool> SortContentAsync([FromBody] SortTrackTemplateContentInput input)
{
List<int> ids = input.SortInfo.Select(x => int.Parse(x.Key)).ToList();
var trackTemplateContentEntities = await _trackTemplateRepository.GetContentListAsync(x => ids.Contains(x.Id));
trackTemplateContentEntities.ForEach(item =>
{
item.Sort = input.SortInfo.Single(x => x.Key == item.Id.ToString()).Value;
});
await _trackTemplateRepository.UpdateContentRangeAsync(trackTemplateContentEntities);
return true;
}
} }

View File

@ -0,0 +1,45 @@
using FluentValidation;
using Microsoft.Extensions.Localization;
using SJZY.Expand.ABP.Core.Localization;
using SJZY.Track.Application.Contract.Dtos.TrackContents;
using SJZY.Track.Application.Localization;
namespace SJZY.Track.Application.Validations.TrackContents;
public class EditTrackContentMapInputValidation : AbstractValidator<EditTrackContentMapInput>, IValidationEnabled
{
public EditTrackContentMapInputValidation(IStringLocalizer<TrackLocalizationResource> stringLocalizer)
{
RuleFor(x => x.Options).IsInEnum().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum, nameof(EditTrackContentMapInput.Options)]);
RuleFor(x => x.Id).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackContentMapInput.Id), 0]);
RuleFor(x => x.MapSubSystemId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackContentMapInput.MapSubSystemId), 0]);
RuleFor(x => x.MapTrackContentId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackContentMapInput.MapTrackContentId), 0]);
RuleFor(x => x.SubSystemId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackContentMapInput.SubSystemId), 0]);
RuleFor(x => x.TrackContentId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackContentMapInput.TrackContentId), 0]);
When(x => x.Options != OptionTypeNoNull.新增, () =>
{
RuleFor(x => x.Id).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackContentMapInput.Id)]);
});
When(x => x.Options != OptionTypeNoNull.删除, () =>
{
RuleFor(x => x.MapSubSystemId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackContentMapInput.MapSubSystemId)]);
RuleFor(x => x.MapTrackContentCode).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackContentMapInput.MapTrackContentCode)]);
RuleFor(x => x.MapTrackContentId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackContentMapInput.MapTrackContentId)]);
RuleFor(x => x.SubSystemId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackContentMapInput.SubSystemId)]);
RuleFor(x => x.TrackContentCode).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackContentMapInput.TrackContentCode)]);
RuleFor(x => x.TrackContentId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackContentMapInput.TrackContentId)]);
});
}
}

View File

@ -0,0 +1,64 @@
using FluentValidation;
using Microsoft.Extensions.Localization;
using SJZY.Expand.ABP.Core.Localization;
using SJZY.Track.Application.Contract.Dtos.TrackPull;
using SJZY.Track.Application.Localization;
namespace SJZY.Track.Application.Validations.TrackPull;
public class EditTrackPullConfigInputValidation : AbstractValidator<EditTrackPullConfigInput>, IValidationEnabled
{
public EditTrackPullConfigInputValidation(IStringLocalizer<TrackLocalizationResource> stringLocalizer)
{
RuleFor(x => x.Options).IsInEnum().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum, nameof(EditTrackPullConfigInput.Options)]);
RuleFor(x => x.Id).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackPullConfigInput.Id), 0]);
RuleFor(x => x.ParseMethod).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackPullConfigInput.ParseMethod), 0]);
RuleFor(x => x.PullInterval).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackPullConfigInput.PullInterval), 0]);
RuleFor(x => x.SubSystemId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackPullConfigInput.SubSystemId), 0]);
RuleFor(x => x.ServiceProviderId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackPullConfigInput.ServiceProviderId), 0]);
RuleFor(x => x.SubSystemId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackPullConfigInput.SubSystemId), 0]);
RuleFor(x => x.TrackTemplateId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackPullConfigInput.TrackTemplateId), 0]);
When(x => x.Options != OptionTypeNoNull.新增, () =>
{
RuleFor(x => x.Id).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackPullConfigInput.Id)]);
});
When(x => x.Options != OptionTypeNoNull.删除, () =>
{
RuleFor(x => x.SubSystemId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackPullConfigInput.SubSystemId)]);
RuleFor(x => x.ServiceProviderId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackPullConfigInput.ServiceProviderId)]);
RuleFor(x => x.TrackTemplateId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackPullConfigInput.TrackTemplateId)]);
RuleFor(x => x.PullInterval).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackPullConfigInput.PullInterval)]);
RuleFor(x => x.ParseMethod).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackPullConfigInput.ParseMethod)]);
RuleFor(x => x.OrderNoName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.OrderNoName)]);
When(x => x.ParseMethod == 1, () =>
{
RuleFor(x => x.TackTimeZoneName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TackTimeZoneName)]);
RuleFor(x => x.TrackContentCodeName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TrackContentCodeName)]);
RuleFor(x => x.TrackContentName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TrackContentName)]);
RuleFor(x => x.TrackPlaceName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TrackPlaceName)]);
RuleFor(x => x.TrackStatusName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TrackStatusName)]);
RuleFor(x => x.TrackTimeName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TrackTimeName)]);
});
});
}
}

View File

@ -0,0 +1,37 @@
using FluentValidation;
using Microsoft.Extensions.Localization;
using SJZY.Expand.ABP.Core.Localization;
using SJZY.Track.Application.Contract.Dtos.TrackTemplates;
using SJZY.Track.Application.Localization;
namespace SJZY.Track.Application.Validations.TrackTemplates;
public class EditTrackTemplateContentInputValidation : AbstractValidator<EditTrackTemplateContentInput>, IValidationEnabled
{
public EditTrackTemplateContentInputValidation(IStringLocalizer<TrackLocalizationResource> stringLocalizer)
{
RuleFor(x => x.Options).IsInEnum().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum, nameof(EditTrackTemplateContentInput.Options)]);
RuleFor(x => x.Id).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackTemplateContentInput.Id), 0]);
RuleFor(x => x.TrackContentId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackTemplateContentInput.TrackContentId), 0]);
RuleFor(x => x.TrackTemplateId).GreaterThan(0).WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_GreaterThan, nameof(EditTrackTemplateContentInput.TrackTemplateId), 0]);
When(x => x.Options != OptionTypeNoNull.新增, () =>
{
RuleFor(x => x.Id).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackTemplateContentInput.Id)]);
});
When(x => x.Options != OptionTypeNoNull.删除, () =>
{
RuleFor(x => x.IsCanDelete).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackTemplateContentInput.IsCanDelete)]);
RuleFor(x => x.IsExternal).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackTemplateContentInput.IsExternal)]);
RuleFor(x => x.TrackContentId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackTemplateContentInput.TrackContentId)]);
RuleFor(x => x.TrackTemplateId).NotNull().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotNull, nameof(EditTrackTemplateContentInput.TrackTemplateId)]);
});
}
}

View File

@ -48,4 +48,6 @@ public interface ITrackPullConfigRepository : IBasicRepository<TrackPullConfigEn
Task<TrackPullContentConfigEntity> GetContentByIdAsync(int id); Task<TrackPullContentConfigEntity> GetContentByIdAsync(int id);
Task<bool> UpdateContentAsync(TrackPullContentConfigEntity updateObj); Task<bool> UpdateContentAsync(TrackPullContentConfigEntity updateObj);
Task<bool> IsContentAnyAsync(Expression<Func<TrackPullContentConfigEntity, bool>> whereExpression);
} }

View File

@ -22,4 +22,8 @@ public interface ITrackPushConfigRepository : IBasicRepository<TrackPushConfigEn
Task<TrackPushContentConfigEntity> GetContentByIdAsync(int id); Task<TrackPushContentConfigEntity> GetContentByIdAsync(int id);
Task<bool> UpdateContentAsync(TrackPushContentConfigEntity updateObj); Task<bool> UpdateContentAsync(TrackPushContentConfigEntity updateObj);
Task<List<TrackPushContentConfigEntity>> GetContentListAsync(Expression<Func<TrackPushContentConfigEntity, bool>> whereExpression);
Task<bool> UpdateContentRangeAsync(List<TrackPushContentConfigEntity> updateObjs);
} }

View File

@ -35,4 +35,6 @@ public interface ITrackTemplateRepository : IBasicRepository<TrackTemplateEntity
Task<List<TrackTemplateContentEntity>> GetContentListAsync( Task<List<TrackTemplateContentEntity>> GetContentListAsync(
Expression<Func<TrackTemplateContentEntity, bool>> whereExpression); Expression<Func<TrackTemplateContentEntity, bool>> whereExpression);
Task<bool> UpdateContentRangeAsync(List<TrackTemplateContentEntity> updateObjs);
} }

View File

@ -15,5 +15,5 @@ public class KeywordsInputVO : PageInfoInput
/// <summary> /// <summary>
/// 选中项 /// 选中项
/// </summary> /// </summary>
public List<int>? SelectedId { get; set; } public List<int>? SelectedIds { get; set; }
} }

View File

@ -13,10 +13,16 @@ namespace SJZY.Track.Domain.Dtos.Order
/// </summary> /// </summary>
public int SubSystemId { get; set; } public int SubSystemId { get; set; }
///// <summary>
///// 单号
///// </summary>
//public List<string>? OrderNos { get; set; }
/// <summary> /// <summary>
/// 单号 /// 单号
/// </summary> /// </summary>
public List<string>? OrderNos { get; set; } public string? OrderNos { get; set; }
/// <summary> /// <summary>
/// 创建时间开始 /// 创建时间开始
@ -89,6 +95,11 @@ namespace SJZY.Track.Domain.Dtos.Order
/// </summary> /// </summary>
public string? NewestTrackPlace { get; set; } public string? NewestTrackPlace { get; set; }
/// <summary>
/// 最新轨迹时间
/// </summary>
public DateTime? NewestTrackTime { get; set; }
/// <summary> /// <summary>
/// 是否完结 /// 是否完结
/// </summary> /// </summary>

View File

@ -18,6 +18,11 @@ namespace SJZY.Track.Domain.Dtos.TrackContents
/// </summary> /// </summary>
public string? Keywords { get; set; } public string? Keywords { get; set; }
/// <summary>
/// 轨迹状态id
/// </summary>
public int TrackStatusId { get; set; }
/// <summary> /// <summary>
/// 选中的轨迹内容id /// 选中的轨迹内容id
/// </summary> /// </summary>

View File

@ -29,11 +29,21 @@ public class GetTrackPullContentDetailOutputVO
/// </summary> /// </summary>
public string TrackKeyword { get; set; } public string TrackKeyword { get; set; }
/// <summary>
/// 拉取轨迹关键字(正向)
/// </summary>
public List<string>? TrackKeywords { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹关键字(反向) /// 拉取轨迹关键字(反向)
/// </summary> /// </summary>
public string TrackKeywordReverse { get; set; } public string TrackKeywordReverse { get; set; }
/// <summary>
/// 拉取轨迹关键字(反向)
/// </summary>
public List<string>? TrackKeywordReverses { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹发生地 /// 拉取轨迹发生地
/// </summary> /// </summary>

View File

@ -22,40 +22,30 @@ public class GetTrackPullContentPageOutputVO
/// <summary> /// <summary>
/// 拉取轨迹内容代码 /// 拉取轨迹内容代码
/// </summary> /// </summary>
public string TrackContentCodeValue { get; set; } public string? TrackContentCodeValue { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹内容 /// 拉取轨迹内容
/// </summary> /// </summary>
public bool? TrackContentValue { get; set; } public string? TrackContentValue { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹关键字(正向) /// 拉取轨迹关键字(正向)
/// </summary> /// </summary>
public string TrackKeyword { get; set; } public string? TrackKeyword { get; set; }
/// <summary>
/// 拉取轨迹关键字(正向)
/// </summary>
public List<string> TrackKeywords { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹关键字(反向) /// 拉取轨迹关键字(反向)
/// </summary> /// </summary>
public string TrackKeywordReverse { get; set; } public string? TrackKeywordReverse { get; set; }
/// <summary>
/// 拉取轨迹关键字(反向)
/// </summary>
public List<string> TrackKeywordsReverse { get; set; }
/// <summary> /// <summary>
/// 轨迹发生地 /// 轨迹发生地
/// </summary> /// </summary>
public string TrackPlaceValue { get; set; } public string? TrackPlaceValue { get; set; }
/// <summary> /// <summary>
/// 拉取轨迹状态 /// 拉取轨迹状态
/// </summary> /// </summary>
public string TrackStatusValue { get; set; } public string? TrackStatusValue { get; set; }
} }

View File

@ -38,4 +38,9 @@ public class GetTrackTemplateContentDetailOutputVO
/// 轨迹状态id /// 轨迹状态id
/// </summary> /// </summary>
public int TrackStatusId { get; set; } public int TrackStatusId { get; set; }
/// <summary>
/// 轨迹模板id
/// </summary>
public int TrackTemplateId { get; set; }
} }

View File

@ -6,4 +6,9 @@ public class GetTrackTemplateContentPageInputVO : PageInfoInput
/// 轨迹模板id /// 轨迹模板id
/// </summary> /// </summary>
public List<int> TrackTemplateIds { get; set; } public List<int> TrackTemplateIds { get; set; }
/// <summary>
/// 选中项
/// </summary>
public List<int>? SelectedIds { get; set; }
} }

View File

@ -101,17 +101,24 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
/// <returns></returns> /// <returns></returns>
public async Task<UnifyPageResultDto<TrackOrderVO>> GetPageTrackOrder(GetPageTrackOrderInputVO input) public async Task<UnifyPageResultDto<TrackOrderVO>> GetPageTrackOrder(GetPageTrackOrderInputVO input)
{ {
List<string> orderNoList = new List<string>();
if (!input.OrderNos.IsNullOrWhiteSpace())
{
orderNoList = input.OrderNos.Split(new char[] { ',', ',', ':', ':' }).ToList();
}
var pageList = await Context.Queryable<OrderEntity>() var pageList = await Context.Queryable<OrderEntity>()
.LeftJoin<VExternalSubjectEntity>((a, b) => a.CustomId == b.Id && b.IsDeleted == false) .LeftJoin<VExternalSubjectEntity>((a, b) => a.CustomId == b.Id && b.IsDeleted == false)
.LeftJoin<VSystemEntity>((a, b, c) => a.SubSystemId == c.Id && c.IsDeleted == false) .LeftJoin<VSystemEntity>((a, b, c) => a.SubSystemId == c.Id && c.IsDeleted == false)
.WhereIF(input.SubSystemId > 0, (a, b, c) => a.SubSystemId == input.SubSystemId) .WhereIF(input.SubSystemId > 0, (a, b, c) => a.SubSystemId == input.SubSystemId)
.WhereIF(!input.OrderNos.IsNullOrEmpty(), (a, b, c) => input.OrderNos.Contains(a.OrderNo)) .WhereIF(!orderNoList.IsNullOrEmpty(), (a, b, c) => orderNoList.Contains(a.OrderNo))
.WhereIF(input.CreateTimeStart.HasValue && input.CreateTimeEnd.HasValue, .WhereIF(input.CreateTimeStart.HasValue && input.CreateTimeEnd.HasValue,
(a, b, c) => a.CreateTime >= input.CreateTimeStart && a.CreateTime <= input.CreateTimeEnd) (a, b, c) => a.CreateTime >= input.CreateTimeStart && a.CreateTime <= input.CreateTimeEnd)
.WhereIF(input.CreateTimeStart.HasValue && (!input.CreateTimeEnd.HasValue), .WhereIF(input.CreateTimeStart.HasValue && (!input.CreateTimeEnd.HasValue),
(a, b, c) => a.CreateTime >= input.CreateTimeStart) (a, b, c) => a.CreateTime >= input.CreateTimeStart)
.WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue, .WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue,
(a, b, c) => a.CreateTime <= input.CreateTimeEnd) (a, b, c) => a.CreateTime <= input.CreateTimeEnd)
.OrderByDescending((a, b, c) => a.CreateTime)
.Select((a, b, c) => new TrackOrderVO .Select((a, b, c) => new TrackOrderVO
{ {
Id = a.Id, Id = a.Id,
@ -127,6 +134,7 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
NewestTrackContent = a.LatestTrackContent, NewestTrackContent = a.LatestTrackContent,
NewestTrackEnContent = a.LatestTrackEnContent, NewestTrackEnContent = a.LatestTrackEnContent,
NewestTrackPlace = a.LatestTrackPlace, NewestTrackPlace = a.LatestTrackPlace,
NewestTrackTime = a.LatestTrackTime,
IsFinish = a.IsCompleted, IsFinish = a.IsCompleted,
CreateTime = a.CreateTime, CreateTime = a.CreateTime,
SubSystem = c.CnName SubSystem = c.CnName

View File

@ -60,8 +60,8 @@ public class TrackContentRepository : BasicRepository<TrackContentEntity>, ITrac
.WhereIF(input.SubSystemId > 0, (a, b, c, d, e, f) => a.SubSystemId == input.SubSystemId) .WhereIF(input.SubSystemId > 0, (a, b, c, d, e, f) => a.SubSystemId == input.SubSystemId)
.WhereIF(!input.Keywords.IsNullOrWhiteSpace(), .WhereIF(!input.Keywords.IsNullOrWhiteSpace(),
(a, b, c, d, e, f) => a.Code.Contains(input.Keywords) || a.Content.Contains(input.Keywords) (a, b, c, d, e, f) => a.Code.Contains(input.Keywords) || a.Content.Contains(input.Keywords)
|| a.EnContent.Contains(input.Keywords) || a.EnContent.Contains(input.Keywords))
) .WhereIF(input.TrackStatusId>0, (a, b, c, d, e, f) => a.TrackStatusId==input.TrackStatusId)
.OrderByIF(input.SelectIds.IsNullOrEmpty(), (a, b, c, d, e, f) => a.CreateTime, OrderByType.Desc) .OrderByIF(input.SelectIds.IsNullOrEmpty(), (a, b, c, d, e, f) => a.CreateTime, OrderByType.Desc)
.OrderByIF(!input.SelectIds.IsNullOrEmpty(), (a, b, c, d, e, f) => SqlFunc.IIF(input.SelectIds.Contains(a.Id), SqlFunc.DateAdd(SqlFunc.GetDate(), 1), a.CreateTime), OrderByType.Desc) .OrderByIF(!input.SelectIds.IsNullOrEmpty(), (a, b, c, d, e, f) => SqlFunc.IIF(input.SelectIds.Contains(a.Id), SqlFunc.DateAdd(SqlFunc.GetDate(), 1), a.CreateTime), OrderByType.Desc)
.Select((a, b, c, d, e, f) => new GetTrackContentListVO .Select((a, b, c, d, e, f) => new GetTrackContentListVO
@ -72,8 +72,8 @@ public class TrackContentRepository : BasicRepository<TrackContentEntity>, ITrac
Content = a.Content, Content = a.Content,
EnContent = a.EnContent, EnContent = a.EnContent,
TrackStatus = b.Status, TrackStatus = b.Status,
Node = SqlFunc.IF(b.Node == 1).Return("揽收").ElseIF(b.Node == 2).Return("干线").ElseIF(b.Node == 3).Return("清关") Node = SqlFunc.IF(b.Node == 1).Return("揽收").ElseIF(b.Node == 2).Return("清关").ElseIF(b.Node == 3).Return("干线")
.ElseIF(b.Node == 4).Return("中转").ElseIF(b.Node == 5).Return("派送") .ElseIF(b.Node == 4).Return("派送").ElseIF(b.Node == 5).Return("其他")
.End(""), .End(""),
TrackFlag = c.Name, TrackFlag = c.Name,
CreateTime = a.CreateTime, CreateTime = a.CreateTime,
@ -83,8 +83,6 @@ public class TrackContentRepository : BasicRepository<TrackContentEntity>, ITrac
}) })
.ToPagedListAsync(input.PageIndex, input.PageSize); .ToPagedListAsync(input.PageIndex, input.PageSize);
var ff = await Context.Queryable<TrackContentEntity>().Where(a => 1 == 1).ToListAsync();
return pagedList; return pagedList;
} }

View File

@ -45,11 +45,6 @@ public class TrackPullConfigRepository : BasicRepository<TrackPullConfigEntity>,
{ {
Id = pullContent.Id Id = pullContent.Id
}, true) }, true)
.Mapper(x =>
{
x.TrackKeywords = x.TrackKeyword.Split(',').ToList();
x.TrackKeywordsReverse = x.TrackKeywordReverse.Split(',').ToList();
})
.ToPagedListAsync(input.PageIndex, input.PageSize); .ToPagedListAsync(input.PageIndex, input.PageSize);
} }
@ -82,6 +77,11 @@ public class TrackPullConfigRepository : BasicRepository<TrackPullConfigEntity>,
Id = pullContent.Id, Id = pullContent.Id,
Code = trackContent.Code + "-" + trackContent.Content, Code = trackContent.Code + "-" + trackContent.Content,
}, true) }, true)
.Mapper(x =>
{
x.TrackKeywords = x.TrackKeyword?.Split(',').ToList();
x.TrackKeywordReverses = x.TrackKeywordReverse?.Split(',').ToList();
})
.SingleAsync(); .SingleAsync();
} }
@ -130,4 +130,9 @@ public class TrackPullConfigRepository : BasicRepository<TrackPullConfigEntity>,
{ {
return await Context.Updateable(updateObj).ExecuteCommandHasChangeAsync(); return await Context.Updateable(updateObj).ExecuteCommandHasChangeAsync();
} }
public async Task<bool> IsContentAnyAsync(Expression<Func<TrackPullContentConfigEntity, bool>> whereExpression)
{
return await Context.Queryable<TrackPullContentConfigEntity>().Where(whereExpression).AnyAsync();
}
} }

View File

@ -114,4 +114,14 @@ public class TrackPushConfigRepository : BasicRepository<TrackPushConfigEntity>,
{ {
return await Context.Updateable(updateObj).ExecuteCommandHasChangeAsync(); return await Context.Updateable(updateObj).ExecuteCommandHasChangeAsync();
} }
public async Task<List<TrackPushContentConfigEntity>> GetContentListAsync(Expression<Func<TrackPushContentConfigEntity, bool>> whereExpression)
{
return await Context.Queryable<TrackPushContentConfigEntity>().Where(whereExpression).ToListAsync();
}
public async Task<bool> UpdateContentRangeAsync(List<TrackPushContentConfigEntity> updateObjs)
{
return await Context.Updateable(updateObjs).ExecuteCommandHasChangeAsync();
}
} }

View File

@ -85,7 +85,8 @@ public class TrackTemplateRepository : BasicRepository<TrackTemplateEntity>, ITr
templateContent.UpdateUserId == updateUser.Id && !updateUser.IsDeleted) templateContent.UpdateUserId == updateUser.Id && !updateUser.IsDeleted)
.Filter(null, true) .Filter(null, true)
.Where(templateContent => input.TrackTemplateIds.Contains(templateContent.TrackTemplateId) && !templateContent.IsDeleted) .Where(templateContent => input.TrackTemplateIds.Contains(templateContent.TrackTemplateId) && !templateContent.IsDeleted)
.OrderByDescending(templateContent => templateContent.CreateTime) .OrderByIF(input.SelectedIds.IsNullOrEmpty(), templateContent => templateContent.CreateTime, OrderByType.Desc)
.OrderByIF(!input.SelectedIds.IsNullOrEmpty(), templateContent => SqlFunc.IIF(input.SelectedIds.Contains(templateContent.TrackContentId), SqlFunc.DateAdd(SqlFunc.GetDate(), 1), templateContent.CreateTime), OrderByType.Desc)
.Select((templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser, updateUser) => .Select((templateContent, trackContent, trackStatus, enumValue, trackFlag, createUser, updateUser) =>
new GetTrackTemplateContentPageOutputVO new GetTrackTemplateContentPageOutputVO
{ {
@ -98,6 +99,7 @@ public class TrackTemplateRepository : BasicRepository<TrackTemplateEntity>, ITr
UpdateTime = templateContent.UpdateTime, UpdateTime = templateContent.UpdateTime,
UpdateUser = updateUser.Name UpdateUser = updateUser.Name
}, true) }, true)
.Distinct()
.ToPagedListAsync(input.PageIndex, input.PageSize); .ToPagedListAsync(input.PageIndex, input.PageSize);
} }
@ -158,4 +160,9 @@ public class TrackTemplateRepository : BasicRepository<TrackTemplateEntity>, ITr
{ {
return await Context.Queryable<TrackTemplateContentEntity>().Where(whereExpression).ToListAsync(); return await Context.Queryable<TrackTemplateContentEntity>().Where(whereExpression).ToListAsync();
} }
public async Task<bool> UpdateContentRangeAsync(List<TrackTemplateContentEntity> updateObjs)
{
return await Context.Updateable(updateObjs).ExecuteCommandHasChangeAsync();
}
} }