From b59a48168005fc6626a6862b88d6ba41d7a1ae20 Mon Sep 17 00:00:00 2001
From: zhangxiaofeng <1939543722@qq.com>
Date: Thu, 11 Apr 2024 08:51:06 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E5=9C=BA=E7=AB=99=E8=81=94=E7=B3=BB?=
=?UTF-8?q?=E4=BA=BA=E5=BC=95=E5=85=A5=E5=AD=97=E6=AE=B5=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Service/BookingOrder/BookingOrderService.cs | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
index 5d51617d..48031d07 100644
--- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
+++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
@@ -9254,13 +9254,13 @@ namespace Myshipping.Application
}
// 赋值联系人信息
- item.contact_tel = contact?.contact_tel1;
+ item.contact_tel = contact?.contact_tel1?.Trim();
if (!string.IsNullOrWhiteSpace(contact?.contact_tel2))
{
- item.contact_tel += (" " + contact.contact_tel2);
+ item.contact_tel += " " + contact.contact_tel2.Trim();
}
- item.contact_name = contact?.contact_name;
- item.contact_email = contact?.contact_email;
+ item.contact_name = contact?.contact_name?.Trim();
+ item.contact_email = contact?.contact_email?.Trim();
}
return listRtn;
From 4333340f0aa1637fd204ae91b3404cac6248b2d9 Mon Sep 17 00:00:00 2001
From: wanghaomei <86whm@163.com>
Date: Thu, 11 Apr 2024 09:06:42 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Service/DjyTenantParam/Dto/DjyTenantParamValueOutput.cs | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Myshipping.Core/Service/DjyTenantParam/Dto/DjyTenantParamValueOutput.cs b/Myshipping.Core/Service/DjyTenantParam/Dto/DjyTenantParamValueOutput.cs
index 1a33b8cb..debe9aeb 100644
--- a/Myshipping.Core/Service/DjyTenantParam/Dto/DjyTenantParamValueOutput.cs
+++ b/Myshipping.Core/Service/DjyTenantParam/Dto/DjyTenantParamValueOutput.cs
@@ -13,6 +13,11 @@
///
public class DjyTenantParamValueListOutput
{
+ ///
+ /// id
+ ///
+ public long Id { get; set; }
+
///
/// 参数类别
///
From f6b402e0eb3d06276ac490ecae8c8fb290e96b04 Mon Sep 17 00:00:00 2001
From: zhangxiaofeng <1939543722@qq.com>
Date: Thu, 11 Apr 2024 14:15:03 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E5=BC=95=E5=85=A5=E5=9C=BA=E7=AB=99?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8C=85=E8=A3=85=E6=98=A0=E5=B0=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BookingOrder/BookingOrderService.cs | 18 ++++++++++++++++++
Myshipping.Core/Myshipping.Core.xml | 5 +++++
2 files changed, 23 insertions(+)
diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
index 4f2c0274..73fd8830 100644
--- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
+++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
@@ -9239,11 +9239,15 @@ namespace Myshipping.Application
var ctnList = await _cache.GetAllCodeCtn();
var mapCtn = await _cache.GetAllMappingCtn();
+ var packageList = await _cache.GetAllCodePackage();
+ var mapPackageList = await _cache.GetAllMappingPackage();
+
var listRtn = JsonConvert.DeserializeObject>(rtn.data);
var contact = JsonConvert.DeserializeObject>(rtn.contact)?.FirstOrDefault();
foreach (var item in listRtn)
{
+ // 箱型
var ctnall = item.CTNALL;
var findMap = mapCtn.FirstOrDefault(x => x.Module == "YardData" && x.MapCode == ctnall);
var findCtn = ctnList.FirstOrDefault(x => x.Name == ctnall);
@@ -9264,6 +9268,20 @@ namespace Myshipping.Application
throw Oops.Bah($"未找到箱型{ctnall}的场站引入配置");
}
+ // 包装
+ if (!string.IsNullOrWhiteSpace(item.KINDPKGS))
+ {
+ var findMapPkg = mapPackageList.FirstOrDefault(x => x.Module == "YardData" && x.MapCode == item.KINDPKGS.Trim());
+ if (findMapPkg != null)
+ {
+ var findPkg = packageList.FirstOrDefault(x => x.Code == findMapPkg.Code);
+ if (findPkg != null)
+ {
+ item.KINDPKGS = findPkg.Name;
+ }
+ }
+ }
+
// 赋值联系人信息
item.contact_tel = contact?.contact_tel1?.Trim();
if (!string.IsNullOrWhiteSpace(contact?.contact_tel2))
diff --git a/Myshipping.Core/Myshipping.Core.xml b/Myshipping.Core/Myshipping.Core.xml
index b072c839..820e1fbb 100644
--- a/Myshipping.Core/Myshipping.Core.xml
+++ b/Myshipping.Core/Myshipping.Core.xml
@@ -12802,6 +12802,11 @@
列表输出
+
+
+ id
+
+
参数类别
From a9178b8329b40c8773d54abfc0bb3b95c02e46af Mon Sep 17 00:00:00 2001
From: wanghaomei <86whm@163.com>
Date: Thu, 11 Apr 2024 17:52:50 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E4=B8=AD=E8=BF=9C=E8=AE=A2=E8=88=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EDI/ZhongYuanSoApiHelper.cs | 344 +++++++++++++++++-
.../BookingOrder/BookingOrderService.cs | 18 +
Myshipping.Core/Entity/DJY/DjyCustomer.cs | 10 +
.../Entity/DJY/DjyCustomerContact.cs | 10 +
4 files changed, 374 insertions(+), 8 deletions(-)
diff --git a/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs b/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs
index f249bb88..bc63c1c1 100644
--- a/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs
+++ b/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs
@@ -1,7 +1,9 @@
using Furion;
using Myshipping.Application.Entity;
using Myshipping.Core;
+using Myshipping.Core.Entity;
using Myshipping.Core.Service;
+using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -20,21 +22,239 @@ namespace Myshipping.Application.EDI
var repCustOrder = App.GetService>();
var repOrder = App.GetService>();
var repCtn = App.GetService>();
+ var repCustomer = App.GetService>();
+ var repContact = App.GetService>();
+ var repTemplate = App.GetService>();
+ var cache = App.GetService();
var cacheService = App.GetService();
- var order = repOrder.FirstOrDefault(o => o.Id == bookingId);
+ var order = await repOrder.AsQueryable().Filter(null, true).FirstAsync(o => o.Id == bookingId);
if (order == null)
{
return new KeyValuePair(false, "订舱信息未找到");
}
+ var custOrder = await repCustOrder.AsQueryable().Filter(null, true).FirstAsync(x => x.BookingId == order.Id);
+ if (custOrder == null)
+ {
+ return new KeyValuePair(false, "客户订舱信息未找到");
+ }
+
+ var sysConfigList = await cache.GetAllSysConfig();
+ var sCfgUserKey = sysConfigList.FirstOrDefault(x => x.Code == "ZhongYuanApiSpiderKey" && x.GroupCode == "DJY_CONST");
+ var sCfgUserSecret = sysConfigList.FirstOrDefault(x => x.Code == "ZhongYuanApiSpiderSecret" && x.GroupCode == "DJY_CONST");
+ if (sCfgUserKey == null || sCfgUserSecret == null)
+ {
+ return new KeyValuePair(false, "中远订舱API的KEY和密钥为配置,请联系管理员");
+ }
+
+
+ BookingSoTemplate template = null;
+ DjyCustomerContact custContact = null;
+ //查找模板:
+ //1.根据客户订舱信息中的BookingUserId和BookingTenantId,去客户信息中根据CustSysId查找客户(公司)及联系人(员工)信息
+ //2.根据找到的客户及联系人信息,查找中远订舱模板
+ if (custOrder.BookingUserId > 0 && custOrder.BookingTenantId > 0)
+ {
+ custContact = await repCustomer.AsQueryable()
+ .InnerJoin((cust, contact) => cust.Id == contact.CustomerId)
+ .Where((cust, contact) => cust.CustSysId == custOrder.TenantId && contact.CustSysId == custOrder.BookingUserId)
+ .Select((cust, contact) => contact)
+ .SingleAsync();
+ if (custContact == null)
+ {
+ return new KeyValuePair(false, "未找到客户及联系人信息");
+ }
+
+ template = await repTemplate.AsQueryable().FirstAsync(x => x.CarrierId == order.CARRIERID && x.UserId == custContact.Id && x.IsEnable);
+ if (template == null)
+ {
+ return new KeyValuePair(false, "未找到订舱模板");
+ }
+ }
+
+ var mappingCtn = await cache.GetAllMappingCtn();
+ var mappingFrt = await cache.GetAllMappingFrt();
+ var mappingPortLoad = await cache.GetAllMappingPortLoad();
+ var mappingPort = await cache.GetAllMappingPort();
+
+ var postModel = new ZhongYuanSoApiModel();
+ postModel.userKey = sCfgUserKey.Value;
+ postModel.userSecret = sCfgUserSecret.Value;
+
+ if (!string.IsNullOrEmpty(custOrder.ExtendData))
+ {
+ var extObj = JObject.Parse(custOrder.ExtendData);
+ postModel.webAccount = extObj.GetStringValue("Account");
+ postModel.webPassword = extObj.GetStringValue("Password");
+ }
+ else
+ {
+ return new KeyValuePair(false, "未找到订舱账号信息");
+ }
+
+ postModel.uploadType = "DRAFT"; //DRAFT, TEMPLATE, BOOKING分别对应:草稿, 模板, 订舱
+ postModel.saveName = template.TemplateName;
+
+ var mapPortLoad = mappingPortLoad.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.PORTLOADCODE);
+ var mapPort = mappingPort.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.PORTDISCHARGECODE);
+ if (mapPortLoad == null)
+ {
+ return new KeyValuePair(false, $"未找到起运港映射信息:{custOrder.PORTLOADCODE}");
+ }
+
+ if (mapPort == null)
+ {
+ return new KeyValuePair(false, $"未找到目的港映射信息:{custOrder.PORTDISCHARGECODE}");
+ }
+
+ postModel.routes = new ZhongYuanSoApiRoute()
+ {
+ originCity = mapPortLoad.MapCode,
+ destinationCity = mapPort.MapCode,
+ vesselName = custOrder.VESSEL,
+ voyageNumber = custOrder.VOYNO,
+ serviceCode = custOrder.LANECODE,
+ sailSchedulePriority = template.Priority.Split(',').ToList(),
+ };
+
+ #region 收发通及货代
+ postModel.shipperInfo = new ZhongYuanSoApiSFT()
+ {
+ firstName = template.ShipperFirstName,
+ lastName = template.ShipperLastName,
+ country = template.ShipperCountry,
+ state = template.ShipperProvince,
+ city = template.ShipperCity,
+ partyName = template.ShipperName,
+ addressDes = template.ShipperAddress,
+ phone = new ZhongYuanSoApiPhone() { countryCode = template.ShipperPhoneCountryCode, areaCode = template.ShipperPhoneCode, number = template.ShipperPhone },
+ postalCode = template.ShipperPostCode
+ };
+
+ postModel.consigneeInfo = new ZhongYuanSoApiSFT()
+ {
+ firstName = template.ConsigneeFirstName,
+ lastName = template.ConsigneeLastName,
+ country = template.ConsigneeCountry,
+ state = template.ConsigneeProvince,
+ city = template.ConsigneeCity,
+ partyName = template.ConsigneeName,
+ addressDes = template.ConsigneeAddress,
+ phone = new ZhongYuanSoApiPhone() { countryCode = template.ConsigneePhoneCountryCode, areaCode = template.ConsigneePhoneCode, number = template.ConsigneePhone },
+ postalCode = template.ConsigneePostCode
+ };
+
+ postModel.notifyInfo = new ZhongYuanSoApiSFT()
+ {
+ firstName = template.NotifypartFirstName,
+ lastName = template.NotifypartLastName,
+ country = template.NotifypartCountry,
+ state = template.NotifypartProvince,
+ city = template.NotifypartCity,
+ partyName = template.NotifypartName,
+ addressDes = template.NotifypartAddress,
+ phone = new ZhongYuanSoApiPhone() { countryCode = template.NotifypartPhoneCountryCode, areaCode = template.NotifypartPhoneCode, number = template.NotifypartPhone },
+ postalCode = template.NotifypartPostCode
+ };
+
+ postModel.forwarderInfo = new ZhongYuanSoApiSFT()
+ {
+ firstName = template.BookingFirstName,
+ lastName = template.BookingLastName,
+ country = template.BookingCountry,
+ state = template.BookingProvince,
+ city = template.BookingCity,
+ partyName = template.BookingName,
+ addressDes = template.BookingAddress,
+ phone = new ZhongYuanSoApiPhone() { countryCode = template.BookingPhoneCountryCode, areaCode = template.BookingPhoneCode, number = template.BookingPhone },
+ postalCode = template.BookingPostCode
+ };
+ #endregion
+
+ postModel.cargoInfo = new ZhongYuanSoApiCargoInfo()
+ {
+ cargoName = CargoIdZhongyuan(custOrder.CARGOID),
+ cargoDes = custOrder.DESCRIPTION,
+ hsCode = custOrder.HSCODE,
+ };
+
+ var ctns = await repCtn.AsQueryable().Where(x => x.BILLID == custOrder.Id).ToListAsync();
+ postModel.boxInfos = new List();
+ foreach (var ctn in ctns)
+ {
+ if (!ctn.CTNNUM.HasValue || !ctn.KGS.HasValue)
+ {
+ return new KeyValuePair(false, $"所有箱的箱量和毛重都不能为空");
+ }
+
+ var mapCtn = mappingCtn.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == ctn.CTNCODE);
+ if (mapCtn == null)
+ {
+ return new KeyValuePair(false, $"未找箱型映射信息:{ctn.CTNCODE}");
+ }
+
+ var apiBox = new ZhongYuanSoApiBoxInfo()
+ {
+ boxType = mapCtn.MapCode,
+ boxNum = ctn.CTNNUM.Value,
+ weight = ctn.KGS.Value.ToString(),
+ weightUnit = "KGS"
+ };
+
+ postModel.boxInfos.Add(apiBox);
+ }
+
+
+ var mapFrt = mappingFrt.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.FRTCODE);
+ if (mapFrt == null)
+ {
+ return new KeyValuePair(false, $"未找到付款方式映射信息:{custOrder.FRTCODE}");
+ }
+
+ postModel.rateInfos = new ZhongYuanSoApiRateInfo()
+ {
+ paymentMethod = mapFrt.MapCode
+ };
+ postModel.special = new ZhongYuanSoApiSpecial()
+ {
+ emailAddresses = custContact.Email,
+ remarksForEntireBooking = custOrder.SOREMARK
+ };
return new KeyValuePair();
}
+
+ ///
+ /// 获取中远货物类型
+ ///
+ ///
+ ///
+ private static string CargoIdZhongyuan(string cargoId)
+ {
+ if (cargoId is "S")
+ {
+ return "General";
+ }
+ else if (cargoId is "R")
+ {
+ return "Reefer";
+ }
+ else if (cargoId is "D")
+ {
+ return "Dangerous";
+ }
+
+ return null;
+ }
}
+
+ ///
+ /// 中远API订舱传输对象
+ ///
public class ZhongYuanSoApiModel
{
///
@@ -50,7 +270,7 @@ namespace Myshipping.Application.EDI
///
/// 网站账户
///
- public string webAccount { get; set; }
+ public string webAccount { get; set; }
///
/// 网站密码
@@ -80,30 +300,53 @@ namespace Myshipping.Application.EDI
///
/// 发货人信息
///
- public string shipperInfo { get; set; }
+ public ZhongYuanSoApiSFT shipperInfo { get; set; }
///
/// 收货人信息
///
- public string consigneeInfo { get; set; }
+ public ZhongYuanSoApiSFT consigneeInfo { get; set; }
///
/// 通知人信息
///
- public string notifyInfo { get; set; }
+ public ZhongYuanSoApiSFT notifyInfo { get; set; }
///
/// 货代信息
///
- public string forwarderInfo { get; set; }
+ public ZhongYuanSoApiSFT forwarderInfo { get; set; }
+
+ ///
+ /// 货物信息
+ ///
+ public ZhongYuanSoApiCargoInfo cargoInfo { get; set; }
+
+ ///
+ /// 箱信息
+ ///
+ public List boxInfos { get; set; }
+
+ ///
+ /// 费率相关信息
+ ///
+ public ZhongYuanSoApiRateInfo rateInfos { get; set; }
+
+ ///
+ /// 特殊要求及备注
+ ///
+ public ZhongYuanSoApiSpecial special { get; set; }
}
+ ///
+ /// 路线信息
+ ///
public class ZhongYuanSoApiRoute
{
///
/// 出发城市
///
- public string originCity { get; set; }
+ public string originCity { get; set; }
///
/// 目的城市
@@ -124,8 +367,16 @@ namespace Myshipping.Application.EDI
/// 航线代码
///
public string serviceCode { get; set; }
+
+ ///
+ /// 船期选择优先级
+ ///
+ public List sailSchedulePriority { get; set; }
}
+ ///
+ /// 收发通信息
+ ///
public class ZhongYuanSoApiSFT
{
///
@@ -179,9 +430,11 @@ namespace Myshipping.Application.EDI
public ZhongYuanSoApiPhone phone { get; set; }
}
+ ///
+ /// 收发通电话
+ ///
public class ZhongYuanSoApiPhone
{
-
///
/// 国家代码
///
@@ -197,4 +450,79 @@ namespace Myshipping.Application.EDI
///
public string number { get; set; }
}
+
+ ///
+ /// 货物信息
+ ///
+ public class ZhongYuanSoApiCargoInfo
+ {
+ ///
+ /// 货物类型
+ ///
+ public string cargoName { get; set; }
+
+ ///
+ /// 货物描述
+ ///
+ public string cargoDes { get; set; }
+
+ ///
+ /// HS代码
+ ///
+ public string hsCode { get; set; }
+
+ }
+
+ ///
+ /// 箱信息
+ ///
+ public class ZhongYuanSoApiBoxInfo
+ {
+ ///
+ /// 箱量
+ ///
+ public int boxNum { get; set; }
+
+ ///
+ /// 箱型
+ ///
+ public string boxType { get; set; }
+
+ ///
+ /// 毛重
+ ///
+ public string weight { get; set; }
+
+ ///
+ /// 重量单位
+ ///
+ public string weightUnit { get; set; }
+
+ }
+
+ public class ZhongYuanSoApiRateInfo
+ {
+ ///
+ /// 付款方式
+ ///
+ public string paymentMethod { get; set; }
+
+ }
+
+ ///
+ /// 特殊要求及备注
+ ///
+ public class ZhongYuanSoApiSpecial
+ {
+ ///
+ /// 备注信息
+ ///
+ public string remarksForEntireBooking { get; set; }
+
+
+ ///
+ /// 邮箱地址
+ ///
+ public string emailAddresses { get; set; }
+ }
}
diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
index 73fd8830..8cb40886 100644
--- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
+++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
@@ -12475,5 +12475,23 @@ namespace Myshipping.Application
return result;
}
#endregion
+
+ #region 发送订舱
+
+ ///
+ /// 发送Api订舱,目前只有中远
+ ///
+ ///
+ ///
+ [HttpPost("/BookingOrder/PostApiSO")]
+ public async Task PostApiSO(long id)
+ {
+ var rtn = await ZhongYuanSoApiHelper.DoPost(id);
+ if (!rtn.Key)
+ {
+ throw Oops.Bah(rtn.Value);
+ }
+ }
+ #endregion
}
}
diff --git a/Myshipping.Core/Entity/DJY/DjyCustomer.cs b/Myshipping.Core/Entity/DJY/DjyCustomer.cs
index 87e66363..df42ab4c 100644
--- a/Myshipping.Core/Entity/DJY/DjyCustomer.cs
+++ b/Myshipping.Core/Entity/DJY/DjyCustomer.cs
@@ -152,5 +152,15 @@ namespace Myshipping.Core.Entity
/// 等级
///
public string Level { get; set; }
+
+ ///
+ /// 客户端系统ID
+ ///
+ public long CustSysId { get; set; }
+
+ ///
+ /// 大简云GID
+ ///
+ public string DjyGid { get; set; }
}
}
\ No newline at end of file
diff --git a/Myshipping.Core/Entity/DJY/DjyCustomerContact.cs b/Myshipping.Core/Entity/DJY/DjyCustomerContact.cs
index 06d73bad..73881f8a 100644
--- a/Myshipping.Core/Entity/DJY/DjyCustomerContact.cs
+++ b/Myshipping.Core/Entity/DJY/DjyCustomerContact.cs
@@ -47,5 +47,15 @@ namespace Myshipping.Core.Entity
/// 备注
///
public string Remark { get; set; }
+
+ ///
+ /// 客户端系统ID
+ ///
+ public long CustSysId { get; set; }
+
+ ///
+ /// 大简云GID
+ ///
+ public string DjyGid { get; set; }
}
}
\ No newline at end of file