From 58730d4aa64bf140ef3c8ab9ceb0f171df0a7aaf Mon Sep 17 00:00:00 2001 From: whm <86whm@163.com> Date: Wed, 12 Apr 2023 09:26:53 +0800 Subject: [PATCH] =?UTF-8?q?vgm=E5=A2=9E=E5=8A=A0=E5=A4=A7=E7=AE=80?= =?UTF-8?q?=E4=BA=91=E9=80=9A=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BookingOrder/BookingOrderService.cs | 310 +++++++++++------- 1 file changed, 188 insertions(+), 122 deletions(-) diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs index 4e889f9d..e262dedb 100644 --- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs +++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs @@ -3256,6 +3256,7 @@ namespace Myshipping.Application return new string[] { ordUrl.UrlVgm, ordUrl.UrlVgmSi }; } + /// /// 直发VGM(单票) /// @@ -3267,151 +3268,216 @@ namespace Myshipping.Application var order = _rep.FirstOrDefault(x => x.Id == bookingId); var ctns = _repCtn.Where(x => x.BILLID == bookingId).ToList(); - var dicUrlVgm = _cache.GetAllDictData().Result.First(x => x.TypeCode == "url_set" && x.Code == "vgm_service_single"); - //船公司 if (string.IsNullOrEmpty(order.CARRIERID)) { throw Oops.Bah(BookingErrorCode.BOOK118); } - //判断船公司是否支持 - var allowCarrier = _cache.GetAllDictData().Result.Where(x => x.TypeCode == "vgm_carrier_list").Select(x => x.Code).ToList(); - if (!allowCarrier.Contains(order.CARRIERID)) - { - throw Oops.Bah(BookingErrorCode.BOOK117); - } - - //船公司网站账号 - var carrWebAccMap = _cache.GetAllDictData().Result.FirstOrDefault(x => x.TypeCode == "carrier_web_account_mapping" && x.Code == order.CARRIERID); - var webacc = _webAccountConfig.GetAccountConfig(carrWebAccMap.Value, UserManager.UserId).Result; - if (webacc == null) - { - throw Oops.Bah(BookingErrorCode.BOOK125); - } - //提单号不能为空 if (string.IsNullOrEmpty(order.MBLNO)) { throw Oops.Bah(BookingErrorCode.BOOK127); } - ////箱型映射 - //var ctnMapping = await _cache.GetAllMappingCtn(); - //ctnMapping = ctnMapping.Where(x => x.Module == "BookingVgm").ToList(); - //if (ctnMapping.Count == 0) - //{ - // throw Oops.Bah(BookingErrorCode.BOOK122); - //} + var config = _cache.GetAllTenantParam().Result.FirstOrDefault(x => x.TenantId == UserManager.TENANT_ID && x.ParaCode == "VGM_SEND_CHANNEL"); + if (config != null && config.ItemCode == "USE_MYSHIPPING") //使用大简云发送vgm + { + //ETD不能为空 + if (!order.ETD.HasValue) + { + throw Oops.Bah("ETD不能为空"); + } - //var expCode = ctns.Select(x => x.CTNCODE).Distinct().Except(ctnMapping.Select(y => y.Code)).ToList(); - //if (expCode.Count > 0) - //{ - // throw Oops.Bah(BookingErrorCode.BOOK123, string.Join(',', expCode)); - //} + //重量不能为空 + if (!order.KGS.HasValue) + { + throw Oops.Bah("重量不能为空"); + } - #region 箱信息校验,2022-7-1修改:【累加】的必须有重量、皮重和称重重量;【总重】的只需要称重重量不为空 - if (ctns.Where(c => c.WEIGHTYPE == "累加" && - ( - string.IsNullOrEmpty(c.CNTRNO) - || !c.WEIGHKGS.HasValue - || c.WEIGHKGS == 0 - || !c.TAREWEIGHT.HasValue - || c.TAREWEIGHT == 0 - || !c.KGS.HasValue - || c.KGS == 0) - ).Count() > 0) - { - throw Oops.Bah("称重方式为累加时,箱号、重量、箱皮重以及称重重量都不能为空"); - } + var urlConfig = _cache.GetAllSysConfig().Result.FirstOrDefault(x => x.GroupCode == "DJY_CONST" && x.Code == "DjyVgmApiMyshpping"); - if (ctns.Where(c => c.WEIGHTYPE == "总重" && - ( - string.IsNullOrEmpty(c.CNTRNO) - || !c.WEIGHKGS.HasValue - || c.WEIGHKGS == 0) - ).Count() > 0) - { - throw Oops.Bah("称重方式为总重时,箱号和称重重量都不能为空"); - } - #endregion + var objMdata = new + { + MBLNO = order.MBLNO, + CARRIER = order.CARRIERID, + ChuanMing = order.VESSEL, + HangCi = order.VOYNOINNER, + ETD = order.ETD.Value.ToString("yyyy-MM-dd HH:mm:ss"), + ZongZhongLiang = order.KGS.ToString(), + BeiZhu = "", + ORDERNO = order.CUSTNO, + VGMCLOSETIME = order.CLOSEVGMDATE.HasValue ? order.CLOSEVGMDATE.Value.ToString("yyyy-MM-dd HH:mm:ss") : "" + }; + var listCtn = new List(); + foreach (var ctn in ctns) + { + if (string.IsNullOrEmpty(ctn.CTNALL) + || string.IsNullOrEmpty(ctn.CNTRNO) + || string.IsNullOrEmpty(ctn.SEALNO) + || !ctn.WEIGHKGS.HasValue + || string.IsNullOrEmpty(ctn.WEIGHDATE)) + { + throw Oops.Bah("所有箱子的箱型、箱号、封号、称重重量和称重时间都不能为空"); + } - ////场站转换 - //var yardset = _cache.GetAllMappingYard().Result.FirstOrDefault(y => y.Code == order.YARDID && y.Module == "BookingVgm"); - //if (yardset == null) - //{ - // throw Oops.Bah(BookingErrorCode.BOOK120, order.YARDID); - //} - if (string.IsNullOrEmpty(order.YARD) || string.IsNullOrEmpty(order.YARDID)) - { - throw Oops.Bah("场站未正确选择"); + listCtn.Add(new + { + ChengZhongZhongLiang = ctn.WEIGHKGS.Value.ToString(), + ChengZhongShiJian = ctn.WEIGHDATE, + CTNALL = ctn.CTNALL, + CNTRNO = ctn.CNTRNO, + SEALNO = ctn.SEALNO + }); + } + + urlConfig.Value.SetBody(new Dictionary { + { "ac", "vgm" }, + { "uid", ""}, + { "skey", ""}, + { "optype", "9"}, + { "mdata", JsonConvert.SerializeObject(objMdata)}, + { "ctndata", JsonConvert.SerializeObject(listCtn)} + }, "application/x-www-form-urlencoded"); } + else //直接调用vgm接口直发 + { + var dicUrlVgm = _cache.GetAllDictData().Result.First(x => x.TypeCode == "url_set" && x.Code == "vgm_service_single"); - var user = await _repUser.FirstOrDefaultAsync(x => x.Id == UserManager.UserId); - int idx = 1; - //调用接口 - var dicUrl = _cache.GetAllDictData().Result.First(x => x.TypeCode == "url_set" && x.Code == "vgm_service_single"); - var sendObj = new - { - SystemCode = "djy_hechuan", - billOrderId = order.Id.ToString(), - sendOrderCode = order.MBLNO, - customerName = $"{UserManager.TENANT_NAME}+{UserManager.Name}", //公司名称+用户姓名 - customerId = order.CUSTOMERID.ToString(), - agentName = string.IsNullOrEmpty(order.FORWARDER) ? UserManager.TENANT_NAME : order.FORWARDER, - carrierCode = order.CARRIERID, - userName = webacc.Account, - userPassword = webacc.Password, - depotCode = order.YARDID, - depotName = order.YARD, - linkName = UserManager.Name, - linkMobile = user.Phone, - linkEmail = user.Email, - userId = user.DjyUserId, - returnUrl = "", - shipName = order.VESSEL, - voyNo = order.VOYNO, - etdstr = order.ETD.HasValue ? order.ETD.Value.ToString("yyyy-MM-dd") : string.Empty, - potrSend = order.PORTLOAD, - potrGoal = order.PORTDISCHARGE, - boxinfoStr = order.CNTRTOTAL, - vgmEndTimeStr = order.CLOSEVGMDATE.HasValue ? order.CLOSEVGMDATE.Value.ToString("yyyy-MM-dd") : string.Empty, - BoxInfo = ctns.Select(c => new - { - index = idx++, - boxType = c.CTNALL, - boxcount = c.CTNNUM.HasValue ? c.CTNNUM.Value : 0, - code = c.CNTRNO, - sealCode = c.SEALNO, - weigth = c.KGS, - weigthTare = c.TAREWEIGHT, - weigthTotal = c.WEIGHKGS, - weigthType = c.WEIGHTYPE == "累加" ? "SM2" : "SM1" - }).ToList(), - returnOkUrl = "" - }; + //判断船公司是否支持 + var allowCarrier = _cache.GetAllDictData().Result.Where(x => x.TypeCode == "vgm_carrier_list").Select(x => x.Code).ToList(); + if (!allowCarrier.Contains(order.CARRIERID)) + { + throw Oops.Bah(BookingErrorCode.BOOK117); + } - string strPostObj = sendObj.ToJsonString(); - _logger.LogInformation($"调用VGM直发接口 {dicUrl.Value} 传递数据:{strPostObj}"); - var strResp = await dicUrl.Value.SetBody(sendObj).PostAsStringAsync(); - _logger.LogInformation($"调用VGM直发接口返回:{strResp}"); + //船公司网站账号 + var carrWebAccMap = _cache.GetAllDictData().Result.FirstOrDefault(x => x.TypeCode == "carrier_web_account_mapping" && x.Code == order.CARRIERID); + var webacc = _webAccountConfig.GetAccountConfig(carrWebAccMap.Value, UserManager.UserId).Result; + if (webacc == null) + { + throw Oops.Bah(BookingErrorCode.BOOK125); + } - var jobjResp = JObject.Parse(strResp); - int respCode = jobjResp.GetIntValue("code"); - if (respCode != 200) - { - throw Oops.Bah(BookingErrorCode.BOOK128, jobjResp.GetStringValue("message")); + ////箱型映射 + //var ctnMapping = await _cache.GetAllMappingCtn(); + //ctnMapping = ctnMapping.Where(x => x.Module == "BookingVgm").ToList(); + //if (ctnMapping.Count == 0) + //{ + // throw Oops.Bah(BookingErrorCode.BOOK122); + //} + + //var expCode = ctns.Select(x => x.CTNCODE).Distinct().Except(ctnMapping.Select(y => y.Code)).ToList(); + //if (expCode.Count > 0) + //{ + // throw Oops.Bah(BookingErrorCode.BOOK123, string.Join(',', expCode)); + //} + + #region 箱信息校验,2022-7-1修改:【累加】的必须有重量、皮重和称重重量;【总重】的只需要称重重量不为空 + if (ctns.Where(c => c.WEIGHTYPE == "累加" && + ( + string.IsNullOrEmpty(c.CNTRNO) + || !c.WEIGHKGS.HasValue + || c.WEIGHKGS == 0 + || !c.TAREWEIGHT.HasValue + || c.TAREWEIGHT == 0 + || !c.KGS.HasValue + || c.KGS == 0) + ).Count() > 0) + { + throw Oops.Bah("称重方式为累加时,箱号、重量、箱皮重以及称重重量都不能为空"); + } + + if (ctns.Where(c => c.WEIGHTYPE == "总重" && + ( + string.IsNullOrEmpty(c.CNTRNO) + || !c.WEIGHKGS.HasValue + || c.WEIGHKGS == 0) + ).Count() > 0) + { + throw Oops.Bah("称重方式为总重时,箱号和称重重量都不能为空"); + } + #endregion + + + ////场站转换 + //var yardset = _cache.GetAllMappingYard().Result.FirstOrDefault(y => y.Code == order.YARDID && y.Module == "BookingVgm"); + //if (yardset == null) + //{ + // throw Oops.Bah(BookingErrorCode.BOOK120, order.YARDID); + //} + if (string.IsNullOrEmpty(order.YARD) || string.IsNullOrEmpty(order.YARDID)) + { + throw Oops.Bah("场站未正确选择"); + } + + var user = await _repUser.FirstOrDefaultAsync(x => x.Id == UserManager.UserId); + + int idx = 1; + //调用接口 + var dicUrl = _cache.GetAllDictData().Result.First(x => x.TypeCode == "url_set" && x.Code == "vgm_service_single"); + var sendObj = new + { + SystemCode = "djy_hechuan", + billOrderId = order.Id.ToString(), + sendOrderCode = order.MBLNO, + customerName = $"{UserManager.TENANT_NAME}+{UserManager.Name}", //公司名称+用户姓名 + customerId = order.CUSTOMERID.ToString(), + agentName = string.IsNullOrEmpty(order.FORWARDER) ? UserManager.TENANT_NAME : order.FORWARDER, + carrierCode = order.CARRIERID, + userName = webacc.Account, + userPassword = webacc.Password, + depotCode = order.YARDID, + depotName = order.YARD, + linkName = UserManager.Name, + linkMobile = user.Phone, + linkEmail = user.Email, + userId = user.DjyUserId, + returnUrl = "", + shipName = order.VESSEL, + voyNo = order.VOYNO, + etdstr = order.ETD.HasValue ? order.ETD.Value.ToString("yyyy-MM-dd") : string.Empty, + potrSend = order.PORTLOAD, + potrGoal = order.PORTDISCHARGE, + boxinfoStr = order.CNTRTOTAL, + vgmEndTimeStr = order.CLOSEVGMDATE.HasValue ? order.CLOSEVGMDATE.Value.ToString("yyyy-MM-dd") : string.Empty, + BoxInfo = ctns.Select(c => new + { + index = idx++, + boxType = c.CTNALL, + boxcount = c.CTNNUM.HasValue ? c.CTNNUM.Value : 0, + code = c.CNTRNO, + sealCode = c.SEALNO, + weigth = c.KGS, + weigthTare = c.TAREWEIGHT, + weigthTotal = c.WEIGHKGS, + weigthType = c.WEIGHTYPE == "累加" ? "SM2" : "SM1" + }).ToList(), + returnOkUrl = "" + }; + + string strPostObj = sendObj.ToJsonString(); + _logger.LogInformation($"调用VGM直发接口 {dicUrl.Value} 传递数据:{strPostObj}"); + var strResp = await dicUrl.Value.SetBody(sendObj).PostAsStringAsync(); + _logger.LogInformation($"调用VGM直发接口返回:{strResp}"); + + var jobjResp = JObject.Parse(strResp); + int respCode = jobjResp.GetIntValue("code"); + if (respCode != 200) + { + throw Oops.Bah(BookingErrorCode.BOOK128, jobjResp.GetStringValue("message")); + } + //货运动态 + var bsl = new BookingStatusLog(); + bsl.BookingId = bookingId; + bsl.Status = $"直发VGM"; + bsl.OpTime = DateTime.Now; + bsl.Category = "ship"; + bsl.MBLNO = order.MBLNO; + await _repStatuslog.InsertAsync(bsl); } - //货运动态 - var bsl = new BookingStatusLog(); - bsl.BookingId = bookingId; - bsl.Status = $"直发VGM"; - bsl.OpTime = DateTime.Now; - bsl.Category = "ship"; - bsl.MBLNO = order.MBLNO; - await _repStatuslog.InsertAsync(bsl); }