From 5fbb48e173228274ed9bd198866d7a7666e4dcd9 Mon Sep 17 00:00:00 2001
From: wet <1034391973@qq.com>
Date: Fri, 18 Nov 2022 17:02:16 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Myshipping.Application.xml | 8 -
.../BookingOrder/BookingOrderService.cs | 531 +++++++++---------
2 files changed, 277 insertions(+), 262 deletions(-)
diff --git a/Myshipping.Application/Myshipping.Application.xml b/Myshipping.Application/Myshipping.Application.xml
index c356d164..ce966acc 100644
--- a/Myshipping.Application/Myshipping.Application.xml
+++ b/Myshipping.Application/Myshipping.Application.xml
@@ -4793,14 +4793,6 @@
类型,对应字典中的【订舱打印模板类型】
-
-
- 获取场站数据
-
-
-
-
-
记录或更新订舱状态
diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
index 67159fa9..a9d66ce9 100644
--- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
+++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs
@@ -1,4 +1,4 @@
-using Myshipping.Core;
+using Myshipping.Core;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Mapster;
@@ -47,12 +47,11 @@ using Myshipping.Application.EDI.WY;
using Myshipping.Application.EDI.YML;
using Myshipping.Application.EDI.YT;
using System.Runtime.InteropServices;
-using Myshipping.Application.Helper;
namespace Myshipping.Application
{
///
- /// շ
+ /// 订舱服务
///
[ApiDescriptionSettings("Application", Name = "BookingOrder", Order = 1)]
public class BookingOrderService : IBookingOrderService, IDynamicApiController, ITransient
@@ -117,10 +116,10 @@ namespace Myshipping.Application
this._repTenant = repTenant;
this._repBookingStatus = repBookingStatus;
}
- ////id طֵϢ
- #region Ϣ
+ ////传id 返回分单信息
+ #region 主表和箱信息
///
- /// ҳѯ
+ /// 分页查询订舱主表
///
///
///
@@ -128,7 +127,7 @@ namespace Myshipping.Application
public async Task Page([FromQuery] BookingOrderInput input)
{
List userlist = await DataFilterExtensions.GetDataScopeIdList();
- var entities = await _rep.AsQueryable()
+ var entities = await _rep.AsQueryable().Where(x => x.ParentId == 0)
.WhereIF(!string.IsNullOrWhiteSpace(input.BSSTATUS), u => u.BSSTATUS == input.BSSTATUS)
.WhereIF(!string.IsNullOrWhiteSpace(input.MBLNO), u => input.MBLNO.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Contains(u.MBLNO))
.WhereIF(!string.IsNullOrWhiteSpace(input.HBLNO), u => input.HBLNO.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Contains(u.HBLNO))
@@ -255,7 +254,7 @@ namespace Myshipping.Application
}
///
- /// Ӷ
+ /// 增加订舱
///
///
///
@@ -264,6 +263,22 @@ namespace Myshipping.Application
public async Task Add(AddBookingOrderInput input)
{
+ if (input.ParentId == 0)
+ {
+ if (string.IsNullOrWhiteSpace(input.HBLNO))
+ {
+ throw Oops.Bah("主单不需要填写分单号");
+ }
+ }
+ else
+ {
+ if (string.IsNullOrWhiteSpace(input.MBLNO))
+ {
+ throw Oops.Bah("请填写主提单号");
+ }
+ }
+
+
JsonUtil.PropToUpper(input, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail");
JsonUtil.TrimFields(input);
if (input.ctnInputs != null)
@@ -291,7 +306,7 @@ namespace Myshipping.Application
}
}
- ////booking־
+ ////添加booking日志
await _bookinglog.InsertAsync(new BookingLog
{
Type = "Add",
@@ -302,7 +317,7 @@ namespace Myshipping.Application
CreatedUserName = UserManager.Name
});
- ////ֵ
+ ////分单不调用
if (!string.IsNullOrWhiteSpace(input.YARDID) && !string.IsNullOrWhiteSpace(input.YARD) && !string.IsNullOrWhiteSpace(input.MBLNO))
{
@@ -312,7 +327,7 @@ namespace Myshipping.Application
}
///
- /// ɾ
+ /// 删除订舱
///
///
///
@@ -323,11 +338,11 @@ namespace Myshipping.Application
var ctnlist = await _repCtn.AsQueryable().Where(x => x.BILLID == Id).Select(x => x.Id).ToListAsync();
await _repCtn.UpdateAsync(x => x.BILLID == Id, x => new BookingCtn { IsDeleted = true });
await _ctndetailrep.UpdateAsync(x => ctnlist.Contains((long)x.CTNID), x => new BookingCtnDetail { IsDeleted = true });
- _logger.LogInformation(Id + "ɾɹ");
+ _logger.LogInformation(Id + "删除成功!");
}
///
- /// ¶
+ /// 更新订舱
///
///
///
@@ -335,6 +350,20 @@ namespace Myshipping.Application
[HttpPost("/BookingOrder/Update")]
public async Task Update(UpdateBookingOrderInput input)
{
+ if (input.ParentId == 0)
+ {
+ if (string.IsNullOrWhiteSpace(input.HBLNO))
+ {
+ throw Oops.Bah("主单不需要填写分单号");
+ }
+ }
+ else
+ {
+ if (string.IsNullOrWhiteSpace(input.MBLNO))
+ {
+ throw Oops.Bah("请填写主提单号");
+ }
+ }
JsonUtil.PropToUpper(input, "ORDNO", "BSSTATUS", "YardContract", "YardContractTel", "YardContractEmail");
JsonUtil.TrimFields(input);
if (input.ctnInputs != null)
@@ -389,7 +418,7 @@ namespace Myshipping.Application
{
if (flag)
{
- ////booking־
+ ////添加booking日志
bid = await _bookinglog.InsertReturnSnowflakeIdAsync(new BookingLog
{
Type = "Edit",
@@ -420,7 +449,7 @@ namespace Myshipping.Application
}
///
- /// ȡϸ
+ /// 获取订舱明细
///
///
///
@@ -452,13 +481,34 @@ namespace Myshipping.Application
};
}
}
+ List HbList = new List();
+ var _hblist = await _rep.AsQueryable().Where(x => x.ParentId == Id).ToListAsync();
+ if (_hblist != null)
+ {
+ HbList = _hblist.Adapt>();
+ foreach (var item in HbList)
+ {
+ var ctnlist = await _repCtn.AsQueryable().Where(x => x.BILLID == item.Id).ToListAsync();
+ var ctninput = ctnlist.Adapt>();
+ foreach (var it in ctninput)
+ {
+ var ctndetaillist = await _ctndetailrep.AsQueryable().Where(x => x.CTNID == it.Id).ToListAsync();
+ it.ctnDetailInputs = ctndetaillist.Adapt>();
+ }
+
+ item.ctnInputs = ctninput;
+ }
+
+ ordOut.HbList = HbList;
+ }
+
return ordOut;
}
#endregion
- #region ־ע˶̬
+ #region 日志、备注、附件、货运动态等
///
- /// ȡ־ϸ
+ /// 获取日志明细
///
///
///
@@ -480,7 +530,7 @@ namespace Myshipping.Application
}
///
- /// ȡע
+ /// 获取备注
///
///
///
@@ -492,7 +542,7 @@ namespace Myshipping.Application
}
///
- /// ӱע
+ /// 增加备注
///
///
///
@@ -505,7 +555,7 @@ namespace Myshipping.Application
}
///
- /// Ӷո
+ /// 增加订舱附件
///
///
///
@@ -513,15 +563,15 @@ namespace Myshipping.Application
[HttpPost("/BookingOrder/AddFile")]
public async Task AddFile(IFormFile file, [FromForm] BookingFileDto dto)
{
- //δϴӡģļ
+ //未上传打印模板文件
if (file == null || file.Length == 0)
{
throw Oops.Bah(BookingErrorCode.BOOK200);
}
var opt = App.GetOptions();
- var originalFilename = file.FileName; // ļԭʼ
- var fileSuffix = Path.GetExtension(file.FileName).ToLower(); // ļ
+ var originalFilename = file.FileName; // 文件原始名称
+ var fileSuffix = Path.GetExtension(file.FileName).ToLower(); // 文件后缀
if (!opt.fileType.Contains(fileSuffix))
{
throw Oops.Bah(BookingErrorCode.BOOK114);
@@ -541,7 +591,7 @@ namespace Myshipping.Application
Directory.CreateDirectory(dirAbs);
- // ȴȡId
+ // 先存库获取Id
var id = YitIdHelper.NextId();
var fileSaveName = $"{id}{fileSuffix}".ToLower();
var fileRelaPath = Path.Combine(opt.relativePath, fileSaveName).ToLower();
@@ -564,7 +614,7 @@ namespace Myshipping.Application
}
///
- /// ȡ
+ /// 获取附件
///
///
///
@@ -577,7 +627,7 @@ namespace Myshipping.Application
///
- /// ȡ˶̬
+ /// 获取货运动态
///
[HttpGet("/BookingOrder/GetStatusLog")]
public async Task> GetBookingStatusLog(long Id)
@@ -598,20 +648,18 @@ namespace Myshipping.Application
///
- /// ļ
+ /// 下载文件
///
///
[HttpGet("/BookingOrder/download")]
public async Task Download(long id)
{
- var file = await _bookingfile.FirstOrDefaultAsync(x => x.Id == id);
- if (file == null)
+ var printFile = await _bookingfile.FirstOrDefaultAsync(u => u.Id == id);
+ if (printFile == null)
{
throw Oops.Oh(BookingErrorCode.BOOK200);
}
-
-
var opt = App.GetOptions();
var dirAbs = opt.basePath;
if (string.IsNullOrEmpty(dirAbs))
@@ -619,26 +667,26 @@ namespace Myshipping.Application
dirAbs = App.WebHostEnvironment.WebRootPath;
}
- var fileFullPath = Path.Combine(dirAbs, file.FilePath);
+ var fileFullPath = Path.Combine(dirAbs, printFile.FilePath);
if (!File.Exists(fileFullPath))
{
throw Oops.Oh(BookingErrorCode.BOOK115);
}
- var fileName = HttpUtility.UrlEncode(file.FileName, Encoding.GetEncoding("UTF-8"));
+ var fileName = HttpUtility.UrlEncode(printFile.FileName, Encoding.GetEncoding("UTF-8"));
var result = new FileStreamResult(new FileStream(fileFullPath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
return result;
}
#endregion
- #region
+ #region 运踪
///
- /// ٽӿ
+ /// 调用运踪接口
///
[NonAction]
public async Task SendTrace(string BusinessId, string YARDID, string YARD, string MBLNO)
{
- _logger.LogInformation("ᵥţ" + MBLNO + " ٽӿ");
+ _logger.LogInformation("提单号:" + MBLNO + " 调用运踪接口");
var key = _repWebAcc.FirstOrDefault(x => x.TenantId == Convert.ToInt64(UserManager.TENANT_ID) && x.TypeCode == "seae_billtraceurl");
var url = _cache.GetAllDictData().Result;
BillTraceDto billdto = new BillTraceDto();
@@ -660,11 +708,11 @@ namespace Myshipping.Application
billdto.Gid = UserManager.DjyUserId;
var json = billdto.ToJsonString();
var html = await url.FirstOrDefault(x => x.TypeCode == "url_set" && x.Code == "request_seae_billtraceurl").Value.SetHttpMethod(HttpMethod.Post).SetQueries(new { msg = json }).SetRetryPolicy(3, 5000).SendAsAsync();
- _logger.LogInformation("ᵥţ" + MBLNO + " ٽӿڷ" + html.ToJsonString());
+ _logger.LogInformation("提单号:" + MBLNO + " 调用运踪接口返回" + html.ToJsonString());
}
///
- /// ˶̬
+ /// 插入货运动态
///
[AllowAnonymous]
[SqlSugarUnitOfWork]
@@ -674,14 +722,14 @@ namespace Myshipping.Application
foreach (var item in all)
{
- //ԭ
+ //清空原有数据
var old = await _repStatuslog.AsQueryable().Where(x => x.BookingId == item.BookingId && x.Category == "ship").ToListAsync();
await _repStatuslog.DeleteAsync(x => x.BookingId == item.BookingId && x.Category == "ship");
foreach (var ot in old)
{
await _statuslogdetail.DeleteAsync(x => x.PId == ot.Id);
}
- //
+ //新增数据
var bookingStatusLog = new BookingStatusLog();
bookingStatusLog.BookingId = item.BookingId;
bookingStatusLog.Category = "ship";
@@ -709,10 +757,10 @@ namespace Myshipping.Application
}
#endregion
- #region Ų(֪ͨ)
+ #region 放舱(入货通知)
///
- /// ȡŲϢ
+ /// 获取放舱信息
///
///
///
@@ -737,7 +785,7 @@ namespace Myshipping.Application
var output = letterYard.Adapt();
- //Ϣ
+ //链接信息
var urlModel = _repOrderUrl.FirstOrDefault(x => x.BookingId == bookingId);
if (urlModel != null)
{
@@ -748,7 +796,7 @@ namespace Myshipping.Application
}
///
- /// 棨ģŲ
+ /// 保存(新增或修改)放舱
///
///
///
@@ -769,14 +817,14 @@ namespace Myshipping.Application
var order = _rep.FirstOrDefault(x => x.Id == input.BookingId);
- //СƱ
+ //生成提箱小票
var allowCarrier = _cache.GetAllDictData().Result.Where(x => x.TypeCode == "txxp_carrier_list").Select(x => x.Code).ToList();
if (allowCarrier.Contains(order.CARRIERID))
{
var txxpLink = await TxxpLink(input.BookingId);
}
- //vgm
+ //vgm链接
allowCarrier = _cache.GetAllDictData().Result.Where(x => x.TypeCode == "vgm_carrier_list").Select(x => x.Code).ToList();
if (!allowCarrier.Contains(order.CARRIERID))
{
@@ -785,7 +833,7 @@ namespace Myshipping.Application
}
///
- /// Ųշ
+ /// 放舱发送
///
///
///
@@ -799,30 +847,30 @@ namespace Myshipping.Application
var letterYard = await _repLetterYard.FirstOrDefaultAsync(x => x.BookingId == bookingId);
if (letterYard == null)
{
- throw Oops.Bah("ŲϢδҵȱ");
+ throw Oops.Bah("放舱信息未找到,请先保存数据");
}
var mailAcc = await _repUserMail.FirstOrDefaultAsync(x => x.CreatedUserId == user.Id && x.SmtpPort > 0 && x.SmtpServer != null && x.SmtpServer != "");
if (mailAcc == null)
{
- throw Oops.Bah("ûδûsmtpδȷ");
+ throw Oops.Bah("用户邮箱未设置或smtp未正确配置");
}
var orderUrl = await _repOrderUrl.FirstOrDefaultAsync(u => u.BookingId == bookingId);
if (orderUrl == null)
{
- throw Oops.Bah("δϢ±");
+ throw Oops.Bah("未生成链接信息,请重新保存数据");
}
if (string.IsNullOrEmpty(letterYard.AttnMail))
{
- throw Oops.Bah("ATTN MAILδȷд");
+ throw Oops.Bah("ATTN MAIL未正确填写");
}
- #region Ųļصո
+ #region 保存放舱文件,并挂载到订舱附件
var fileBytes = await GetReportFile(bookingId, "fangcang");
var opt = App.GetOptions();
- var fileSaveName = $"Ų_{order.MBLNO}_{DateTime.Now.Ticks}.pdf"; // ļԭʼ
+ var fileSaveName = $"放舱_{order.MBLNO}_{DateTime.Now.Ticks}.pdf"; // 文件原始名称
var dirAbs = string.Empty;
if (string.IsNullOrEmpty(opt.basePath))
{
@@ -852,68 +900,68 @@ namespace Myshipping.Application
await _bookingfile.InsertAsync(newFile);
#endregion
- //˶̬
+ //货运动态
var bsl = new BookingStatusLog();
bsl.BookingId = bookingId;
- bsl.Status = $"Ųոͻ";
+ bsl.Status = $"放舱给客户";
bsl.OpTime = DateTime.Now;
bsl.Category = "ship";
bsl.MBLNO = order.MBLNO;
await _repStatuslog.InsertAsync(bsl);
- //״̬
- await SaveBookingStatus(bookingId, "sta_letter_yard", "Ų");
+ //订舱状态
+ await SaveBookingStatus(bookingId, "sta_letter_yard", "放舱");
- #region ʼ
+ #region 发送邮件
- var mailSubject = $"ŲϢ{order.MBLNO}/{order.CARRIERID}/{order.VESSEL}/{order.VOYNO}/PO:{order.PONO}/{order.TenantName}";
+ var mailSubject = $"放舱信息:{order.MBLNO}/{order.CARRIERID}/{order.VESSEL}/{order.VOYNO}/PO:{order.PONO}/{order.TenantName}";
var extContent = string.Empty;
- if (order.CARGOID == "R") //
+ if (order.CARGOID == "R") //冻柜
{
- extContent = $"¶ȣ{order.TEMPSET}{order.TEMPID}
ͨ磺{order.REEFERF}
ʪȣ{order.HUMIDITY}
";
+ extContent = $"温度:{order.TEMPSET}{order.TEMPID}
通风:{order.REEFERF}
湿度:{order.HUMIDITY}
";
}
- else if (order.CARGOID == "D") //ΣƷ
+ else if (order.CARGOID == "D") //危险品
{
- extContent = $"ΣƷȼ{order.DCLASS}
ΣƷţ{order.DUNNO}
";
+ extContent = $"危险品等级:{order.DCLASS}
危险品编号:{order.DUNNO}
";
}
- var mailContent = $@"TO:{order.CUSTOMERNAME} ˾ί˾ճڵĻϢ£лл
-ᵥţ{order.MBLNO}
-Σ{order.VESSEL}/{order.VOYNO}
-Ŀĸۣ{order.PORTDISCHARGE}
-Ԥƴڣ{(order.ETD.HasValue ? order.ETD.Value.Date.ToString("yyyy-MM-dd") : "")}
-վ{order.YARD}
-{order.SHIPAGENCY}
-Ԥƽظʱ䣺{order.CLOSINGDATE}
-Ԥƽصʱ䣺{order.CLOSEDOCDATE}
-VGMʱ䣺{order.CLOSEVGMDATE}
+ var mailContent = $@"TO:{order.CUSTOMERNAME} 贵司委托我司代理订舱出口的货物信息如下,详情请见附件,谢谢!
+提单号:{order.MBLNO}
+船名航次:{order.VESSEL}/{order.VOYNO}
+目的港:{order.PORTDISCHARGE}
+预计船期:{(order.ETD.HasValue ? order.ETD.Value.Date.ToString("yyyy-MM-dd") : "")}
+场站:{order.YARD}
+船代:{order.SHIPAGENCY}
+预计截港时间:{order.CLOSINGDATE}
+预计截单时间:{order.CLOSEDOCDATE}
+截VGM时间:{order.CLOSEVGMDATE}
{extContent}
-ע{order.YARDREMARK}
- СƱӣ{orderUrl.UrlTxxp}
- ύVGMӣ{orderUrl.UrlVgm}
+备注:{order.YARDREMARK}
+ 提箱小票链接:{orderUrl.UrlTxxp}
+ 提交VGM链接:{orderUrl.UrlVgm}
- ܰʾ
- Ʊأǰ֪ͨվ˾
- ظʱͷƻΪ
- ˾VGM벻ҪͨVGMύݣ˾ȡVGM걨á
+ 温馨提示:
+ 如果分票报关,请回箱前通知场站及我司。
+ 开船及截港时间以码头具体计划为准。
+ 若贵司自输VGM,请不要通过VGM链接提交数据,否则我司收取相关VGM申报费用。
- մϵˣ{UserManager.Name}
- 绰{user.Tel} ֻ{user.Phone}
- 䣺{user.Email}
+ 订舱代理联系人:{UserManager.Name}
+ 电话:{user.Tel} 手机:{user.Phone}
+ 邮箱:{user.Email}
";
var sendResult = await MailSendHelper.SendMail(mailAcc, mailSubject, mailContent, letterYard.AttnMail);
if (!sendResult.Key)
{
- _logger.LogError($"Ųʼʧܣ{mailAcc.MailAccount}{letterYard.AttnMail} {mailSubject}");
- throw Oops.Bah($"ʼʧܣ{sendResult.Value}");
+ _logger.LogError($"放舱邮件发送失败:从{mailAcc.MailAccount}到{letterYard.AttnMail},主题 {mailSubject}");
+ throw Oops.Bah($"邮件发送失败:{sendResult.Value}");
}
#endregion
}
///
- /// ȡŲpdf
+ /// 获取放舱pdf
///
///
///
@@ -923,7 +971,7 @@ namespace Myshipping.Application
var letterYard = await _repLetterYard.FirstOrDefaultAsync(x => x.BookingId == bookingId);
if (letterYard == null)
{
- throw Oops.Bah("ŲϢδҵȱ");
+ throw Oops.Bah("放舱信息未找到,请先保存数据");
}
var bs = await GetReportFile(bookingId, "fangcang", 1);
var fileName = HttpUtility.UrlEncode($"{bookingId}_{DateTime.Now.Ticks}.pdf", Encoding.GetEncoding("UTF-8"));
@@ -933,7 +981,7 @@ namespace Myshipping.Application
}
///
- /// ȡŲexcel
+ /// 获取放舱excel
///
///
///
@@ -943,7 +991,7 @@ namespace Myshipping.Application
var letterYard = await _repLetterYard.FirstOrDefaultAsync(x => x.BookingId == bookingId);
if (letterYard == null)
{
- throw Oops.Bah("ŲϢδҵȱ");
+ throw Oops.Bah("放舱信息未找到,请先保存数据");
}
var bs = await GetReportFile(bookingId, "fangcang", 2);
var fileName = HttpUtility.UrlEncode($"{bookingId}_{DateTime.Now.Ticks}.xlsx", Encoding.GetEncoding("UTF-8"));
@@ -952,23 +1000,23 @@ namespace Myshipping.Application
}
///
- /// ɱļ
+ /// 生成报表文件
///
///
- /// ͣ1pdf2xlsx
- /// ʹ룬fangcangsamplebill
+ /// 类型,1:pdf、2:xlsx
+ /// 报表类型代码,例如fangcang、samplebill等
///
[NonAction]
private async Task GetReportFile(long bookingId, string typeCode, int type = 1)
{
- //ӡַ
+ //打印报表服务地址
var reportUrl = _cache.GetAllDictData().Result.FirstOrDefault(x => x.TypeCode == "url_set" && x.Code == "url_report_generate").Value;
if (!reportUrl.EndsWith("/"))
{
reportUrl += "/";
}
- //
+ //订舱数据
var order = _rep.FirstOrDefault(x => x.Id == bookingId);
if (order == null)
{
@@ -994,36 +1042,36 @@ namespace Myshipping.Application
throw Oops.Bah(BookingErrorCode.BOOK115);
}
- _logger.LogInformation($"ñɣid{bookingId}ļ{printTemplate.FileName}");
+ _logger.LogInformation($"准备调用报表生成:id:{bookingId},文件:{printTemplate.FileName}");
var genUrl = $"{reportUrl}Report/BookingReport?bookingId={bookingId}&type={type}";
var rtn = await genUrl
.SetContentType("multipart/form-data")
.SetBodyBytes(("file", File.ReadAllBytes(fileAbsPath), HttpUtility.UrlEncode(printTemplate.FileName, Encoding.GetEncoding("UTF-8"))))
.PostAsStringAsync();
var jobjRtn = JObject.Parse(rtn);
- _logger.LogInformation($"ñɷأ{rtn}");
+ _logger.LogInformation($"调用报表生成返回:{rtn}");
if (jobjRtn.GetBooleanValue("Success"))
{
- //öȡļ
+ //调用读取文件
var fn = jobjRtn.GetStringValue("Data");
- _logger.LogInformation($"öȡļid{bookingId}ļ{fn}");
+ _logger.LogInformation($"准备调用读取报表文件:id:{bookingId},文件名:{fn}");
var readFileUrl = $"{reportUrl}Report/GetFile?fileName={fn}";
var bs = await readFileUrl.GetAsByteArrayAsync();
- _logger.LogInformation($"öȡļأ{bs.Length}");
+ _logger.LogInformation($"调用读取报表文件返回:{bs.Length}");
return bs;
}
else
{
- throw Oops.Bah($"ɱļʧܣ{jobjRtn.GetStringValue("Message")}");
+ throw Oops.Bah($"生成报表文件失败:{jobjRtn.GetStringValue("Message")}");
}
}
#endregion
- #region »ֽ
+ #region 下货纸
///
- /// »ֽ
+ /// 发送下货纸
///
///
///
@@ -1033,18 +1081,18 @@ namespace Myshipping.Application
var rtn = await XiahuozhiHelpler.Send(bookingId, "9");
if (!rtn.Key)
{
- throw Oops.Bah($"ʧܣ{rtn.Value}");
+ throw Oops.Bah($"发送失败:{rtn.Value}");
}
- //״̬
- await SaveBookingStatus(bookingId, "sta_xhz", "»ֽ");
+ //订舱状态
+ await SaveBookingStatus(bookingId, "sta_xhz", "下货纸");
}
#endregion
- #region ᵥȷϣ
+ #region 样单(提单确认)
///
- ///
+ /// 样单
///
///
///
@@ -1073,7 +1121,7 @@ namespace Myshipping.Application
}
///
- /// 棨ģ
+ /// 保存(新增或修改)样单
///
///
///
@@ -1094,7 +1142,7 @@ namespace Myshipping.Application
}
///
- /// ȡpdf
+ /// 获取样单pdf
///
///
///
@@ -1104,7 +1152,7 @@ namespace Myshipping.Application
var samp = await _repSampleBill.FirstOrDefaultAsync(x => x.BookingId == bookingId);
if (samp == null)
{
- throw Oops.Bah("ȱᵥȷݺټ");
+ throw Oops.Bah("请先保存提单确认数据后再继续");
}
var bs = await GetReportFile(bookingId, "tidanqueren");
@@ -1114,10 +1162,10 @@ namespace Myshipping.Application
}
#endregion
- #region СƱ
+ #region 小票链接
///
- /// ȡСƱ
+ /// 获取提箱小票链接
///
///
///
@@ -1143,27 +1191,27 @@ namespace Myshipping.Application
return ordUrl.UrlTxxp;
}
- //У鴬˾
+ //校验船公司
if (string.IsNullOrEmpty(order.CARRIERID))
{
throw Oops.Bah(BookingErrorCode.BOOK118);
}
- //жϴ˾Ƿ֧
+ //判断船公司是否支持
var allowCarrier = _cache.GetAllDictData().Result.Where(x => x.TypeCode == "txxp_carrier_list").Select(x => x.Code).ToList();
if (!allowCarrier.Contains(order.CARRIERID))
{
throw Oops.Bah(BookingErrorCode.BOOK117);
}
- //ͨ˺
+ //亿通账号
var ytAcc = _repWebAcc.FirstOrDefault(x => x.CreatedUserId == UserManager.UserId && x.TypeCode == "YitongWeb");
if (ytAcc == null)
{
throw Oops.Bah(BookingErrorCode.BOOK119);
}
- //վת
+ //场站转换
var yardset = _cache.GetAllMappingYard().Result.FirstOrDefault(y => y.Code == order.YARDID && y.Module == "BookingTxxp");
if (yardset == null)
{
@@ -1171,13 +1219,13 @@ namespace Myshipping.Application
}
var ctns = await _repCtn.Where(x => x.BILLID == bookingId).ToListAsync();
- //У¼
+ //校验箱子数据录入
if (ctns.Where(c => string.IsNullOrEmpty(c.CTNALL) || !c.CTNNUM.HasValue).Count() > 0)
{
throw Oops.Bah(BookingErrorCode.BOOK121);
}
- //ӳ
+ //箱型映射
var ctnMapping = await _cache.GetAllMappingCtn();
ctnMapping = ctnMapping.Where(x => x.Module == "BookingTxxp").ToList();
if (ctnMapping.Count == 0)
@@ -1193,7 +1241,7 @@ namespace Myshipping.Application
var user = await _repUser.FirstOrDefaultAsync(x => x.Id == UserManager.UserId);
- //СƱ
+ //调用小票服务
var dicUrlTxxp = _cache.GetAllDictData().Result.First(x => x.TypeCode == "url_set" && x.Code == "txxp_service");
var postObj = new
{
@@ -1211,7 +1259,7 @@ namespace Myshipping.Application
AgentName = UserManager.TENANT_NAME,
linkName = UserManager.Name,
linkMobile = user.Tel,
- CustomerName = $"{UserManager.TENANT_NAME}+{UserManager.Name}", //˾+û
+ CustomerName = $"{UserManager.TENANT_NAME}+{UserManager.Name}", //公司名称+用户姓名
memo = string.Empty,
boxInfo = ctns.Select(c =>
{
@@ -1227,9 +1275,9 @@ namespace Myshipping.Application
string strPostObj = postObj.ToJsonString();
- _logger.LogInformation($"СƱӿڴݣ{strPostObj}");
+ _logger.LogInformation($"调用提箱小票接口传递数据:{strPostObj}");
var strResp = await dicUrlTxxp.Value.SetBody(postObj).PostAsStringAsync();
- _logger.LogInformation($"СƱӿڷأ{strResp}");
+ _logger.LogInformation($"调用提箱小票接口返回:{strResp}");
var jobjResp = JObject.Parse(strResp);
int respCode = jobjResp.GetIntValue("code");
@@ -1238,15 +1286,15 @@ namespace Myshipping.Application
throw Oops.Bah(BookingErrorCode.BOOK124, jobjResp.GetStringValue("message"));
}
- //url
+ //保存url
var txxpUrl = jobjResp.GetStringValue("data");
ordUrl.UrlTxxp = txxpUrl;
await _repOrderUrl.UpdateAsync(ordUrl);
- //˶̬
+ //货运动态
var bsl = new BookingStatusLog();
bsl.BookingId = bookingId;
- bsl.Status = $"СƱ";
+ bsl.Status = $"生成提箱小票链接";
bsl.OpTime = DateTime.Now;
bsl.Category = "ship";
bsl.MBLNO = order.MBLNO;
@@ -1256,9 +1304,9 @@ namespace Myshipping.Application
}
#endregion
- #region VGMVMG
+ #region VGM及VMG链接
///
- /// ȡVGMVGM SI
+ /// 获取VGM、VGM SI链接
///
///
///
@@ -1284,21 +1332,21 @@ namespace Myshipping.Application
return new string[] { ordUrl.UrlVgm, ordUrl.UrlVgmSi };
}
- //У鴬˾
+ //校验船公司
if (string.IsNullOrEmpty(order.CARRIERID))
{
throw Oops.Bah(BookingErrorCode.BOOK118);
}
var ctns = await _repCtn.Where(x => x.BILLID == bookingId).ToListAsync();
- //жϴ˾Ƿ֧
+ //判断船公司是否支持
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 = _repWebAcc.FirstOrDefault(x => x.TypeCode == carrWebAccMap.Value && x.CreatedUserId == UserManager.UserId);
if (webacc == null)
@@ -1306,20 +1354,20 @@ namespace Myshipping.Application
throw Oops.Bah(BookingErrorCode.BOOK125);
}
- //վת
+ //场站转换
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 (ctns.Where(c => string.IsNullOrEmpty(c.CTNALL) || !c.CTNNUM.HasValue).Count() > 0)
{
throw Oops.Bah(BookingErrorCode.BOOK121);
}
- //ӳ
+ //箱型映射
var ctnMapping = await _cache.GetAllMappingCtn();
ctnMapping = ctnMapping.Where(x => x.Module == "BookingVgm").ToList();
if (ctnMapping.Count == 0)
@@ -1333,20 +1381,20 @@ namespace Myshipping.Application
throw Oops.Bah(BookingErrorCode.BOOK123, string.Join(',', expCode));
}
- //շַ
+ //接收反馈地址
var dicUrlVgmResp = _cache.GetAllDictData().Result.FirstOrDefault(x => x.TypeCode == "url_reponse" && x.Code == "vgm_si_post_reponse");
var dicUrlSiResp = _cache.GetAllDictData().Result.FirstOrDefault(x => x.TypeCode == "url_reponse" && x.Code == "si_post_response");
var user = await _repUser.FirstOrDefaultAsync(x => x.Id == UserManager.UserId);
- //vgmӷ
+ //调用vgm链接服务
var dicUrl = _cache.GetAllDictData().Result.First(x => x.TypeCode == "url_set" && x.Code == "vgm_link_service");
var postObj = new
{
SystemCode = "djy_hechuan",
billOrderId = order.Id.ToString(),
sendOrderCode = order.MBLNO,
- customerName = $"{UserManager.TENANT_NAME}+{UserManager.Name}", //˾+û
+ customerName = $"{UserManager.TENANT_NAME}+{UserManager.Name}", //公司名称+用户姓名
customerId = order.CUSTOMERID.ToString(),
agentName = string.IsNullOrEmpty(order.FORWARDER) ? UserManager.TENANT_NAME : order.FORWARDER,
carrierCode = order.CARRIERID,
@@ -1392,9 +1440,9 @@ namespace Myshipping.Application
};
string strPostObj = postObj.ToJsonString();
- _logger.LogInformation($"VGMӽӿ {dicUrl.Value} ݣ{strPostObj}");
+ _logger.LogInformation($"调用VGM链接接口 {dicUrl.Value} 传递数据:{strPostObj}");
var strResp = await dicUrl.Value.SetBody(postObj).PostAsStringAsync();
- _logger.LogInformation($"VGMӽӿڷأ{strResp}");
+ _logger.LogInformation($"调用VGM链接接口返回:{strResp}");
var jobjResp = JObject.Parse(strResp);
int respCode = jobjResp.GetIntValue("code");
@@ -1404,17 +1452,17 @@ namespace Myshipping.Application
}
- //url
+ //保存url
var memoData = jobjResp.GetJObjectValue("memoData");
ordUrl.UrlVgm = memoData.GetStringValue("vgmUrl");
ordUrl.UrlVgmSi = memoData.GetStringValue("vgmAndSiUrl");
await _repOrderUrl.UpdateAsync(ordUrl);
- //˶̬
+ //货运动态
var bsl = new BookingStatusLog();
bsl.BookingId = bookingId;
- bsl.Status = $"VGM";
+ bsl.Status = $"生成VGM链接";
bsl.OpTime = DateTime.Now;
bsl.Category = "ship";
bsl.MBLNO = order.MBLNO;
@@ -1424,7 +1472,7 @@ namespace Myshipping.Application
}
///
- /// ֱVGMƱ
+ /// 直发VGM(单票)
///
///
///
@@ -1436,20 +1484,20 @@ namespace Myshipping.Application
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 = _repWebAcc.FirstOrDefault(x => x.TypeCode == carrWebAccMap.Value && x.CreatedUserId == UserManager.UserId);
if (webacc == null)
@@ -1457,13 +1505,13 @@ namespace Myshipping.Application
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)
@@ -1477,8 +1525,8 @@ namespace Myshipping.Application
throw Oops.Bah(BookingErrorCode.BOOK123, string.Join(',', expCode));
}
- #region ϢУ飬2022-7-1ģۼӡıƤغͳءֻҪΪ
- if (ctns.Where(c => c.WEIGHTYPE == "ۼ" &&
+ #region 箱信息校验,2022-7-1修改:【累加】的必须有重量、皮重和称重重量;【总重】的只需要称重重量不为空
+ if (ctns.Where(c => c.WEIGHTYPE == "累加" &&
(
string.IsNullOrEmpty(c.CNTRNO)
|| !c.WEIGHKGS.HasValue
@@ -1489,22 +1537,22 @@ namespace Myshipping.Application
|| c.KGS == 0)
).Count() > 0)
{
- throw Oops.Bah("طʽΪۼʱšƤԼΪ");
+ throw Oops.Bah("称重方式为累加时,箱号、重量、箱皮重以及称重重量都不能为空");
}
- if (ctns.Where(c => c.WEIGHTYPE == "" &&
+ if (ctns.Where(c => c.WEIGHTYPE == "总重" &&
(
string.IsNullOrEmpty(c.CNTRNO)
|| !c.WEIGHKGS.HasValue
|| c.WEIGHKGS == 0)
).Count() > 0)
{
- throw Oops.Bah("طʽΪʱźͳΪ");
+ throw Oops.Bah("称重方式为总重时,箱号和称重重量都不能为空");
}
#endregion
- //վת
+ //场站转换
var yardset = _cache.GetAllMappingYard().Result.FirstOrDefault(y => y.Code == order.YARDID && y.Module == "BookingVgm");
if (yardset == null)
{
@@ -1514,14 +1562,14 @@ namespace Myshipping.Application
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}", //˾+û
+ customerName = $"{UserManager.TENANT_NAME}+{UserManager.Name}", //公司名称+用户姓名
customerId = order.CUSTOMERID.ToString(),
agentName = string.IsNullOrEmpty(order.FORWARDER) ? UserManager.TENANT_NAME : order.FORWARDER,
carrierCode = order.CARRIERID,
@@ -1551,15 +1599,15 @@ namespace Myshipping.Application
weigth = c.KGS,
weigthTare = c.TAREWEIGHT,
weigthTotal = c.WEIGHKGS,
- weigthType = c.WEIGHTYPE == "ۼ" ? "SM2" : "SM1"
+ weigthType = c.WEIGHTYPE == "累加" ? "SM2" : "SM1"
}).ToList(),
returnOkUrl = ""
};
string strPostObj = sendObj.ToJsonString();
- _logger.LogInformation($"VGMֱӿ {dicUrl.Value} ݣ{strPostObj}");
+ _logger.LogInformation($"调用VGM直发接口 {dicUrl.Value} 传递数据:{strPostObj}");
var strResp = await dicUrl.Value.SetBody(sendObj).PostAsStringAsync();
- _logger.LogInformation($"VGMֱӿڷأ{strResp}");
+ _logger.LogInformation($"调用VGM直发接口返回:{strResp}");
var jobjResp = JObject.Parse(strResp);
int respCode = jobjResp.GetIntValue("code");
@@ -1569,10 +1617,10 @@ namespace Myshipping.Application
}
- //˶̬
+ //货运动态
var bsl = new BookingStatusLog();
bsl.BookingId = bookingId;
- bsl.Status = $"ֱVGM";
+ bsl.Status = $"直发VGM";
bsl.OpTime = DateTime.Now;
bsl.Category = "ship";
bsl.MBLNO = order.MBLNO;
@@ -1583,55 +1631,55 @@ namespace Myshipping.Application
#endregion
- #region աصEDI
+ #region 订舱、截单EDI
///
- /// ͶաصEDI
+ /// 发送订舱、截单EDI
///
- /// աصEDI
- /// ػִ
+ /// 订舱、截单EDI请求
+ /// 返回回执
[HttpPost("/BookingOrder/SendBookingOrClosingEDI")]
public async Task SendBookingOrClosingEDI(BookingOrClosingEDIOrderDto model)
{
/*
- ͶպͽصEDI
- 1ͨŻȡϢ
- 2鶩ıϢ
- 3ݴ˾IDȡӦ·ö١
- 4ȡEDIתװͺšװʽ
- 5ȡEDIϢȡ˾صEDIá
- 6ϸϢ
- 7ɶջ߽صEDIģļ·
+ 发送订舱和截单EDI的流程
+ 1、通过订单号获取订单信息。
+ 2、检查订单的必填信息。
+ 3、根据船公司ID获取对应的路由枚举。
+ 4、获取EDI转换参数。(集装箱型号、包装方式)
+ 5、读取EDI的配置信息,获取船公司相关的EDI配置。
+ 6、检查详细信息。
+ 7、生成订舱或者截单EDI报文,并返回文件保存绝对路径。
*/
if (model.Id == 0)
- throw Oops.Bah("IdΪ");
+ throw Oops.Bah("订单Id不能为空");
var order = _rep.FirstOrDefault(a => a.Id == model.Id);
if (order == null)
- throw Oops.Bah($"ȡϢʧ");
+ throw Oops.Bah($"获取订单信息失败");
CheckBookingOrClosingEDI(order);
EDIRouteEnum ediRouteEnum = GetEDIRoute(order.CARRIERID);
if (ediRouteEnum == EDIRouteEnum.NULL)
- throw Oops.Bah($"ǰ˾ûжӦ·");
+ throw Oops.Bah($"当前船公司没有对应的请求路由配置");
- //װ
+ //集装箱型
var ediCtnList = _cache.GetAllMappingCtn().GetAwaiter().GetResult()
.Where(t => t.Module.Equals(CONST_MAPPING_MODULE, StringComparison.OrdinalIgnoreCase)).ToList();
- //װ
+ //包装
var ediPkgsList = _cache.GetAllMappingPackage().GetAwaiter().GetResult()
.Where(t => t.Module.Equals(CONST_MAPPING_MODULE, StringComparison.OrdinalIgnoreCase)).ToList();
- //EDI SO\SI
+ //EDI SO\SI代码
var ediSOSICfg = _cache.GetAllMappingCarrier().GetAwaiter().GetResult()
.FirstOrDefault(t => t.Module.Equals(CONST_MAPPING_MODULE, StringComparison.OrdinalIgnoreCase)
&& t.Code.Equals(order.CARRIERID, StringComparison.OrdinalIgnoreCase));
if (ediSOSICfg == null || string.IsNullOrWhiteSpace(ediSOSICfg.MapCode))
- throw Oops.Bah($"CARRIERID={order.CARRIERID} SO(SI)Ĵ˾EDIδҵ");
+ throw Oops.Bah($"CARRIERID={order.CARRIERID} 发送SO(SI)的船公司EDI代码未找到");
var ediModel = new EDIBaseModel();
@@ -1639,16 +1687,16 @@ namespace Myshipping.Application
.FirstOrDefault(a => a.EDICODE.Equals(ediRouteEnum.ToString(), StringComparison.OrdinalIgnoreCase));
if (ftpSet == null)
- throw Oops.Bah($"ȡEDICODE={ediRouteEnum.ToString()}EDIʧ");
+ throw Oops.Bah($"获取EDICODE={ediRouteEnum.ToString()}的EDI参数设置失败");
ediModel.SENDCODE = ftpSet.SENDCODE;
ediModel.SENDNAME = ftpSet.SENDNAME;
ediModel.RECEIVECODE = ftpSet.RECEIVECODE;
- ediModel.filetype = model.sendType; //
+ ediModel.filetype = model.sendType; //订舱
ediModel.filerole = model.fileRole;
- //ȡļ
+ //读取文件配置
var fileCfg = App.GetOptions();
string filePath = $"{Path.Combine(!string.IsNullOrWhiteSpace(fileCfg.basePath) ? fileCfg.basePath : App.WebHostEnvironment.WebRootPath, fileCfg.relativePath)}/edifiles/{order.BSNO}";
@@ -1656,7 +1704,7 @@ namespace Myshipping.Application
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
filePath = filePath.Replace("\\", "/");
- //ԤȴĿ¼
+ //预先创建目录
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
@@ -1677,40 +1725,40 @@ namespace Myshipping.Application
var ediPkgs = ediPkgsList.FirstOrDefault(x => x.Code.Equals(order.KINDPKGS, StringComparison.OrdinalIgnoreCase));
if (ediPkgs == null || string.IsNullOrWhiteSpace(ediPkgs.MapCode))
- throw Oops.Bah($"װ{order.KINDPKGS}EDIδҵ");
+ throw Oops.Bah($"包装{order.KINDPKGS}的EDI代码未找到");
primaryModel.KINDPKGS_EDI_CODE = ediPkgs.MapCode?.Trim();
- //Ϣ
+ //箱信息
var contaList = _repCtn.AsQueryable().Where(t => t.BILLID == order.Id).ToList();
primaryModel.CTNLIST = new List();
- //װ
+ //集装箱
foreach (var conta in contaList)
{
var contaModel = conta.Adapt();
- //EDI
+ //EDI箱型
var currConta = ediCtnList.FirstOrDefault(x => x.Code.Equals(conta.CTNCODE, StringComparison.OrdinalIgnoreCase));
if (currConta == null)
- throw Oops.Oh($"{conta.CTNCODE}EDIδҵ");
+ throw Oops.Oh($"箱型{conta.CTNCODE}的EDI代码未找到");
contaModel.CTNALLCODE = currConta.MapCode;
- //EDIװ
+ //EDI包装
var ediContaPkgs = ediPkgsList.FirstOrDefault(x => x.Code.Equals(conta.KINDPKGS, StringComparison.OrdinalIgnoreCase));
if (currConta == null)
- throw Oops.Oh($"װװ{conta.KINDPKGS}EDIδҵ");
+ throw Oops.Oh($"集装箱包装{conta.KINDPKGS}的EDI代码未找到");
contaModel.KINDPKGS_EDI_CODE = ediContaPkgs.MapCode;
primaryModel.CTNLIST.Add(contaModel);
}
- //Ʒ
+ //多品名
var cargoList = _ctndetailrep.AsQueryable().Where(t => contaList.Select(a => a.Id).ToArray().Contains(t.CTNID.Value)).ToList();
primaryModel.CTNGOODSLIST = new List();
@@ -1724,14 +1772,14 @@ namespace Myshipping.Application
var ediDetailPkgs = ediPkgsList.FirstOrDefault(x => x.Code.Equals(cargo.KINDPKGS, StringComparison.OrdinalIgnoreCase));
if (ediDetailPkgs == null)
- throw Oops.Oh($"ϸİװ{cargo.KINDPKGS}EDIδҵ");
+ throw Oops.Oh($"货明细的包装{cargo.KINDPKGS}的EDI代码未找到");
cargoModel.KINDPKGS_EDI_CODE = ediDetailPkgs.MapCode;
primaryModel.CTNGOODSLIST.Add(cargoModel);
}
- //ʱֵȷӦչֶκֵ
+ //这里临时赋值,等明确对应的扩展表字段后赋值
#if DEBUG
primaryModel.MasterBOLIndicator = "A1";
primaryModel.ConsigneeEdiCode = "CEE1";
@@ -1760,7 +1808,7 @@ namespace Myshipping.Application
#endregion
///
- ///
+ /// 触发订舱
///
///
///
@@ -1778,10 +1826,10 @@ namespace Myshipping.Application
#region PIL
string strCheck = PILEdiHelper.IsCreatePILEDI(ediModel);
- _logger.LogInformation($"SO(SI)У飺{strCheck}ݶ{JsonConvert.SerializeObject(ediModel)}");
+ _logger.LogInformation($"调用SO(SI),校验:{strCheck},数据对象:{JsonConvert.SerializeObject(ediModel)}");
if (!string.IsNullOrWhiteSpace(strCheck))
- throw Oops.Bah($"{EDIRouteEnum.PIL.ToString()}Уʧܣ{strCheck}");
+ throw Oops.Bah($"发送{EDIRouteEnum.PIL.ToString()}校验失败,{strCheck}");
string ediFile = PILEdiHelper.CreateEdiPIL(ediModel);
#endregion
@@ -1793,10 +1841,10 @@ namespace Myshipping.Application
#region TSL
string strCheck = TSLEdiHelper.IsCreateTSL(ediModel);
- _logger.LogInformation($"SO(SI)У飺{strCheck}ݶ{JsonConvert.SerializeObject(ediModel)}");
+ _logger.LogInformation($"调用SO(SI),校验:{strCheck},数据对象:{JsonConvert.SerializeObject(ediModel)}");
if (!string.IsNullOrWhiteSpace(strCheck))
- throw Oops.Bah($"{EDIRouteEnum.PIL.ToString()}Уʧܣ{strCheck}");
+ throw Oops.Bah($"发送{EDIRouteEnum.PIL.ToString()}校验失败,{strCheck}");
string ediFile = string.Empty;
@@ -1818,10 +1866,10 @@ namespace Myshipping.Application
#region WY
string strCheck = WYEdiHelper.IsCreateWYEDI(ediModel);
- _logger.LogInformation($"SO(SI)У飺{strCheck}ݶ{JsonConvert.SerializeObject(ediModel)}");
+ _logger.LogInformation($"调用SO(SI),校验:{strCheck},数据对象:{JsonConvert.SerializeObject(ediModel)}");
if (!string.IsNullOrWhiteSpace(strCheck))
- throw Oops.Bah($"{EDIRouteEnum.PIL.ToString()}Уʧܣ{strCheck}");
+ throw Oops.Bah($"发送{EDIRouteEnum.PIL.ToString()}校验失败,{strCheck}");
string ediFile = WYEdiHelper.CreateEdiWY(ediModel);
#endregion
@@ -1834,10 +1882,10 @@ namespace Myshipping.Application
#region YML
string strCheck = YMLEdiHelper.IsCreateYMLEDI(ediModel);
- _logger.LogInformation($"SO(SI)У飺{strCheck}ݶ{JsonConvert.SerializeObject(ediModel)}");
+ _logger.LogInformation($"调用SO(SI),校验:{strCheck},数据对象:{JsonConvert.SerializeObject(ediModel)}");
if (!string.IsNullOrWhiteSpace(strCheck))
- throw Oops.Bah($"{EDIRouteEnum.PIL.ToString()}Уʧܣ{strCheck}");
+ throw Oops.Bah($"发送{EDIRouteEnum.PIL.ToString()}校验失败,{strCheck}");
string ediFile = string.Empty;
@@ -1859,10 +1907,10 @@ namespace Myshipping.Application
#region YT
string strCheck = YTEdiHelper.IsCreateYTEDI(ediModel);
- _logger.LogInformation($"SO(SI)У飺{strCheck}ݶ{JsonConvert.SerializeObject(ediModel)}");
+ _logger.LogInformation($"调用SO(SI),校验:{strCheck},数据对象:{JsonConvert.SerializeObject(ediModel)}");
if (!string.IsNullOrWhiteSpace(strCheck))
- throw Oops.Bah($"{EDIRouteEnum.PIL.ToString()}Уʧܣ{strCheck}");
+ throw Oops.Bah($"发送{EDIRouteEnum.PIL.ToString()}校验失败,{strCheck}");
string ediFile = YTEdiHelper.CreateEdiYT(ediModel);
#endregion
@@ -1881,27 +1929,27 @@ namespace Myshipping.Application
}
///
- /// 鶩աصEDIϢ
+ /// 检查订舱、截单EDI订单信息
///
///
[NonAction]
private void CheckBookingOrClosingEDI(BookingOrder order)
{
if (string.IsNullOrWhiteSpace(order.CARRIERID))
- throw Oops.Bah("˾д");
+ throw Oops.Bah("船公司必须填写");
if (string.IsNullOrWhiteSpace(order.OPID))
- throw Oops.Bah("δд");
+ throw Oops.Bah("未填写操作人");
if (string.IsNullOrWhiteSpace(order.KINDPKGS))
- throw Oops.Bah("װδд");
+ throw Oops.Bah("包装种类未填写");
}
///
- /// ݴ˾IDȡEDI·ö
+ /// 根据船公司ID获取EDI的路由枚举
///
- /// ˾ID
- /// õ·ö
+ /// 船公司ID
+ /// 返回适用的路由枚举
[NonAction]
private EDIRouteEnum GetEDIRoute(string carrierId)
{
@@ -1936,9 +1984,9 @@ namespace Myshipping.Application
return routeEnum;
}
- #region
+ #region 其他
///
- /// ȡûjson
+ /// 获取用户报表的json
///
///
[HttpGet("/BookingOrder/GenReportJson")]
@@ -1959,36 +2007,36 @@ namespace Myshipping.Application
}
///
- /// ɱļ
+ /// 生成报表文件
///
///
- /// ͣӦֵеġմӡģ͡
+ /// 类型,对应字典中的【订舱打印模板类型】
///
[HttpGet("/BookingOrder/GenReportFile")]
public async Task GenReportFile(long id, string type)
{
- //ӡַ
+ //打印报表服务地址
var reportUrl = _cache.GetAllDictData().Result.FirstOrDefault(x => x.TypeCode == "url_set" && x.Code == "url_report_generate").Value;
if (!reportUrl.EndsWith("/"))
{
reportUrl += "/";
}
- //
+ //订舱数据
var order = _rep.FirstOrDefault(x => x.Id == id);
if (order == null)
{
throw Oops.Bah(BookingErrorCode.BOOK001);
}
- //ӡģ
+ //打印模板
var printTemplate = _repPrint.FirstOrDefault(x => x.TenantId == order.TenantId && x.TypeCode == type);
if (printTemplate == null)
{
throw Oops.Bah(BookingErrorCode.BOOK112);
}
- //ȡ·
+ //读取配置路劲
var opt = App.GetOptions();
var dirAbs = opt.basePath;
if (string.IsNullOrEmpty(dirAbs))
@@ -1996,31 +2044,31 @@ namespace Myshipping.Application
dirAbs = App.WebHostEnvironment.WebRootPath;
}
- //ȡģ岢ýӿ
+ //读取模板并调用接口
var fileAbsPath = Path.Combine(dirAbs, printTemplate.FilePath).ToLower();
if (!File.Exists(fileAbsPath))
{
throw Oops.Bah(BookingErrorCode.BOOK112);
}
- _logger.LogInformation($"ñɣid{id}ļ{printTemplate.FileName}");
+ _logger.LogInformation($"准备调用报表生成:id:{id},文件:{printTemplate.FileName}");
var genUrl = reportUrl + "Report/BookingReport?bookingId=" + id;
var rtn = await genUrl
.SetContentType("multipart/form-data")
.SetBodyBytes(("file", File.ReadAllBytes(fileAbsPath), HttpUtility.UrlEncode(printTemplate.FileName, Encoding.GetEncoding("UTF-8"))))
.PostAsStringAsync();
var jobjRtn = JObject.Parse(rtn);
- _logger.LogInformation($"ñɷأ{rtn}");
+ _logger.LogInformation($"调用报表生成返回:{rtn}");
if (jobjRtn.GetBooleanValue("Success"))
{
- //öȡļ
+ //调用读取文件
var fn = jobjRtn.GetStringValue("Data");
- _logger.LogInformation($"öȡļid{id}ļ{fn}");
+ _logger.LogInformation($"准备调用读取文件:id:{id},文件名:{fn}");
var readFileUrl = reportUrl + "Report/GetFile?fileName=" + fn;
var bs = await readFileUrl.GetAsByteArrayAsync();
- _logger.LogInformation($"öȡļأ{bs.Length}");
+ _logger.LogInformation($"调用读取文件返回:{bs.Length}");
var fileName = HttpUtility.UrlEncode($"{id}_{type}_{DateTime.Now.Ticks}.pdf", Encoding.GetEncoding("UTF-8"));
var result = new FileContentResult(bs, "application/octet-stream") { FileDownloadName = fileName };
@@ -2028,50 +2076,25 @@ namespace Myshipping.Application
}
else
{
- throw Oops.Bah($"ɱļʧܣ{jobjRtn.GetStringValue("Message")}");
- }
-
- }
-
- ///
- /// ȡվ
- ///
- ///
- ///
- ///
- [HttpGet("/BookingOrder/GetYardData")]
- public async Task GetYardData(long bookingId, bool isWeb = false)
- {
- //
- var order = _rep.FirstOrDefault(x => x.Id == bookingId);
- if (order == null)
- {
- throw Oops.Bah(BookingErrorCode.BOOK001);
- }
-
- var rtn = await YardDataHelper.GetYardData(order.TenantId.Value, order.TenantName, order.MBLNO, order.YARDID, isWeb);
- if (!rtn.Key)
- {
- throw Oops.Bah(rtn.Value);
+ throw Oops.Bah($"生成报表文件失败:{jobjRtn.GetStringValue("Message")}");
}
- return rtn.Value;
}
///
- /// ¼¶״̬
+ /// 记录或更新订舱状态
///
///
///
///
///
[NonAction]
- private async Task SaveBookingStatus(long bookingId, string code, string name)
+ public async Task SaveBookingStatus(long bookingId, string code, string name)
{
var bookSta = _repBookingStatus.FirstOrDefault(x => x.BookingId == bookingId && x.StaCode == code);
if (bookSta == null)
{
- //¼״̬
+ //记录状态
bookSta = new BookingStatus();
bookSta.BookingId = bookingId;
bookSta.StaCode = code;