diff --git a/ds-wms-service/DS.WMS.Core/Op/Dtos/BookingSlot/BookingSlotBaseApiDto.cs b/ds-wms-service/DS.WMS.Core/Op/Dtos/BookingSlot/BookingSlotBaseApiDto.cs index dca28d31..61b2d391 100644 --- a/ds-wms-service/DS.WMS.Core/Op/Dtos/BookingSlot/BookingSlotBaseApiDto.cs +++ b/ds-wms-service/DS.WMS.Core/Op/Dtos/BookingSlot/BookingSlotBaseApiDto.cs @@ -25,6 +25,11 @@ namespace DS.WMS.Core.Op.Dtos /// 批次号 /// public string BatchNo { get; set; } + + /// + /// 订舱ID + /// + public Nullable BookingId { get; set; } } /// diff --git a/ds-wms-service/DS.WMS.Core/Op/EDI/VOLTAEdiHelper.cs b/ds-wms-service/DS.WMS.Core/Op/EDI/VOLTAEdiHelper.cs index 49d557fe..680a7b23 100644 --- a/ds-wms-service/DS.WMS.Core/Op/EDI/VOLTAEdiHelper.cs +++ b/ds-wms-service/DS.WMS.Core/Op/EDI/VOLTAEdiHelper.cs @@ -1020,7 +1020,7 @@ namespace DS.WMS.Core.Op.EDI if (kingweight == 0) kingweight = 100; - r.WriteLine("41:1:" + bill.HSCODE + ":" + cargoid + ":" + bill.PKGS.ToString() + ":" + bill.KINDPKGS_EDI_CODE + ":" + bill.KINDPKGS + ":" + kingweight.ToString() + ":" + r.WriteLine("41:1:" + bill.HSCODE + ":" + cargoid + ":" + bill.PKGS.ToString() + ":" + bill.KINDPKGS_EDI_CODE + ":" + bill.KINDPKGS + ":" + bill.KGS.ToString() + ":" + bill.CBM.ToString() + "::::::" + bill.KGS.ToString() + ":::'"); icount = icount + 1; diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs index 9ef640e4..75cd3ac3 100644 --- a/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs +++ b/ds-wms-service/DS.WMS.Core/Op/Method/BookingSlot/BookingSlotService.cs @@ -60,6 +60,8 @@ using DS.WMS.Core.Sys.Entity; using LanguageExt; using Masuit.Tools.Models; using System.ComponentModel; +using Masuit.Tools.Systems; +using System.Threading; namespace DS.WMS.Core.Op.Method { @@ -1509,12 +1511,55 @@ namespace DS.WMS.Core.Op.Method back-返还舱位 1、(如果有对应舱位)删除舱位与订单的关系 */ - var slotNO = dto.DataObj.SlotBookingNo; - model = await tenantDb.Queryable().FirstAsync(x => x.SlotBookingNo == slotNO); + var bookingId = dto.BookingId.Value; + var allocList = tenantDb.Queryable().Where(x => x.BookingId == bookingId).ToList(); - if(model != null) + if (allocList.Count > 0) { + //删除关系,并标记舱位状态 + foreach (var alloc in allocList) + { + alloc.Deleted = true; + alloc.DeleteBy = long.Parse(user.UserId); + alloc.DeleteTime = DateTime.Now; + alloc.DeleteUserName = user.UserName; + + await tenantDb.Updateable(alloc).UpdateColumns(x=>new { + x.Deleted, + x.DeleteBy, + x.DeleteTime, + x.DeleteUserName + }).ExecuteCommandAsync(); + } + var checkList = allocList.Select(a => a.BookingSlotId).Distinct().ToList(); + //查询所有舱位相关联的记录 + var slotLinkList = tenantDb.Queryable().Where(x => checkList.Contains(x.Id) && x.Deleted == false).ToList(); + + //更新舱位状态 + if (slotLinkList.Count > 0) + { + foreach (var slot in slotLinkList) + { + slot.Status = BookingSlotStatusEnum.CUSTOMERBACK.ToString(); + slot.StatusName = BookingSlotStatusEnum.CUSTOMERBACK.GetDescription(); + slot.UpdateTime = DateTime.Now; + slot.UpdateBy = long.Parse(user.UserId); + slot.UpdateUserName = user.UserName; + + await tenantDb.Updateable(slot).UpdateColumns(x => new { + x.Status, + x.StatusName, + x.UpdateTime, + x.UpdateBy, + x.UpdateUserName + }).ExecuteCommandAsync(); + } + } + } + else + { + throw new Exception($"未找到当前订舱关联的舱位信息"); } } else if (dto.OpType == "backcreate") @@ -1524,7 +1569,155 @@ namespace DS.WMS.Core.Op.Method 1、(如果有对应舱位)删除舱位与订单的关系 2、(如果没有舱位)根据订单数据,反向生成舱位信息(主信息、箱信息、附件) */ + var bookingId = dto.BookingId.Value; + var allocList = tenantDb.Queryable().Where(x => x.BookingId == bookingId).ToList(); + + if (allocList.Count > 0) + { + //删除关系,并标记舱位状态 + foreach (var alloc in allocList) + { + alloc.Deleted = true; + alloc.DeleteBy = long.Parse(user.UserId); + alloc.DeleteTime = DateTime.Now; + alloc.DeleteUserName = user.UserName; + + await tenantDb.Updateable(alloc).UpdateColumns(x => new { + x.Deleted, + x.DeleteBy, + x.DeleteTime, + x.DeleteUserName + }).ExecuteCommandAsync(); + } + + var checkList = allocList.Select(a => a.BookingSlotId).Distinct().ToList(); + //查询所有舱位相关联的记录 + var slotLinkList = tenantDb.Queryable().Where(x => checkList.Contains(x.Id) && x.Deleted == false).ToList(); + + //更新舱位状态 + if (slotLinkList.Count > 0) + { + foreach (var slot in slotLinkList) + { + slot.Status = BookingSlotStatusEnum.CUSTOMERBACK.ToString(); + slot.StatusName = BookingSlotStatusEnum.CUSTOMERBACK.GetDescription(); + slot.UpdateTime = DateTime.Now; + slot.UpdateBy = long.Parse(user.UserId); + slot.UpdateUserName = user.UserName; + + await tenantDb.Updateable(slot).UpdateColumns(x => new { + x.Status, + x.StatusName, + x.UpdateTime, + x.UpdateBy, + x.UpdateUserName + }).ExecuteCommandAsync(); + } + } + } + else + { + //这里根据订舱详情自动生成舱位 + var bookingOrder = await tenantDb.Queryable().FirstAsync(b => b.Id == dto.BookingId); + + var bookingCtnList = await tenantDb.Queryable().Where(b => b.BSNO == dto.BookingId.ToString()).ToListAsync(); + + var c = tenantDb.Queryable().Where(x => x.SlotBookingNo == dto.DataObj.SlotBookingNo).Count(); + if (c > 0) + { + //订舱提单号已存在 + throw new Exception(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.BookingSlotSlotBookingNoExists))); + } + + #region 订舱对应舱位 + model = new BookingSlotBase + { + CarrierCode = bookingOrder.Carrier, + CarrierId = bookingOrder.CarrierId, + Carrier = bookingOrder.Carrier, + SlotBookingNo = bookingOrder.MBLNO, + ContractNo = bookingOrder.ContractNo, + + Vessel = bookingOrder.Vessel?.ToUpper()?.Trim(), + Voyno = bookingOrder.InnerVoyno?.ToUpper()?.Trim(), + ETD = bookingOrder.ETD, + ETA = bookingOrder.ETA, + + VGMSubmissionCutDate = bookingOrder.VGMCloseDate, + CYCutDate = bookingOrder.ClosingDate, + SICutDate = bookingOrder.CloseDocDate, + PortLoadId = bookingOrder.LoadPortId, + PortLoadCode = bookingOrder.LoadPortCode, + PortLoad = bookingOrder.LoadPort, + + PortDischargeId = bookingOrder.DischargePortId, + PortDischargeCode = bookingOrder.DischargePortCode, + PortDischarge = bookingOrder.DischargePort, + }; + #endregion + + if (bookingCtnList.Count > 0) + { + + } + + await tenantDb.Insertable(model).ExecuteReturnEntityAsync(); + + id = model.Id; + + foreach (var ctn in dto.DataObj.CtnList) + { + var newCtn = ctn.Adapt(); + + newCtn.SlotId = model.Id; + await tenantDb.Insertable(newCtn).ExecuteCommandAsync(); + } + + //await InsLog("Add", model.Id, "新增舱位"); + + string batchNo = GuidHelper.GetSnowflakeId(); + + //处理附件 + if (file != null) + { + Logger.Log(NLog.LogLevel.Info, $"请求文件名:{file.FileName}"); + + var fileRlt = await _sysFileService.SaveFileDirect(model.Id.ToString(), file.FileBytes, batchNo, file.FileName, "bcfiles"); + + var fileFullPath = fileRlt.Data.Item2; + + Logger.Log(NLog.LogLevel.Info, $"保存文件路径:{fileFullPath}"); + + if (!string.IsNullOrWhiteSpace(fileFullPath)) + { + //将格式单附件写入订舱的附件 + await SaveEDIFile(id, fileFullPath, file.FileName, long.Parse(user.TenantId), file.FileBytes.Length, + CONST_BC_FILE_CODE, CONST_BC_FILE_NAME); + } + } + + if (modifyFile != null) + { + Logger.Log(NLog.LogLevel.Info, $"请求文件名(变更文件):{modifyFile.FileName}"); + + var fileRlt = await _sysFileService.SaveFileDirect(model.Id.ToString(), modifyFile.FileBytes, batchNo, modifyFile.FileName, "bcnoticefiles"); + + var fileFullPath = fileRlt.Data.Item2; + + Logger.Log(NLog.LogLevel.Info, $"保存文件路径(变更文件):{fileFullPath}"); + + if (!string.IsNullOrWhiteSpace(fileFullPath)) + { + //将格式单附件写入订舱的附件 + await SaveEDIFile(id, fileFullPath, modifyFile.FileName, long.Parse(user.TenantId), modifyFile.FileBytes.Length, + CONST_BC_NOTICE_FILE_CODE, CONST_BC_NOTICE_FILE_NAME); + } + } + + //触发标签自动绑定 + await GenerateSlotLabel(dto, id); + } } //更新库存