diff --git a/ds-wms-service/DS.Module.SqlSugar/SaasDbService.cs b/ds-wms-service/DS.Module.SqlSugar/SaasDbService.cs
index 4556396e..d8dd61b5 100644
--- a/ds-wms-service/DS.Module.SqlSugar/SaasDbService.cs
+++ b/ds-wms-service/DS.Module.SqlSugar/SaasDbService.cs
@@ -39,7 +39,7 @@ public class SaasDbService : ISaasDbService
///
public ISqlSugarClient GetBizDb()
{
- var tenantId = user.GetTenantId().ToString();
+ var tenantId = user.TenantId;
if (!db.IsAnyConnection(tenantId))
{
diff --git a/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs b/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs
index 49724342..c3a1be1e 100644
--- a/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs
+++ b/ds-wms-service/DS.Module.SqlSugar/SqlsugarHelper.cs
@@ -43,7 +43,7 @@ namespace DS.Module.SqlSugar
{
var tenantId = ((dynamic)entityInfo.EntityValue).TenantId;
if (tenantId == null || tenantId == 0)
- entityInfo.SetValue(user.GetTenantId());
+ entityInfo.SetValue(user.TenantId);
}
if (entityInfo.PropertyName == "TenantName")
{
diff --git a/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs b/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
index 07794e21..60e18c1b 100644
--- a/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
+++ b/ds-wms-service/DS.Module.SqlSugar/SqlsugarInstall.cs
@@ -56,7 +56,7 @@ public static class SqlsugarInstall
{
dbList.Add(item);
}
- var _serviceProvider =services.GetService();
+ var _serviceProvider = services.GetService();
ICacheService myCache = new SqlSugarCsRedisCache(_serviceProvider);
var connectConfigList = SqlsugarHelper.ReturnConnectionConfig(dbList, myCache);
@@ -97,7 +97,7 @@ public static class SqlsugarInstall
OrgId = 1288018625843826688
};
}
-
+
//全局上下文生效
SqlSugarScope sqlSugar = new SqlSugarScope(connectConfigList,
db =>
@@ -108,7 +108,7 @@ public static class SqlsugarInstall
foreach (var c in connectConfigList)
{
var dbProvider = db.GetConnectionScope((string)c.ConfigId);
-
+
// var user = services.GetService();
//单例参数配置,所有上下文生效
@@ -178,7 +178,7 @@ public static class SqlsugarInstall
{
var tenantId = ((dynamic)entityInfo.EntityValue).TenantId;
if (tenantId == null || tenantId == 0)
- entityInfo.SetValue(user.GetTenantId());
+ entityInfo.SetValue(user.TenantId);
}
if (entityInfo.PropertyName == "TenantName")
{
@@ -215,7 +215,7 @@ public static class SqlsugarInstall
}
}
if (entityInfo.PropertyName == "Deleted")
- entityInfo.SetValue(false);
+ entityInfo.SetValue(false);
}
// 更新操作
@@ -234,7 +234,7 @@ public static class SqlsugarInstall
entityInfo.SetValue(user.UserId);
if (entityInfo.PropertyName == "DeleteUserName" && user != null)
entityInfo.SetValue(user.UserName);
- }
+ }
};
dbProvider.Aop.OnDiffLogEvent = it =>
@@ -253,13 +253,13 @@ public static class SqlsugarInstall
var time = it.Time;
var diffType = it.DiffType; //enum insert 、update and delete
- var diffData = SqlSugarDiffUtil.GetDiff(editBeforeData,editAfterData);
-
+ var diffData = SqlSugarDiffUtil.GetDiff(editBeforeData, editAfterData);
+
var auditData = new SysLogAudit()
{
- KeyId =Convert.ToInt64(diffData.Id),
+ KeyId = Convert.ToInt64(diffData.Id),
Sql = it.Sql,
- Param = JsonConvert.SerializeObject(it.Parameters),
+ Param = JsonConvert.SerializeObject(it.Parameters),
OperateType = diffType.ToString(),
OldValue = JsonConvert.SerializeObject(editBeforeData),
NewValue = JsonConvert.SerializeObject(editAfterData),
@@ -270,10 +270,10 @@ public static class SqlsugarInstall
db.GetConnection(1288018625843826680).Insertable(auditData).ExecuteCommand();
#endregion
}
-
+
};
//全局过滤租户
- dbProvider.QueryFilter.AddTableFilter(m => m.TenantId == user.GetTenantId());
+ dbProvider.QueryFilter.AddTableFilter(m => m.TenantId == long.Parse(user.TenantId));
//全局过滤机构Id
dbProvider.QueryFilter.AddTableFilter(m => m.OrgId == user.OrgId);
//全局软删除过滤
diff --git a/ds-wms-service/DS.WMS.Core/Code/Dtos/CodeUserEmailRes.cs b/ds-wms-service/DS.WMS.Core/Code/Dtos/CodeUserEmailRes.cs
index de11111f..ba7cadf6 100644
--- a/ds-wms-service/DS.WMS.Core/Code/Dtos/CodeUserEmailRes.cs
+++ b/ds-wms-service/DS.WMS.Core/Code/Dtos/CodeUserEmailRes.cs
@@ -1,6 +1,8 @@
using DS.Module.Core;
+using SqlSugar;
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -65,5 +67,15 @@ namespace DS.WMS.Core.Code.Dtos
/// 是否为公司账号
///
public bool IsCompany { get; set; } = false;
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建人名称
+ ///
+ public string CreateUserName { get; set; }
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperReq.cs b/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperReq.cs
index 4a89a52f..76b830cb 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperReq.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperReq.cs
@@ -42,7 +42,7 @@ public class ClientShipperReq
///
/// Desc:类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)
///
- public int ShipperType { get; set; }
+ public string ShipperType { get; set; }
///
/// 是否公共标识
diff --git a/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperRes.cs b/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperRes.cs
index c0d30b15..14e0820a 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperRes.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Dtos/ClientShipperRes.cs
@@ -40,7 +40,7 @@ public class ClientShipperRes
///
/// Desc:类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)
///
- public int ShipperType { get; set; }
+ public string ShipperType { get; set; }
///
/// 是否公共标识
diff --git a/ds-wms-service/DS.WMS.Core/Info/Entity/InfoClientShipper.cs b/ds-wms-service/DS.WMS.Core/Info/Entity/InfoClientShipper.cs
index bf976d05..5fb7f13e 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Entity/InfoClientShipper.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Entity/InfoClientShipper.cs
@@ -36,8 +36,8 @@ public class InfoClientShipper : BaseModelV2
///
/// Desc:类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)
///
- [SugarColumn(ColumnDescription = "类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)")]
- public int ShipperType { get; set; }
+ [SugarColumn(ColumnDescription = "类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)", Length = 50)]
+ public string ShipperType { get; set; }
///
/// 是否公共标识
diff --git a/ds-wms-service/DS.WMS.Core/Op/EDI/SendShippingOrderReq.cs b/ds-wms-service/DS.WMS.Core/Op/EDI/SendShippingOrderReq.cs
index 3680dd73..ce9787ed 100644
--- a/ds-wms-service/DS.WMS.Core/Op/EDI/SendShippingOrderReq.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/EDI/SendShippingOrderReq.cs
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace DS.WMS.Core.Op.EDI
{
///
- /// 发送托书Req
+ /// 发送海运出口邮件Req
///
public class SendShippingOrderReq
{
diff --git a/ds-wms-service/DS.WMS.Core/Op/Interface/IOpBusinessYardService.cs b/ds-wms-service/DS.WMS.Core/Op/Interface/IOpBusinessYardService.cs
index 223c55d2..26bf498f 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Interface/IOpBusinessYardService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Interface/IOpBusinessYardService.cs
@@ -3,6 +3,7 @@ using DS.Module.Core.Data;
using DS.Module.SqlSugar;
using DS.WMS.Core.Info.Dtos;
using DS.WMS.Core.Op.Dtos;
+using DS.WMS.Core.Op.EDI;
using DS.WMS.Core.Op.Entity;
using System;
using System.Collections.Generic;
@@ -55,6 +56,13 @@ namespace DS.WMS.Core.Op.Interface
///
///
public DataResult BatchDelOpBusinessYard(IdModel req);
+
+ ///
+ /// 放舱通知发送
+ ///
+ ///
+ ///
+ public Task> SendLetterYard(SendShippingOrderReq req);
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/OpBusinessYardService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/OpBusinessYardService.cs
index b5543512..f4537573 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/OpBusinessYardService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/OpBusinessYardService.cs
@@ -2,6 +2,7 @@
using DS.Module.Core;
using DS.Module.Core.Data;
using DS.Module.Core.Extensions;
+using DS.Module.Core.Helpers;
using DS.Module.SqlSugar;
using DS.Module.UserModule;
using DS.WMS.Core.Code.Entity;
@@ -15,6 +16,7 @@ using Mapster;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
+using Newtonsoft.Json.Linq;
using NLog;
using Org.BouncyCastle.Ocsp;
using SqlSugar;
@@ -161,160 +163,289 @@ namespace DS.WMS.Core.Op.Method
}
-// public async Task SendLetterYard(string id)
-// {
-// var tenant = db.Queryable().FirstAsync(t => t.Id == long.Parse(user.TenantId));
-
-// var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
-// var bookingId = long.Parse(id);
-// var order = await tenantDb.Queryable().FirstAsync(x => x.Id == bookingId);
-// var userInfo = await tenantDb.Queryable().FirstAsync(u => u.Id == order.CreateBy);
-
-
-// var letterYard = await tenantDb.Queryable().FirstAsync(x => x.BusinessId == bookingId);
-// if (letterYard.IsNull())
-// {
-// return await Task.FromResult(DataResult.Failed("放舱信息未找到,请先保存数据"));
-// }
-
-// if (string.IsNullOrEmpty(letterYard.ToAttnEmail))
-// {
-// return await Task.FromResult(DataResult.Failed("ATTN MAIL未正确填写"));
-// }
-
-// if (string.IsNullOrEmpty(letterYard.FromEmail))
-// {
-// return await Task.FromResult(DataResult.Failed("FROM MAIL未正确填写"));
-// }
-
-// var mailAcc = await tenantDb.Queryable().FirstAsync(x => x.CreateBy == long.Parse(user.UserId) && x.MailAccount == letterYard.FromEmail && x.SmtpPort > 0 && x.SmtpServer != null && x.SmtpServer != "");
-// if (mailAcc == null)
-// {
-// return await Task.FromResult(DataResult.Failed("用户邮箱未设置或smtp未正确配置"));
-// }
-
-// var orderUrl = await tenantDb.Queryable().FirstAsync(u => u.BusinessId == bookingId);
-// //if (orderUrl == null)
-// //{
-// // throw Oops.Bah("未生成链接信息,请重新保存数据");
-// //}
-
-// #region 保存放舱文件,并挂载到订舱附件
-// var printTemplate = await db.Queryable().FirstAsync(t => t.TemplateCode == "release_the_cabin");
-// if (printTemplate.IsNull())
-// {
-// return await Task.FromResult(DataResult.Failed("打印模板代码[release_the_cabin]未设置"));
-// }
-
-// var bs = await GenPrintFile(bookingId, printTemplate);
-
-// var basePath = AppSetting.app(new string[] { "FileSettings", "BasePath" });
-// var relativePath = AppSetting.app(new string[] { "FileSettings", "RelativePath" });
-// var dirAbs = string.Empty;
-// var fileRelaPath = string.Empty;
-// var fileAbsPath = string.Empty;
-// var fileSaveName = $"放舱通知_{order.MBLNO}_{DateTime.Now.Ticks}.pdf"; // 文件原始名称
-// if (string.IsNullOrEmpty(basePath))
-// {
-// dirAbs = Path.Combine(_environment.WebRootPath, relativePath);
-// }
-// else
-// {
-// dirAbs = Path.Combine(basePath, relativePath);
-// }
-
-// if (!Directory.Exists(dirAbs))
-// Directory.CreateDirectory(dirAbs);
-
-// fileRelaPath = Path.Combine(relativePath, fileSaveName).ToLower();
-// fileAbsPath = Path.Combine(dirAbs, fileSaveName).ToLower();
-
-// File.WriteAllBytes(fileAbsPath, bs);
-
-// //挂载附件
-// var bookFile = new OpFile
-// {
-// FileName = fileSaveName,
-// FilePath = fileRelaPath,
-// TypeCode = "ruhuotongzhi",
-// TypeName = ".pdf",
-// LinkId = order.Id,
-// };
-// await tenantDb.Insertable(bookFile).ExecuteCommandAsync();
-// #endregion
-
-// //货运动态
-// var bookingStatusLog = new BookingStatusLog()
-// {
-// BusinessId = bookingId,
-// Status = $"放舱给客户",
-// Group = "ship",
-// OpTime = DateTime.Now,
-// MBLNO = order.MBLNO
-// };
-// await tenantDb.Insertable(bookingStatusLog).ExecuteCommandAsync();
-
-// //订舱状态
-// await seaComService.SaveBookingStatus(bookingId, "sta_letter_yard", "放舱");
-
-// #region 发送邮件
-
-// var carrCode = seaComService.GetCarrierCode(order.CarrierId, tenantDb);
-// var mailSubject = $"放舱信息:{order.MBLNO}/{carrCode}/{order.Vessel}/{order.Voyno}/PO:{order.CustomerNo}/{userInfo.TenantName}";
-
-// var extContent = string.Empty;
-// if (order.CargoId == "R") //冻柜
-// {
-// extContent = $"温度:{order.TemperatureSet}{order.TemperatureUnit}
通风:{order.ReeferQuantity}
湿度:{order.Humidity}
";
-// }
-// else if (order.CargoId == "D") //危险品
-// {
-// extContent = $"危险品等级:{order.DangerClass}
危险品编号:{order.DangerNo}
";
-// }
-
-// var linkContent = string.Empty;
-// if (orderUrl != null)
-// {
-// linkContent = $@"提箱小票链接:{orderUrl.UrlTxxp}
-//提交VGM链接:{orderUrl.UrlVgm}
";
-// }
-
-// var mailContent = $@"TO:{order.CustomerName}贵司委托我司代理订舱出口的货物信息如下,详情请见附件,谢谢!
-//提单号:{order.MBLNO}
-//船名航次:{order.Vessel}/{order.Voyno}
-//目的港:{order.DischargePort}
-//预计船期:{(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}
-//{linkContent}
-//
-// 温馨提示:
-// 如果分票报关,请回箱前通知场站及我司。
-// 开船及截港时间以码头具体计划为准。
-// 若贵司自输VGM,请不要通过VGM链接提交数据,否则我司收取相关VGM申报费用。
-//
-// 订舱代理联系人:{user.UserName}
-// 电话:{userInfo.Tel} 手机:{userInfo.Phone}
-// 邮箱:{userInfo.Email}
-//
";
-
-// var sendResult = await MailSendHelper.SendMail(mailAcc, mailSubject, mailContent, letterYard.ToAttnEmail, new KeyValuePair($"放舱通知_{order.MBLNO}.pdf", bs));
-// if (!sendResult.Key)
-// {
-// _logger.Error($"放舱邮件发送失败:从{mailAcc.MailAccount}到{letterYard.ToAttnEmail},主题 {mailSubject}");
-// return await Task.FromResult(DataResult.Failed($"邮件发送失败:{sendResult.Value}"));
-// }
-// #endregion
-
-// //设置货物状态-放舱
-// await seaComService.SetGoodsStatus("YFC", bookingId, tenantDb);
-// return await Task.FromResult(DataResult.Successed("发送成功"));
-
-// }
+ public async Task> SendLetterYard(SendShippingOrderReq req)
+ {
+ var tenant = db.Queryable().FirstAsync(t => t.Id == long.Parse(user.TenantId));
+
+ var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
+ var bookingId = req.BookingId;
+ var letterYard = await tenantDb.Queryable().FirstAsync(x => x.BusinessId == bookingId);
+ if (letterYard.IsNull())
+ {
+ return await Task.FromResult(DataResult.Failed("放舱信息未找到,请先保存数据"));
+ }
+
+ if (string.IsNullOrEmpty(letterYard.ToAttnEmail))
+ {
+ return await Task.FromResult(DataResult.Failed("ATTN MAIL未正确填写"));
+ }
+
+ if (string.IsNullOrEmpty(letterYard.FromEmail))
+ {
+ return await Task.FromResult(DataResult.Failed("FROM MAIL未正确填写"));
+ }
+
+ var order = await tenantDb.Queryable().FirstAsync(x => x.Id == bookingId);
+ var userMail = await tenantDb.Queryable().FirstAsync(x => x.CreateBy == long.Parse(user.UserId));
+ if (userMail == null)
+ {
+ return await Task.FromResult(DataResult.Failed("未配置发件邮箱"));
+ }
+
+ if (string.IsNullOrEmpty(userMail.SmtpServer) || userMail.SmtpPort == 25)
+ {
+ return await Task.FromResult(DataResult.Failed("请正确配置发件邮箱,且发件不能使用25端口"));
+ }
+
+ var emailUrl = db.Queryable().Filter(null, true).Where(x => x.Code == "email_api_url" && x.TenantId == 1288018625843826688).First().Value;
+
+ if (emailUrl == null)
+ {
+ return await Task.FromResult(DataResult.Failed("系统参数未配置email_api_url 请联系管理员"));
+ }
+
+ //处理附件
+ var attPostArr = new List();
+ foreach (var file in req.FileList)
+ {
+ var basePath = AppSetting.app(new string[] { "FileSettings", "BasePath" });
+ var relativePath = AppSetting.app(new string[] { "FileSettings", "RelativePath" });
+ var dirAbs = string.Empty;
+ var fileRelaPath = string.Empty;
+ var fileAbsPath = string.Empty;
+ if (string.IsNullOrEmpty(basePath))
+ {
+ dirAbs = Path.Combine(_environment.WebRootPath, relativePath);
+ }
+ else
+ {
+ dirAbs = Path.Combine(basePath, relativePath);
+ }
+ var fileFullName = Path.Combine(dirAbs, file);
+ //fileFullName = fileFullName.Replace(".OpApi", ".MainApi");
+ fileFullName = fileFullName.Replace("op-api", "main-api");
+ var fileSaveName = $"放舱通知_{order.MBLNO}_{DateTime.Now.Ticks}.pdf"; // 文件原始名称
+ _logger.Info($"发送放舱附件路径:{fileFullName}");
+ if (!File.Exists(fileFullName))
+ {
+ return await Task.FromResult(DataResult.Failed("附件不存在,请检查"));
+ }
+
+ attPostArr.Add(new
+ {
+ AttachName = Path.GetFileName(file),
+ AttachContent = Convert.ToBase64String(File.ReadAllBytes(fileFullName))
+ });
+
+ //挂载附件
+ var bookFile = new OpFile
+ {
+ FileName = fileSaveName,
+ FilePath = fileRelaPath,
+ TypeCode = "ruhuotongzhi",
+ TypeName = ".pdf",
+ LinkId = order.Id,
+ };
+ await tenantDb.Insertable(bookFile).ExecuteCommandAsync();
+
+ }
+
+ //货运动态
+ var bookingStatusLog = new BookingStatusLog()
+ {
+ BusinessId = bookingId,
+ Status = $"放舱给客户",
+ Group = "ship",
+ OpTime = DateTime.Now,
+ MBLNO = order.MBLNO
+ };
+ await tenantDb.Insertable(bookingStatusLog).ExecuteCommandAsync();
+
+ //订舱状态
+ await seaComService.SaveBookingStatus(bookingId, "sta_letter_yard", "放舱");
+
+ var mailJson = new dynamic[]{
+ new
+ {
+ SendTo = req.SendTo,
+ Title = req.Title,
+ Body = req.Body,
+ CCTo= req.CCTo,
+ SmtpConfig = "",
+ Account=userMail.MailAccount,
+ Password=userMail.Password,
+ Server=userMail.SmtpServer,
+ Port=userMail.SmtpPort,
+ UseSSL=userMail.SmtpSSL,
+ Attaches=attPostArr
+ }
+ };
+ var mailStr = mailJson.ToJsonString();
+
+ _logger.Info($"准备发送托书邮件,订舱ID:{req.BookingId},邮箱:{userMail.MailAccount}");
+
+ var rtn = RequestHelper.Post(mailStr, emailUrl);
+
+ _logger.Info($"发送托书邮件返回:{rtn}。订舱ID:{req.BookingId},邮箱:{userMail.MailAccount}");
+ var jRtn = JObject.Parse(rtn);
+ if (!jRtn.GetBooleanValue("Success"))
+ {
+ //throw Oops.Bah(jRtn.GetStringValue("Message"));
+ return await Task.FromResult(DataResult.Failed(jRtn.GetStringValue("Message")));
+ }
+ //return await Task.FromResult(DataResult.Success(jRtn.GetStringValue("Message")));
+ //设置货物状态-放舱
+ await seaComService.SetGoodsStatus("YFC", bookingId, tenantDb);
+ return await Task.FromResult(DataResult.Success("发送成功"));
+ // var bookingId = long.Parse(id);
+ // var order = await tenantDb.Queryable().FirstAsync(x => x.Id == bookingId);
+ // var userInfo = await tenantDb.Queryable().FirstAsync(u => u.Id == order.CreateBy);
+
+
+ // var letterYard = await tenantDb.Queryable().FirstAsync(x => x.BusinessId == bookingId);
+ // if (letterYard.IsNull())
+ // {
+ // return await Task.FromResult(DataResult.Failed("放舱信息未找到,请先保存数据"));
+ // }
+
+ // if (string.IsNullOrEmpty(letterYard.ToAttnEmail))
+ // {
+ // return await Task.FromResult(DataResult.Failed("ATTN MAIL未正确填写"));
+ // }
+
+ // if (string.IsNullOrEmpty(letterYard.FromEmail))
+ // {
+ // return await Task.FromResult(DataResult.Failed("FROM MAIL未正确填写"));
+ // }
+
+ // var mailAcc = await tenantDb.Queryable().FirstAsync(x => x.CreateBy == long.Parse(user.UserId) && x.MailAccount == letterYard.FromEmail && x.SmtpPort > 0 && x.SmtpServer != null && x.SmtpServer != "");
+ // if (mailAcc == null)
+ // {
+ // return await Task.FromResult(DataResult.Failed("用户邮箱未设置或smtp未正确配置"));
+ // }
+
+ // var orderUrl = await tenantDb.Queryable().FirstAsync(u => u.BusinessId == bookingId);
+ // //if (orderUrl == null)
+ // //{
+ // // throw Oops.Bah("未生成链接信息,请重新保存数据");
+ // //}
+
+ // #region 保存放舱文件,并挂载到订舱附件
+ // var printTemplate = await db.Queryable().FirstAsync(t => t.TemplateCode == "release_the_cabin");
+ // if (printTemplate.IsNull())
+ // {
+ // return await Task.FromResult(DataResult.Failed("打印模板代码[release_the_cabin]未设置"));
+ // }
+
+ // //var bs = await GenPrintFile(bookingId, printTemplate);
+
+ // var basePath = AppSetting.app(new string[] { "FileSettings", "BasePath" });
+ // var relativePath = AppSetting.app(new string[] { "FileSettings", "RelativePath" });
+ // var dirAbs = string.Empty;
+ // var fileRelaPath = string.Empty;
+ // var fileAbsPath = string.Empty;
+ // var fileSaveName = $"放舱通知_{order.MBLNO}_{DateTime.Now.Ticks}.pdf"; // 文件原始名称
+ // if (string.IsNullOrEmpty(basePath))
+ // {
+ // dirAbs = Path.Combine(_environment.WebRootPath, relativePath);
+ // }
+ // else
+ // {
+ // dirAbs = Path.Combine(basePath, relativePath);
+ // }
+
+ // if (!Directory.Exists(dirAbs))
+ // Directory.CreateDirectory(dirAbs);
+
+ // fileRelaPath = Path.Combine(relativePath, fileSaveName).ToLower();
+ // fileAbsPath = Path.Combine(dirAbs, fileSaveName).ToLower();
+
+ // File.WriteAllBytes(fileAbsPath, bs);
+
+ // //挂载附件
+ // var bookFile = new OpFile
+ // {
+ // FileName = fileSaveName,
+ // FilePath = fileRelaPath,
+ // TypeCode = "ruhuotongzhi",
+ // TypeName = ".pdf",
+ // LinkId = order.Id,
+ // };
+ // await tenantDb.Insertable(bookFile).ExecuteCommandAsync();
+ // #endregion
+
+ // //货运动态
+ // var bookingStatusLog = new BookingStatusLog()
+ // {
+ // BusinessId = bookingId,
+ // Status = $"放舱给客户",
+ // Group = "ship",
+ // OpTime = DateTime.Now,
+ // MBLNO = order.MBLNO
+ // };
+ // await tenantDb.Insertable(bookingStatusLog).ExecuteCommandAsync();
+
+ // //订舱状态
+ // await seaComService.SaveBookingStatus(bookingId, "sta_letter_yard", "放舱");
+
+ // #region 发送邮件
+
+ // var carrCode = seaComService.GetCarrierCode(order.CarrierId, tenantDb);
+ // var mailSubject = $"放舱信息:{order.MBLNO}/{carrCode}/{order.Vessel}/{order.Voyno}/PO:{order.CustomerNo}/{userInfo.TenantName}";
+
+ // var extContent = string.Empty;
+ // if (order.CargoId == "R") //冻柜
+ // {
+ // extContent = $"温度:{order.TemperatureSet}{order.TemperatureUnit}
通风:{order.ReeferQuantity}
湿度:{order.Humidity}
";
+ // }
+ // else if (order.CargoId == "D") //危险品
+ // {
+ // extContent = $"危险品等级:{order.DangerClass}
危险品编号:{order.DangerNo}
";
+ // }
+
+ // var linkContent = string.Empty;
+ // if (orderUrl != null)
+ // {
+ // linkContent = $@"提箱小票链接:{orderUrl.UrlTxxp}
+ //提交VGM链接:{orderUrl.UrlVgm}
";
+ // }
+
+ // var mailContent = $@"TO:{order.CustomerName}贵司委托我司代理订舱出口的货物信息如下,详情请见附件,谢谢!
+ //提单号:{order.MBLNO}
+ //船名航次:{order.Vessel}/{order.Voyno}
+ //目的港:{order.DischargePort}
+ //预计船期:{(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}
+ //{linkContent}
+ //
+ // 温馨提示:
+ // 如果分票报关,请回箱前通知场站及我司。
+ // 开船及截港时间以码头具体计划为准。
+ // 若贵司自输VGM,请不要通过VGM链接提交数据,否则我司收取相关VGM申报费用。
+ //
+ // 订舱代理联系人:{user.UserName}
+ // 电话:{userInfo.Tel} 手机:{userInfo.Phone}
+ // 邮箱:{userInfo.Email}
+ //
";
+
+ // var sendResult = await MailSendHelper.SendMail(mailAcc, mailSubject, mailContent, letterYard.ToAttnEmail, new KeyValuePair($"放舱通知_{order.MBLNO}.pdf", bs));
+ // if (!sendResult.Key)
+ // {
+ // _logger.Error($"放舱邮件发送失败:从{mailAcc.MailAccount}到{letterYard.ToAttnEmail},主题 {mailSubject}");
+ // return await Task.FromResult(DataResult.Failed($"邮件发送失败:{sendResult.Value}"));
+ // }
+ // #endregion
+
+ // //设置货物状态-放舱
+ // await seaComService.SetGoodsStatus("YFC", bookingId, tenantDb);
+ // return await Task.FromResult(DataResult.Successed("发送成功"));
+
+ }
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
index c5b0ad03..ad912ad0 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
@@ -448,8 +448,8 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
protected virtual async Task EnsureModuleAuthorized()
{
long tid = long.Parse(User.TenantId);
- var authStr = await Db.Queryable().ClearFilter(typeof(ITenantId)).Where(x => x.PermissionId == PERMISSION_ID && x.TenantId == tid &&
- SqlFunc.Subqueryable().Where(spt => spt.PermissionId == x.PermissionId && spt.TenantId == tid).Any())
+ var authStr = await Db.Queryable().Where(x => x.PermissionId == PERMISSION_ID && x.TenantId == tid &&
+ SqlFunc.Subqueryable().Where(spt => spt.PermissionId == x.PermissionId).Any())
.Select(x => x.AuthNum).FirstAsync();
if (authStr.IsNullOrEmpty())
return false;
diff --git a/ds-wms-service/DS.WMS.OpApi/Controllers/OpBusinessYardController.cs b/ds-wms-service/DS.WMS.OpApi/Controllers/OpBusinessYardController.cs
index 1fb07237..f6ed6d05 100644
--- a/ds-wms-service/DS.WMS.OpApi/Controllers/OpBusinessYardController.cs
+++ b/ds-wms-service/DS.WMS.OpApi/Controllers/OpBusinessYardController.cs
@@ -3,6 +3,7 @@ using DS.Module.Core.Data;
using DS.WMS.Core.Code.Dtos;
using DS.WMS.Core.Code.Interface;
using DS.WMS.Core.Op.Dtos;
+using DS.WMS.Core.Op.EDI;
using DS.WMS.Core.Op.Interface;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
@@ -100,6 +101,17 @@ public class OpBusinessYardController : ApiController
}
-
+ ///
+ /// 发送放舱通知
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("SendLetterYard")]
+ public async Task> SendLetterYard([FromBody] SendShippingOrderReq req)
+ {
+ var res = await _invokeService.SendLetterYard(req);
+ return res;
+ }
}
\ No newline at end of file
diff --git a/ds-wms-service/DS.WMS.PrintApi/Service/OpenPrintService.cs b/ds-wms-service/DS.WMS.PrintApi/Service/OpenPrintService.cs
index b46d80e5..d94d65c8 100644
--- a/ds-wms-service/DS.WMS.PrintApi/Service/OpenPrintService.cs
+++ b/ds-wms-service/DS.WMS.PrintApi/Service/OpenPrintService.cs
@@ -426,6 +426,21 @@ namespace DS.WMS.PrintApi.Service
saveFile = Path.Combine(savePath, printName);
PDFExport pdfExport = new PDFExport();
pdfExport.Export(report, saveFile);
+
+ #region 处理托书挂载附件
+
+ if (template.TemplateCode == "bill_of_lading" || template.TemplateCode == "release_the_cabin")
+ {
+ System.IO.FileStream file = new System.IO.FileStream(saveFile, FileMode.Open, FileAccess.Read);
+ var movePath = Path.Combine(AppSetting.Configuration["FileSettings:MovePath"], printName);
+ using (var fileStream = File.Create(movePath))
+ {
+ await file.CopyToAsync(fileStream);
+ }
+
+ file.Close();
+ }
+ #endregion
}
else if (req.PrintType == "2")
{