diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs index f6495737..2afa6ae7 100644 --- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs +++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs @@ -7563,7 +7563,19 @@ namespace Myshipping.Application throw Oops.Bah("请先选择场站"); } - var rtn = await YardDataHelper.GetYardData(UserManager.UserId, order.TenantId.Value, order.TenantName, order.MBLNO, order.YARDID, isWeb); + var listRtn = await GetYardDataAndMappingSystem(order, isWeb); + + return listRtn.ToJsonString(); + } + + /// + /// 从爬虫获取场站数据,并映射为系统中的箱型 + /// + /// + private async Task> GetYardDataAndMappingSystem(BookingOrder order, bool isWeb = false) + { + + var rtn = await YardDataHelper.GetYardData(App.User.FindFirst(ClaimConst.CLAINM_USERID) == null ? order.CreatedUserId.Value : UserManager.UserId, order.TenantId.Value, order.TenantName, order.MBLNO, order.YARDID, isWeb); if (!rtn.Key) { throw Oops.Bah(rtn.Value); @@ -7573,23 +7585,24 @@ namespace Myshipping.Application var ctnList = await _cache.GetAllCodeCtn(); var mapCtn = await _cache.GetAllMappingCtn(); - var jData = JArray.Parse(rtn.Value); - foreach (JObject item in jData) + var listRtn = JsonConvert.DeserializeObject>(rtn.Value); + + foreach (var item in listRtn) { - var ctnall = item.GetStringValue("CTNALL"); + var ctnall = item.CTNALL; var findMap = mapCtn.FirstOrDefault(x => x.Module == "YardData" && x.MapCode == ctnall); var findCtn = ctnList.FirstOrDefault(x => x.Name == ctnall); if (findMap != null) { - item.Add("CtnCode", findMap.Code); + item.CtnCode = findMap.Code; findCtn = ctnList.First(c => c.Code == findMap.Code); - item["CTNALL"] = findCtn.Name; //名称显示维护的箱型 + item.CTNALL = findCtn.Name; //名称显示维护的箱型 } else if (findCtn != null) { - item.Add("CtnCode", findCtn.Code); - item["CTNALL"] = findCtn.Name; //名称显示维护的箱型 + item.CtnCode = findCtn.Code; + item.CTNALL = findCtn.Name; //名称显示维护的箱型 } else { @@ -7597,7 +7610,48 @@ namespace Myshipping.Application } } - return jData.ToString(); + return listRtn; + } + + /// + /// 自动引入场站箱型箱量数据 + /// + /// + /// + private async Task AutoYardData(long bookId) + { + var order = _rep.AsQueryable().Filter(null, true).First(x => x.Id == bookId); + var ctns = _repCtn.AsQueryable().Filter(null, true).Where(x => x.BILLID == bookId).ToList(); + if (ctns.Count(x => !string.IsNullOrEmpty(x.CNTRNO) || !string.IsNullOrEmpty(x.SEALNO)) > 0) //有数据填写了箱封号,不再处理 + { + _logger.LogInformation($"{bookId}({order.MBLNO})的数据已填写过箱封号,不再处理自动引入"); + return; + } + + var rtn = await GetYardDataAndMappingSystem(order, false); + await _repCtn.DeleteAsync(x => x.BILLID == bookId); + + foreach (var item in rtn) + { + var ctn = new BookingCtn(); + ctn.BILLID = order.Id; + ctn.CTNCODE = item.CtnCode; + ctn.CTNALL = item.CTNALL; + ctn.CTNNUM = item.XiangLiang; + ctn.CNTRNO = item.CNTRNO; + ctn.SEALNO = item.SEALNO; + ctn.KINDPKGS = string.IsNullOrEmpty(item.KINDPKGS) ? order.KINDPKGS : item.KINDPKGS; + ctn.PKGS = item.PKGS; + ctn.KGS = Convert.ToDecimal(item.KGS); + ctn.CBM = Convert.ToDecimal(item.CBM); + ctn.TAREWEIGHT = Convert.ToDecimal(item.TAREWEIGHT); + ctn.TenantId = order.TenantId; + ctn.CreatedUserId = order.CreatedUserId; + ctn.CreatedUserName = "系统"; + await _repCtn.InsertAsync(ctn); + } + + } /// @@ -8310,162 +8364,11 @@ namespace Myshipping.Application "} "; } - [HttpGet("/BookingOrder/XHZGLJ"), AllowAnonymous] - public async Task XHZGLJ(long bookId = 432917132775494) + [HttpGet("/BookingOrder/AutoYard"), AllowAnonymous] + public async Task AutoYard(long bookId = 437779259732037) { - var order = _rep.AsQueryable().Filter(null, true).First(x => x.Id == bookId); - var ctns = _repCtn.AsQueryable().Filter(null, true).Where(x => x.BILLID == bookId).ToList(); - MemoryStream ms = new MemoryStream(File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XhzGlj.xls"))); - var workbook = new HSSFWorkbook(ms); - FileStream fs = new FileStream(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XhzGlj_1.xls"), FileMode.Create); - var sheet = workbook.GetSheetAt(0); - - //第一行标题 - var title = $"下货纸清单-{order.LANENAME} SERVICE"; - sheet.GetRow(0).GetCell(0).SetCellValue(title); - - //船期B2 - sheet.GetRow(1).GetCell(1).SetCellValue(order.ETD.HasValue ? order.ETD.Value.ToString("yyyy.MM.dd") : ""); - - //船名B3 - sheet.GetRow(2).GetCell(1).SetCellValue(order.VESSEL); - - //航次F3 - sheet.GetRow(2).GetCell(5).SetCellValue(order.VOYNO); - - //代理B4 - sheet.GetRow(3).GetCell(1).SetCellValue(order.TenantName); - - //联系电话F4 - var usr = _repUser.AsQueryable().Filter(null, true).First(u => u.Id == order.CreatedUserId); - if (!string.IsNullOrEmpty(usr.Tel)) - { - sheet.GetRow(3).GetCell(5).SetCellValue(usr.Tel); - } - else if (!string.IsNullOrEmpty(usr.Phone)) - { - sheet.GetRow(3).GetCell(5).SetCellValue(usr.Phone); - } - else - { - sheet.GetRow(3).GetCell(5).SetCellValue(""); - } - - //订舱号B7 - sheet.GetRow(6).GetCell(1).SetCellValue(order.CUSTNO); - - //目的港C7 - sheet.GetRow(6).GetCell(2).SetCellValue(order.PORTDISCHARGE); - - //中转港D7 - sheet.GetRow(6).GetCell(3).SetCellValue(""); - - //货名E7 - sheet.GetRow(6).GetCell(4).SetCellValue(order.DESCRIPTION); - - //件数F7 - sheet.GetRow(6).GetCell(5).SetCellValue(order.PKGS.Value.ToString()); - - //重量G7 - sheet.GetRow(6).GetCell(6).SetCellValue(Convert.ToDouble(order.KGS.Value).ToString()); - - //尺码H7 - sheet.GetRow(6).GetCell(7).SetCellValue(Convert.ToDouble(order.CBM.Value).ToString()); - - //冻柜信息 温度C I7 - if (order.CARGOID == "R") - { - sheet.GetRow(6).GetCell(8).SetCellValue(order.TEMPSET); - } - else - { - sheet.GetRow(6).GetCell(8).SetCellValue(""); - } - - //冻柜信息 通风CBM/H J7 - if (order.CARGOID == "R") - { - sheet.GetRow(6).GetCell(9).SetCellValue(order.REEFERF); - } - else - { - sheet.GetRow(6).GetCell(9).SetCellValue(""); - } - - //冻柜信息 湿度% K7 - if (order.CARGOID == "R") - { - sheet.GetRow(6).GetCell(10).SetCellValue(order.HUMIDITY); - } - else - { - sheet.GetRow(6).GetCell(10).SetCellValue(""); - } - - //整理箱型箱量 - var groupList = ctns.Where(x => x.CTNNUM > 0).GroupBy(c => c.CTNALL).Select(g => new { CTNALL = g.Key.Replace("'", ""), CTNNUM = g.Sum(gg => gg.CTNNUM) }); - - //箱量 20GP L7 - var findCtn = groupList.FirstOrDefault(x => x.CTNALL == "20GP"); - if (findCtn != null) - { - sheet.GetRow(6).GetCell(11).SetCellValue(findCtn.CTNNUM.Value.ToString()); - } - else - { - sheet.GetRow(6).GetCell(11).SetCellValue(""); - } - - //箱量 40GP M7 - findCtn = groupList.FirstOrDefault(x => x.CTNALL == "40GP"); - if (findCtn != null) - { - sheet.GetRow(6).GetCell(12).SetCellValue(findCtn.CTNNUM.Value.ToString()); - } - else - { - sheet.GetRow(6).GetCell(12).SetCellValue(""); - } - - //箱量 40HC N7 - findCtn = groupList.FirstOrDefault(x => x.CTNALL == "40HC"); - if (findCtn != null) - { - sheet.GetRow(6).GetCell(13).SetCellValue(findCtn.CTNNUM.Value.ToString()); - } - else - { - sheet.GetRow(6).GetCell(13).SetCellValue(""); - } - - //箱量 20RF O7 - findCtn = groupList.FirstOrDefault(x => x.CTNALL == "20RF"); - if (findCtn != null) - { - sheet.GetRow(6).GetCell(14).SetCellValue(findCtn.CTNNUM.Value.ToString()); - } - else - { - sheet.GetRow(6).GetCell(14).SetCellValue(""); - } - - //箱量 40RH P7 - findCtn = groupList.FirstOrDefault(x => x.CTNALL == "40RH"); - if (findCtn != null) - { - sheet.GetRow(6).GetCell(15).SetCellValue(findCtn.CTNNUM.Value.ToString()); - } - else - { - sheet.GetRow(6).GetCell(15).SetCellValue(""); - } - - //备注 场站/特殊要求 Q7 - sheet.GetRow(6).GetCell(16).SetCellValue(order.YARDREMARK); + await AutoYardData(bookId); - workbook.Write(fs); - fs.Flush(); - fs.Close(); } #endregion diff --git a/Myshipping.Application/Service/BookingOrder/Dto/BookingYardData.cs b/Myshipping.Application/Service/BookingOrder/Dto/BookingYardData.cs new file mode 100644 index 00000000..6b82920d --- /dev/null +++ b/Myshipping.Application/Service/BookingOrder/Dto/BookingYardData.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Myshipping.Application.Service.BookingOrder.Dto +{ + public class BookingYardDataRtn + { + /// + /// 箱号 + /// + public string CNTRNO { get; set; } + /// + /// 封号 + /// + public string SEALNO { get; set; } + /// + /// 箱型 + /// + public string CTNALL { get; set; } + /// + /// 箱量 + /// + public int XiangLiang { get; set; } + /// + /// 船名 + /// + public string VESSEL { get; set; } + /// + /// 航次 + /// + public string VOYNO { get; set; } + /// + /// 中转港 + /// + public string tra_name { get; set; } + /// + /// 卸货港 + /// + public string pod_name { get; set; } + /// + /// 目的港 + /// + public string Destination { get; set; } + /// + /// 皮重 + /// + public float? TAREWEIGHT { get; set; } + /// + /// 车号 + /// + public string CheHao { get; set; } + /// + /// 包装 + /// + public string KINDPKGS { get; set; } + /// + /// 件数 + /// + public int PKGS { get; set; } + /// + /// 尺码 + /// + public float? CBM { get; set; } + /// + /// 货重 + /// + public float? KGS { get; set; } + /// + /// 提箱时间 + /// + public string TiXiangShiJian { get; set; } + /// + /// 返场时间 + /// + public string FanChangShiJian { get; set; } + /// + /// 集港时间 + /// + public string JiGangShiJian { get; set; } + /// + /// 计划集港开始时间 + /// + public string PortStartPlanTime { get; set; } + /// + /// 计划集港结束时间 + /// + public string PortEndPlanTime { get; set; } + /// + /// 完船时间 + /// + public string WanChuanShiJian { get; set; } + /// + /// 危险品主等级 + /// + public string DClass { get; set; } + /// + /// 危险品编号 + /// + public string DUNNo { get; set; } + /// + /// 危险品副等级 + /// + public string FuDClass { get; set; } + /// + /// 危险品副编号 + /// + public string FuDUNNo { get; set; } + /// + /// 海污 + /// + public string HaiWu { get; set; } + /// + /// 温度 + /// + public string TempSet { get; set; } + /// + /// 通风 + /// + public string Reeferf { get; set; } + /// + /// 湿度 + /// + public string Humidity { get; set; } + + } + + public class BookingGetYardDataDto: BookingYardDataRtn + { + /// + /// 箱型代码 + /// + public string CtnCode { get; set; } + } +}