jianghaiqing 2 months ago
commit 80cc59cd60

@ -39,7 +39,7 @@ public class SaasDbService : ISaasDbService
/// <returns></returns>
public ISqlSugarClient GetBizDb()
{
var tenantId = user.GetTenantId().ToString();
var tenantId = user.TenantId;
if (!db.IsAnyConnection(tenantId))
{

@ -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")
{

@ -56,7 +56,7 @@ public static class SqlsugarInstall
{
dbList.Add(item);
}
var _serviceProvider =services.GetService<IServiceProvider>();
var _serviceProvider = services.GetService<IServiceProvider>();
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<IUser>();
//单例参数配置,所有上下文生效
@ -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<ITenantId>(m => m.TenantId == user.GetTenantId());
dbProvider.QueryFilter.AddTableFilter<ITenantId>(m => m.TenantId == long.Parse(user.TenantId));
//全局过滤机构Id
dbProvider.QueryFilter.AddTableFilter<IOrgId>(m => m.OrgId == user.OrgId);
//全局软删除过滤

@ -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
/// 是否为公司账号
/// </summary>
public bool IsCompany { get; set; } = false;
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人名称
/// </summary>
public string CreateUserName { get; set; }
}
}

@ -42,7 +42,7 @@ public class ClientShipperReq
/// <summary>
/// Desc:类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)
/// </summary>
public int ShipperType { get; set; }
public string ShipperType { get; set; }
/// <summary>
/// 是否公共标识

@ -40,7 +40,7 @@ public class ClientShipperRes
/// <summary>
/// Desc:类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)
/// </summary>
public int ShipperType { get; set; }
public string ShipperType { get; set; }
/// <summary>
/// 是否公共标识

@ -36,8 +36,8 @@ public class InfoClientShipper : BaseModelV2<long>
/// <summary>
/// Desc:类型 下拉选择(Shipper-1,Consinee-2,Notifypaty-3,Agent-4)
/// </summary>
[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; }
/// <summary>
/// 是否公共标识

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace DS.WMS.Core.Op.EDI
{
/// <summary>
/// 发送托书Req
/// 发送海运出口邮件Req
/// </summary>
public class SendShippingOrderReq
{

@ -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
/// <param name="req"></param>
/// <returns></returns>
public DataResult BatchDelOpBusinessYard(IdModel req);
/// <summary>
/// 放舱通知发送
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public Task<DataResult<string>> SendLetterYard(SendShippingOrderReq req);
}

@ -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<DataResult> SendLetterYard(string id)
// {
// var tenant = db.Queryable<SysTenant>().FirstAsync(t => t.Id == long.Parse(user.TenantId));
// var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
// var bookingId = long.Parse(id);
// var order = await tenantDb.Queryable<SeaExport>().FirstAsync(x => x.Id == bookingId);
// var userInfo = await tenantDb.Queryable<SysUser>().FirstAsync(u => u.Id == order.CreateBy);
// var letterYard = await tenantDb.Queryable<BusinessYard>().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<CodeUserEmail>().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<BookingOrderUrl>().FirstAsync(u => u.BusinessId == bookingId);
// //if (orderUrl == null)
// //{
// // throw Oops.Bah("未生成链接信息,请重新保存数据");
// //}
// #region 保存放舱文件,并挂载到订舱附件
// var printTemplate = await db.Queryable<SysPrintTemplate>().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} <br/>通风:{order.ReeferQuantity} <br/>湿度:{order.Humidity}<br/>";
// }
// else if (order.CargoId == "D") //危险品
// {
// extContent = $"危险品等级:{order.DangerClass} <br/>危险品编号:{order.DangerNo}<br/>";
// }
// var linkContent = string.Empty;
// if (orderUrl != null)
// {
// linkContent = $@"提箱小票链接:<a href='{orderUrl.UrlTxxp}'>{orderUrl.UrlTxxp}</a><br/>
//提交VGM链接<a href='{orderUrl.UrlVgm}'>{orderUrl.UrlVgm}</a><br/>";
// }
// var mailContent = $@"TO:{order.CustomerName}贵司委托我司代理订舱出口的货物信息如下,详情请见附件,谢谢!<br/>
//提单号:{order.MBLNO}<br/>
//船名航次:{order.Vessel}/{order.Voyno}<br/>
//目的港:{order.DischargePort}<br/>
//预计船期:{(order.ETD.HasValue ? order.ETD.Value.Date.ToString("yyyy-MM-dd") : "")}<br/>
//场站:{order.Yard}<br/>
//船代:{order.ShipAgency}<br/>
//预计截港时间:{order.ClosingDate}<br/>
//预计截单时间:{order.CloseDocDate}<br/>
//截VGM时间{order.CloseVgmDate}<br/>
//{extContent}
//备注:{order.YardRemark}<br/>
//{linkContent}
//<br/>
// <span style='color:red;'>温馨提示:</span><br/>
// <span style='color:red;'>如果分票报关,请回箱前通知场站及我司。</span><br/>
// <span style='color:red;'>开船及截港时间以码头具体计划为准。</span><br/>
// <span style='color:red;'>若贵司自输VGM请不要通过VGM链接提交数据否则我司收取相关VGM申报费用。</span><br/>
//<br/>
// 订舱代理联系人:{user.UserName}<br/>
// 电话:{userInfo.Tel} 手机:{userInfo.Phone}<br/>
// 邮箱:{userInfo.Email}
//<br/>";
// var sendResult = await MailSendHelper.SendMail(mailAcc, mailSubject, mailContent, letterYard.ToAttnEmail, new KeyValuePair<string, byte[]>($"放舱通知_{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<DataResult<string>> SendLetterYard(SendShippingOrderReq req)
{
var tenant = db.Queryable<SysTenant>().FirstAsync(t => t.Id == long.Parse(user.TenantId));
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
var bookingId = req.BookingId;
var letterYard = await tenantDb.Queryable<BusinessYard>().FirstAsync(x => x.BusinessId == bookingId);
if (letterYard.IsNull())
{
return await Task.FromResult(DataResult<string>.Failed("放舱信息未找到,请先保存数据"));
}
if (string.IsNullOrEmpty(letterYard.ToAttnEmail))
{
return await Task.FromResult(DataResult<string>.Failed("ATTN MAIL未正确填写"));
}
if (string.IsNullOrEmpty(letterYard.FromEmail))
{
return await Task.FromResult(DataResult<string>.Failed("FROM MAIL未正确填写"));
}
var order = await tenantDb.Queryable<SeaExport>().FirstAsync(x => x.Id == bookingId);
var userMail = await tenantDb.Queryable<CodeUserEmail>().FirstAsync(x => x.CreateBy == long.Parse(user.UserId));
if (userMail == null)
{
return await Task.FromResult(DataResult<string>.Failed("未配置发件邮箱"));
}
if (string.IsNullOrEmpty(userMail.SmtpServer) || userMail.SmtpPort == 25)
{
return await Task.FromResult(DataResult<string>.Failed("请正确配置发件邮箱且发件不能使用25端口"));
}
var emailUrl = db.Queryable<SysConfig>().Filter(null, true).Where(x => x.Code == "email_api_url" && x.TenantId == 1288018625843826688).First().Value;
if (emailUrl == null)
{
return await Task.FromResult(DataResult<string>.Failed("系统参数未配置email_api_url 请联系管理员"));
}
//处理附件
var attPostArr = new List<dynamic>();
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<string>.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<string>.Failed(jRtn.GetStringValue("Message")));
}
//return await Task.FromResult(DataResult<string>.Success(jRtn.GetStringValue("Message")));
//设置货物状态-放舱
await seaComService.SetGoodsStatus("YFC", bookingId, tenantDb);
return await Task.FromResult(DataResult<string>.Success("发送成功"));
// var bookingId = long.Parse(id);
// var order = await tenantDb.Queryable<SeaExport>().FirstAsync(x => x.Id == bookingId);
// var userInfo = await tenantDb.Queryable<SysUser>().FirstAsync(u => u.Id == order.CreateBy);
// var letterYard = await tenantDb.Queryable<BusinessYard>().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<CodeUserEmail>().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<BookingOrderUrl>().FirstAsync(u => u.BusinessId == bookingId);
// //if (orderUrl == null)
// //{
// // throw Oops.Bah("未生成链接信息,请重新保存数据");
// //}
// #region 保存放舱文件,并挂载到订舱附件
// var printTemplate = await db.Queryable<SysPrintTemplate>().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} <br/>通风:{order.ReeferQuantity} <br/>湿度:{order.Humidity}<br/>";
// }
// else if (order.CargoId == "D") //危险品
// {
// extContent = $"危险品等级:{order.DangerClass} <br/>危险品编号:{order.DangerNo}<br/>";
// }
// var linkContent = string.Empty;
// if (orderUrl != null)
// {
// linkContent = $@"提箱小票链接:<a href='{orderUrl.UrlTxxp}'>{orderUrl.UrlTxxp}</a><br/>
//提交VGM链接<a href='{orderUrl.UrlVgm}'>{orderUrl.UrlVgm}</a><br/>";
// }
// var mailContent = $@"TO:{order.CustomerName}贵司委托我司代理订舱出口的货物信息如下,详情请见附件,谢谢!<br/>
//提单号:{order.MBLNO}<br/>
//船名航次:{order.Vessel}/{order.Voyno}<br/>
//目的港:{order.DischargePort}<br/>
//预计船期:{(order.ETD.HasValue ? order.ETD.Value.Date.ToString("yyyy-MM-dd") : "")}<br/>
//场站:{order.Yard}<br/>
//船代:{order.ShipAgency}<br/>
//预计截港时间:{order.ClosingDate}<br/>
//预计截单时间:{order.CloseDocDate}<br/>
//截VGM时间{order.CloseVgmDate}<br/>
//{extContent}
//备注:{order.YardRemark}<br/>
//{linkContent}
//<br/>
// <span style='color:red;'>温馨提示:</span><br/>
// <span style='color:red;'>如果分票报关,请回箱前通知场站及我司。</span><br/>
// <span style='color:red;'>开船及截港时间以码头具体计划为准。</span><br/>
// <span style='color:red;'>若贵司自输VGM请不要通过VGM链接提交数据否则我司收取相关VGM申报费用。</span><br/>
//<br/>
// 订舱代理联系人:{user.UserName}<br/>
// 电话:{userInfo.Tel} 手机:{userInfo.Phone}<br/>
// 邮箱:{userInfo.Email}
//<br/>";
// var sendResult = await MailSendHelper.SendMail(mailAcc, mailSubject, mailContent, letterYard.ToAttnEmail, new KeyValuePair<string, byte[]>($"放舱通知_{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("发送成功"));
}
}
}

@ -448,8 +448,8 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
protected virtual async Task<bool> EnsureModuleAuthorized()
{
long tid = long.Parse(User.TenantId);
var authStr = await Db.Queryable<SysTenantPermissionAuth>().ClearFilter(typeof(ITenantId)).Where(x => x.PermissionId == PERMISSION_ID && x.TenantId == tid &&
SqlFunc.Subqueryable<SysPermissionTenant>().Where(spt => spt.PermissionId == x.PermissionId && spt.TenantId == tid).Any())
var authStr = await Db.Queryable<SysTenantPermissionAuth>().Where(x => x.PermissionId == PERMISSION_ID && x.TenantId == tid &&
SqlFunc.Subqueryable<SysPermissionTenant>().Where(spt => spt.PermissionId == x.PermissionId).Any())
.Select(x => x.AuthNum).FirstAsync();
if (authStr.IsNullOrEmpty())
return false;

@ -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
}
/// <summary>
/// 发送放舱通知
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[HttpPost]
[Route("SendLetterYard")]
public async Task<DataResult<string>> SendLetterYard([FromBody] SendShippingOrderReq req)
{
var res = await _invokeService.SendLetterYard(req);
return res;
}
}

@ -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")
{

Loading…
Cancel
Save