zhangxiaofeng 6 months ago
commit 3b490c5eb4

@ -328,8 +328,14 @@ namespace Myshipping.Application.EDI
if (string.IsNullOrEmpty(headData.OpEmail)) if (string.IsNullOrEmpty(headData.OpEmail))
{ error = error + "<br />操作的邮箱不能为空"; } { error = error + "<br />操作的邮箱不能为空"; }
} }
if (string.IsNullOrEmpty(headData.MBLNO))
{ error = error + "<br />主提单号不能为空"; } //截单时必需校验提单号订舱时CMA可以不校验提单号必填
if (InttrEdi.filetype == "E" || (InttrEdi.filetype == "B" && (headData.CARRIEREDICODE != "HLCU" && headData.CARRIEREDICODE != "CMDU" && headData.CARRIEREDICODE != "CHNL")))
{
if (string.IsNullOrEmpty(headData.MBLNO))
{ error = error + "<br />主提单号不能为空"; }
}
if (string.IsNullOrEmpty(headData.BLFRT)) if (string.IsNullOrEmpty(headData.BLFRT))
{ error = error + "<br />提单号:" + headData.MBLNO + " 付费方式不能为空"; } { error = error + "<br />提单号:" + headData.MBLNO + " 付费方式不能为空"; }
@ -780,7 +786,7 @@ namespace Myshipping.Application.EDI
r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMBF:D:99B:UN'"); r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMBF:D:99B:UN'");
icount = icount + 2; icount = icount + 2;
if (bill.CARRIEREDICODE == "HLCU") if (bill.CARRIEREDICODE == "HLCU" || bill.CARRIEREDICODE == "CMDU" || bill.CARRIEREDICODE == "CHNL")
{ {
if (InttrEdi.filerole == "9") if (InttrEdi.filerole == "9")
r.WriteLine("BGM+335+" + bill.ORDERNO + "SO+9'"); r.WriteLine("BGM+335+" + bill.ORDERNO + "SO+9'");

@ -7627,6 +7627,12 @@ namespace Myshipping.Application
primaryModel.ETA = primaryModel.ETD; primaryModel.ETA = primaryModel.ETD;
} }
if (ediRouteEnum == EDIRouteEnum.INTTRA)
{
if (!string.IsNullOrWhiteSpace(ediExtModel.WeiTuoFang))
primaryModel.WEITUO = ediExtModel.WeiTuoFang;
}
primaryModel.KINGTAREWEIGHT = ediExtModel.KingTareweight.HasValue ? ediExtModel.KingTareweight.Value : 0; primaryModel.KINGTAREWEIGHT = ediExtModel.KingTareweight.HasValue ? ediExtModel.KingTareweight.Value : 0;
_logger.LogInformation("批次={no} 提取箱完成 数量={total}", batchNo, contaList.Count); _logger.LogInformation("批次={no} 提取箱完成 数量={total}", batchNo, contaList.Count);

@ -1837,6 +1837,20 @@ namespace Myshipping.Application
if (id > 0) if (id > 0)
{ {
List<BookingSlotBaseWithCtnDto> slots = new List<BookingSlotBaseWithCtnDto>();
//检索舱位信息
var slotInfo = Detail(bookingSlotBase.Id).GetAwaiter().GetResult();
BookingSlotBaseWithCtnDto baseInfo = slotInfo.Adapt<BookingSlotBaseWithCtnDto>();
baseInfo.Id = bookingSlotBase.Id;
baseInfo.CtnList = slotInfo.CtnList.Adapt<List<BookingSlotCtnDto>>();
slots.Add(baseInfo);
//对应订舱和舱位关系
var allocRlt = await ImportSlots(slots, id, false);
//这里如果指定了委托单位的邮件联系人,则推送订舱联系人 //这里如果指定了委托单位的邮件联系人,则推送订舱联系人
if (generateModel.CustomerContactList != null && generateModel.CustomerContactList.Count > 0) if (generateModel.CustomerContactList != null && generateModel.CustomerContactList.Count > 0)
{ {

@ -81,6 +81,19 @@ namespace Myshipping.Application
/// </summary> /// </summary>
public string statusCnName { get; set; } public string statusCnName { get; set; }
/// <summary>
/// 是否分段开始
/// </summary>
public bool isSplitStart { get; set; }
/// <summary>
/// 是否分段结束
/// </summary>
public bool isSplitEnd { get; set; }
/// <summary>
/// 是否当前最新节点
/// </summary>
public bool isCurrentStatus { get; set; }
} }
} }

@ -16,7 +16,7 @@ namespace Myshipping.Application
/// <summary> /// <summary>
/// 回执消息 /// 回执消息
/// </summary> /// </summary>
public string msg { get; set; } public string message { get; set; }
/// <summary> /// <summary>
/// 查询详情列表 /// 查询详情列表
@ -344,6 +344,11 @@ namespace Myshipping.Application
/// </summary> /// </summary>
public string sizeName { get; set; } public string sizeName { get; set; }
/// <summary>
/// 当前节点代码中文
/// </summary>
public string currentNodeCnName { get; set; }
/// <summary> /// <summary>
/// 集装箱状态信息 /// 集装箱状态信息
/// </summary> /// </summary>
@ -401,5 +406,10 @@ namespace Myshipping.Application
/// 状态代码中文名称 /// 状态代码中文名称
/// </summary> /// </summary>
public string statusCnName { get; set; } public string statusCnName { get; set; }
/// <summary>
/// 是否当前最新节点
/// </summary>
public bool isCurrentStatus { get; set; }
} }
} }

@ -6,6 +6,7 @@ using Furion.FriendlyException;
using Furion.JsonSerialization; using Furion.JsonSerialization;
using Furion.RemoteRequest.Extensions; using Furion.RemoteRequest.Extensions;
using Mapster; using Mapster;
using MathNet.Numerics.Distributions;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -18,6 +19,7 @@ using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Reflection.Emit; using System.Reflection.Emit;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Yitter.IdGenerator; using Yitter.IdGenerator;
@ -91,12 +93,13 @@ namespace Myshipping.Application
.Where(t => t.TypeCode.Equals("after_port_trace_ctn_status", StringComparison.OrdinalIgnoreCase)).ToList(); .Where(t => t.TypeCode.Equals("after_port_trace_ctn_status", StringComparison.OrdinalIgnoreCase)).ToList();
//按顺序取状态配置字典 //按顺序取状态配置字典
Dictionary<string, Tuple<string, string, int>> statusEnumDict = statusDict.Select(a => new { Key = a.Code, Val = new Tuple<string, string,int>(a.Value,a.Remark, a.Sort), Sort = a.Sort }) Dictionary<string, Tuple<string, string, int>> statusEnumDict = statusDict.Select(a => new { Key = a.Code, Val = new Tuple<string, string, int>(a.Value, a.Remark, a.Sort), Sort = a.Sort })
.OrderBy(a => a.Sort).ToDictionary(a => a.Key, b => b.Val); .OrderBy(a => a.Sort).ToDictionary(a => a.Key, b => b.Val);
string[] skipStatus = new string[] { "GIOI", "LOFV", "FVD", "FVA", "DFFV", "LOR", "DFR", "RA", "DIFR", "LOT", "DIFT", "ADI", "DIDI", "CGRL", "RFP","ETD","ETA", "LDI", "CDPOD", "BPOD" }; string[] skipStatus = new string[] { "GIOI", "LOFV", "FVD", "FVA", "DFFV", "LOR", "DFR", "RA", "DIFR", "LOT", "DIFT", "ADI", "DIDI", "CGRL", "RFP", "ETD", "ETA", "LDI", "CDPOD", "BPOD" };
string[] transferStatus = new string[] { "AIP", "BIP", "ETDIP", "DIIP", "GOIP", "GIIP", "LIP", "EDIP", "DEIP", "EAIP" }; string[] transferStatus = new string[] { "AIP", "BIP", "ETDIP", "DIIP", "GOIP", "GIIP", "LIP", "EDIP", "DEIP", "EAIP" };
if (queryRlt.code == 200) if (queryRlt.code == 200)
{ {
var queryResult = queryRlt.data.FirstOrDefault(); var queryResult = queryRlt.data.FirstOrDefault();
@ -107,6 +110,7 @@ namespace Myshipping.Application
{ {
//这里需要翻译一下箱型 //这里需要翻译一下箱型
var ctnCodeMappingList = _cache.GetAllMappingCtn().GetAwaiter().GetResult().ToList(); var ctnCodeMappingList = _cache.GetAllMappingCtn().GetAwaiter().GetResult().ToList();
var ctnCodeList = _cache.GetAllCodeCtn().GetAwaiter().GetResult().ToList();
Dictionary<string, int> referToCtnDict = new Dictionary<string, int>(); Dictionary<string, int> referToCtnDict = new Dictionary<string, int>();
@ -116,11 +120,27 @@ namespace Myshipping.Application
{ {
result.resultData.containerInfoList.ForEach(s => result.resultData.containerInfoList.ForEach(s =>
{ {
var ctnMapping = ctnCodeMappingList.FirstOrDefault(t => t.MapCode.Equals(s.size)); string ctnSize = s.size;
if(ctnMapping != null) if (!string.IsNullOrWhiteSpace(s.size))
{ {
s.sizeName = ctnMapping.MapName?.Trim(); ctnSize = $"{Regex.Match(s.size, "[0-9]{2}")}{Regex.Match(s.size, "[a-zA-Z]{1,3}([0-9]{1})?")}";
}
var ctnCode = ctnCodeList.FirstOrDefault(t => !string.IsNullOrWhiteSpace(t.EdiCode) && t.EdiCode.Equals(ctnSize));
if (ctnCode != null)
{
s.sizeName = ctnCode.Name?.Trim();
}
else
{
var ctnMapping = ctnCodeMappingList.FirstOrDefault(t => !string.IsNullOrWhiteSpace(t.MapCode) && t.MapCode.Equals(ctnSize));
if (ctnMapping != null)
{
s.sizeName = ctnMapping.MapName?.Trim();
}
} }
if (s.containerStatusInfoList != null && s.containerStatusInfoList.Count > 0) if (s.containerStatusInfoList != null && s.containerStatusInfoList.Count > 0)
@ -157,8 +177,9 @@ namespace Myshipping.Application
var ctnNo = referToCtnDict.OrderByDescending(a => a.Value).FirstOrDefault().Key; var ctnNo = referToCtnDict.OrderByDescending(a => a.Value).FirstOrDefault().Key;
var longContainerStatusList = result.resultData.containerInfoList.FirstOrDefault(a => a.containerNo.Equals(ctnNo, StringComparison.OrdinalIgnoreCase)) var longContainerStatus = result.resultData.containerInfoList.FirstOrDefault(a => a.containerNo.Equals(ctnNo, StringComparison.OrdinalIgnoreCase));
.containerStatusInfoList;
var longContainerStatusList = longContainerStatus.containerStatusInfoList;
var takeList = result.resultData.containerInfoList.SelectMany(p => p.containerStatusInfoList).GroupBy(a => a.statusCd).Select(a => var takeList = result.resultData.containerInfoList.SelectMany(p => p.containerStatusInfoList).GroupBy(a => a.statusCd).Select(a =>
@ -186,7 +207,7 @@ namespace Myshipping.Application
} }
else else
{ {
currStatus.isComplete = true; currStatus.isComplete = false;
currStatus.hasStatusCtnNum = currArg.Count(a => a.isEst.Equals("N", StringComparison.OrdinalIgnoreCase)); currStatus.hasStatusCtnNum = currArg.Count(a => a.isEst.Equals("N", StringComparison.OrdinalIgnoreCase));
currStatus.noStatusCtnNum = currArg.Count(a => !a.isEst.Equals("N", StringComparison.OrdinalIgnoreCase)); currStatus.noStatusCtnNum = currArg.Count(a => !a.isEst.Equals("N", StringComparison.OrdinalIgnoreCase));
} }
@ -196,9 +217,22 @@ namespace Myshipping.Application
return currStatus; return currStatus;
}).ToList(); }).ToList();
foreach (KeyValuePair<string, Tuple<string,string, int>> kvp in statusEnumDict) var APODtotal = takeList.Where(p => p.statusCd.Equals("APOD", StringComparison.OrdinalIgnoreCase)).ToList();
if (APODtotal.Count > 1 && APODtotal.Any(p => p.isComplete))
{ {
if(!skipStatus.Contains(kvp.Key)) takeList = takeList.Select(a =>
{
if (a.statusCd.Equals("APOD", StringComparison.OrdinalIgnoreCase) && !a.isComplete)
return null;
return a;
}).Where(a => a != null).ToList();
}
foreach (KeyValuePair<string, Tuple<string, string, int>> kvp in statusEnumDict)
{
if (!skipStatus.Contains(kvp.Key))
{ {
//不是中转的需要把状态节点去掉 //不是中转的需要把状态节点去掉
if (isTransfer || (!isTransfer && !transferStatus.Contains(kvp.Key))) if (isTransfer || (!isTransfer && !transferStatus.Contains(kvp.Key)))
@ -210,7 +244,7 @@ namespace Myshipping.Application
currStatus = new EmbedTraceFlowStatusInfo currStatus = new EmbedTraceFlowStatusInfo
{ {
statusCd = kvp.Key, statusCd = kvp.Key,
statusCnName = !string.IsNullOrWhiteSpace(kvp.Value.Item2)? kvp.Value.Item2 : kvp.Value.Item1, statusCnName = !string.IsNullOrWhiteSpace(kvp.Value.Item2) ? kvp.Value.Item2 : kvp.Value.Item1,
sortNo = kvp.Value.Item3, sortNo = kvp.Value.Item3,
statusCtnStatic = $"0/{referToCtnDict.Count}", statusCtnStatic = $"0/{referToCtnDict.Count}",
}; };
@ -221,11 +255,72 @@ namespace Myshipping.Application
currStatus.statusCnName = kvp.Value.Item2; currStatus.statusCnName = kvp.Value.Item2;
} }
if (currStatus.statusCd.Equals("DPOL", StringComparison.OrdinalIgnoreCase))
currStatus.isSplitStart = true;
if (currStatus.statusCd.Equals("APOD", StringComparison.OrdinalIgnoreCase))
currStatus.isSplitEnd = true;
if (!string.IsNullOrWhiteSpace(longContainerStatus.currentNodeCd) && longContainerStatus.currentNodeCd.Equals(kvp.Key, StringComparison.OrdinalIgnoreCase))
{
currStatus.isCurrentStatus = true;
}
result.embedTraceFlowStatusList.Add(currStatus); result.embedTraceFlowStatusList.Add(currStatus);
} }
} }
} }
result.resultData.containerInfoList.ForEach(b =>
{
if (statusEnumDict.Any(k => !string.IsNullOrWhiteSpace(b.currentNodeCd) && k.Key.Equals(b.currentNodeCd, StringComparison.OrdinalIgnoreCase)))
{
b.currentNodeCnName = !string.IsNullOrWhiteSpace(statusEnumDict[b.currentNodeCd].Item2) ? statusEnumDict[b.currentNodeCd].Item2 : statusEnumDict[b.currentNodeCd].Item1;
}
b.containerStatusInfoList = b.containerStatusInfoList.Select(c =>
{
if (!string.IsNullOrWhiteSpace(b.currentNodeCd) && b.currentNodeCd.Equals(c.statusCd, StringComparison.OrdinalIgnoreCase))
{
c.isCurrentStatus = true;
}
if (!string.IsNullOrWhiteSpace(c.statusPlace))
c.statusPlace = c.statusPlace.ToUpper();
if (!string.IsNullOrWhiteSpace(c.statusCd) && c.statusCd.Equals("ETA", StringComparison.OrdinalIgnoreCase))
{
return null;
}
if (!string.IsNullOrWhiteSpace(c.statusCd) && c.statusCd.Equals("APOD", StringComparison.OrdinalIgnoreCase) && !c.isEst.Equals("N", StringComparison.OrdinalIgnoreCase))
{
return null;
}
return c;
}).Where(a => a != null).ToList();
});
_logger.LogInformation($"{JSON.Serialize(queryDto)} 查询成功");
}
else
{
_logger.LogInformation($"{JSON.Serialize(queryDto)} 查询失败,{result.resultMessage}");
throw Oops.Oh(result.resultMessage);
} }
}
else
{
_logger.LogInformation($"{JSON.Serialize(queryDto)} 查询失败,{queryRlt.message}");
throw Oops.Oh(result.resultMessage.Contains("官网查询无数据") ? "无查询结果" : "查询失败");
} }
return result; return result;

Loading…
Cancel
Save