diff --git a/Myshipping.Application/Entity/BookingLabelAllocation.cs b/Myshipping.Application/Entity/BookingLabelAllocation.cs new file mode 100644 index 00000000..62a8cee7 --- /dev/null +++ b/Myshipping.Application/Entity/BookingLabelAllocation.cs @@ -0,0 +1,30 @@ +using Myshipping.Core; +using Myshipping.Core.Entity; +using SqlSugar; +using System.ComponentModel; +namespace Myshipping.Application.Entity +{ + /// + /// + /// + [SugarTable("booking_label_allocation")] + [Description("订舱标签关联表")] + [Tenant(CommonConst.MasterDb)] + public class BookingLabelAllocation : PrimaryKeyEntity + { + /// + /// 标签主键 + /// + public long LabelId { get; set; } + + /// + /// 业务主键 + /// + public long BusinessId { get; set; } + + /// + /// 租户id + /// + public long TenantId { get; set; } + } +} \ No newline at end of file diff --git a/Myshipping.Application/Service/BookingLabel/BookingLabelService.cs b/Myshipping.Application/Service/BookingLabel/BookingLabelService.cs index 22e49869..011c24de 100644 --- a/Myshipping.Application/Service/BookingLabel/BookingLabelService.cs +++ b/Myshipping.Application/Service/BookingLabel/BookingLabelService.cs @@ -1,5 +1,6 @@ using Furion.DependencyInjection; using Furion.DynamicApiController; +using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Mvc; using Myshipping.Application.Entity; @@ -16,18 +17,65 @@ namespace Myshipping.Application /// /// 订舱标签服务 /// + [ApiDescriptionSettings("Application", Name = "BookingLabel", Order = 1)] public class BookingLabelService : IBookingLabelService, IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; + private readonly SqlSugarRepository _repAllocation; private readonly ISysCacheService _cache; public BookingLabelService(SqlSugarRepository rep, - ISysCacheService cache) + ISysCacheService cache, + SqlSugarRepository repAllocation) { _rep = rep; _cache = cache; + _repAllocation = repAllocation; } + + /// + /// 为舱位分配标签 + /// + /// + [HttpPost("/BookingLabel/Bind")] + public async Task SetLabel(BindLabelDto input) + { + if (input.BusinessIdArray?.Any() != true) + { + throw Oops.Oh("请检查参数"); + } + _rep.CurrentBeginTran(); + + try + { + await _repAllocation.DeleteAsync(x => input.BusinessIdArray.Contains(x.BusinessId)); + + if (input.LabelIdArray != null && input.LabelIdArray.Length > 0) + { + List list = new(); + foreach (var item in input.LabelIdArray) + { + foreach (var businessId in input.BusinessIdArray) + { + list.Add(new BookingLabelAllocation + { + LabelId = item, + BusinessId = businessId, + //TenantId = UserManager.TENANT_ID + }); + } + } + await _repAllocation.InsertAsync(list); + } + _rep.CurrentCommitTran(); + } + catch (Exception) + { + _rep.CurrentRollbackTran(); + throw; + } + } /// /// 获取全部或指定范围类型的标签列表 /// diff --git a/Myshipping.Application/Service/BookingLabel/Dto/BookingLabelBaseDto.cs b/Myshipping.Application/Service/BookingLabel/Dto/BookingLabelBaseDto.cs index 7648a202..88af57a9 100644 --- a/Myshipping.Application/Service/BookingLabel/Dto/BookingLabelBaseDto.cs +++ b/Myshipping.Application/Service/BookingLabel/Dto/BookingLabelBaseDto.cs @@ -13,8 +13,19 @@ /// public int Scope { get; set; } } - //public class BookingLabelCacheDto : BookingLabelBaseDto - //{ - // public long TenantId { get; set; } - //} + + /// + /// 标签绑定Dto类 + /// + public class BindLabelDto + { + /// + /// 标签主键列表 + /// + public long[] LabelIdArray { get; set; } + /// + /// 业务主键列表 + /// + public long[] BusinessIdArray { get; set; } + } } diff --git a/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs b/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs index d209d965..057271b4 100644 --- a/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs +++ b/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs @@ -44,6 +44,7 @@ namespace Myshipping.Application private readonly SqlSugarRepository _repCtn; private readonly SqlSugarRepository _repStock; private readonly SqlSugarRepository _repAllocation; + private readonly SqlSugarRepository _repLabelAllocation; private readonly SqlSugarRepository _repAllocationCtn; private readonly SqlSugarRepository _bookingFileRepository; private readonly SqlSugarRepository _bookingSlotCompareRepository; @@ -90,7 +91,8 @@ namespace Myshipping.Application SqlSugarRepository bookingOrderContactRepository, INamedServiceProvider namedBookingOrderServiceProvider, IBookingValueAddedService bookingValueAddedService, - SqlSugarRepository repBookingOrder) + SqlSugarRepository repBookingOrder, + SqlSugarRepository repLabelAllocation) { _repBase = repBase; _repCtn = repCtn; @@ -112,6 +114,7 @@ namespace Myshipping.Application _bookingOrderContactRepository = bookingOrderContactRepository; _bookingValueAddedService = bookingValueAddedService; _repBookingOrder = repBookingOrder; + _repLabelAllocation = repLabelAllocation; } #region 舱位 @@ -243,13 +246,13 @@ namespace Myshipping.Application x.UpdatedTime, }).ExecuteCommandAsync(); - //Parallel.For(0, 1, (n) => - //{ - bookingOrderService.SaveLog(bookingOrder, oldBookingOrder, "舱位关联更新"); + Parallel.For(0, 1, (n) => + { + bookingOrderService.SaveLog(bookingOrder, oldBookingOrder, "舱位关联更新"); - // 推送东胜 - bookingOrderService.SendBookingOrder(new long[] { allocation.BOOKING_ID }); - //}); + // 推送东胜 + bookingOrderService.SendBookingOrder(new long[] { allocation.BOOKING_ID }); + }); } _repAllocation.CurrentCommitTran(); } @@ -262,12 +265,12 @@ namespace Myshipping.Application } #endregion - //Parallel.For(0, 1, (n) => - //{ - InsLog("Update", model.Id, typeof(BookingSlotBaseSaveInput), oldObj, input, + Parallel.For(0, 1, (n) => + { + _ = InsLog("Update", model.Id, typeof(BookingSlotBaseSaveInput), oldObj, input, nameof(BookingSlotBaseApiSaveDto.CtnList), nameof(BookingSlotBaseApiSaveDto.BookingSlotSaleInfoList)); - //}); + }); } else { @@ -984,7 +987,8 @@ namespace Myshipping.Application var fieldName = descriptor.Name; if (!string.IsNullOrWhiteSpace(descriptor.Description)) { - fieldName = descriptor.Description; + //fieldName = descriptor.Description; + continue; } waitInsertLogList.Add(new BookingLogDetail { @@ -1368,6 +1372,8 @@ namespace Myshipping.Application input.WEEK_AT = "W" + input.WEEK_AT; } ISugarQueryable select = null; + + // 箱型筛选 string[] ctnCodeArr = null; if (!string.IsNullOrEmpty(input.CTN_STAT)) { @@ -1403,13 +1409,21 @@ namespace Myshipping.Application .WhereIF(!string.IsNullOrEmpty(input.BOOKING_SLOT_TYPE), u => u.BOOKING_SLOT_TYPE == input.BOOKING_SLOT_TYPE) .WhereIF(!string.IsNullOrEmpty(input.LANENAME), u => u.LANENAME.Contains(input.LANENAME)) - .WhereIF(!string.IsNullOrEmpty(input.WEEK_AT), u => u.WEEK_AT == input.WEEK_AT); + .WhereIF(!string.IsNullOrEmpty(input.WEEK_AT), u => u.WEEK_AT == input.WEEK_AT) + + // 标签筛选 + .WhereIF(input.LabelIdArray != null && input.LabelIdArray.Length > 0, + u => SqlFunc.Subqueryable() + .Where(x => x.BusinessId == u.Id && input.LabelIdArray.Contains(x.LabelId)) + .Any()); if (ctnCodeArr != null && ctnCodeArr.Length > 0) { var tempSelect = select as ISugarQueryable; tempSelect.Where((u, c) => ctnCodeArr.Contains(c.CTNCODE)); } + //var sql = select.OrderByDescending(u => u.CreatedTime).ToSqlString(); + var entities = await select.OrderByDescending(u => u.CreatedTime) .ToPagedListAsync(input.PageNo, input.PageSize); diff --git a/Myshipping.Application/Service/BookingSlot/Dto/BookingSlotBaseDto.cs b/Myshipping.Application/Service/BookingSlot/Dto/BookingSlotBaseDto.cs index e5422ec4..7722bd79 100644 --- a/Myshipping.Application/Service/BookingSlot/Dto/BookingSlotBaseDto.cs +++ b/Myshipping.Application/Service/BookingSlot/Dto/BookingSlotBaseDto.cs @@ -124,6 +124,11 @@ namespace Myshipping.Application.Service.BookingSlot.Dto /// 周数 /// public string WEEK_AT { get; set; } + + /// + /// 标签Id列表 + /// + public long[] LabelIdArray { get; set; } } /// @@ -624,6 +629,6 @@ namespace Myshipping.Application.Service.BookingSlot.Dto /// /// 修改标记,前端提供给后端判断是否更新 /// - public bool UpdateFlag { get; set; } + public bool UpdateFlag { get; set; } } }