diff --git a/D7DJYMQ/App.config b/D7DJYMQ/App.config new file mode 100644 index 00000000..dc6cc4e8 --- /dev/null +++ b/D7DJYMQ/App.config @@ -0,0 +1,81 @@ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/D7DJYMQ/D7DJYMQ.csproj b/D7DJYMQ/D7DJYMQ.csproj new file mode 100644 index 00000000..be4e808d --- /dev/null +++ b/D7DJYMQ/D7DJYMQ.csproj @@ -0,0 +1,171 @@ + + + + + + Debug + AnyCPU + {B70AD9DA-65F3-4E4D-BA22-928100F9292B} + Exe + D7DJYMQ + D7DJYMQ + v4.7.2 + 512 + true + true + + + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 1 + 1.0.0.%2a + false + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + DC505909EE57A206168428C0B78FC9DFF308697E + + + DSWeb.DJYMQ_TemporaryKey.pfx + + + true + + + true + + + + ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll + + + ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll + + + ..\packages\log4net.1.2.10\lib\2.0\log4net.dll + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Quartz.2.6.2\lib\net40\Quartz.dll + + + ..\packages\RabbitMQ.Client.6.2.2\lib\net461\RabbitMQ.Client.dll + + + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + + + + ..\packages\System.Threading.Channels.4.7.1\lib\net461\System.Threading.Channels.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + + + + + + + + + ..\packages\Topshelf.4.3.0\lib\net452\Topshelf.dll + + + + + + + + + + + + PreserveNewest + + + Designer + + + PreserveNewest + + + + + + + + + + False + Microsoft .NET Framework 4.7.2 %28x86 和 x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + \ No newline at end of file diff --git a/D7DJYMQ/D7DJYMQ.csproj.user b/D7DJYMQ/D7DJYMQ.csproj.user new file mode 100644 index 00000000..c5e4b964 --- /dev/null +++ b/D7DJYMQ/D7DJYMQ.csproj.user @@ -0,0 +1,16 @@ + + + + publish\ + + + + + + zh-CN + false + + + false + + \ No newline at end of file diff --git a/D7DJYMQ/DS7Date.cs b/D7DJYMQ/DS7Date.cs new file mode 100644 index 00000000..09b0fda2 --- /dev/null +++ b/D7DJYMQ/DS7Date.cs @@ -0,0 +1,222 @@ +using log4net; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Data.SqlClient; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Topshelf; + +namespace D7DJYMQ +{ + public class DS7Date : ServiceControl + { + private static string MQURL = ConfigurationManager.AppSettings["DJYMQURL"]; + private static string connStr = ConfigurationManager.AppSettings["ConnectionString"]; + private static string virtualhost = ConfigurationManager.AppSettings["virtualhost"]; + + + private static string ExchangeName = ConfigurationManager.AppSettings["MQExchangeName"]; + private static string QueueName = ConfigurationManager.AppSettings["MQQueueName"]; + + private static string MAILSENDACCOUNT = ConfigurationManager.AppSettings["MAILSENDACCOUNT"]; + private static string MAILSENDPASSWORD = ConfigurationManager.AppSettings["MAILSENDPASSWORD"]; + private static string MAILSENDSERVICE = ConfigurationManager.AppSettings["MAILSENDSERVICE"]; + private static string MAILSENDPORT = ConfigurationManager.AppSettings["MAILSENDPORT"]; + private static string MAILISSSL = ConfigurationManager.AppSettings["MAILISSSL"]; + private static string MAILTITLE = ConfigurationManager.AppSettings["MAILTITLE"]; + private static string BSSQL = ConfigurationManager.AppSettings["BSSQL"]; + + private static IConnection mqConn; + private static ILog logger = LogManager.GetLogger("DS7Date"); + + public bool Start(HostControl hostControl) + { + logger.Debug($"启动接收大简云订舱数据回推"); + var CompanyQueueName = QueueName; + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = new Uri(MQURL); + //factory.UserName = "xgs_test"; + //factory.Password = "xgs_test123"; + factory.VirtualHost = virtualhost; + + mqConn = factory.CreateConnection(); + + IModel model = mqConn.CreateModel(); + + //model.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + model.QueueDeclare(CompanyQueueName, false, false, false, null); + //model.QueueBind(CompanyQueueName, ExchangeName, QueueName); + + var consumer = new EventingBasicConsumer(model); + consumer.Received += (ch, ea) => + { + var body = ea.Body; + var strBody = Encoding.UTF8.GetString(body.ToArray()); + logger.Debug($"收到简云截单日期数据回推消息:{strBody}"); + + try + { + //回写数据 + var dateback = JsonConvert.DeserializeAnonymousType(strBody, new { vessel = string.Empty, voyage = string.Empty, ship_agency = string.Empty, cut_off_time = string.Empty, etd = string.Empty }); + + if (!string.IsNullOrEmpty(dateback.vessel) && !string.IsNullOrEmpty(dateback.voyage) && !string.IsNullOrEmpty(dateback.ship_agency) && !string.IsNullOrEmpty(dateback.cut_off_time)) + { + using (SqlConnection dbcon = new SqlConnection(connStr)) + { + dbcon.Open(); + string maildescrption = ""; + var FORWARDER = GetCustEdi(dbcon, dateback.ship_agency); + var SendMailList = new List(); + if (!string.IsNullOrEmpty(FORWARDER)) + { + var opseaelist = GetBs(dbcon, "VESSEL='" + dateback.vessel + "' AND VOYNO='" + dateback.voyage + "' and FORWARDER='" + FORWARDER + "'"); + if (opseaelist != null && opseaelist.Count != 0) + { + var opemail = ""; + foreach (var opseae in opseaelist) + { + var tastStr = $" update op_seae set CLOSEDOCDATE='{dateback.cut_off_time}' where BSNO='{opseae.BSNO}' "; + SqlCommand cmdtast = new SqlCommand(tastStr, dbcon); + cmdtast.ExecuteNonQuery(); + logger.Debug($"已更新截单日期{dateback.cut_off_time},{opseae.MBLNO},{opseae.BSNO}"); + var sendmail = SendMailList.Find(x => x.OP == opseae.OP); + if (sendmail != null) + { + sendmail.MAILDESCRIPTION = sendmail.MAILDESCRIPTION + Environment.NewLine + opseae.MBLNO; + } + else + { + var newsendmail = new SendMail(); + newsendmail.OP = opseae.OP; + newsendmail.MAIL = opseae.MAIL; + newsendmail.MAILDESCRIPTION = opseae.MBLNO; + SendMailList.Add(newsendmail); + } + + } + + } + } + else + { + logger.Debug($"{dateback.ship_agency}没有找到对应的订舱代理"); + + } + if (SendMailList != null && SendMailList.Count != 0) + { + foreach (var SendMail in SendMailList) + { + SendEmail se = new SendEmail(SendMail.MAIL, MAILSENDACCOUNT, "", "", "截港日期自动更新", SendMail.MAILDESCRIPTION, false); + + se.SetSmtp(MAILSENDACCOUNT, MAILSENDPASSWORD, MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT), false, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 + logger.Debug($"已给操作{SendMail.OP}发送邮件{SendMail.MAIL}{SendMail.MAILDESCRIPTION}"); + + + } + } + + + } + } + + } + catch (Exception ex) + { + logger.Error($"处理简云订舱数据回推时出错:" + ex.Message); + logger.Error(ex.Message); + logger.Error(ex.StackTrace); + } + }; + model.BasicConsume(CompanyQueueName, true, consumer); + return true; + } + + public bool Stop(HostControl hostControl) + { + // 结束 + logger.Debug("停止运行"); + + //StdSchedulerFactory.GetDefaultScheduler().Shutdown(); + if (mqConn != null && mqConn.IsOpen) + { + mqConn.Close(); + mqConn = null; + } + + + return true; + } + + public class MsOpSeae + { + public string BSNO { get; set; } + public string MBLNO { get; set; } + public string OP { get; set; } + public string MAIL { get; set; } + } + public class SendMail + { + public string OP { get; set; } + public string MAIL { get; set; } + + public string MAILDESCRIPTION { get; set; } + + } + static public List GetBs(SqlConnection dbcon, string constr) + { + var opseaeList = new List(); + var strSql = new StringBuilder(); + strSql.Append("select BSNO,MBLNO,OP,FORWARDER,(SELECT TOP 1 EMAIL1 FROM VW_user WHERE SHOWNAME=op_seae.OP) EMAIL from op_seae where " + constr); + strSql.Append(" ORDER BY OP "); + SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Rows.Count > 0) + { + foreach (DataRow row in table.Rows) + { + var opseae = new MsOpSeae(); + opseae.BSNO = Convert.ToString(row["BSNO"].ToString()); + opseae.MBLNO = Convert.ToString(row["MBLNO"].ToString()); + opseae.OP = Convert.ToString(row["OP"].ToString()); + opseae.MAIL = Convert.ToString(row["EMAIL"].ToString()); + opseaeList.Add(opseae); + } + } + + return opseaeList; + } + static public string GetCustEdi(SqlConnection dbcon, string constr) + { + string result = ""; + var strSql = new StringBuilder(); + strSql.Append("select CUST from code_cust_edi where EDINAME='DJY' AND EDICODE='" + constr + "'"); + SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Rows.Count > 0) + { + foreach (DataRow row in table.Rows) + { + result = Convert.ToString(row["CUST"].ToString()); + + } + } + + return result; + } + + } + + + +} diff --git a/D7DJYMQ/DS7Service.cs b/D7DJYMQ/DS7Service.cs new file mode 100644 index 00000000..683ed066 --- /dev/null +++ b/D7DJYMQ/DS7Service.cs @@ -0,0 +1,5880 @@ +using DSWeb.Common.DB; +using DSWeb.Common.Extentions; +using DSWeb.Common.Helper; +using FluentFTP.Helpers; +using ICSharpCode.SharpZipLib.BZip2; +using ICSharpCode.SharpZipLib.Zip; +using JobReqWebData; +using log4net; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Quartz; +using Quartz.Impl; +using Quartz.Util; +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration; +using System.Data; +using System.Data.Entity.Migrations; +using System.Data.SqlClient; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net.NetworkInformation; +using System.Security.Policy; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Xml.Linq; +using Topshelf; +using static DSWeb.Service.Output.DS7.DS7Service; +using static System.Data.Entity.Infrastructure.Design.Executor; + +namespace DSWeb.Service.Output.DS7 +{ + public class DS7Service : ServiceControl + { + private const string ExchangeName = "output"; + + private static ILog logger = LogManager.GetLogger("DS7Service"); + + //private const string QueuePrefixCangDan = "djy.output.cangdan.ds7."; + + //private const string QueuePrefixBaoguan = "djy.output.baoguan.ds7."; + + //private const string QueuePrefixBG = "djy.output.baoguan.bg.ds7."; + + private const string QueuePrefix_DingCang = "djy.output.dingcang.ds6."; + private const string QueuePrefix_Del = "djy.output.dingcang.ds6_delete."; + + + private const string QueuePrefix_Letter_RH = "djy.output.dingcang.ds6_fangcang."; + private const string QueuePrefix_Letter_PC = "djy.output.booktruck.ds6."; + + /// + /// 在大简云的公司ID + /// + private static string CompanyId = ConfigurationManager.AppSettings["CompanyId"].ToLower(); + //private static string Corpid = ConfigurationManager.AppSettings["Corpid"]; + //private static string DS7ConnStr = ConfigurationManager.ConnectionStrings["DongShengDB"].ConnectionString; + private static string DS6ConnStr = ConfigurationManager.ConnectionStrings["DS6DB"].ConnectionString; + private string RecMqUri = ConfigurationManager.AppSettings["ReceiveMQUri"]; + private string 消费数据 = ConfigurationManager.AppSettings["USEDATA"]; + + //private string FeeInputUserId = ConfigurationManager.AppSettings["FeeInputUserId"]; + + //private static string UserNameStr = ConfigurationManager.AppSettings["UserNameStr"]; + + private IConnection mqConn; + + //private IConnection mqConn2; + + private IConnection mqConn3; + + private IConnection mqConn4; + //费用相关配置 + //private static string FeePayName = ConfigurationManager.AppSettings["FeePayName"]; + //private static string FeePayCustomer = ConfigurationManager.AppSettings["FeePayCustomer"]; + //private static string FeePayCustomerType = ConfigurationManager.AppSettings["FeePayCustomerType"]; + //private static decimal FeePayPrice = Convert.ToDecimal(ConfigurationManager.AppSettings["FeePayPrice"]); + //private static string FeePayMyshippingName = ConfigurationManager.AppSettings["FeePayMyshippingName"]; + //private static string FeePayMyshippingCustomer = ConfigurationManager.AppSettings["FeePayMyshippingCustomer"]; + //private static decimal FeePayMyshippingPrice = Convert.ToDecimal(ConfigurationManager.AppSettings["FeePayMyshippingPrice"]); + //private static string FeeShouName = ConfigurationManager.AppSettings["FeeShouName"]; + + + private CommonDataContext dS7Data = new CommonDataContext(); + + public List usernamelist = new List(); + + + + /// + /// 压缩 + /// + /// + /// + public static string Compress(string input) + { + string result = string.Empty; + byte[] buffer = Encoding.UTF8.GetBytes(input); + using (MemoryStream outputStream = new MemoryStream()) + { + using (BZip2OutputStream zipStream = new BZip2OutputStream(outputStream)) + { + zipStream.Write(buffer, 0, buffer.Length); + zipStream.Close(); + } + return Convert.ToBase64String(outputStream.ToArray()); + } + } + /// + /// 解压缩 + /// + /// + /// + public static string Decompress(string input) + { + string result = string.Empty; + byte[] buffer = Convert.FromBase64String(input); + using (Stream inputStream = new MemoryStream(buffer)) + { + BZip2InputStream zipStream = new BZip2InputStream(inputStream); + + using (StreamReader reader = new StreamReader(zipStream, Encoding.UTF8)) + { + //输出 + result = reader.ReadToEnd(); + } + } + + return result; + } + + public bool Start(HostControl hostControl) + { + // 开始具体的业务逻辑 + logger.Debug("开始运行"); + + dS7Data.Database.Log = (x => { logger.Debug(x); }); + + //测试时为false + var 消费队列数据 = (消费数据 == "true"); + + + //if (!string.IsNullOrWhiteSpace(UserNameStr)) { + // usernamelist = UserNameStr.Split(',').ToList() ; + //} + + try + { + + + + //测试数据 + #region 测试文本 + + /* 测试时前面增加两个注释号 + var testjson = @"[{""Id"":476086087065670,""BSNO"":null,""BSSTATUS"":null,""BSSTATUSNAME"":""已派车"",""BSDATE"":""2023-10-27T00:00:00"",""MBLNO"":""177RZHZHQ2432VRF"",""HBLNO"":""CMTA2023D502"",""BOOKINGNO"":""476086087065669"",""CONTRACTNO"":""没有0"",""SERVICECONTRACTNO"":null,""SHIPPERID"":null,""CONSIGNEEID"":null,""NOTIFYPARTYID"":null,""SHIPPER"":""CIMC WETRANS LEADING FRESH LOGISTICS \nTECHNOLOGY (SHANDONG) CO.,LTD\n1-47 NO. 44 JIAHU ROAD HETOUDIAN TOWN \nLAIXI QINGDAO SHANDONG CHINA 266621\n"",""CONSIGNEE"":""REJOICE LOGISTICS (CANADA) INC.\n#260-11780 HAMMERSMITH WAY,\nRICHMOND, B.C. CANADA V7A 5E9\nTEL : 604-204-2668\nFAX : 604-204-2568\nE-MAIL :INFO@REJOICELOGISTICS.CA"",""NOTIFYPARTY"":""REJOICE LOGISTICS (CANADA) INC.\n#260-11780 HAMMERSMITH WAY,\nRICHMOND, B.C. CANADA V7A 5E9\nTEL : 604-204-2668\nFAX : 604-204-2568\nE-MAIL :INFO@REJOICELOGISTICS.CA"",""NOTIFYPARTY2"":"""",""YARDID"":""GLCZ"",""YARD"":""港陆场站"",""VESSELID"":null,""VESSEL"":""MSC IVANA"",""VOYNO"":""UK343A"",""VOYNOINNER"":""UK343A"",""ETD"":""2023-11-04T00:00:00"",""ATD"":null,""CLOSINGDATE"":null,""CLOSEDOCDATE"":null,""CLOSEVGMDATE"":null,""ETA"":null,""PLACERECEIPTID"":"""",""PLACERECEIPT"":"""",""PORTLOADID"":""CNTAO"",""PORTLOAD"":""QINGDAO,CHINA"",""PORTDISCHARGEID"":""CAVAN"",""PORTDISCHARGE"":""VANCOUVER"",""PLACEDELIVERYID"":"""",""PLACEDELIVERY"":"""",""DESTINATIONID"":""CAVAN"",""DESTINATION"":""VANCOUVER"",""NOBILL"":"""",""COPYNOBILL"":"""",""ISSUETYPE"":"""",""ISSUEDATE"":null,""ISSUEPLACEID"":"""",""ISSUEPLACE"":""QINGDAO,CHINA"",""BLFRT"":""FREIGHT PREPAID"",""PREPARDAT"":""QINGDAO,CHINA"",""PAYABLEAT"":"""",""SERVICE"":""CY-CY"",""MARKS"":""N/M"",""HSCODE"":"""",""DESCRIPTION"":""FRESH WHITE RADISH\nHS CODE:070690\nTEMP:-1'C\nVENT:20CBM/H"",""PKGS"":1440,""KINDPKGS"":""CARTONS"",""KGS"":27000.00000,""CBM"":50.0000,""TOTALNO"":""SAY:ONE THOUSAND FOUR HUNDRED AND FORTY CARTONS ONLY."",""CNTRTOTAL"":""40'RH*1"",""CARRIERID"":""MSC"",""CARRIER"":""MSC"",""CARGOID"":""R"",""DCLASS"":"""",""DUNNO"":"""",""DPAGE"":"""",""DLABEL"":"""",""LINKMAN"":"""",""TEMPID"":"""",""TEMPSET"":"""",""REEFERF"":"""",""HUMIDITY"":"""",""TEMPMIN"":"""",""TEMPMAX"":"""",""ISCONTAINERSOC"":false,""SOREMARK"":""1660+AMS35,分单"",""SIREMARK"":"""",""YARDREMARK"":"""",""COMPID"":null,""COMPNAME"":null,""SHIPPERNAME"":null,""SHIPPERADDR1"":null,""SHIPPERADDR2"":null,""SHIPPERADDR3"":null,""SHIPPERCITY"":null,""SHIPPERPROVINCE"":null,""SHIPPERPOSTCODE"":null,""SHIPPERCOUNTRY"":null,""SHIPPERATTN"":null,""SHIPPERTEL"":null,""CONSIGNEENAME"":null,""CONSIGNEEADDR1"":null,""CONSIGNEEADDR2"":null,""CONSIGNEEADDR3"":null,""CONSIGNEECITY"":null,""CONSIGNEEPROVINCE"":null,""CONSIGNEEPOSTCODE"":null,""CONSIGNEERCOUNTRY"":null,""CONSIGNEEATTN"":null,""CONSIGNEETEL"":null,""NOTIFYPARTYNAME"":null,""NOTIFYPARTYADDR1"":null,""NOTIFYPARTYADDR2"":null,""NOTIFYPARTYADDR3"":null,""NOTIFYPARTYCITY"":null,""NOTIFYPARTYPROVINCE"":null,""NOTIFYPARTYPOSTCODE"":null,""NOTIFYPARTYCOUNTRY"":null,""NOTIFYPARTYATTN"":null,""NOTIFYPARTYTEL"":null,""PONO"":""报-BPGM23012"",""OPID"":""356029261668421"",""DOCID"":""409864742023237"",""OP"":""张艺凡"",""DOC"":""刘乙洁"",""SALEID"":""386904850808901"",""SALE"":""王寅"",""CUSTSERVICEID"":""399290671059013"",""CUSTSERVICE"":""柴婷"",""CUSTOMERNAME"":""沂水宝平-沂水宝平"",""FORWARDER"":""订舱中心"",""SHIPAGENCY"":"""",""CUSTOMSER"":""顺之航报关"",""TRUCKER"":"""",""AGENTID"":"""",""CUSTOMERID"":410507280597061,""FORWARDERID"":""DCZX"",""SHIPAGENCYID"":"""",""CUSTOMSERID"":""SZHBG"",""TRUCKERID"":"""",""AGENTNAME"":"""",""WEITUO"":"""",""CONSIGNEEDOORADDR"":null,""SHIPPERDOORADDR"":null,""SCACCODE"":"""",""ITNCODE"":"""",""PREPARDATID"":""CNTAO"",""PAYABLEATID"":"""",""CUSTNO"":"""",""TRANSPORTID"":"""",""TRANSPORT"":"""",""THIRDPAYADDR"":"""",""YARDCONTRACT"":"""",""YARDCONTRACTTEL"":"""",""YARDCONTRACTEMAIL"":"""",""FEESELF"":false,""LANECODE"":"""",""LANENAME"":""ZCP"",""FREIGHTPAYER"":"""",""GOODSCODE"":""020"",""GOODSNAME"":""ANIMAL FEEDS (SHRIMPS FEED,HAYS)"",""PKGSTOTAL"":"""",""KGSTOTAL"":"""",""CBMTOTAL"":"""",""ROUTEID"":"""",""ROUTE"":"""",""Warehouse"":"""",""WarehouseID"":"""",""EPCode"":"""",""LineName"":""美西"",""DZRemark"":""分单"",""CZRemark"":""菜 1号莱西"",""TMBLNO"":""MEDUEM280834"",""ShippingMethod"":null,""CtnDayNum"":null,""CreatedUserName"":""张艺凡"",""ZhanCangFlag"":""否"",""SourceCode"":null,""SourceName"":null,""YgtETD"":""2023-11-04T23:00:00"",""StartETA"":""2023-11-04T14:00:00"",""StartATA"":null,""MiddleETA"":null,""MiddleETD"":null,""MiddleATA"":null,""MiddleATD"":null,""ATA"":null,""ShenQingXiangShi"":""2+2"",""ForeignAgent"":null,""VERSION"":""e247e3dd-b0af-4a98-9352-0eaece3fabdb"",""ThirdPay"":null,""ThirdPayCode"":null,""ctnInputs"":[{""Id"":476086087102533,""BILLID"":476086087065670,""CTNCODE"":""4"",""CTNALL"":""40'RH"",""CTNNUM"":1,""TEU"":0,""CNTRNO"":"""",""SEALNO"":"""",""PKGS"":1440,""KINDPKGS"":""CARTONS"",""KGS"":27000.0000,""CBM"":50.0000,""TAREWEIGHT"":0.0000,""CTNSTATUS"":null,""WEIGHTYPE"":""累加"",""WEIGHKGS"":27000.0000,""WEIGHATTN"":null,""VGMCONNCOM"":null,""WEIGHTEL"":null,""WEIGHDATE"":"""",""VGMADDR"":null,""VGMEMAIL"":null,""REMARK"":null,""ctnDetailInputs"":[]}],""BookingEDIExt"":{""WeiTuoFang"":"""",""SendCode"":"""",""ReceiveCode"":"""",""NotifyCdoe"":"""",""SalerCode"":"""",""MasterBolIndicator"":"""",""EmanifestHbl"":"""",""ConsigneeEdiCode"":"""",""ShipperEdiCode"":"""",""EDIAttn"":"""",""EDIAttnTel"":"""",""EDIAttnMail"":"""",""AMSConsignee"":"""",""AMSNotifyParty"":"""",""OpEName"":"""",""OpTel"":"""",""OpEmail"":"""",""ACIHBL"":"""",""S0CC0C"":"""",""GoodsName"":"""",""MasterBolIndicatorName"":"""",""SalerCodeName"":"""",""CKHI"":"""",""CNCM"":"""",""WNCM"":"""",""OrderRemark"":"""",""ExRemark1"":"""",""ExRemark2"":"""",""ExRemark3"":"""",""ExRemark4"":"""",""KingTareweight"":null,""CNPTNo"":null,""XMCYWY"":null,""EmcNameAccount"":null},""LineManage"":""王书岚"",""LineManageID"":""356029268410437"",""childrens"":[{""Id"":477405946093638,""BSNO"":null,""BSSTATUS"":null,""BSSTATUSNAME"":""已收到BC"",""BSDATE"":""2023-10-31T00:00:00"",""MBLNO"":""177RZHZHQ2432VRF"",""HBLNO"":""CMTA2023D502 "",""BOOKINGNO"":""477405946093637"",""CONTRACTNO"":""没有0"",""SERVICECONTRACTNO"":null,""SHIPPERID"":null,""CONSIGNEEID"":null,""NOTIFYPARTYID"":null,""SHIPPER"":""YISHUI BAOPING FOODSTUFF CO.,LTD.\nYAODIANZI TOWN YISHUI COUNTY LINYI \nCITY SHANDONG PROVINCE,CHINA"",""CONSIGNEE"":""GOLDENWAY INTERNATIONAL TRADE \nCO.LTD/GOLDEN MUSHROOM\n6265 KENWAY DR. MISSISSAUGA \nONT L5T 2L3,CANADA"",""NOTIFYPARTY"":""GOLDENWAY INTERNATIONAL TRADE \nCO.LTD/GOLDEN MUSHROOM\n6265 KENWAY DR. MISSISSAUGA \nONT L5T 2L3,CANADA"",""NOTIFYPARTY2"":"""",""YARDID"":""GLCZ"",""YARD"":""港陆场站"",""VESSELID"":null,""VESSEL"":""MSC IVANA"",""VOYNO"":""UK343A"",""VOYNOINNER"":""UK343A"",""ETD"":""2023-11-04T00:00:00"",""ATD"":null,""CLOSINGDATE"":null,""CLOSEDOCDATE"":null,""CLOSEVGMDATE"":null,""ETA"":null,""PLACERECEIPTID"":"""",""PLACERECEIPT"":"""",""PORTLOADID"":""CNTAO"",""PORTLOAD"":""QINGDAO,CHINA"",""PORTDISCHARGEID"":""CAVAN"",""PORTDISCHARGE"":""VANCOUVER"",""PLACEDELIVERYID"":"""",""PLACEDELIVERY"":"""",""DESTINATIONID"":""CAVAN"",""DESTINATION"":""VANCOUVER"",""NOBILL"":"""",""COPYNOBILL"":"""",""ISSUETYPE"":"""",""ISSUEDATE"":null,""ISSUEPLACEID"":"""",""ISSUEPLACE"":""QINGDAO,CHINA"",""BLFRT"":"""",""PREPARDAT"":"""",""PAYABLEAT"":"""",""SERVICE"":""CY-CY"",""MARKS"":""N/M"",""HSCODE"":"""",""DESCRIPTION"":""FRESH WHITE RADISH\nHS CODE:070690\nTEMP:-1'C\nVENT:20CBM/H"",""PKGS"":1440,""KINDPKGS"":""CARTONS"",""KGS"":27000.00000,""CBM"":50.0000,""TOTALNO"":""SAY:ONE THOUSAND FOUR HUNDRED AND FORTY CARTONS ONLY."",""CNTRTOTAL"":""40'RH*1"",""CARRIERID"":""MSC"",""CARRIER"":""MSC"",""CARGOID"":""R"",""DCLASS"":"""",""DUNNO"":"""",""DPAGE"":"""",""DLABEL"":"""",""LINKMAN"":"""",""TEMPID"":"""",""TEMPSET"":"""",""REEFERF"":"""",""HUMIDITY"":"""",""TEMPMIN"":"""",""TEMPMAX"":"""",""ISCONTAINERSOC"":false,""SOREMARK"":""1660+AMS35,分单"",""SIREMARK"":"""",""YARDREMARK"":"""",""COMPID"":null,""COMPNAME"":null,""SHIPPERNAME"":null,""SHIPPERADDR1"":null,""SHIPPERADDR2"":null,""SHIPPERADDR3"":null,""SHIPPERCITY"":null,""SHIPPERPROVINCE"":null,""SHIPPERPOSTCODE"":null,""SHIPPERCOUNTRY"":null,""SHIPPERATTN"":null,""SHIPPERTEL"":null,""CONSIGNEENAME"":null,""CONSIGNEEADDR1"":null,""CONSIGNEEADDR2"":null,""CONSIGNEEADDR3"":null,""CONSIGNEECITY"":null,""CONSIGNEEPROVINCE"":null,""CONSIGNEEPOSTCODE"":null,""CONSIGNEERCOUNTRY"":null,""CONSIGNEEATTN"":null,""CONSIGNEETEL"":null,""NOTIFYPARTYNAME"":null,""NOTIFYPARTYADDR1"":null,""NOTIFYPARTYADDR2"":null,""NOTIFYPARTYADDR3"":null,""NOTIFYPARTYCITY"":null,""NOTIFYPARTYPROVINCE"":null,""NOTIFYPARTYPOSTCODE"":null,""NOTIFYPARTYCOUNTRY"":null,""NOTIFYPARTYATTN"":null,""NOTIFYPARTYTEL"":null,""PONO"":""报-BPGM23012 "",""OPID"":""356029261668421"",""DOCID"":""409864742023237"",""OP"":""张艺凡"",""DOC"":""刘乙洁"",""SALEID"":""386904850808901"",""SALE"":""王寅"",""CUSTSERVICEID"":""399290671059013"",""CUSTSERVICE"":""柴婷"",""CUSTOMERNAME"":""沂水宝平-沂水宝平"",""FORWARDER"":""订舱中心"",""SHIPAGENCY"":"""",""CUSTOMSER"":""顺之航报关"",""TRUCKER"":"""",""AGENTID"":"""",""CUSTOMERID"":410507280597061,""FORWARDERID"":""DCZX"",""SHIPAGENCYID"":"""",""CUSTOMSERID"":""SZHBG"",""TRUCKERID"":"""",""AGENTNAME"":"""",""WEITUO"":"""",""CONSIGNEEDOORADDR"":null,""SHIPPERDOORADDR"":null,""SCACCODE"":"""",""ITNCODE"":"""",""PREPARDATID"":"""",""PAYABLEATID"":"""",""CUSTNO"":"""",""TRANSPORTID"":"""",""TRANSPORT"":"""",""THIRDPAYADDR"":"""",""YARDCONTRACT"":"""",""YARDCONTRACTTEL"":"""",""YARDCONTRACTEMAIL"":"""",""FEESELF"":false,""LANECODE"":"""",""LANENAME"":""ZCP"",""FREIGHTPAYER"":"""",""GOODSCODE"":""020"",""GOODSNAME"":""ANIMAL FEEDS (SHRIMPS FEED,HAYS)"",""PKGSTOTAL"":"""",""KGSTOTAL"":"""",""CBMTOTAL"":"""",""ROUTEID"":"""",""ROUTE"":"""",""Warehouse"":"""",""WarehouseID"":"""",""LineName"":""美西"",""EPCode"":"""",""ctnInputs"":[{""Id"":477405946122309,""BILLID"":477405946093638,""CTNCODE"":""4"",""CTNALL"":""40'RH"",""CTNNUM"":1,""TEU"":0,""CNTRNO"":"""",""SEALNO"":"""",""PKGS"":1440,""KINDPKGS"":""CARTONS"",""KGS"":27000.0000,""CBM"":50.0000,""TAREWEIGHT"":0.0000,""CTNSTATUS"":null,""WEIGHTYPE"":""累加"",""WEIGHKGS"":27000.0000,""WEIGHATTN"":null,""VGMCONNCOM"":null,""WEIGHTEL"":null,""WEIGHDATE"":"""",""VGMADDR"":null,""VGMEMAIL"":null,""REMARK"":null,""ctnDetailInputs"":[]}],""BookingEDIExt"":{""WeiTuoFang"":"""",""SendCode"":"""",""ReceiveCode"":"""",""NotifyCdoe"":"""",""SalerCode"":"""",""MasterBolIndicator"":"""",""EmanifestHbl"":"""",""ConsigneeEdiCode"":"""",""ShipperEdiCode"":"""",""EDIAttn"":"""",""EDIAttnTel"":"""",""EDIAttnMail"":"""",""AMSConsignee"":"""",""AMSNotifyParty"":"""",""OpEName"":"""",""OpTel"":"""",""OpEmail"":"""",""ACIHBL"":"""",""S0CC0C"":"""",""GoodsName"":"""",""MasterBolIndicatorName"":"""",""SalerCodeName"":"""",""CKHI"":"""",""CNCM"":"""",""WNCM"":"""",""OrderRemark"":"""",""ExRemark1"":"""",""ExRemark2"":"""",""ExRemark3"":"""",""ExRemark4"":"""",""KingTareweight"":null,""CNPTNo"":null,""XMCYWY"":null,""EmcNameAccount"":null},""DZRemark"":""分单"",""CZRemark"":""菜 1号莱西"",""TMBLNO"":""MEDUEM280834"",""ShippingMethod"":null,""ZhanCangFlag"":""否"",""SourceCode"":null,""SourceName"":null,""YgtETD"":""2023-11-04T23:00:00"",""StartETA"":""2023-11-04T14:00:00"",""StartATA"":null,""MiddleETA"":null,""MiddleETD"":null,""MiddleATA"":null,""MiddleATD"":null,""ATA"":null,""ShenQingXiangShi"":""2+2"",""ThirdPay"":null,""ThirdPayCode"":null,""LineManage"":""王书岚"",""LineManageID"":""356029268410437""}],""GoodsStatus"":[{""StatusName"":""已收到BC"",""FinishTime"":""2023-10-31T10:29:56"",""Remark"":null,""ExtData"":null},{""StatusName"":""已派车"",""FinishTime"":""2023-10-31T09:46:34"",""Remark"":null,""ExtData"":null}]}] +"; + + //byte[] byteArray = System.Text.Encoding.Default.GetBytes(testjson); + //var _e = Encoding.GetEncoding("iso-8859-1"); + //byte[] _e2 = _e.GetBytes(testjson); + + //var strBody = Encoding.UTF8.GetString(byteArray.ToArray()); + //var strBody = Encoding.UTF8.GetString(_e2); + DingCangToDS6(JArray.Parse(testjson)); + //*/ + + /* 测试时前面增加两个注释号入货通知 + ///442375279099973 //457570071453766 + var testjson = @"{""TenantId"":349708986646597,""BookingId"":457570071453766,""ToName"":"""",""Attn"":"""",""AttnTel"":"""",""AttnMail"":"""",""AttnPhone"":"""",""FromName"":""张艺凡"",""FromTel"":""0532-81609998"",""FromMail"":""op12@hightrans.net"",""FromPhone"":""15165298210"",""Description"":""FRESH APPLE\nTEMP:-1'C\nVENT:15CBM/H \nIMPORTER'S REGN NO.260315110118719(NEW),BA-161281(OLD),PROFORMA INVOICE NO.YBS230009\n DATED 20.08.2023, H.S. CODE NO. 0808.10.90 AND TIN\n NO.489053990850, VAT REG. (BIN ) NO. 000285414-0503, BANKS BIN\n NO. 000875839-0101, L/C NUMBER:100123010787 AND DATE:230821 THE IMPORT PERMIT (IP) NUMBER 2023-24-3047 DATED 03.08.2023"",""CloseDocTime"":null,""ClosingTime"":null,""VgmTime"":null,""Remark"":""预计拖13\n截单 9.8 12.00\n最早9.6号背箱\n条码9.7号过期 建议早点背箱/指号\n截港9.11 15.00 晚于截港时间集港有加急费\n条码过期/指号不走有费用"",""YARDID"":""GJF"",""YARD"":""港捷丰场站"",""YARDCONTRACT"":"""",""YARDCONTRACTTEL"":"""",""CreatedTime"":""2023-09-05T09:28:03"",""UpdatedTime"":""2023-09-05T12:45:15"",""CreatedUserId"":356029261668421,""CreatedUserName"":""张艺凡"",""UpdatedUserId"":356029261668421,""UpdatedUserName"":""张艺凡"",""IsDeleted"":false,""Id"":457572683534405}"; + + + byte[] byteArray = System.Text.Encoding.Default.GetBytes(testjson); + var strBody = Encoding.UTF8.GetString(byteArray.ToArray()); + + DS6OpLetter_RH(strBody); + //*/ + + /* 测试时前面增加两个注释号 派车 + ///436354079932485 + var testjson = @"{""head"":{""gid"":""441000874426437"",""messageType"":""TRUCK_SYNC"",""senderId"":""BOOKING_TRUCK"",""senderName"":""\u8BA2\u8231\u6D3E\u8F66"",""receiverId"":""DongshengHeChuan"",""receiverName"":""\u4E1C\u80DC\u548C\u5DDD"",""token"":null,""version"":""1.0"",""requestDate"":""2023-07-20 15:41:04"",""senderKey"":""BOOKING_TRUCK"",""requestAction"":""Sync""},""main"":{""operType"":""AddOrUpdate"",""tenantId"":349708986646597,""id"":441000874426437,""bookingId"":436086681477189,""truckId"":409875318820933,""truckCode"":""ASJCD"",""truckName"":""\u5B89\u76DB\u6377\u8F66\u961F"",""toName"":null,""attn"":null,""attnTel"":null,""attnMail"":null,""attnFax"":null,""fromName"":""\u738B\u8D77\u51E4"",""fromTel"":""0532-85888610"",""fromMobile"":""15689135576"",""fromMail"":""OP76@hightrans.net"",""fromFax"":null,""kgs"":29.0000,""fee"":null,""payMethod"":""OWN_COMPANY"",""payMethodName"":""\u672C\u516C\u53F8\u53D1\u7968"",""truckTime"":""2023-07-20T13:36:37"",""yardid"":""ZHONGCHUANG"",""yard"":""\u4E2D\u521B\u573A\u7AD9"",""yardcontract"":"""",""yardcontracttel"":"""",""factoryId"":null,""factoryCode"":null,""factoryName"":null,""factoryContact"":""\u5C0F\u80E1 13562918972"",""factoryTel"":null,""returnTime"":""2023-07-23T09:00:00"",""inYardID"":""ZHONGCHUANG"",""inYard"":""\u4E2D\u521B\u573A\u7AD9"",""inYardContact"":"""",""inYardContractTel"":"""",""needArriveTime"":""2023-07-23T05:00:00"",""closingTime"":""2023-07-23T09:00:00"",""pickUpTime"":null,""isGuaJi"":false,""attention"":null,""remark"":null,""dispatcherId"":356029261152325,""dispatcherName"":""\u7F57\u6C5F"",""factoryAddr"":""\u5C71\u4E1C\u7701\u4E34\u6C82\u5E02\u5170\u9675\u53BFX005\u4E0EX111\u4EA4\u53C9\u53E3\u4E1C\u5357\u65B9\u5411650\u7C73\u5DE6\u53F3\n\n\u5170\u9675\u53BF\u5FD7\u5408\u98DF\u54C1\u6709\u9650\u516C\u53F8"",""callBackStatus"":""SEND_DISPATCH"",""contaList"":[{""ctncode"":""4"",""ctnall"":""40\u0027RH"",""ctnnum"":1,""teu"":null,""cntrno"":"""",""sealno"":"""",""pkgs"":2900,""kindpkgs"":""BAGS"",""kgs"":29000.0000,""cbm"":50.0000,""tareweight"":null,""ctnstatus"":null,""weightype"":null,""weighkgs"":null,""weighattn"":null,""vgmconncom"":null,""weightel"":null,""weighdate"":null,""vgmaddr"":null,""vgmemail"":null,""remark"":null,""carNumber"":null,""carDriver"":null,""carDriverTel"":null},{""ctncode"":""4"",""ctnall"":""40\u0027RH"",""ctnnum"":1,""teu"":null,""cntrno"":"""",""sealno"":"""",""pkgs"":2900,""kindpkgs"":""BAGS"",""kgs"":29000.0000,""cbm"":50.0000,""tareweight"":null,""ctnstatus"":null,""weightype"":null,""weighkgs"":null,""weighattn"":null,""vgmconncom"":null,""weightel"":null,""weighdate"":null,""vgmaddr"":null,""vgmemail"":null,""remark"":null,""carNumber"":null,""carDriver"":null,""carDriverTel"":null}]}}"; + + + byte[] byteArray = System.Text.Encoding.Default.GetBytes(testjson); + var strBody = Encoding.UTF8.GetString(byteArray.ToArray()); + + DS6OpLetter_PC(strBody); + //*/ + + #endregion + + //测试删除 + //DelToDS6("410977390837829,410261333442630,410590260686917"); + + //this.Stop(hostControl); + + ///* 测试时删去前面两个注释号 + #region 订舱业务 + + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = new Uri(RecMqUri); + mqConn = factory.CreateConnection(); + + IModel modelDingCang = mqConn.CreateModel(); + modelDingCang.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + modelDingCang.QueueDeclare($"{QueuePrefix_DingCang}{CompanyId}", false, false, false, null); + + var consumerDingCang = new EventingBasicConsumer(modelDingCang); + consumerDingCang.Received += (ch, ea) => + { + var body = ea.Body; + + try + { + ////不压缩 + //var strBody = Encoding.UTF8.GetString(body.ToArray()); + + ////压缩 + + var strBodyZip = Encoding.UTF8.GetString(body.ToArray()); + //logger.Debug($"收到大简云订舱输出压缩数据:{strBodyZip}"); + + var strBody = Decompress(strBodyZip); + logger.Debug($"收到大简云订舱输出数据:{strBody}"); + + //导出到东胜6 + //if(strBody.Contains("TAHT30633700")) + DingCangToDS6(JArray.Parse(strBody)); + } + catch (Exception ex) + { + var excep = ex; + while (excep != null) + { + logger.Error(excep.Message); + logger.Error(excep.StackTrace); + + excep = excep.InnerException; + } + } + + }; + //第二个参数控制【是否消费掉队列里的数据】 + modelDingCang.BasicConsume($"{QueuePrefix_DingCang}{CompanyId}", 消费队列数据, consumerDingCang); + + + ///删除 + ///删除改为通过接口调用方式 + + ////ConnectionFactory factory2 = new ConnectionFactory(); + ////factory2.Uri = new Uri(RecMqUri); + ////mqConn2 = factory2.CreateConnection(); + + ////IModel modelDel = mqConn2.CreateModel(); + ////modelDel.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + ////modelDel.QueueDeclare($"{QueuePrefix_Del}{CompanyId}", false, false, false, null); + + ////var consumerDel = new EventingBasicConsumer(modelDel); + ////consumerDel.Received += (ch, ea) => + ////{ + //// var body = ea.Body; + //// var strBody = Encoding.UTF8.GetString(body.ToArray()); + //// logger.Debug($"收到大简云删除订舱:{strBody}"); + + //// try + //// { + //// //导出到东胜6 + //// DelToDS6(strBody); + //// } + //// catch (Exception ex) + //// { + //// var excep = ex; + //// while (excep != null) + //// { + //// logger.Error(excep.Message); + //// logger.Error(excep.StackTrace); + //// excep = excep.InnerException; + //// } + //// } + ////}; + //////第二个参数控制【是否消费掉队列里的数据】 + ////modelDel.BasicConsume($"{QueuePrefix_Del}{CompanyId}", 消费队列数据, consumerDel); + + + + #endregion + //*/ + + ///* + + #region 业务函电 入货通知 + + ConnectionFactory factory3 = new ConnectionFactory(); + factory3.Uri = new Uri(RecMqUri); + mqConn3 = factory3.CreateConnection(); + + IModel model_Letter_RH = mqConn3.CreateModel(); + model_Letter_RH.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + model_Letter_RH.QueueDeclare($"{QueuePrefix_Letter_RH}{CompanyId}", false, false, false, null); + + var consumer_Letter_RH = new EventingBasicConsumer(model_Letter_RH); + consumer_Letter_RH.Received += (ch, ea) => + { + var body = ea.Body; + var strBody = Encoding.UTF8.GetString(body.ToArray()); + logger.Debug($"收到大简云入货通知:{strBody}"); + + try + { + //导出到东胜6 + DS6OpLetter_RH(strBody); + } + catch (Exception ex) + { + var excep = ex; + while (excep != null) + { + logger.Error(excep.Message); + logger.Error(excep.StackTrace); + + excep = excep.InnerException; + } + } + + }; + //第二个参数控制【是否消费掉队列里的数据】 + model_Letter_RH.BasicConsume($"{QueuePrefix_Letter_RH}{CompanyId}", 消费队列数据, consumer_Letter_RH); + + #endregion + //*/ + + ///* + #region 业务函电 派车 + + ConnectionFactory factory4 = new ConnectionFactory(); + factory4.Uri = new Uri(RecMqUri); + mqConn4 = factory4.CreateConnection(); + + IModel model_Letter_PC = mqConn4.CreateModel(); + model_Letter_PC.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + model_Letter_PC.QueueDeclare($"{QueuePrefix_Letter_PC}{CompanyId}", false, false, false, null); + + var consumer_Letter_PC = new EventingBasicConsumer(model_Letter_PC); + consumer_Letter_PC.Received += (ch, ea) => + { + var body = ea.Body; + var strBody = Encoding.UTF8.GetString(body.ToArray()); + logger.Debug($"收到大简云派车通知:{strBody}"); + + try + { + //导出到东胜6 + DS6OpLetter_PC(strBody); + } + catch (Exception ex) + { + var excep = ex; + while (excep != null) + { + logger.Error(excep.Message); + logger.Error(excep.StackTrace); + + excep = excep.InnerException; + } + } + + }; + //第二个参数控制【是否消费掉队列里的数据】 + model_Letter_PC.BasicConsume($"{QueuePrefix_Letter_PC}{CompanyId}", 消费队列数据, consumer_Letter_PC); + + + + #endregion + //*/ + } + catch (Exception e) { + + logger.Error(e.Message); + } + return true; + } + + public bool Stop(HostControl hostControl) + { + // 结束 + logger.Debug("停止运行"); + + //StdSchedulerFactory.GetDefaultScheduler().Shutdown(); + mqConn.Close(); + //mqConn2.Close(); + mqConn3.Close(); + mqConn4.Close(); + + return true; + } + + + #region 舱单数据解析实体类 + + public class Ctnlist + { + /// + /// + /// + public string ctn_id { get; set; } + /// + /// + /// + public string MFNO { get; set; } + /// + /// + /// + public string CTNCODE { get; set; } + /// + /// + /// + public int? SIZE { get; set; } + /// + /// + /// + public string CTN { get; set; } + /// + /// + /// + public int? CTNNUM { get; set; } + /// + /// + /// + public int? TEU { get; set; } + /// + /// + /// + public string CTNALL { get; set; } + /// + /// + /// + public string CNTRNO { get; set; } + /// + /// + /// + public string SEALNO { get; set; } + /// + /// + /// + public int? PKGS { get; set; } + /// + /// + /// + public decimal? KGS { get; set; } + /// + /// + /// + public decimal? CBM { get; set; } + /// + /// + /// + public string KINDPKGS { get; set; } + /// + /// + /// + public string DESCRIPTION { get; set; } + /// + /// + /// + public string MARKS { get; set; } + /// + /// + /// + public string PO { get; set; } + /// + /// + /// + public string SKU { get; set; } + /// + /// + /// + public string SKUDESCRIP { get; set; } + /// + /// + /// + public string DUNNO { get; set; } + /// + /// + /// + public string HTS { get; set; } + /// + /// + /// + public string CTOFORIGIN { get; set; } + /// + /// + /// + public decimal? GOODVALUE { get; set; } + /// + /// + /// + public string CTNOWNER { get; set; } + /// + /// + /// + public string ShiFengRen { get; set; } + /// + /// + /// + public string LeiXingFa { get; set; } + /// + /// + /// + public string LeiXingShou { get; set; } + /// + /// + /// + public string LeiXingTong { get; set; } + /// + /// + /// + public int ZhongKongBiaoShi { get; set; } + /// + /// + /// + public string ChengZhongZhongLiang { get; set; } + /// + /// + /// + public string ChengZhongFangShi { get; set; } + /// + /// + /// + public string ChengZhongShiJian { get; set; } + /// + /// + /// + public decimal? PIZHONG { get; set; } + /// + /// + /// + public string APICTNID { get; set; } + /// + /// + /// + public DateTime? VGMCLOSETIME { get; set; } + } + + public class OpSeaeEdi + { + /// + /// + /// + public string MBLNO { get; set; } + /// + /// + /// + public string HBLNO { get; set; } + /// + /// + /// + public string CARRIERID { get; set; } + /// + /// + /// + public string CARRIER { get; set; } + /// + /// + /// + public string WeiTuoFaSongFang { get; set; } + /// + /// + /// + public string DESTINATION { get; set; } + /// + /// + /// + public string DESTINATIONID { get; set; } + /// + /// + /// + public string PORTDISCHARGE { get; set; } + /// + /// + /// + public string PORTDISCHARGEID { get; set; } + /// + /// + /// + public DateTime? ETD { get; set; } + /// + /// + /// + public string CompId { get; set; } + /// + /// 东方海外物流(中国)有限公司青岛分公司 + /// + public string CompName { get; set; } + /// + /// + /// + public string MFNO { get; set; } + /// + /// + /// + public string BSNO { get; set; } + /// + /// + /// + public string MASTERNO { get; set; } + /// + /// + /// + public string SHIPPERNAME { get; set; } + /// + /// + /// + public string SHIPPERADDR1 { get; set; } + /// + /// + /// + public string SHIPPERCOUNTRY { get; set; } + /// + /// + /// + public string SHIPPERTEL { get; set; } + /// + /// + /// + public string CONSIGNEENAME { get; set; } + /// + /// + /// + public string CONSIGNEEADDR1 { get; set; } + /// + /// + /// + public string CONSIGNEECOUNTRY { get; set; } + + public string CONSIGNEETEL { get; set; } + public string NOTIFYPARTYNAME { get; set; } + public string NOTIFYPARTYADDR1 { get; set; } + /// + /// + /// + public string NOTIFYPARTYCOUNTRY { get; set; } + /// + /// + /// + public string NOTIFYPARTYTEL { get; set; } + /// + /// + /// + public string SHIPPER { get; set; } + /// + /// + /// + public string CONSIGNEE { get; set; } + /// + /// + /// + public string NOTIFYPARTY { get; set; } + /// + /// + /// + public string VESSEL { get; set; } + /// + /// + /// + public string VOYNO { get; set; } + /// + /// + /// + public string PORTLOADID { get; set; } + /// + /// + /// + public string PORTLOAD { get; set; } + /// + /// + /// + public string PLACEDELIVERYID { get; set; } + /// + /// + /// + public string PLACEDELIVERY { get; set; } + /// + /// + /// + public string SERVICE { get; set; } + /// + /// + /// + public string MARKS { get; set; } + /// + /// + /// + public string DESCRIPTION { get; set; } + /// + /// + /// + public int? PKGS { get; set; } + /// + /// + /// + public string KINDPKGS { get; set; } + /// + /// + /// + public decimal? KGS { get; set; } + /// + /// + /// + public decimal? CBM { get; set; } + /// + /// + /// + public string CARGOID { get; set; } + /// + /// + /// + public string DCLASS { get; set; } + /// + /// + /// + public string DUNNO { get; set; } + /// + /// + /// + public string REEFERF { get; set; } + /// + /// + /// + public string TEMPID { get; set; } + /// + /// + /// + public string TEMPSET { get; set; } + /// + /// + /// + public string TEMPMAX { get; set; } + /// + /// + /// + public string TEMPMIN { get; set; } + /// + /// + /// + public string FREIGHTAGMNO { get; set; } + /// + /// + /// + public string HUMIDITY { get; set; } + /// + /// + /// + public string SHIPIMO { get; set; } + /// + /// + /// + public DateTime? ETA { get; set; } + /// + /// + /// + public string BLFRT { get; set; } + /// + /// + /// + public DateTime? SENDTIME { get; set; } + /// + /// + /// + public string YARD { get; set; } + /// + /// 外代 + /// + public string FORWARDER { get; set; } + /// + /// + /// + public List ctnlist { get; set; } + } + + + #endregion + + /// + /// 舱单数据生成到OPOther版本的舱单业务中 经汉专用 + /// + /// + //public void CangdanDataToDS7_OPOther(JArray jarr) + //{ + // try + // { + // var opUser = dS7Data.User.AsNoTracking().First(u => u.GID == FeeInputUserId); + // foreach (var item in jarr) + // { + // var obj = item as JObject; + + // var itemstr = item.ToString(); + + // var _edi = JsonConvert.DeserializeObject(itemstr); + + // var MBLNO = obj.GetValue("MBLNO").ToString(); + // var HBLNO = obj.GetValue("HBLNO").ToString(); + // var CARRIERID = obj.GetValue("CARRIERID").ToString(); + // var CARRIER = obj.GetValue("CARRIER").ToString(); + // var WeiTuoFaSongFang = obj.GetValue("WeiTuoFaSongFang").ToString(); + // var DESTINATION = obj.GetValue("DESTINATION").ToString(); + // var DESTINATIONID = obj.GetValue("DESTINATIONID").ToString(); + // var PORTDISCHARGE = obj.GetValue("PORTDISCHARGE").ToString(); + // var PORTDISCHARGEID = obj.GetValue("PORTDISCHARGEID").ToString(); + + // var strETD = obj.GetValue("ETD").ToString(); + // var ETD = Convert.ToDateTime(strETD); + // var CompId = obj.GetValue("CompId").ToString(); + + + // var ORDERNO = obj.GetValue("ORDERNO").ToString(); + // var 对账约号 = obj.GetValue("REMARKS").ToString(); + + // //看op_other当中有没有该业务主单 如无则增加 + // var 主单mfno = "topother" + _edi.MFNO; + // if (!string.IsNullOrWhiteSpace(_edi.BSNO)) 主单mfno = "topother" + _edi.BSNO; + + // op_other_md op_other = dS7Data.op_other.FirstOrDefault(x => x.BSNO == 主单mfno); + + // var BSNO = ""; + // var CUSTNOHEAD = ""; + // var CUSTOMERNAME = ""; + + // var SOURCEOP = ""; + // var 费用标准结算对象 = ""; + // var 船代 = ""; + + // var custEdi = dS7Data.CodeCustEdi.AsNoTracking().FirstOrDefault(x => x.EDINAME == "DJY_OUTPUT" && x.EDICODE == WeiTuoFaSongFang); + // if (custEdi != null) + // { + // 费用标准结算对象 = custEdi.CUST; + // } + + // var 船代Edi= dS7Data.CodeCustEdi.AsNoTracking().FirstOrDefault(x => x.EDINAME == "DJY_OUTPUT" && x.EDICODE == _edi.FORWARDER); + // if (船代Edi != null) { + // 船代 = 船代Edi.CUST; + // } + + // //如果大简云业务中的【订舱编号】空着,则用大简云舱单界面的【委托发送方】 ,寻找EDI代码设置中的EDICODE =【委托发送方】 EDINAME = 大简云的客户 填入【委托单位】字段的内容 + + // //如果大简云业务中的【订舱编号】不为空, 录入的是"市场部/海运部,MKT1(英文逗号分割)" + // //根据【订舱编号】录入的"市场部/海运部"对应到东胜系统里的【委托单位】,通过EDI代码设置中的EDICODE = 市场部 / 海运部 EDINAME = 大简云选择填入【委托单位】字段的内容 + // //订舱编号里逗号后面的“MKT1”放到源操作SOURCEOP上 + + // //导入舱单时产生的舱单费 + // //1 单价从cust_fee_templatedetail当中的舱单费选取 + // //选取标准为:根据大简云舱单界面的【委托发送方】,寻找EDI代码设置中的EDICODE =【委托发送方】 EDINAME = 大简云的客户 ,用这个客户名称查询cust_fee_templatedetail当中的舱单费 + // //2费用的结算对象 为这票业务在东胜系统中的委托单位 + + + // if (string.IsNullOrWhiteSpace(ORDERNO)) + // { + // //var custEdi = dS7Data.CodeCustEdi.AsNoTracking().FirstOrDefault(x => x.EDINAME == "DJY_OUTPUT" && x.EDICODE == WeiTuoFaSongFang); + // //if (custEdi != null) + // //{ + // // CUSTOMERNAME = custEdi.CUST; + // //} + // CUSTOMERNAME = 费用标准结算对象; + // } + // else { + // ORDERNO=ORDERNO.Replace(",", ","); + // var orderinfo = ORDERNO.Split(',').ToList(); + + // if (orderinfo.Count == 0) { + // orderinfo.Add(""); + // orderinfo.Add(""); + // } + + // if (orderinfo.Count == 1) + // { + // orderinfo.Add(""); + // } + + // var cust = orderinfo[0]; + + // var custEdi2 = dS7Data.CodeCustEdi.AsNoTracking().FirstOrDefault(x => x.EDINAME == "DJY_OUTPUT" && x.EDICODE == cust); + // if (custEdi2 != null) + // { + // CUSTOMERNAME = custEdi2.CUST; + // } + // SOURCEOP = orderinfo[1]; + // } + + // var 委托单位 = dS7Data.info_client.FirstOrDefault(x => x.SHORTNAME == CUSTOMERNAME); + + + // if (op_other == null || op_other.BSNO == null || op_other.BSNO == "") + // { + // logger.Debug($"未找到委托数据:{MBLNO}"); + + + + + // BSNO = 主单mfno; + + // //件数 毛重 净重 尺码 sum + // var PKGS = 0; + // var KGS = 0M; + // var CBM = 0M; + // foreach (var ja in jarr) + // { + // var _edi2= JsonConvert.DeserializeObject(ja.ToString()); + // PKGS += _edi2.PKGS==null?0:(int)_edi2.PKGS; + // KGS += _edi2.KGS == null ? 0M : (decimal)_edi2.KGS; + + // CBM += _edi2.CBM == null ? 0M : (decimal)_edi2.CBM; + + // } + + // var newrec = new op_other_md + // { + // BSNO = BSNO, + // OPLB = "op_other", + // OPLBNAME = "舱单申报", + // BSSTATUS = false, + // FEESTATUS = false, + // MBLNO = MBLNO, + // HBLNO = "", + // CUSTOMERNAME = 委托单位.SHORTNAME, + // //CUSTOMERNAME2 = WeiTuoFaSongFang,//20230313-大简云舱单界面的【委托发送方】录入东胜系统的实际客户, + // //CARRIER + // BSDATE = DateTime.Today, + // ACCDATE = DateTime.Now.ToString("yyyy-MM"), + // BSSOURCE = 委托单位.BSSOURCE, + // OP = opUser.SHOWNAME, + // CUSTSERVICE = opUser.SHOWNAME, + // SALE = opUser.SHOWNAME, + // CORPID = Corpid, + // ETD = ETD,//业务日期 + // //SR2023011000005 + // PORTLOAD = _edi.PORTLOAD,//装货港 + // PORTDISCHARGE = _edi.PORTDISCHARGE,//卸货港 + // PKGS = PKGS, + // KGS = KGS, + // NETWEIGHT = 0, + // CBM = CBM, + // //SOURCEOP = SOURCEOP, + // //SHIPAGENT = 船代 + // }; + // //,DUIYUEHAO = 对账约号 + // //20230317 对账约号存于opLogic + // var cdc = new CommonDataContext(); + // var dic = new Dictionary + // { + // { "DUIYUEHAO",对账约号 } + // }; + // SaveLogicInfo(BSNO, "舱单业务", dic); + + // var billnoset = dS7Data.SysBillNoSet.AsNoTracking().FirstOrDefault(x => x.COMPANYID == Corpid && x.OPLBNAME == "舱单申报" && x.RULEBLNO == "委托编号"); + // if (billnoset != null) + // newrec.CUSTNO = GetBillNo(billnoset, newrec.ETD.ToString(), newrec.ACCDATE, opname: opUser.SHOWNAME, corpid: Corpid); + // else + // { + + // logger.Debug($"SysBillNoSet数据未找到,无法生成编号:{MBLNO}"); + // } + + + // dS7Data.op_other.Add(newrec); + // dS7Data.SaveChanges(); + + // op_other= dS7Data.op_other.FirstOrDefault(x => x.BSNO == 主单mfno); + // } + // else + // { + // logger.Debug($"委托数据已存在:{MBLNO}"); + + // BSNO = op_other.BSNO; + // CUSTNOHEAD = op_other.CUSTNO; + // } + + + // //看op_seae_edi当中有没有该业务 如无则增加 + + // var ediList = dS7Data.op_seae_edi.Where(x => x.BSNO == BSNO).ToList(); + + // if (!ediList.Exists(x => x.MBLNO == MBLNO && x.HBLNO == HBLNO)) + // { + // var newedi = new op_seae_edi_md { + // MFNO = _edi.MFNO, + // BSNO = 主单mfno, + // MASTERNO = 主单mfno, + // CUSTNO = CUSTNOHEAD + (ediList.Count + 1).ToString(), + // MBLNO =_edi.MBLNO, + // HBLNO = _edi.HBLNO, + // CARRIERID = _edi.CARRIERID, + // CARRIER = _edi.CARRIER, + // //WeiTuoFaSongFang = _edi.WeiTuoFaSongFang, + // DESTINATION = _edi.DESTINATION, + // DESTINATIONID = _edi.DESTINATIONID, + // PORTDISCHARGE = _edi.PORTDISCHARGE, + // PORTDISCHARGEID = _edi.PORTDISCHARGEID, + // ETD = _edi.ETD, + + // SHIPPERNAME = _edi.SHIPPERNAME, + // SHIPPERADDR1 = _edi.SHIPPERADDR1, + // SHIPPERCOUNTRY = _edi.SHIPPERCOUNTRY, + // SHIPPERTEL = _edi.SHIPPERTEL, + + // CONSIGNEENAME = _edi.CONSIGNEENAME, + // CONSIGNEEADDR1 = _edi.CONSIGNEEADDR1, + // CONSIGNEECOUNTRY = _edi.CONSIGNEECOUNTRY, + // CONSIGNEETEL = _edi.CONSIGNEETEL, + + // NOTIFYPARTYNAME = _edi.NOTIFYPARTYNAME, + // NOTIFYPARTYADDR1 = _edi.NOTIFYPARTYADDR1, + // NOTIFYPARTYCOUNTRY = _edi.NOTIFYPARTYCOUNTRY, + // NOTIFYPARTYTEL = _edi.NOTIFYPARTYTEL, + + // SHIPPER = _edi.SHIPPER, + // CONSIGNEE = _edi.CONSIGNEE, + // NOTIFYPARTY = _edi.NOTIFYPARTY, + // VESSEL = _edi.VESSEL, + // VOYNO = _edi.VOYNO, + // PORTLOADID = _edi.PORTLOADID, + // PORTLOAD = _edi.PORTLOAD, + // PLACEDELIVERYID = _edi.PLACEDELIVERYID, + // PLACEDELIVERY = _edi.PLACEDELIVERY, + // SERVICE = _edi.SERVICE, + // MARKS = _edi.MARKS, + // DESCRIPTION = _edi.DESCRIPTION, + // PKGS = _edi.PKGS, + // KINDPKGS = _edi.KINDPKGS, + // KGS = _edi.KGS, + // CBM = _edi.CBM, + // CARGOID = _edi.CARGOID, + // DCLASS = _edi.DCLASS, + // DUNNO = _edi.DUNNO, + // REEFERF = _edi.REEFERF, + // TEMPID = _edi.TEMPID, + // TEMPSET = _edi.TEMPSET, + // TEMPMAX = _edi.TEMPMAX, + // TEMPMIN = _edi.TEMPMIN, + // FREIGHTAGMNO = _edi.FREIGHTAGMNO, + // HUMIDITY = _edi.HUMIDITY, + // SHIPIMO = _edi.SHIPIMO, + // ETA = _edi.ETA, + // BLFRT = _edi.BLFRT, + // SENDTIME = _edi.SENDTIME, + // YARD = _edi.YARD, + // FORWARDER = _edi.FORWARDER, + // CORPID= Corpid + // }; + + // dS7Data.op_seae_edi.Add(newedi); + + // if (_edi.ctnlist != null && _edi.ctnlist.Count > 0) { + // foreach (var ctn in _edi.ctnlist) { + // var newctn = new op_seae_edi_ctn_md + // { + // ctn_id = Guid.NewGuid().ToString(),//ctn.ctn_id, + // MFNO = _edi.MFNO, + // CTNCODE = ctn.CTNCODE, + // CNTRNO= ctn.CNTRNO, + // SEALNO = ctn.SEALNO, + // SIZE = ctn.SIZE.ToString(), + // CTN = ctn.CTN, + // CTNNUM = ctn.CTNNUM, + // TEU = ctn.TEU, + // CTNALL = ctn.CTNALL, + // PKGS = ctn.PKGS, + // KGS = ctn.KGS, + // CBM = ctn.CBM, + // KINDPKGS = ctn.KINDPKGS, + // DESCRIPTION = ctn.DESCRIPTION, + // MARKS = ctn.MARKS, + // PO = ctn.PO, + // SKU = ctn.SKU, + // SKUDESCRIP = ctn.SKUDESCRIP, + // DUNNO = ctn.DUNNO, + // HTS = ctn.HTS, + // CTOFORIGIN = ctn.CTOFORIGIN, + // GOODVALUE = ctn.GOODVALUE, + // CTNOWNER = ctn.CTNOWNER + // }; + // dS7Data.op_seae_edi_ctn.Add(newctn); + // } + // } + // dS7Data.SaveChanges(); + // } + + + + + + + // //只要有对应的往来单位=委托发送方 主分单都产生相应的应收 + // info_client_md infoClient = null; + // if (!string.IsNullOrEmpty(CUSTOMERNAME)) + // { + // infoClient = dS7Data.info_client.AsNoTracking().FirstOrDefault(x => x.SHORTNAME == CUSTOMERNAME); + // if (infoClient != null) + // { + // op_other.SALE = infoClient.SALE; //揽货人赋值 + + // //查询配置,生成应收 + // var fee = dS7Data.CustFeeTemplateDetail.AsNoTracking().FirstOrDefault(x => x.CUSTOMERNAME == 费用标准结算对象 && x.FEENAME == FeeShouName); + // if (fee == null) { + // fee = dS7Data.CustFeeTemplateDetail.AsNoTracking().FirstOrDefault(x => x.CUSTOMERNAME == 委托单位.SHORTNAME && x.FEENAME == FeeShouName); + // } + + // if (fee != null ) + // { + // var feeShou = new ch_fee_md(); + + + // feeShou.GID = Guid.NewGuid().ToString().Replace("-", ""); + // feeShou.BSNO = op_other.BSNO; + // feeShou.FEETYPE = 1; + // feeShou.FEENAME = FeeShouName; + // feeShou.CUSTOMERTYPE = "其他"; + // feeShou.CUSTOMERNAME = infoClient.SHORTNAME; + // feeShou.UNIT = fee.UNIT; + // feeShou.UNITPRICE = fee.UNITPRICE; + // feeShou.QUANTITY = 1; + // feeShou.AMOUNT = fee.UNITPRICE; + // feeShou.EXCHANGERATE = 1; + // feeShou.CURRENCY = "RMB"; + // feeShou.ENTEROPERATOR = FeeInputUserId; + // feeShou.ENTERDATE = DateTime.Now; + // feeShou.MODIFIEDUSER = FeeInputUserId; + // feeShou.MODIFIEDTIME = DateTime.Now; + // feeShou.LOCALCURR = feeShou.CURRENCY; + // feeShou.FEEDESCRIPTION = feeShou.FEENAME; + // feeShou.FEESTATUS = 0;//费用插入时状态为提交审核;2021-12-8,要求插入时状态改为录入状态:1;2021-12-9,要求状态为审核通过状态:0 + + // //2021-12-8,下列字段不能为空,写入默认值 + // feeShou.SETTLEMENT = 0; + // feeShou.ORDERAMOUNT = 0; + // feeShou.ORDERINVOICE = 0; + // feeShou.ORDERINVSETTLEMENT = 0; + // feeShou.ORDERSETTLEMENT = 0; + // feeShou.INVOICE = 0; + // feeShou.TAXRATE = 0; + // feeShou.ISADVANCEDPAY = false; + // feeShou.ISINVOICE = false; + // feeShou.ISCRMORDERFEE = false; + // feeShou.TAXUNITPRICE = fee.UNITPRICE;//2021-12-29,于菲:同样赋值单价和金额 + // feeShou.NOTAXAMOUNT = fee.UNITPRICE;//2021-12-29,于菲:同样赋值单价和金额 + + // //2021-12-9,要求下列字段不能为空,填写0或false + // feeShou.COMMISSIONRATE = 0; + // feeShou.AUDITSTATUS = 0; + // feeShou.LINENUM = 0; + // feeShou.ISDEBIT = false; + // feeShou.ISOPEN = false; + // feeShou.ACCTAXRATE = 0; + // feeShou.ISVOU = false; + // feeShou.TAX = 0; + // feeShou.PREAMOUNT = 0; + // feeShou.ISACC = false; + // feeShou.CUSTDUI = false; + + // feeShou.BXGID = HBLNO; + + // //2021-12-23:分单号写入备注 + // //if (!string.IsNullOrEmpty(HBLNO)) + // //{ + // // feeShou.REMARK += $" {HBLNO} "; + // //} + + // dS7Data.ch_fee.Add(feeShou); + // } + + // } + // } + + // if (FeePayCustomerType == "船代") { + // //20230327 改为: + // //如应付对象类型为船代 则结算对象改为该业务的船代公司 + + // FeePayCustomer = 船代; + // } + + // var 分单号 = HBLNO; + // if (string.IsNullOrWhiteSpace(HBLNO)) { + // 分单号 = MBLNO; + // } + // //应付 + // if (string.IsNullOrEmpty(HBLNO) && FeePayPrice>0) //主单才插入船代费用 + // { + // var feeFu = new ch_fee_md(); + // feeFu.GID = Guid.NewGuid().ToString().Replace("-", ""); + // feeFu.BSNO = op_other.BSNO; + // feeFu.FEETYPE = 2; + // feeFu.FEENAME = FeePayName; + // feeFu.CUSTOMERTYPE = FeePayCustomerType; + // feeFu.CUSTOMERNAME = FeePayCustomer; + // feeFu.UNIT = "票"; + // feeFu.UNITPRICE = FeePayPrice; + // feeFu.QUANTITY = 1; + // feeFu.AMOUNT = FeePayPrice; + // feeFu.EXCHANGERATE = 1; + // feeFu.CURRENCY = "RMB"; + // feeFu.ENTEROPERATOR = FeeInputUserId; + // feeFu.ENTERDATE = DateTime.Now; + // feeFu.MODIFIEDUSER = FeeInputUserId; + // feeFu.MODIFIEDTIME = DateTime.Now; + // feeFu.LOCALCURR = feeFu.CURRENCY; + // feeFu.FEEDESCRIPTION = feeFu.FEENAME; + // feeFu.FEESTATUS = 0;//费用插入时状态为提交审核;2021-12-8,要求插入时状态改为录入状态:1;2021-12-9,要求状态为审核通过状态:0 + + // //2021-12-8,下列字段不能为空,写入默认值 + // feeFu.SETTLEMENT = 0; + // feeFu.ORDERAMOUNT = 0; + // feeFu.ORDERINVOICE = 0; + // feeFu.ORDERINVSETTLEMENT = 0; + // feeFu.ORDERSETTLEMENT = 0; + // feeFu.INVOICE = 0; + // feeFu.TAXRATE = 0; + // feeFu.ISADVANCEDPAY = false; + // feeFu.ISINVOICE = false; + // feeFu.ISCRMORDERFEE = false; + // feeFu.TAXUNITPRICE = FeePayPrice; + // feeFu.NOTAXAMOUNT = 0; + + // //2021-12-9,要求下列字段不能为空,填写0或false + // feeFu.COMMISSIONRATE = 0; + // feeFu.AUDITSTATUS = 0; + // feeFu.LINENUM = 0; + // feeFu.ISDEBIT = false; + // feeFu.ISOPEN = false; + // feeFu.ACCTAXRATE = 0; + // feeFu.ISVOU = false; + // feeFu.TAX = 0; + // feeFu.PREAMOUNT = 0; + // feeFu.ISACC = false; + // feeFu.CUSTDUI = false; + + // feeFu.BXGID = 分单号; + + // dS7Data.ch_fee.Add(feeFu); + // dS7Data.SaveChanges(); + // } + + // if (FeePayMyshippingPrice > 0) { + // //不管主单分单都要付费给大简云 + // var feeFuDJY = new ch_fee_md(); + // feeFuDJY.GID = Guid.NewGuid().ToString().Replace("-", ""); + // feeFuDJY.BSNO = op_other.BSNO; + // feeFuDJY.FEETYPE = 2; + // feeFuDJY.FEENAME = FeePayMyshippingName; + // feeFuDJY.CUSTOMERTYPE = "其他"; + // feeFuDJY.CUSTOMERNAME = FeePayMyshippingCustomer; + // feeFuDJY.UNIT = "票"; + // feeFuDJY.UNITPRICE = FeePayMyshippingPrice; + // feeFuDJY.QUANTITY = 1; + // feeFuDJY.AMOUNT = FeePayMyshippingPrice; + // feeFuDJY.EXCHANGERATE = 1; + // feeFuDJY.CURRENCY = "RMB"; + // feeFuDJY.ENTEROPERATOR = FeeInputUserId; + // feeFuDJY.ENTERDATE = DateTime.Now; + // feeFuDJY.MODIFIEDUSER = FeeInputUserId; + // feeFuDJY.MODIFIEDTIME = DateTime.Now; + // feeFuDJY.LOCALCURR = feeFuDJY.CURRENCY; + // feeFuDJY.FEEDESCRIPTION = feeFuDJY.FEENAME; + // feeFuDJY.FEESTATUS = 0;//费用插入时状态为提交审核;2021-12-8,要求插入时状态改为录入状态:1;2021-12-9,要求状态为审核通过状态:0 + + // //2021-12-8,下列字段不能为空,写入默认值 + // feeFuDJY.SETTLEMENT = 0; + // feeFuDJY.ORDERAMOUNT = 0; + // feeFuDJY.ORDERINVOICE = 0; + // feeFuDJY.ORDERINVSETTLEMENT = 0; + // feeFuDJY.ORDERSETTLEMENT = 0; + // feeFuDJY.INVOICE = 0; + // feeFuDJY.TAXRATE = 0; + // feeFuDJY.ISADVANCEDPAY = false; + // feeFuDJY.ISINVOICE = false; + // feeFuDJY.ISCRMORDERFEE = false; + // feeFuDJY.TAXUNITPRICE = FeePayMyshippingPrice; + // feeFuDJY.NOTAXAMOUNT = 0; + + // //2021-12-9,要求下列字段不能为空,填写0或false + // feeFuDJY.COMMISSIONRATE = 0; + // feeFuDJY.AUDITSTATUS = 0; + // feeFuDJY.LINENUM = 0; + // feeFuDJY.ISDEBIT = false; + // feeFuDJY.ISOPEN = false; + // feeFuDJY.ACCTAXRATE = 0; + // feeFuDJY.ISVOU = false; + // feeFuDJY.TAX = 0; + // feeFuDJY.PREAMOUNT = 0; + // feeFuDJY.ISACC = false; + // feeFuDJY.CUSTDUI = false; + + // feeFuDJY.BXGID = 分单号; + + // dS7Data.ch_fee.Add(feeFuDJY); + + // //dS7Data.Database.Log = (x => { logger.Debug(x); }); + // dS7Data.SaveChanges(); + // } + // } + // } + // catch (Exception e) { + // logger.Error($"导入舱单出错:{e}"); + // } + //} + + public string GetUserRefList(string itemstr) + { + return itemstr; + } + + + + /// + /// 生成编号(从东胜7移植并修改) + /// + /// + /// + /// + /// + /// + /// + /// + /// + private string GetBillNo(SysBillNoSet billType, string bsdate, string accdate, string dbname = "", string opname = "", string corpid = "", string bshead = "") + { + var orgCode = ""; + var UserCode = ""; + UserCode = GetUserCode(opname, dbname); + orgCode = GetCorpCode(corpid, dbname); + + //List paramArray = new List(); + //paramArray.Add(new SqlParameter("@ps_BillType", billType.BILLTYPE)); + //paramArray.Add(new SqlParameter("@ps_OrgCode", orgCode)); + //paramArray.Add(new SqlParameter("@ps_EmpCode", UserCode)); + //paramArray.Add(new SqlParameter("@ps_bshead", bshead)); + //if (billType.RULEDATETYPE == "业务日期") + // paramArray.Add(new SqlParameter("@ps_Date", bsdate)); + //else if (billType.RULEDATETYPE == "会计期间" && accdate.Length == 7) + // paramArray.Add(new SqlParameter("@ps_Date", accdate + "-01")); + //else + // paramArray.Add(new SqlParameter("@ps_Date", accdate + "")); + //paramArray.Add(new SqlParameter("@ps_BillNo", 20)); + + //SqlParameter sqlParaOut = new SqlParameter("@ps_RefBillNo", SqlDbType.VarChar, 50); + //sqlParaOut.Direction = ParameterDirection.Output; + //paramArray.Add(sqlParaOut); + + //dS7Data.Database.ExecuteSqlCommand("EXEC [sSysGetBillNo_new] @ps_BillType,@ps_OrgCode,@ps_EmpCode,@ps_bshead,@ps_Date,@ps_BillNo,@ps_RefBillNo output", paramArray.ToArray()); + //ExecStoredProcedure("sSysGetBillNo_new", paramArray.ToArray()); + + var bsDate = string.Empty; + if (!string.IsNullOrWhiteSpace(bsdate)) + bsdate = Convert.ToDateTime(bsdate).ToString("yyyy-MM-dd"); + + if (billType.RULEDATETYPE == "业务日期") + bsDate = bsdate; + else if (billType.RULEDATETYPE == "会计期间" && accdate.Length == 7) + bsDate = accdate + "-01"; + else + bsDate = accdate; + var cmd = $@"DECLARE @ps_BillNo varchar(20) +EXEC [sSysGetBillNo_new] + + @ps_BillType = N'{billType.BILLTYPE}', + @ps_OrgCode = N'{orgCode}', + @ps_EmpCode = N'{UserCode}', + @ps_Date = N'{bsDate}', + @ps_bshead = N'{bshead}', + @ps_BillNo = @ps_BillNo OUTPUT, + @ps_RefBillNo = N'' + +SELECT @ps_BillNo as N'billno'"; + return dS7Data.Database.SqlQuery(cmd).First(); + + } + + /// + /// 获取用户code(参考东胜7修改) + /// + /// + /// + /// + private string GetUserCode(string username, string dbname = "") + { + //string EDICODE = ""; + //var strSql = new StringBuilder(); + //strSql.Append("select CODENAME from [user] where SHOWNAME='" + username + "'"); + //Database db = string.IsNullOrWhiteSpace(dbname) ? DatabaseFactory.CreateDatabase() : DatabaseFactory.CreateDatabase(dbname); + //using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) + //{ + // while (reader.Read()) + // { + // EDICODE = Convert.ToString(reader["CODENAME"]); + // } + // reader.Close(); + //} + //return EDICODE; + + return dS7Data.Database.SqlQuery("select CODENAME from [user] where SHOWNAME='" + username + "'").FirstOrDefault(); + } + + /// + /// 获取公司code(参考东胜7修改) + /// + /// + /// + /// + private string GetCorpCode(string Corpid, string dbname = "") + { + //string EDICODE = ""; + //var strSql = new StringBuilder(); + //strSql.Append("select CODENAME from [company] where GID='" + Corpid + "'"); + //Database db = string.IsNullOrWhiteSpace(dbname) ? DatabaseFactory.CreateDatabase() : DatabaseFactory.CreateDatabase(dbname); + //using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) + //{ + // while (reader.Read()) + // { + // EDICODE = Convert.ToString(reader["CODENAME"]); + // } + // reader.Close(); + //} + //return EDICODE; + + return dS7Data.Database.SqlQuery("select CODENAME from [company] where GID='" + Corpid + "'").FirstOrDefault(); + } + + public static int ExecStoredProcedure(string procName, params SqlParameter[] parameters) + { + int rtn = 0; + using (SqlConnection conn = new SqlConnection(DS6ConnStr)) + { + conn.Open(); + using (SqlCommand cmd = conn.CreateCommand()) + { + SqlTransaction st = conn.BeginTransaction(); + cmd.Transaction = st; + try + { + cmd.CommandText = procName; + cmd.CommandType = CommandType.StoredProcedure; + cmd.Parameters.AddRange(parameters); + var rr = cmd.ExecuteScalar(); + st.Commit(); + return rtn; + } + catch (SqlException sqlex) + { + st.Rollback(); + throw sqlex; + } + } + } + } + + + #region 大简云通过消息队列发布的订舱数据,保存至DS6 用于合川家业务从大简云发布的消息队列中解析至DS6数据库 + + public static void DingCangToDS6(JArray jarr) + { + try + { + var itemstr = ""; + DS6DataContext DS6Data = new DS6DataContext(); + + + var dolist = new List(); + + foreach (var item in jarr) + { + var obj = item as JObject; + + itemstr = item.ToString(); + + //var head = JsonConvert.DeserializeObject(itemstr); + + //ThreadSaveDS6_Single SaveThread = new ThreadSaveDS6_Single(); + //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + //Thread thread1 = new Thread(new ParameterizedThreadStart(SaveThread.FuncSend)); + + //thread1.Start(itemstr); + + + Task.Run(()=> { Do_DingCangToDS6(itemstr); }); + //Do_DingCangToDS6(itemstr); + } + + + + //注释部分 为每消息队列文本包 起一个线程 + //ThreadSaveDS6_List SaveThread = new ThreadSaveDS6_List(); + ////有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + //Thread thread1 = new Thread(new ParameterizedThreadStart(SaveThread.FuncSend)); + + //thread1.Start(dolist); + } + catch (Exception e) + { + var errorobjstr = JsonConvert.SerializeObject(e); + logger.Error($"导入出错:{e}//{errorobjstr}"); + } + + } + + public class 执行订舱单 { + public long DJYID { get; set; } + public DateTime StartTime { get; set; } + + public 执行订舱单(long id) { + DJYID = id; + StartTime = DateTime.Now; + } + } + + + + + //执行中列表 已废弃 + /* + public sealed class 执行中对象2 + { + private static readonly Lazy<执行中对象2> lazy = new Lazy<执行中对象2>(() => new 执行中对象2()); + public static 执行中对象2 Instance { get { return lazy.Value; } } + private 执行中对象2() { } + + //private static bool inworking { get; set; } = false; + private static List<执行订舱单> 执行中idList { get; set; } = new List<执行订舱单>(); + + + public void 执行完成(long DJYID) + { + try + { + //if (inworking) + //{ + // logger.Debug($"列表处理中重试(333)_删除:{DJYID}"); + // DateTime dt1 = DateTime.Now; + // while ((DateTime.Now - dt1).TotalMilliseconds < 333) + // { + // continue; + // } + + + // 执行完成(DJYID); + // return; + //} + //inworking = true; + logger.Debug($"lock_del:{DJYID};"); + + + if (执行中idList != null && 执行中idList.Count > 0) + { + if (执行中idList.Exists(x => x.DJYID == DJYID)) + { + try + { + 执行中idList.RemoveAll(x => x.DJYID == DJYID); + logger.Debug($"移除执行:{DJYID};"); + //inworking = false; + } + catch (Exception e2) + { + //inworking = false; + var str = JsonConvert.SerializeObject(e2); + logger.Error($"移除执行出错:{DJYID}:{str}"); + } + } + + try + { + + + if (执行中idList != null && 执行中idList.Count > 0) + { + var str = JsonConvert.SerializeObject(执行中idList); + logger.Debug($"剩余执行:{str};"); + } + } + catch (Exception e1) + { + + } + } + } + catch (Exception e) + { + var str = JsonConvert.SerializeObject(e); + logger.Debug($"执行完成失败:{str}"); + //inworking = false; + } + finally + { + + //if (执行中idList != null && 执行中idList.Count > 0) + //{ + + // if (执行中idList.Exists(x => x.StartTime <= DateTime.Now.AddSeconds(-15))) + // { + // 执行中idList.RemoveAll(x => x.StartTime <= DateTime.Now.AddSeconds(-15)); + // logger.Debug($"移除超时15秒业务1;"); + // } + + //} + logger.Debug($"unlock_del:{DJYID};"); + //inworking = false; + } + } + + public bool 添加执行(long DJYID) + { + + //if (inworking) + //{ + // logger.Debug($"列表处理中重试(333)_添加:{DJYID}"); + // DateTime dt1 = DateTime.Now; + // while ((DateTime.Now - dt1).TotalMilliseconds < 333) + // { + // continue; + // } + // //var head0 = JsonConvert.DeserializeObject(itemstr); + // return 添加执行(DJYID); + + //} + //inworking = true; + + var result = true; + + try + { + logger.Debug($"lock:{DJYID};"); + if (执行中idList == null) 执行中idList = new List<执行订舱单>(); + if (执行中idList.Exists(x => x.DJYID == DJYID)) + { + //logger.Debug($"执行中重试(100):{DJYID}"); + //Thread.Sleep(100); + //result = false; + result = true; + } + else + { + 执行中idList.Add(new 执行订舱单(DJYID)); + result = true; + } + //inworking = false; + return result; + } + catch (Exception e) + { + //inworking = false; + var str = JsonConvert.SerializeObject(e); + logger.Debug($"添加执行失败:{str}"); + result = false; + return result; + } + finally + { + + if (执行中idList != null && 执行中idList.Count > 0) + { + + //if (执行中idList.Exists(x => x.StartTime <= DateTime.Now.AddSeconds(-15))) + //{ + // try + // { + // var delobj = 执行中idList.FirstOrDefault(x => x.StartTime <= DateTime.Now.AddSeconds(-15)); + // 执行中idList.RemoveAll(x => x.StartTime <= DateTime.Now.AddSeconds(-15)); + // //inworking = false; + // logger.Debug($"移除超时15秒业务2;{delobj.DJYID}"); + // } + // catch (Exception e) + // { + // //inworking = false; + // var str = JsonConvert.SerializeObject(e); + // logger.Error($"移除超时15秒业务2错误;{str}"); + // } + //} + + } + logger.Debug($"unlock:{DJYID};"); + //inworking = false; + } + } + + public static void 执行列表数(string name = "") + { + + var docount = 0; + if (执行中idList != null) + { + try + { + docount = 执行中idList.Count(); + } + catch (Exception e1) + { + + } + } + logger.Debug($"执行列表数({name}):{docount};"); + } + } + + //public static class 执行中对象 { + // public static void 执行完成(long DJYID) + // { + // try + // { + // if (inworking) + // { + // logger.Debug($"列表处理中重试(333)_删除:{DJYID}"); + // DateTime dt1 = DateTime.Now; + // while ((DateTime.Now - dt1).TotalMilliseconds < 333) + // { + // continue; + // } + + + // 执行完成(DJYID); + // return; + // } + // inworking = true; + // logger.Debug($"lock_del:{DJYID};"); + + + // if (执行中idList != null && 执行中idList.Count > 0) + // { + // if (执行中idList.Exists(x => x.DJYID == DJYID)) + // { + // try + // { + // 执行中idList.RemoveAll(x => x.DJYID == DJYID); + // logger.Debug($"移除执行:{DJYID};"); + // inworking = false; + // } + // catch (Exception e2) + // { + // inworking = false; + // var str = JsonConvert.SerializeObject(e2); + // logger.Error($"移除执行出错:{DJYID}:{str}"); + // } + // } + + // try + // { + + + // if (执行中idList != null && 执行中idList.Count > 0) + // { + // var str = JsonConvert.SerializeObject(执行中idList); + // logger.Debug($"剩余执行:{str};"); + // } + // } + // catch (Exception e1) + // { + + // } + // } + // } + // catch (Exception e) + // { + // var str = JsonConvert.SerializeObject(e); + // logger.Debug($"执行完成失败:{str}"); + // inworking = false; + // } + // finally + // { + + // if (执行中idList != null && 执行中idList.Count > 0) + // { + + // if (执行中idList.Exists(x => x.StartTime <= DateTime.Now.AddSeconds(-15))) + // { + // 执行中idList.RemoveAll(x => x.StartTime <= DateTime.Now.AddSeconds(-15)); + // logger.Debug($"移除超时15秒业务1;"); + // } + + // } + // logger.Debug($"unlock_del:{DJYID};"); + // inworking = false; + // } + // } + + // public static bool 添加执行(long DJYID) + // { + + // if (inworking) + // { + // logger.Debug($"列表处理中重试(333)_添加:{DJYID}"); + // DateTime dt1 = DateTime.Now; + + // while ((DateTime.Now - dt1).TotalMilliseconds < 333) + // { + // continue; + // } + // //var head0 = JsonConvert.DeserializeObject(itemstr); + + // return 添加执行(DJYID); + + // } + // inworking = true; + + // var result = true; + + // try + // { + // logger.Debug($"lock:{DJYID};"); + // if (执行中idList == null) 执行中idList = new List<执行订舱单>(); + // if (执行中idList.Exists(x => x.DJYID == DJYID)) + // { + // logger.Debug($"执行中重试(500):{DJYID}"); + // DateTime dt1 = DateTime.Now; + // while ((DateTime.Now - dt1).TotalMilliseconds < 1000) + // { + // continue; + // } + // result =false; + // } + // else { + // 执行中idList.Add(new 执行订舱单(DJYID)); + // result = true; + // } + // inworking = false; + // return result; + // } + // catch (Exception e) + // { + // inworking = false; + // var str = JsonConvert.SerializeObject(e); + // logger.Debug($"添加执行失败:{str}"); + // result = false; + // return result; + // } + // finally + // { + + // if (执行中idList != null && 执行中idList.Count > 0) + // { + + // if (执行中idList.Exists(x => x.StartTime <= DateTime.Now.AddSeconds(-15))) + // { + // try + // { + // var delobj = 执行中idList.FirstOrDefault(x=> x.StartTime <= DateTime.Now.AddSeconds(-15)); + // 执行中idList.RemoveAll(x => x.StartTime <= DateTime.Now.AddSeconds(-15)); + // inworking = false; + // logger.Debug($"移除超时15秒业务2;{delobj}"); + // } + // catch (Exception e) { + // inworking = false; + // var str = JsonConvert.SerializeObject(e); + // logger.Error($"移除超时15秒业务2错误;{str}"); + // } + // } + + // } + // logger.Debug($"unlock:{DJYID};"); + // //inworking = false; + // } + // } + + // public static void 执行列表数(string name = "") + // { + + // var docount = 0; + // if (执行中idList != null) + // { + // try + // { + // docount = 执行中idList.Count(); + // } + // catch (Exception e1) + // { + + // } + // } + // logger.Debug($"执行列表数({name}):{docount};"); + // } + + //} + + */ + + + public static void Do_DingCangToDS6(string itemstr,int count=0) + { + + //logger.Debug($"线程开始:{Thread.CurrentThread.ManagedThreadId}"); + + if (count > 3) { + logger.Debug($"重试完结"); + return; + } + + var head = JsonConvert.DeserializeObject(itemstr); + + var errorobjstr = ""; + + decimal mark = 0.0m; + + try + { + DS6DataContext DS6Data = new DS6DataContext(); + + //判断业务是否存在。判断依据为head. + //如果不存在 则新增 + //如存在,则删除原有箱信息。 + //logger.Debug($"查询业务:{head.Id}"); + var currentBillList = DS6Data.t_op_seae.Where(x => x.DJYID == head.Id).ToList(); + + if (currentBillList != null && currentBillList.Count > 0) + { + //更新当前业务 + + var updrec = currentBillList[0]; + var headid = updrec.编号; + var newhead = head.GetOpseae(); + + + //过滤权限 20230421 正式使用后不做人员限制 + //var cando = 人员是否具备权限(newhead.录入人, "776"); + //if (!cando) + //{ + // logger.Debug($"录入人无权限:{newhead.录入人}"); + // continue; + + //} + + + //ETD ATD 使用原有数据而不用大简云发布的信息覆盖(已取消) + //newhead.ETD = updrec.ETD; + //newhead.开船日期= updrec.开船日期; + + newhead.编号 = updrec.编号; + newhead.主编号 = updrec.主编号; + + //20230523 改为接收业务状态 + //newhead.业务状态 = updrec.业务状态; + newhead.费用状态 = updrec.费用状态; + + //20230726 会计期间改为:如果有实际开船日期 ATD/预抵日期 则按实际开船日期计算,如果没有,则按当前日期计算 + //如果费用封账 + if (updrec.费用状态 == "费用封帐") { + newhead.会计期间 = updrec.会计期间; + //newhead.ETD= updrec.ETD; + newhead.预抵日期 = updrec.预抵日期; + + //20230927 增加四个在费用封账状态下不更新的字段 + newhead.揽货人 = updrec.揽货人; + newhead.委托单位 = updrec.委托单位; + newhead.货代公司 = updrec.货代公司;//订舱代理 + newhead.船公司 = updrec.船公司; + + //newhead.三 + } + + newhead.主提单标准 = string.IsNullOrWhiteSpace(head.mblno) ? updrec.编号 : head.mblno; + newhead.报关标准 = updrec.报关标准; + newhead.报检标准 = updrec.报检标准; + newhead.分提单标准 = updrec.分提单标准; + newhead.核销标准 = updrec.核销标准; + newhead.委托标准 = updrec.委托标准; + newhead.业务编号 = updrec.业务编号; + newhead.派车日期 = updrec.派车日期; + + //20230803 根据马静怡的要求 + //在同步时 如果目的港ETA为空 则不用空值更新东胜的ETA当前值 + if (newhead.ETA == null) { + newhead.ETA = updrec.ETA; + } + + logger.Debug($"开始处理(更新):{newhead.主提单号};{newhead.DJYID}"); + //执行中对象2.执行列表数(); + + Set头表箱封号件重尺(ref newhead, head); + DS6Data.t_op_seae.AddOrUpdate(newhead); + DS6Data.SaveChanges(); + //logger.Debug($"更新业务1:{head.Id}"); + #region 箱信息 + DS6Data = new DS6DataContext(); + var Currctnlist = DS6Data.t_op_ctn.Where(x => x.编号 == headid).ToList(); + var ctn_addlist = new List(); + //var ctn_updlist = new List(); + var ctn_dellist = new List(); + + var newctnList = head.GetCtnList(newhead.编号); + + foreach (var ctn in newctnList) + { + //if (Currctnlist.Exists(x => x.DJYCTNID == ctn.DJYCTNID)) + //{ + // var currctn = Currctnlist.First(x => x.DJYCTNID == ctn.DJYCTNID); + // DingCangHead.GetCtn(ref currctn, ctn); + + // ctn_updlist.Add(currctn); + //} + //else + { + ctn_addlist.Add(ctn); + } + } + + foreach (var oldctn in Currctnlist) + { + //if (newctnList.Exists(x => x.DJYCTNID == oldctn.DJYCTNID)) + //{ + + //} + //else + //{ + // ctn_dellist.Add(oldctn); + //} + ctn_dellist.Add(oldctn); + } + if (ctn_dellist.Count > 0) + { + mark = 1.11m; + DS6Data.t_op_ctn.RemoveRange(ctn_dellist); + DS6Data.SaveChanges(); + //logger.Debug($"更新箱信息1:{head.Id}"); + } + + if (ctn_addlist.Count > 0) + { + mark = 1.112m; + DS6Data.t_op_ctn.AddRange(ctn_addlist); + DS6Data.SaveChanges(); + //logger.Debug($"更新箱信息2:{head.Id}"); + } + //if (ctn_updlist.Count > 0) + //{ + // foreach (var updctn in ctn_updlist) + // { + // DS6Data.t_op_ctn.AddOrUpdate(updctn); + // } + //} + + + + #endregion + + #region 提单信息 + DS6Data = new DS6DataContext(); + var amslist = DS6Data.t_op_ams.Where(x => x.编号 == headid).ToList(); + DS6Data.t_op_ams.RemoveRange(amslist); + var newamslist = head.GetAmsList(newhead); + DS6Data.t_op_ams.AddRange(newamslist); + + mark = 1.12m; + DS6Data.SaveChanges(); + //logger.Debug($"更新提单信息:{head.Id}"); + #endregion + + #region 分单 + //分单列表 + DS6Data = new DS6DataContext(); + var newassistantList = head.GetAssistantList(newhead); + + var old_assistantList = DS6Data.t_op_seae_assistant.Where(x => x.编号 == headid).ToList(); + //var assistantUpdList = new List(); + var assistantAddList = new List(); + var assistantDelList = new List(); + + //DS6Data.t_op_seae_assistant.RemoveRange(amslist); + + foreach (var assistant in newassistantList) + { + //if (old_assistantList.Exists(x => x.DJYCHILDRENID == assistant.DJYCHILDRENID)) + //{ + // var curr = old_assistantList.First(x => x.DJYCHILDRENID == assistant.DJYCHILDRENID); + // DingCangHead.GetAssistant(ref curr, assistant); + // assistantUpdList.Add(curr); + //} + //else + //{ + assistantAddList.Add(assistant); + //} + } + + foreach (var old in old_assistantList) + { + //if (newassistantList.Exists(x => x.DJYCHILDRENID == old.DJYCHILDRENID)) + //{ + + //} + //else + //{ + assistantDelList.Add(old); + //} + } + if (assistantDelList.Count > 0) + { + mark = 1.13m; + DS6Data.t_op_seae_assistant.RemoveRange(assistantDelList); + DS6Data.SaveChanges(); + //logger.Debug($"更新分单信息1:{head.Id}"); + } + if (assistantAddList.Count > 0) + { + mark = 1.132m; + DS6Data.t_op_seae_assistant.AddRange(assistantAddList); + DS6Data.SaveChanges(); + //logger.Debug($"更新分单信息2:{head.Id}"); + } + //if (assistantUpdList.Count > 0) + //{ + // foreach (var upd in assistantUpdList) + // { + // DS6Data.t_op_seae_assistant.AddOrUpdate(upd); + // } + //} + + + //DS6Data.SaveChanges(); + + #endregion + + #region 业务状态 + DS6Data = new DS6DataContext(); + var Currstatuslist = DS6Data.t_op_state.Where(x => x.编号 == headid).ToList(); + if (Currstatuslist != null && Currstatuslist.Count > 0) + { + DS6Data.t_op_state.RemoveRange(Currstatuslist); + DS6Data.SaveChanges(); + + } + var statusList = head.GetOpStatus(newhead); + if (statusList != null && statusList.Count > 0) + { + DS6Data.t_op_state.AddRange(statusList); + DS6Data.SaveChanges(); + + } + + #endregion + + mark = 1.2m; + DS6Data = new DS6DataContext(); + var ob = new + { + head = newhead, + ctnlist = ctn_addlist, + amslist = newamslist, + ass1 = assistantAddList, + //ass2 = assistantUpdList, + ass3 = assistantDelList, + + }; + errorobjstr = JsonConvert.SerializeObject(ob); + + //logger.Debug($"更新完成:{newhead.主提单号};{newhead.DJYID}"); + + AfterSave(newhead.编号); + //DS6Data.SaveChanges(); + logger.Debug($"完成处理(更新):{newhead.主提单号};{newhead.DJYID}"); + } + else + { + //新增业务 + + var newhead = head.GetOpseae(); + //过滤权限 + //var cando = 人员是否具备权限(newhead.录入人, "776"); + //if (!cando) continue; + + + var new编号 = 获取编号Helper.Instance.DoGet(); + + newhead.编号 = new编号; + newhead.主编号 = new编号; + + newhead.主提单标准 = string.IsNullOrWhiteSpace(head.mblno) ? new编号 : head.mblno; + newhead.报关标准 = new编号; + newhead.报检标准 = new编号; + newhead.分提单标准 = new编号; + newhead.核销标准 = new编号; + newhead.委托标准 = new编号; + + logger.Debug($"开始处理(新增):{newhead.主提单号};{newhead.DJYID}"); + //执行中对象2.执行列表数(); + + //var 业务编号Code = "SE" + ((DateTime)(newhead.会计期间)).Year.ToString() + ((DateTime)(newhead.会计期间)).Month.ToString().PadLeft(2, '0'); + DateTime now = DateTime.Now; + DateTime today2 = new DateTime(now.Year, now.Month, now.Day); + var 业务编号Code = "SE" + today2.Year.ToString() + today2.Month.ToString().PadLeft(2, '0'); + + newhead.业务编号 = 获取业务编号Helper.Instance. DS6GetBSNO(业务编号Code); + + Set头表箱封号件重尺(ref newhead, head); + DS6Data.t_op_seae.Add(newhead); + mark = 2.1m; + DS6Data.SaveChanges(); + //logger.Debug($"新增save1:{newhead.主提单号};{newhead.DJYID}"); + newhead = DS6Data.t_op_seae.First(x => x.业务编号 == newhead.业务编号); + + var headid = newhead.编号; + + var ctnlist = DS6Data.t_op_ctn.Where(x => x.编号 == headid).ToList(); + if (ctnlist != null && ctnlist.Count > 0) + DS6Data.t_op_ctn.RemoveRange(ctnlist); + var newctnList = head.GetCtnList(newhead.编号); + if (newctnList != null && newctnList.Count > 0) { + DS6Data.t_op_ctn.AddRange(newctnList); + //logger.Debug($"新增ctn:{newhead.主提单号};{newhead.DJYID}"); + } + + + var amslist = DS6Data.t_op_ams.Where(x => x.编号 == headid).ToList(); + DS6Data.t_op_ams.RemoveRange(amslist); + var newamslist = head.GetAmsList(newhead); + if (newamslist != null && newamslist.Count > 0) + { + DS6Data.t_op_ams.AddRange(newamslist); + //logger.Debug($"新增ams:{newhead.主提单号};{newhead.DJYID}"); + } + + var old_assistantList = DS6Data.t_op_seae_assistant.Where(x => x.编号 == headid).ToList(); + //var assistantUpdList = new List(); + var assistantAddList = new List(); + var assistantDelList = new List(); + + //DS6Data.t_op_seae_assistant.RemoveRange(amslist); + var newassistantList = head.GetAssistantList(newhead); + foreach (var newassis in newassistantList) + { + + if (old_assistantList != null && old_assistantList.Count > 0) + { + foreach (var oldassis in old_assistantList) + { + if (newassis.BSNO == oldassis.BSNO) + { + + assistantDelList.Add(oldassis); + } + else + { + + } + } + } + assistantAddList.Add(newassis); + } + if (assistantDelList.Count > 0) + DS6Data.t_op_seae_assistant.RemoveRange(assistantDelList); + //if (assistantUpdList.Count > 0) + //{ + // foreach (var upd in assistantUpdList) + // DS6Data.t_op_seae_assistant.Add(upd); + //} + + if (assistantAddList!=null && assistantAddList.Count > 0) { + DS6Data.t_op_seae_assistant.AddRange(assistantAddList); + //logger.Debug($"新增assistant:{newhead.主提单号};{newhead.DJYID}"); + } + + + + + mark = 3.1m; + + #region 业务状态 + var Currstatuslist = DS6Data.t_op_state.Where(x => x.编号 == headid).ToList(); + if (Currstatuslist != null && Currstatuslist.Count > 0) + { + + DS6Data.t_op_state.RemoveRange(Currstatuslist); + mark = 3.21m; + } + var statusList = head.GetOpStatus(newhead); + if (statusList != null && statusList.Count > 0) + { + DS6Data.t_op_state.AddRange(statusList); + //logger.Debug($"新增statusList:{newhead.主提单号};{newhead.DJYID}"); + mark = 3.22m; + } + #endregion + + + mark = 3.3m; + + DS6Data.SaveChanges(); + //logger.Debug($"新增完成:{newhead.主提单号};{newhead.DJYID}"); + AfterSave(newhead.编号); + + logger.Debug($"完成处理(新增):{newhead.主提单号};{newhead.DJYID}"); + } + + } + catch (Exception e) + { + errorobjstr = JsonConvert.SerializeObject(e); + logger.Error($"导入订舱信息出错{mark}:{e}//{errorobjstr}"); + logger.Error($"出错重试{count}:{head.Id}"); + Thread.Sleep(100); + Task.Run(() => { Do_DingCangToDS6(itemstr, count + 1); }); + } + finally { + //var dh = 执行中对象2.Instance; + //dh.执行完成(head.Id); + //执行中对象2.执行列表数("完成"); + ////ThreadSaveDS6_Single.处理完成(head.Id); + } + } + + public static void AfterSave(string 编号) { + + try + { + //20230717 保存业务后,执行一个存储过程 + using (DS6DataContext context = new DS6DataContext()) + { + SqlParameter bsno = new SqlParameter("@bsno", 编号); + + int count = context.Database.ExecuteSqlCommand("exec p_exec_accmonth @bsno", bsno); + context.SaveChanges(); + + count = context.Database.ExecuteSqlCommand($" update t_op_seae set 应结日期=ISNULL(dbo.GetCustStlDay(预抵日期,委托单位,揽货人),预抵日期) where 编号='{编号}' and 预抵日期 is not null "); + context.SaveChanges(); + + logger.Debug($"AfterSave:{编号};{count}"); + } + + + + } + catch (Exception e) { + var str=JsonConvert.SerializeObject(e); + logger.Error($"AfterSave:{str}"); + } + return ; + + } + + #region 原保存逻辑 + //public static void DingCangToDS6_OLD(JArray jarr) + //{ + // var itemstr = ""; + // decimal mark = 0.0M; + + // var errorobjstr = ""; + + // try + // { + // DS6DataContext DS6Data = new DS6DataContext(); + // foreach (var item in jarr) + // { + // var obj = item as JObject; + + // itemstr = item.ToString(); + + // var head = JsonConvert.DeserializeObject(itemstr); + + // //判断业务是否存在。判断依据为head. + // //如果不存在 则新增 + // //如存在,则删除原有箱信息。 + + // var currentBillList = DS6Data.t_op_seae.Where(x => x.DJYID == head.Id).ToList(); + + // if (currentBillList != null && currentBillList.Count > 0) + // { + // //更新当前业务 + // var updrec = currentBillList[0]; + // var headid = updrec.编号; + // var newhead = head.GetOpseae(); + + // //过滤权限 20230421 正式使用后不做人员限制 + // //var cando = 人员是否具备权限(newhead.录入人, "776"); + // //if (!cando) + // //{ + // // logger.Debug($"录入人无权限:{newhead.录入人}"); + // // continue; + + // //} + + + // //ETD ATD 使用原有数据而不用大简云发布的信息覆盖(已取消) + // //newhead.ETD = updrec.ETD; + // //newhead.开船日期= updrec.开船日期; + + + // newhead.编号 = updrec.编号; + // newhead.主编号 = updrec.主编号; + + // //20230523 改为接收业务状态 + // //newhead.业务状态 = updrec.业务状态; + // newhead.费用状态 = updrec.费用状态; + + // newhead.主提单标准 = string.IsNullOrWhiteSpace(head.mblno) ? updrec.编号 : head.mblno; + // newhead.报关标准 = updrec.报关标准; + // newhead.报检标准 = updrec.报检标准; + // newhead.分提单标准 = updrec.分提单标准; + // newhead.核销标准 = updrec.核销标准; + // newhead.委托标准 = updrec.委托标准; + // newhead.业务编号 = updrec.业务编号; + // newhead.派车日期 = updrec.派车日期; + + // Set头表箱封号件重尺(ref newhead, head); + // DS6Data.t_op_seae.AddOrUpdate(newhead); + + // #region 箱信息 + // var Currctnlist = DS6Data.t_op_ctn.Where(x => x.编号 == headid).ToList(); + // var ctn_addlist = new List(); + // //var ctn_updlist = new List(); + // var ctn_dellist = new List(); + + // var newctnList = head.GetCtnList(newhead.编号); + + // foreach (var ctn in newctnList) + // { + // //if (Currctnlist.Exists(x => x.DJYCTNID == ctn.DJYCTNID)) + // //{ + // // var currctn = Currctnlist.First(x => x.DJYCTNID == ctn.DJYCTNID); + // // DingCangHead.GetCtn(ref currctn, ctn); + + // // ctn_updlist.Add(currctn); + // //} + // //else + // //{ + // ctn_addlist.Add(ctn); + // //} + // } + + // foreach (var oldctn in Currctnlist) + // { + // //if (newctnList.Exists(x => x.DJYCTNID == oldctn.DJYCTNID)) + // //{ + + // //} + // //else + // //{ + // ctn_dellist.Add(oldctn); + // //} + // } + // if (ctn_dellist.Count > 0) + // { + // DS6Data.t_op_ctn.RemoveRange(ctn_dellist); + // } + // if (ctn_addlist.Count > 0) + // { + // DS6Data.t_op_ctn.AddRange(ctn_addlist); + // } + // //if (ctn_updlist.Count > 0) + // //{ + // // foreach (var updctn in ctn_updlist) + // // { + // // DS6Data.t_op_ctn.AddOrUpdate(updctn); + // // } + // //} + + // #endregion + + // #region 提单信息 + + // var amslist = DS6Data.t_op_ams.Where(x => x.编号 == headid).ToList(); + // DS6Data.t_op_ams.RemoveRange(amslist); + // var newamslist = head.GetAmsList(newhead); + // DS6Data.t_op_ams.AddRange(newamslist); + // #endregion + + // #region 分单 + // //分单列表 + // var newassistantList = head.GetAssistantList(newhead); + + // var old_assistantList = DS6Data.t_op_seae_assistant.Where(x => x.编号 == headid).ToList(); + // var assistantUpdList = new List(); + // var assistantAddList = new List(); + // var assistantDelList = new List(); + + // //DS6Data.t_op_seae_assistant.RemoveRange(amslist); + + // foreach (var assistant in newassistantList) + // { + // if (old_assistantList.Exists(x => x.DJYCHILDRENID == assistant.DJYCHILDRENID)) + // { + // var curr = old_assistantList.First(x => x.DJYCHILDRENID == assistant.DJYCHILDRENID); + // DingCangHead.GetAssistant(ref curr, assistant); + // assistantUpdList.Add(curr); + // } + // else + // { + // assistantAddList.Add(assistant); + // } + // } + + // foreach (var old in old_assistantList) + // { + // if (newassistantList.Exists(x => x.DJYCHILDRENID == old.DJYCHILDRENID)) + // { + + // } + // else + // { + // assistantDelList.Add(old); + // } + // } + // if (assistantAddList.Count > 0) + // { + // DS6Data.t_op_seae_assistant.AddRange(assistantAddList); + // } + // if (assistantUpdList.Count > 0) + // { + // foreach (var upd in assistantUpdList) + // { + // DS6Data.t_op_seae_assistant.AddOrUpdate(upd); + // } + // } + // if (assistantDelList.Count > 0) + // { + // DS6Data.t_op_seae_assistant.RemoveRange(assistantDelList); + // } + // #endregion + + // #region 业务状态 + // var Currstatuslist = DS6Data.t_op_state.Where(x => x.编号 == headid).ToList(); + // if (Currstatuslist != null && Currstatuslist.Count > 0) + // { + // DS6Data.t_op_state.RemoveRange(Currstatuslist); + // mark = 1.11m; + // } + // var statusList = head.GetOpStatus(newhead); + // if (statusList != null && statusList.Count > 0) + // { + // DS6Data.t_op_state.AddRange(statusList); + // mark = 1.12m; + // } + // #endregion + + // mark = 1.2m; + + // var ob = new + // { + // head = newhead, + // ctnlist = ctn_addlist, + // amslist = newamslist, + // ass1 = assistantAddList, + // ass2 = assistantUpdList, + // ass3 = assistantDelList, + + // }; + // errorobjstr = JsonConvert.SerializeObject(ob); + + // DS6Data.SaveChanges(); + + // } + // else + // { + // //新增业务 + // var newhead = head.GetOpseae(); + // //过滤权限 + // //var cando = 人员是否具备权限(newhead.录入人, "776"); + // //if (!cando) continue; + + + + // var dh = new 获取编号Helper(); + // var new编号 = dh.DoGet(); + + // newhead.编号 = new编号; + // newhead.主编号 = new编号; + + // newhead.主提单标准 = string.IsNullOrWhiteSpace(head.mblno) ? new编号 : head.mblno; + // newhead.报关标准 = new编号; + // newhead.报检标准 = new编号; + // newhead.分提单标准 = new编号; + // newhead.核销标准 = new编号; + // newhead.委托标准 = new编号; + + // var 业务编号Code = "SE" + ((DateTime)(newhead.会计期间)).Year.ToString() + ((DateTime)(newhead.会计期间)).Month.ToString().PadLeft(2, '0'); + + + // newhead.业务编号 = DS6GetBSNO(业务编号Code); + + // Set头表箱封号件重尺(ref newhead, head); + // DS6Data.t_op_seae.Add(newhead); + // mark = 2.1m; + // DS6Data.SaveChanges(); + // newhead = DS6Data.t_op_seae.First(x => x.业务编号 == newhead.业务编号); + + // var headid = newhead.编号; + + // var ctnlist = DS6Data.t_op_ctn.Where(x => x.编号 == headid).ToList(); + // if (ctnlist != null && ctnlist.Count > 0) + // DS6Data.t_op_ctn.RemoveRange(ctnlist); + // var newctnList = head.GetCtnList(newhead.编号); + // DS6Data.t_op_ctn.AddRange(newctnList); + + // var amslist = DS6Data.t_op_ams.Where(x => x.编号 == headid).ToList(); + // DS6Data.t_op_ams.RemoveRange(amslist); + // var newamslist = head.GetAmsList(newhead); + // DS6Data.t_op_ams.AddRange(newamslist); + + // var old_assistantList = DS6Data.t_op_seae_assistant.Where(x => x.编号 == headid).ToList(); + // //var assistantUpdList = new List(); + // var assistantAddList = new List(); + // var assistantDelList = new List(); + + // //DS6Data.t_op_seae_assistant.RemoveRange(amslist); + // var newassistantList = head.GetAssistantList(newhead); + // foreach (var newassis in newassistantList) + // { + + // if (old_assistantList != null && old_assistantList.Count > 0) + // { + // foreach (var oldassis in old_assistantList) + // { + // if (newassis.BSNO == oldassis.BSNO) + // { + + // assistantDelList.Add(oldassis); + // } + // else + // { + + // } + // } + // } + // assistantAddList.Add(newassis); + // } + // if (assistantDelList.Count > 0) + // DS6Data.t_op_seae_assistant.RemoveRange(assistantDelList); + // //if (assistantUpdList.Count > 0) + // //{ + // // foreach (var upd in assistantUpdList) + // // DS6Data.t_op_seae_assistant.Add(upd); + // //} + + // if (assistantAddList.Count > 0) + // DS6Data.t_op_seae_assistant.AddRange(assistantAddList); + + + // logger.Debug($"添加数据:{newhead}"); + // mark = 3.1m; + + // #region 业务状态 + // var Currstatuslist = DS6Data.t_op_state.Where(x => x.编号 == headid).ToList(); + // if (Currstatuslist != null && Currstatuslist.Count > 0) + // { + + // DS6Data.t_op_state.RemoveRange(Currstatuslist); + // mark = 3.21m; + // } + // var statusList = head.GetOpStatus(newhead); + // if (statusList != null && statusList.Count > 0) + // { + // DS6Data.t_op_state.AddRange(statusList); + // mark = 3.22m; + // } + // #endregion + // mark = 3.3m; + + // DS6Data.SaveChanges(); + // } + // } + // } + // catch (Exception e) + // { + // logger.Error($"导入订舱信息出错{mark}:{e}//{errorobjstr}"); + // } + //} + + #endregion + + public static void Set头表箱封号件重尺(ref t_op_seae_md newhead, DingCangHead head) { + var ctnList = head.GetCtnList(newhead.编号); + + newhead.箱号封号 = ""; + + newhead.件数包装 = head.pkgs.ToString()+ head.kindpkgs; + newhead.货物重量 = head.kgs.ToString() + "KGS"; + newhead.货物尺码 = head.cbm.ToString() + "CBM"; + + + if (ctnList != null && ctnList.Count > 0) { + foreach (var ctn in ctnList) + { + if (!string.IsNullOrWhiteSpace(ctn.箱号) || !string.IsNullOrWhiteSpace(ctn.封号)) + { + if (newhead.箱号封号 != "") newhead.箱号封号 += "\r\n"; + newhead.箱号封号 += (string.IsNullOrWhiteSpace(ctn.箱号) ? "" : ctn.箱号) + (string.IsNullOrWhiteSpace(ctn.封号) ? "" : "/" + ctn.封号); + } + + //if (ctn.件数 != null && ctn.件数 != 0 && !string.IsNullOrWhiteSpace(ctn.包装)) { + // if (newhead.件数包装 != "") newhead.件数包装 += "\r\n"; + // newhead.件数包装 += ctn.件数.ToString() + ctn.包装; + //} + + //if (ctn.重量 != null)// && ctn.重量 != 0 + //{ + // if (newhead.货物重量 != "") newhead.货物重量 += "\r\n"; + // newhead.货物重量 += ctn.重量.ToString() + "KGS"; + //} + + //if (ctn.尺码 != null)//&& ctn.尺码 != 0 + //{ + // if (newhead.货物尺码 != "") newhead.货物尺码 += "\r\n"; + // newhead.货物尺码 += ctn.尺码.ToString() + "CBM"; + //} + } + } + + + } + + public bool 人员是否具备权限(string username, string 权限值) { + //SELECT [人员] FROM[dbo].[t_sys_code_emp] where 权限代码 = '776' and 是否可操作 = 1 + /* + var ds6 = new DS6DataContext(); + var _userinfo = ds6.t_sys_code_emp.Where(x => x.人员 == username && x.权限代码 == "776" && x.是否可操作 == true).ToList(); + if (_userinfo != null && _userinfo.Count > 0) + { + return true; + } + else { + return false; + }*/ + //测试期逻辑 判断是否在配置文件字段中存在 + if (usernamelist.IndexOf(username) >= 0) { + + return true; + } + else + { + return false; + } + } + + public bool CanDelete(t_op_seae_md opseae) { + var ds6 = new DS6DataContext(); + var chfeeList = ds6.t_ch_fee.Where(x => x.编号 == opseae.编号).ToList(); + + if (chfeeList == null || chfeeList.Count == 0) + { + return true; + } + else { + return false; + } + } + + //删除订舱 已废弃 + /* + public void DelToDS6(string Ids) + { + + //try + //{ + DS6DataContext DS6Data = new DS6DataContext(); + + List IdList = Ids.Split(',').ToList(); + + foreach (var id in IdList) + { + logger.Debug($"删除订舱信息:DJYID:{id}"); + + long idlong = Convert.ToInt64(id); + + var currentBillList = DS6Data.t_op_seae.Where(x => x.DJYID == idlong).ToList(); + + if (currentBillList != null && currentBillList.Count > 0) + { + var delrec = currentBillList[0]; + var headid = delrec.编号; + + + + if (!CanDelete(delrec)) + { + return; + } + + logger.Debug($"删除订舱信息:delrec:{JsonConvert.SerializeObject(delrec)}"); + DS6Data.t_op_seae.Remove(delrec); + + + var ctnlist = DS6Data.t_op_ctn.Where(x => x.编号 == headid).ToList(); + if (ctnlist.Count > 0) + { + logger.Debug($"删除订舱信息:ctnlist:{JsonConvert.SerializeObject(ctnlist)}"); + DS6Data.t_op_ctn.RemoveRange(ctnlist); + + } + + var amslist = DS6Data.t_op_ams.Where(x => x.编号 == headid).ToList(); + if (amslist.Count > 0) { + logger.Debug($"删除订舱信息:amslist:{JsonConvert.SerializeObject(amslist)}"); + DS6Data.t_op_ams.RemoveRange(amslist); + + } + + var old_assistantList = DS6Data.t_op_seae_assistant.Where(x => x.编号 == headid).ToList(); + if (old_assistantList.Count > 0) { + logger.Debug($"删除订舱信息:old_assistantList:{JsonConvert.SerializeObject(old_assistantList)}"); + DS6Data.t_op_seae_assistant.RemoveRange(old_assistantList); + + } + logger.Debug($"删除订舱信息:DJYID:{id}"); + DS6Data.SaveChanges(); + logger.Debug($"删除订舱信息:DJYID:OK"); + } + + + } + //} + //catch (Exception e) + //{ + // logger.Error($"删除订舱信息出错:{e}"); + //} + } + */ + + #endregion + + #region 处理业务函电 + public static void DS6OpLetter_RH(string itemstr) + { + /*测试时前方增加注释 + if (!itemstr.Contains("457570071453766")) { + return; + } + //*/ + + + try + { + DS6DataContext DS6Data = new DS6DataContext(); + + var rh= JsonConvert.DeserializeObject<大简云入货通知>(itemstr); + if (rh != null) + { + var letter = rh.GetLetter(); + + letter.SaveLetter(); + } + else { + logger.Error($"入货通知空:////" + itemstr); + } + } + catch (Exception e) + { + logger.Error($"入货通知出错:{e}////" + itemstr); + } + } + + public static void DS6OpLetter_PC(string itemstr) + { + + try + { + DS6DataContext DS6Data = new DS6DataContext(); + + var rh = JsonConvert.DeserializeObject<大简云派车>(itemstr); + if (rh != null) + { + var letter = rh.GetLetter(); + + letter.SaveLetter(rh); + } + else { + logger.Error($"派车通知空:////" + itemstr); + } + } + catch (Exception e) + { + logger.Error($"派车通知出错:{e}////" + itemstr); + } + } + + #endregion + + #region 大简云订舱数据解析类 + public class DingCangHead + { + public long Id { get; set; } + public string bsno { get; set; } //"string", + public string bsstatus { get; set; } //"string", + public string bsstatusname { get; set; } //"string", + public DateTime? bsdate { get; set; } //"2023-03-30T03:12:51.033Z", + public string mblno { get; set; } //"string", + public string tmblno { get; set; } //"string", + public string hblno { get; set; } //"string", + public string bookingno { get; set; } //"string", + public string contractno { get; set; } //"string", + public string servicecontractno { get; set; } //"string", + public string shipperid { get; set; } //"string", + public string consigneeid { get; set; } //"string", + public string notifypartyid { get; set; } //"string", + public string shipper { get; set; } //"string", + public string consignee { get; set; } //"string", + public string notifyparty { get; set; } //"string", + public string notifypartY2 { get; set; } //"string", + public string foreignAgent { get; set; } //"string", + + public string yardid { get; set; } //"string", + public string yard { get; set; } //"string", + public string vesselid { get; set; } //"string", + public string vessel { get; set; } //"string", + public string voyno { get; set; } //"string", + public string voynoinner { get; set; } //"string", + public DateTime? etd { get; set; } //"2023-03-30T03:12:51.033Z", + + /// + /// 云港通ETD(爬取的ETD) 写入 + /// + public DateTime? YgtETD { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? atd { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closingdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closedocdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closevgmdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? eta { get; set; } //"2023-03-30T03:12:51.033Z", + public string placereceiptid { get; set; } //"string", + public string placereceipt { get; set; } //"string", + public string portloadid { get; set; } //"string", + public string portload { get; set; } //"string", + public string portdischargeid { get; set; } //"string", + public string portdischarge { get; set; } //"string", + public string placedeliveryid { get; set; } //"string", + public string placedelivery { get; set; } //"string", + public string destinationid { get; set; } //"string", + public string destination { get; set; } //"string", + public string nobill { get; set; } //"string", + public string copynobill { get; set; } //"string", + public string issuetype { get; set; } //"string", + public DateTime? issuedate { get; set; } //"2023-03-30T03:12:51.033Z", + public string issueplaceid { get; set; } //"string", + public string issueplace { get; set; } //"string", + public string blfrt { get; set; } //"string", + public string prepardat { get; set; } //"string", + public string payableat { get; set; } //"string", + public string service { get; set; } //"string", + public string marks { get; set; } //"string", + public string hscode { get; set; } //"string", + public string description { get; set; } //"string", + public int? pkgs { get; set; } = 0; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0; + public decimal? cbm { get; set; } = 0; + public string totalno { get; set; } //"string", + public string cntrtotal { get; set; } //"string", + public string carrierid { get; set; } //"string", + public string carrier { get; set; } //"string", + public string cargoid { get; set; } //"string", + public string dclass { get; set; } //"string", + public string dunno { get; set; } //"string", + public string dpage { get; set; } //"string", + public string dlabel { get; set; } //"string", + public string linkman { get; set; } //"string", + public string tempid { get; set; } //"string", + public string tempset { get; set; } //"string", + public string reeferf { get; set; } //"string", + public string humidity { get; set; } //"string", + public string tempmin { get; set; } //"string", + public string tempmax { get; set; } //"string", + public bool? iscontainersoc { get; set; } //true, + public string soremark { get; set; } //"订舱备注", + public string siremark { get; set; } //"截单备注", + public string yardremark { get; set; } //"string", + public string compid { get; set; } //"string", + public string compname { get; set; } //"string", + public string shippername { get; set; } //"string", + public string shipperaddR1 { get; set; } //"string", + public string shipperaddR2 { get; set; } //"string", + public string shipperaddR3 { get; set; } //"string", + public string shippercity { get; set; } //"string", + public string shipperprovince { get; set; } //"string", + public string shipperpostcode { get; set; } //"string", + public string shippercountry { get; set; } //"string", + public string shipperattn { get; set; } //"string", + public string shippertel { get; set; } //"string", + public string consigneename { get; set; } //"string", + public string consigneeaddR1 { get; set; } //"string", + public string consigneeaddR2 { get; set; } //"string", + public string consigneeaddR3 { get; set; } //"string", + public string consigneecity { get; set; } //"string", + public string consigneeprovince { get; set; } //"string", + public string consigneepostcode { get; set; } //"string", + public string consigneercountry { get; set; } //"string", + public string consigneeattn { get; set; } //"string", + public string consigneetel { get; set; } //"string", + public string notifypartyname { get; set; } //"string", + public string notifypartyaddR1 { get; set; } //"string", + public string notifypartyaddR2 { get; set; } //"string", + public string notifypartyaddR3 { get; set; } //"string", + public string notifypartycity { get; set; } //"string", + public string notifypartyprovince { get; set; } //"string", + public string notifypartypostcode { get; set; } //"string", + public string notifypartycountry { get; set; } //"string", + public string notifypartyattn { get; set; } //"string", + public string notifypartytel { get; set; } //"string", + public string pono { get; set; } //"string", + public string opid { get; set; } //"string", + public string docid { get; set; } //"string", + public string op { get; set; } //"string", + public string doc { get; set; } //"string", + public string saleid { get; set; } //"string", + public string sale { get; set; } //"string", + public string custserviceid { get; set; } //"string", + public string custservice { get; set; } //"string", + public string customername { get; set; } //"string", + public string thirdPay { get; set; } //"第三方 第三方付费", + public string forwarder { get; set; } //"string", + public string shipagency { get; set; } //"string", + public string customser { get; set; } //"string", + public string trucker { get; set; } //"string", + public string agentid { get; set; } //"string", + public long? customerid { get; set; } //= 0; + public string forwarderid { get; set; } //"string", + public string shipagencyid { get; set; } //"string", + public string customserid { get; set; } //"string", + public string truckerid { get; set; } //"string", + public string agentname { get; set; } //"string", + public string weituo { get; set; } //"string", + public string consigneedooraddr { get; set; } //"string", + public string shipperdooraddr { get; set; } //"string", + public string scaccode { get; set; } //"string", + public string itncode { get; set; } //"string", + public string prepardatid { get; set; } //"string", + public string payableatid { get; set; } //"string", + public string custno { get; set; } //"string", + public string transportid { get; set; } //"string", + public string transport { get; set; } //"string", + public string thirdpayaddr { get; set; } //"string", + public string yardcontract { get; set; } //"string", + public string yardcontracttel { get; set; } //"string", + public string yardcontractemail { get; set; } //"string", + public bool? feeself { get; set; } //true, + + + public string lanecode { get; set; } //"string", + public string lanename { get; set; } //"string", + public string freightpayer { get; set; } //"string", + public string goodscode { get; set; } //"string", + public string goodsname { get; set; } //"string", + public string pkgstotal { get; set; } //"string", + public string kgstotal { get; set; } //"string", + public string cbmtotal { get; set; } //"string", + public string routeid { get; set; } //"string", + public string route { get; set; } //"string", + public string warehouse { get; set; } //"string", + public string warehouseID { get; set; } //"string", + public string epCode { get; set; } //"string", + + /// + /// 用户自定义航线 + /// + public string lineName { get; set; } //"string", + public string dzRemark { get; set; } //"string", + public string czRemark { get; set; } //"string", + public string createdUserName { get; set; } //"string", + + public string ZhanCangFlag { get; set; } = ""; //"string", + + public string SourceName { get; set; } = ""; //"string", + + //public string CtnDayNum { get; set; } = "";//箱使堆存 废弃 + + public string ShenQingXiangShi { get; set; } = "";//箱使堆存 + + public string VERSION { get; set; } = "";//版本号 内容为一个gid,用来记录数据是否为最新 + + public string LineManage { get; set; } = "";//航线管理 + public string ShippingMethod { get; set; } = "";//装运方式 整箱/拼箱 + + public List ctnInputs { get; set; } + public DingCangbookingEDIExt bookingEDIExt { get; set; } + /// + /// 原来使用DingCangTDXX + /// + public List childrens { get; set; } + + public List goodsStatus { get; set; } + + class 箱型箱量item + { + + public t_code_ctn_md 箱型 { get; set; } + public int 箱量 { get; set; } = 0; + + public 箱型箱量item(t_code_ctn_md _箱型, int _箱量) + { + 箱型 = _箱型; + 箱量 = _箱量; + } + } + + class 箱型箱量 + { + public List<箱型箱量item> 箱型箱量信息 { get; set; } + + public t_code_ctn_de_md 箱型对应 { get; set; } + + public 箱型箱量() + { + var ds6 = new DS6DataContext(); + 箱型箱量信息 = new List<箱型箱量item>(); + + 箱型对应 = ds6.t_code_ctn_de.FirstOrDefault(x => x.id==1); + + } + + public void Add(箱型箱量item newitem) + { + if (箱型箱量信息.Exists(x => x.箱型 == newitem.箱型)) + { + 箱型箱量信息.First(x => x.箱型 == newitem.箱型).箱量 += newitem.箱量; + } + else + { + 箱型箱量信息.Add(newitem); + } + } + + public string get集装箱() + { + var result = ""; + foreach (var item in 箱型箱量信息) + { + if (result != "") result += " "; + result += item.箱型.表现形式 + "*" + item.箱量.ToString(); + } + return result; + } + + public string get计费标准() + { + var result = ""; + foreach (var item in 箱型箱量信息) + { + if (result != "") result += "\r\n"; + result += item.箱型.表现形式 + "*" + item.箱量.ToString()+"-"+ item.箱型.表现形式; + } + return result; + } + + public string get箱数大写() + { + var result = "SAY: "; + foreach (var item in 箱型箱量信息) + { + if (result != "SAY: ") result += " AND "; + + + + result += NumberToEnglishString(item.箱量).ToUpper() + " (" + item.箱型.表现形式 + "*" + item.箱量.ToString() + ")"; + } + + result += " CONTAINER ONLY. "; + return result; + } + + #region 箱型对应 + public int get箱型1() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型1)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型1) return item.箱量; + } + return 0; + } + public int get箱型2() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型2)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型2) return item.箱量; + } + return 0; + } + public int get箱型3() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型3)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型3) return item.箱量; + } + return 0; + } + + public int get箱型4() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型4)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型4) return item.箱量; + } + return 0; + } + + public int get箱型5() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型5)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型5) return item.箱量; + } + return 0; + } + public int get箱型6() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型6)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型6) return item.箱量; + } + return 0; + } + public int get箱型7() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型7)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型7) return item.箱量; + } + return 0; + } + public int get箱型8() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型8)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型8) return item.箱量; + } + return 0; + } + public int get箱型9() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型9)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型9) return item.箱量; + } + return 0; + } + public int get箱型10() + { + if (string.IsNullOrWhiteSpace(箱型对应.箱型10)) return 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.代码 == 箱型对应.箱型10) return item.箱量; + } + return 0; + } + #endregion + + public int getTeu() + { + var result = 0; + foreach (var item in 箱型箱量信息) + { + if (item.箱型.尺寸 == "20") + { + result += 1 * item.箱量; + } + else + { + result += 2 * item.箱量; + } + } + return result; + } + } + + public int get周次(DateTime? etd) { + try + { + DateTime dateTime = new DateTime(((DateTime)etd).Year, 1, 1); + TimeSpan ts1 = ((DateTime)etd).Subtract(dateTime).Duration(); + var days = ts1.Days; + var weeks = (int)(Math.Ceiling(days / 7.0)); + return weeks; + } + catch (Exception e) { + return 0; + } + } + + //记录品名 + + public t_op_seae_md GetOpseae() + { + var weeks = get周次(etd); + + //20230410 根据箱信息重新计算 集装箱 和 箱数大写 + var d6 = new DS6DataContext(); + var 箱型箱量 = new 箱型箱量(); + + var tcodectn= d6.t_code_ctn.Where(x=>1==1).ToList(); + + if (ctnInputs!=null) + foreach (var ctn in ctnInputs) + { + var 箱型infoList = tcodectn.Where(x => (x.尺寸 + x.箱型) == ctn.ctnall|| (x.尺寸 +"'"+ x.箱型) == ctn.ctnall||x.表现形式==ctn.ctnall).ToList(); + var 箱型info = new t_code_ctn_md(); + if (箱型infoList != null && 箱型infoList.Count > 0) + { + 箱型info = 箱型infoList[0]; + } + else + { + continue; + } + + 箱型箱量.Add(new 箱型箱量item(箱型info, ctn.ctnnum == null ? 1 : (int)ctn.ctnnum)); + } + + var 集装箱 = 箱型箱量.get集装箱(); + var 箱数大写 = 箱型箱量.get箱数大写(); + var 计费标准 = 箱型箱量.get计费标准(); + + //处理货名 + //HS编码 = hscode, + //货物名称 = bookingEDIExt.goodsName, + //货物描述 = description, + + var 货物名称 = ""; + + //var 当前货名 = d6.t_code_goods.Where(x => x.代码 == goodscode).ToList(); + //if (当前货名 == null || 当前货名.Count == 0) + //{ + // if(!string.IsNullOrWhiteSpace(goodscode)) { + // var newrec = new t_code_goods_md(); + // newrec.代码 = SetLength(goodscode, 10); + // newrec.货物名称 = SetLength(goodsname, 100); + // 货物名称 = newrec.货物名称; + // newrec.货物描述 = SetLength(description, 600); + // newrec.商品编码 = SetLength(hscode, 10); + // d6.t_code_goods.Add(newrec); + // d6.SaveChanges(); + // } + //} + //else + //{ + // 货物名称 = 当前货名[0].货物名称; + //} + + 货物名称 = dealGoodsinfo(goodscode, goodsname,description,hscode); + + var _etd = new DateTime(); + var _eta = new DateTime(); + + if (etd != null) _etd = new DateTime(((DateTime)etd).Year, ((DateTime)etd).Month, ((DateTime)etd).Day); + if (eta != null) _eta = new DateTime(((DateTime)etd).Year, ((DateTime)etd).Month, ((DateTime)etd).Day); + + var 操作 = op; + var 操作部门名称 = ""; + var 操作部门 = d6.t_sys_employee.FirstOrDefault(x => x.姓名 == 操作); + if (操作部门 != null) 操作部门名称 = 操作部门.部门名称; + + + + var 销售 = sale; + var 销售部门名称 = ""; + var 销售部门 = d6.t_sys_employee.FirstOrDefault(x => x.姓名 == 销售); + if (销售部门 != null) 销售部门名称 = 销售部门.部门名称; + + + //carrier + var 船公司 = carrier; + var carrier_clientList = d6.t_crm_client.Where(x => x.代码 == carrier).ToList(); + if (carrier_clientList!=null && carrier_clientList.Count>0) { + var carrier_client = carrier_clientList[0]; + 船公司 = carrier_client.客户简称; + } + + //int? 申请箱使天数 = null; + DateTime now = DateTime.Now; + DateTime today2 = new DateTime(now.Year, now.Month, now.Day); + + var 装运方式 = "整箱"; + if (!string.IsNullOrWhiteSpace(ShippingMethod)) + { + //if (船公司.IndexOf("拼箱") >= 0) + //{ + // 装运方式 = "拼箱"; + //} + 装运方式 = ShippingMethod; + } + + var result = new t_op_seae_md + { + 业务编号 = bsno, + 业务状态 = string.IsNullOrWhiteSpace( bsstatusname)? "接受委托": bsstatusname, + 费用状态 = "录入状态", + 会计期间 = SetDayZero(atd), + + 装运方式 = 装运方式, + 周次 = weeks, + 录入日期 = bsdate, //bsdate new DateTime(2070, 1, 1) ? DateTime.Now: bsdate, + 主提单号 = mblno, + 真提单号 = tmblno, + //主提单标准 = string.IsNullOrWhiteSpace( mblno)?, + 分提单号 = hblno, + 订舱序列号 = custno, + 运费协议号 = contractno, + 发货人代码 = 设置换行(shipper), + 收货人代码 = 设置换行(consignee), + 通知人代码 = 设置换行(notifyparty), + 场站 = yard, + 船名 = vessel, + 航次 = voynoinner, + 开船日期 = SetDayMinute(etd), + ETD = SetDayMinute(YgtETD), + ETA = SetDayZero(eta), + 预抵日期 = SetDayMinute(atd), + 截港日期 = SetDayZero(closingdate), + + 装港代码 = portloadid, + 装货港 = portload, + 卸货代码 = portdischargeid, + 卸货港 = portdischarge, + 交货代码 = placedeliveryid, + 交货地点 = placedelivery, + 目的地代码 = destinationid, + 目的地 = destination, + 提单份数 = nobill, + 副本提单份数 = copynobill, + 签单方式 = issuetype, + 签单日期 = issuedate, + 签单地点 = issueplace, + 付费方式 = blfrt, + 预付地点 = prepardat, + 到付地点 = payableat, + 运输条款 = service, + 唛头 = 设置换行(marks), + 运输方式 = service, + HS编码 = hscode, + 货物名称 = 货物名称, + 货物描述 = 设置换行(description), + 件数 = pkgs, + 包装 = kindpkgs, + 重量 = kgs, + 尺码 = cbm, + 件数大写 = totalno, + 集装箱 = 集装箱,//cntrtotal,// + 箱数大写 = 箱数大写, + 计费标准 = 计费标准, + 船公司 = 船公司,//carrier, + 货物标识 = cargoid, + 危险品分类 = dclass, + 危险品编号 = dunno, + 设置温度 = tempset, + 冷藏通风量 = reeferf, + 最低温度 = tempmin, + 最高温度 = tempmax, + 是否自有箱 = iscontainersoc, + EDI备注 = 设置换行(soremark),//订舱备注 + //分单列表 = 设置换行(soremark), + 附加条款 = 设置换行(soremark), + //全称= compname, + 合同号 = pono, + 合同号备注 = pono, + 客服员 = custservice, + 操作员 = op, + + 单证员 = doc, + 揽货人 = sale, + 航线操作 = route, + 委托单位 = customername, + 第三方付费 = thirdPay, + 报关行 = customser, + 承运车队 = trucker, + 货代公司 = forwarder,//大简云“订舱代理”,ds6界面的“订舱代理”,ds6数据库的货代 + 备案号 = lanename, + 航线 = lineName, + 船代 = shipagency, + 代理 = agentname,//大简云“国外代理”,ds6界面的“代理”,ds6数据库的代理 + 其他备注 = 设置换行(dzRemark), + 是否占舱 = ZhanCangFlag == "是" ? "Y" : "N", + 占舱备注 = 设置换行(czRemark), + + 录入人 = createdUserName, + 订舱人说明 = (bookingEDIExt == null) ? "" : 设置换行(bookingEDIExt.orderRemark), + DJYID = Id, + 通知到港 = null, + 是否提货 = null, + 是否提交VGM = null, + 是否提交舱单 = null, + 是否装载放行 = null, + + 业务来源 = SourceName, + + 箱使堆存 = 设置换行(ShenQingXiangShi), + + 总价 = (bookingEDIExt == null) ? "" : bookingEDIExt.kingTareweight == null ? "" : bookingEDIExt.kingTareweight.ToString().Replace(".0", ""), + + 箱TEU = 箱型箱量.getTeu(), + 箱型1 = 箱型箱量.get箱型1(), + 箱型2 = 箱型箱量.get箱型2(), + 箱型3 = 箱型箱量.get箱型3(), + 箱型4 = 箱型箱量.get箱型4(), + 箱型5 = 箱型箱量.get箱型5(), + 箱型6 = 箱型箱量.get箱型6(), + 箱型7 = 箱型箱量.get箱型7(), + 箱型8 = 箱型箱量.get箱型8(), + 箱型9 = 箱型箱量.get箱型9(), + 箱型10 = 箱型箱量.get箱型10(), + + 辅助字段一 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark1), + 辅助字段二 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark2), + 辅助字段三 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark3), + 辅助字段四 = 设置换行(bookingEDIExt == null ? "" : bookingEDIExt.exRemark4), + + 操作部门 = 操作部门名称, + 销售部门 = 销售部门名称, + + DJYVERSION = VERSION, + 航线管理= LineManage + }; + + if(goodsStatus!=null) + foreach (var status in goodsStatus) + { + if (status.statusName == "通知到港") + { + if (status.finishTime != null) + result.通知到港 = true; + } + if (status.statusName == "是否提货") + { + if (status.finishTime != null) + result.是否提货 = true; + } + if (status.statusName == "提交VGM") + { + if (status.finishTime != null) + result.是否提交VGM = true; + } + if (status.statusName == "提交舱单") + { + if (status.finishTime != null) + result.是否提交舱单 = true; + } + if (status.statusName == "装载放行") + { + if (status.finishTime != null) + result.是否装载放行 = true; + } + } + + #region 设定字符串长度 超长的截断 + + + + var lengthDic = new Dictionary + { + {"业务状态",80}, + {"主提单号",20}, + {"分提单号",30}, + {"委托编号",20}, + {"装运方式",8}, + {"委托单位",20}, + {"发货人",20}, + {"收货人",20}, + {"通知人",20}, + {"发货人代码",1000}, + {"收货人代码",1000}, + {"通知人代码",1000}, + {"代理",20}, + {"代理内容",1000}, + {"场站",20}, + {"船名",60}, + {"航次",20}, + {"起运港",60}, + {"装货港",60}, + {"装港代码",10}, + {"卸货港",100}, + {"卸货代码",10}, + {"二程港口",60}, + {"二程船名",60}, + {"二程航次",20}, + {"目的地",30}, + {"交货地点",100}, + {"交货代码",10}, + {"提单份数",10}, + {"签单方式",50}, + {"签单地点",30}, + {"付费方式",60}, + {"预付地点",100}, + {"到付地点",100}, + {"运输条款",10}, + {"唛头",800}, + {"箱号封号",3000}, + {"件数包装",1000}, + {"货物描述",1400}, + {"货物名称",100}, + {"货物重量",1000}, + {"货物尺码",1000}, + {"包装",60}, + {"件数大写",100}, + {"箱数大写",100}, + {"集装箱",200}, + {"录入人",12}, + {"操作员",10}, + {"揽货人",10}, + {"客服员",10}, + {"航线",30}, + {"船公司",20}, + {"货代公司",20}, + {"备注",800}, + {"报关行",20}, + {"承运车队",20}, + {"分单列表",2000}, + {"计费标准",1000}, + {"报关员",10}, + {"报关单号",20}, + {"核销单号",50}, + {"手册号",20}, + {"经营单位",60}, + {"单位代码",20}, + {"合同号",50}, + {"合同号备注",50}, + {"报关备注",600}, + {"危险品分类",5}, + {"危险品编号",20}, + {"冷藏通风量",12}, + {"温度单位",1}, + {"设置温度",16}, + {"最低温度",5}, + {"最高温度",5}, + {"货物标识",1}, + {"发票号",20}, + {"商品编码",400}, + {"销售部门",30}, + {"操作部门",30}, + {"业务来源",8}, + {"英文船期",12}, + {"三程港口",60}, + {"三程船名",60}, + {"三程航次",20}, + {"辅助字段一",600}, + {"辅助字段二",600}, + {"辅助字段三",600}, + {"辅助字段四",600}, + {"解锁人",10}, + {"主提单标准",30}, + {"分提单标准",30}, + {"委托标准",30}, + {"财务凭证",30}, + {"附加条款",600}, + {"备案号",20}, + {"运抵国",60}, + {"境内货源地",60}, + {"批准文号",20}, + {"成交方式",20}, + {"单价",100}, + {"总价",100}, + {"商品名称",400}, + {"数量单位",400}, + {"报检单号",20}, + {"实验内容",100}, + {"报关操作",10}, + {"报检操作",10}, + {"币制",100}, + {"单证信息",100}, + {"核销标准",20}, + {"报关标准",20}, + {"报检标准",20}, + {"目的地代码",10}, + {"包装代码",10}, + {"发货人编号",10}, + {"运输方式",10}, + {"运费协议号",20}, + {"航线操作",10}, + //{"分票编号",12}, + //{"特殊要求",30}, + {"HS编码",30}, + {"船代",20}, + {"单证员",10}, + {"箱使堆存",30}, + {"EDI备注",2000}, + {"航线管理",20} + }; + + foreach (var item in lengthDic) + { + try + { + var property = result.GetType().GetProperty(item.Key); + if (property != null) + { + var _v = result.GetType().GetProperty(item.Key).GetValue(result); + if (_v != null) + { + var newvalue = SetLength(_v.ToString(), item.Value); + result.GetType().GetProperty(item.Key).SetValue(result, newvalue); + } + } + //var value = result.GetType().GetProperty(item.Key).GetValue(result).ToString(); + //var newvalue = SetLength(value, item.Value); + //result.GetType().GetProperty(item.Key).SetValue(result, newvalue); + } + catch (Exception e) + { + continue; + } + } + + + + #endregion + + return result; + } + + public List GetCtnList(string 编号) + { + var result = new List(); + if(ctnInputs!=null) + foreach (var ctn in ctnInputs) + { + + var d6 = new DS6DataContext(); + + var 箱型infoList = d6.t_code_ctn.Where(x => + (x.尺寸 + "'" + x.箱型) == ctn.ctnall + || (x.尺寸 + x.箱型) == ctn.ctnall + ||( x.尺寸 + "'" + x.箱型.Replace("OT","O/T")) == ctn.ctnall + || (x.尺寸 + x.箱型.Replace("OT", "O/T")) == ctn.ctnall + + ).ToList(); + var 箱型info = new t_code_ctn_md(); + if (箱型infoList != null && 箱型infoList.Count > 0) + { + 箱型info = 箱型infoList[0]; + } + else + { + continue; + } + + var newctn = new t_op_ctn_md + { + 代码 = 箱型info.代码, + 尺寸 = 箱型info.尺寸, + 箱型 = 箱型info.箱型, + 编号 = 编号, + 表现形式 = ctn.ctnall, + 数量 = ctn.ctnnum, + 箱号 = ctn.cntrno, + 封号 = ctn.sealno, + 件数 = ctn.pkgs, + 包装 = ctn.kindpkgs, + 重量 = ctn.kgs, + 尺码 = ctn.cbm, + 皮重 = ctn.tareweight, + TEU = (箱型info.尺寸 == "20" ? 1 * ctn.ctnnum : 2 * ctn.ctnnum), + 称重重量 = ctn.weighkgs, + DJYCTNID = ctn.id + }; + result.Add(newctn); + } + + return result; + } + + public string dealGoodsinfo(string goodscode, string goodsname,string description,string hscode) { + var result = ""; + + try + { + var d6 = new DS6DataContext(); + var 当前货名 = d6.t_code_goods.Where(x => x.货物名称 == goodsname).ToList(); + if (当前货名 == null || 当前货名.Count == 0) + { + if (!string.IsNullOrWhiteSpace(goodsname)) + { + var newrec = new t_code_goods_md(); + + newrec.代码 = SetLength(goodscode, 10); + newrec.货物名称 = SetLength(goodsname, 100); + result = newrec.货物名称; + newrec.货物描述 = SetLength(description, 600); + newrec.商品编码 = SetLength(hscode, 10); + d6.t_code_goods.Add(newrec); + d6.SaveChanges(); + } + } + else + { + result = 当前货名[0].货物名称; + } + } + catch (Exception e) { + var str=JsonConvert.SerializeObject(e); + logger.Error(str); + } + return result; + } + + public static void GetCtn(ref t_op_ctn_md curr, t_op_ctn_md ctn) + { + curr.代码 = ctn.代码; + curr.尺寸 = ctn.尺寸; + curr.箱型 = ctn.箱型; + //curr.编号 = head.编号, + curr.表现形式 = ctn.表现形式; + curr.数量 = ctn.数量; + curr.箱号 = ctn.箱号; + curr.封号 = ctn.封号; + curr.件数 = ctn.件数; + curr.包装 = ctn.包装; + curr.重量 = ctn.重量; + curr.尺码 = ctn.尺码; + curr.皮重 = ctn.皮重; + curr.TEU = ctn.TEU; + curr.称重重量 = ctn.称重重量; + curr.DJYCTNID = ctn.DJYCTNID; + } + public List GetAmsList(t_op_seae_md head) + { + var result = new List(); + + + //foreach (var item in bookingEDIExt) + //{ + var item = bookingEDIExt; + + if (bookingEDIExt != null) + { + var newrec = new t_op_ams_md + { + 编号 = head.编号, + 发货人代码 = SetLength(item.shipperEdiCode, 10), + 收货人代码 = SetLength(item.consigneeEdiCode, 10), + 销售代码 = SetLength(item.salerCode, 10), + 危险品联系人 = SetLength(item.ediAttn, 30), + 危险品联系方式 = SetLength(item.ediAttnTel, 50), + 欧盟HSCODE = SetLength(item.ckhi, 100), + 南美东NCM = 设置换行(SetLength(item.cncm, 600)), + 巴西木质包装说明 = 设置换行(SetLength(item.wncm, 300)), + 实际开船日期 = head.开船日期, + HBL发送方式 = SetLength(item.masterBolIndicator, 1), + ESL航线代码 = SetLength(lanename, 20), + SI备注 = 设置换行(SetLength(siremark, 1000)) + }; + + //20230530 如果船公司不是太平PIL 则将部分字段设为空白 + if (head.船公司 == "PIL") { + newrec.HBL发送方式 = ""; + newrec.销售代码 = ""; + newrec.实际开船日期 = null; + newrec.南美东NCM = ""; + newrec.巴西木质包装说明 = ""; + newrec.欧盟HSCODE = ""; + } + + result.Add(newrec); + } + //} + + return result; + } + + public List GetAssistantList(t_op_seae_md head) + { + var result = new List(); + var d6 = new DS6DataContext(); + var 货物名称 = ""; + + if(childrens!=null) + foreach (var item in childrens) + { + + var weeks = get周次(item.etd); + + var 箱型箱量 = new 箱型箱量(); + + var 箱号封号 = ""; + var 件数包装 = item.pkgs.ToString() + item.kindpkgs; + var 货物重量 = item.kgs.ToString() + "KGS"; + var 货物尺码 = item.cbm.ToString() + "CBM"; + + foreach (var ctn in item.ctnInputs) + { + var 箱型infoList = d6.t_code_ctn.Where(x => + (x.尺寸 + "'" + x.箱型) == ctn.ctnall + || (x.尺寸 + x.箱型) == ctn.ctnall + || (x.尺寸 + "'" + x.箱型.Replace("OT", "O/T")) == ctn.ctnall + || (x.尺寸 + x.箱型.Replace("OT", "O/T")) == ctn.ctnall + + ).ToList(); + var 箱型info = new t_code_ctn_md(); + if (箱型infoList != null && 箱型infoList.Count > 0) + { + 箱型info = 箱型infoList[0]; + } + else + { + continue; + } + + 箱型箱量.Add(new 箱型箱量item(箱型info, ctn.ctnnum == null ? 1 : (int)ctn.ctnnum)); + + if (!string.IsNullOrWhiteSpace(ctn.cntrno) || !string.IsNullOrWhiteSpace(ctn.sealno)) + { + if (箱号封号 != "") 箱号封号 += "\r\n"; + 箱号封号 += (string.IsNullOrWhiteSpace(ctn.cntrno) ? "" : ctn.cntrno) + (string.IsNullOrWhiteSpace(ctn.sealno) ? "" : "/" + ctn.sealno); + } + + //if (ctn.pkgs != null && ctn.pkgs != 0 && !string.IsNullOrWhiteSpace(ctn.kindpkgs)) + //{ + // if (件数包装 != "") 件数包装 += "\r\n"; + // 件数包装 += ctn.pkgs.ToString() + ctn.kindpkgs; + //} + + //if (ctn.kgs != null)// && ctn.重量 != 0 + //{ + // if (货物重量 != "") 货物重量 += "\r\n"; + // 货物重量 += ctn.kgs.ToString() + "KGS"; + //} + + //if (ctn.cbm != null)//&& ctn.尺码 != 0 + //{ + // if (货物尺码 != "") 货物尺码 += "\r\n"; + // 货物尺码 += ctn.cbm.ToString() + "CBM"; + //} + } + + var 集装箱 = 箱型箱量.get集装箱(); + var 箱数大写 = 箱型箱量.get箱数大写(); + + //var 当前货名 = new t_code_goods_md(); + + 货物名称 = dealGoodsinfo(item.goodscode, item.goodsname,item.description,item.hscode); + + + // var 当前货名 = d6.t_code_goods.Where(x => x.代码 == item.goodscode).ToList(); + //if (当前货名 == null || 当前货名.Count == 0) + //{ + // if (!string.IsNullOrWhiteSpace(item.goodscode)) + // { + // var newcodegoods = new t_code_goods_md(); + + // newcodegoods.代码 = SetLength(item.goodscode, 10); + // newcodegoods.货物名称 = SetLength(item.goodsname, 100); + // 货物名称 = newcodegoods.货物名称; + // newcodegoods.货物描述 = SetLength(item.description, 600); + // newcodegoods.商品编码 = SetLength(item.hscode, 10); + // d6.t_code_goods.Add(newcodegoods); + // d6.SaveChanges(); + // } + //} + //else + //{ + // 货物名称 = 当前货名[0].货物名称; + //} + + var newrec = new t_op_seae_assistant_md + { + 编号 = head.编号, + 主编号 = head.编号, + DJYCHILDRENID = item.Id, + BSNO = item.bsno, + 录入日期 = item.bsdate, + 主提单号 = item.mblno, + 分提单号 = item.hblno, + //订舱序列号 = item.bookingno, + 发货人代码 = 设置换行(item.shipper), + 收货人代码 = 设置换行(item.consignee), + 通知人代码 = 设置换行(item.notifyparty), + + //20230605 + 代理内容 = 设置换行(item.foreignAgent), + + 提单份数 = item.nobill, + 签单方式 = item.issuetype, + 签单日期 = item.issuedate, + 签单地点 = item.issueplace, + 付费方式 = item.blfrt, + 预付地点 = item.prepardat, + 到付地点 = item.payableat, + 运输条款 = item.service, + 唛头 = 设置换行(item.marks), + 运输方式 = item.hscode, + 货物名称 = 货物名称, + 货物描述 = 设置换行(item.description), + 件数 = item.pkgs, + 包装 = item.kindpkgs, + 重量 = item.kgs, + 尺码 = item.cbm, + 件数大写 = item.totalno, + 集装箱 = item.cntrtotal, + 船公司 = item.carrier, + 货物标识 = item.cargoid, + 危险品分类 = item.dclass, + 危险品编号 = item.dunno, + 设置温度 = item.tempset, + 冷藏通风量 = item.reeferf, + 最低温度 = item.tempmin, + 最高温度 = item.tempmax, + 是否自有箱 = item.iscontainersoc, + 委托编号 = item.pono, + 操作员 = item.op, + 揽货人 = item.sale, + 客服员 = item.custservice, + //总价 = (item.bookingEDIExt == null) ? 0M : item.bookingEDIExt.kingTareweight == null ? 0M : item.bookingEDIExt.kingTareweight, + //预付地点= item.prepardatid, + //到付地点= item.payableatid, + + 周次 = weeks, + + 运费协议号 = item.contractno, + + 场站 = item.yard, + 船名 = item.vessel, + 航次 = item.voynoinner, + 开船日期 = SetDayMinute(item.etd), + 截港日期 = SetDayZero(item.closingdate), + 预抵日期 = SetDayMinute(item.eta), + + 装港代码 = item.portloadid, + 装货港 = item.portload, + 卸货代码 = item.portdischargeid, + 卸货港 = item.portdischarge, + 交货代码 = item.placedeliveryid, + 交货地点 = item.placedelivery, + 目的地代码 = item.destinationid, + 目的地 = item.destination, + + //集装箱 = 集装箱, + 箱数大写 = 箱数大写, + + 合同号 = item.pono, + + 委托单位 = item.customername, + + 报关行 = item.customser, + 承运车队 = item.trucker, + 货代公司 = item.forwarder,//大简云“订舱代理”,ds6界面的“订舱代理”,ds6数据库的货代 + 备案号 = item.lanename, + 航线 = item.lineName, + + 代理 = item.agentname,//大简云“国外代理”,ds6界面的“代理”,ds6数据库的代理 + + + 录入人 = createdUserName, + + + 箱TEU = 箱型箱量.getTeu(), + 箱型1 = 箱型箱量.get箱型1(), + 箱型2 = 箱型箱量.get箱型2(), + 箱型3 = 箱型箱量.get箱型3(), + 箱型4 = 箱型箱量.get箱型4(), + 箱型5 = 箱型箱量.get箱型5(), + 箱型6 = 箱型箱量.get箱型6(), + 箱型7 = 箱型箱量.get箱型7(), + 箱型8 = 箱型箱量.get箱型8(), + 箱型9 = 箱型箱量.get箱型9(), + 箱型10 = 箱型箱量.get箱型10(), + + 辅助字段一 = 设置换行(item.bookingEDIExt.exRemark1), + 辅助字段二 = 设置换行(item.bookingEDIExt.exRemark2), + 辅助字段三 = 设置换行(item.bookingEDIExt.exRemark3), + 辅助字段四 = 设置换行(item.bookingEDIExt.exRemark4), + + 箱号封号 = 箱号封号, + 件数包装 = 件数包装, + 货物重量 = 货物重量, + 货物尺码 = 货物尺码 + }; + + var lengthDic = new Dictionary + { + {"主提单号",20}, + {"分提单号",20}, + {"发货人代码",1000}, + {"收货人代码",1000}, + {"通知人代码",1000}, + {"提单份数",10}, + {"签单方式",10}, + {"签单地点",30}, + {"付费方式",60}, + {"预付地点",100}, + {"到付地点",100}, + {"运输条款",10}, + {"唛头",800}, + {"运输方式",10}, + {"HS编码",30}, + {"货物描述",1000}, + //{"货物描述",1000}, + {"包装",60}, + {"件数大写",100}, + {"集装箱",200}, + {"船公司",20}, + {"货物标识",1}, + {"危险品分类",5}, + {"危险品编号",20}, + {"设置温度",16}, + {"冷藏通风量",12}, + {"最低温度",5}, + {"最高温度",5}, + {"委托编号",20}, + {"操作员",10}, + {"揽货人",10}, + {"客服员",10}, + + {"运费协议号",20}, + {"场站",20}, + {"船名",60}, + {"航次",20}, + {"装港代码",10}, + {"装货港",60}, + {"卸货代码",10}, + {"卸货港",100}, + {"交货代码",10}, + {"交货地点",100}, + {"目的地代码",10}, + {"目的地",30}, + {"合同号",50}, + {"委托单位",20}, + {"报关行",20}, + {"承运车队",20}, + {"货代公司",20}, + {"备案号",20}, + {"航线",30}, + {"代理",20}, + {"录入人",12}, + {"辅助字段一",600}, + {"辅助字段二",600}, + {"辅助字段三",600}, + {"辅助字段四",600}, + }; + + + //Set分单箱封号件重尺(ref newrec, item); + + + foreach (var _item in lengthDic) + { + try + { + var value = newrec.GetType().GetProperty(_item.Key).GetValue(newrec).ToString(); + var newvalue = SetLength(value, _item.Value); + newrec.GetType().GetProperty(_item.Key).SetValue(newrec, newvalue); + } + catch (Exception e) + { + continue; + } + } + + result.Add(newrec); + } + + return result; + } + + public static void GetAssistant(ref t_op_seae_assistant_md curr, t_op_seae_assistant_md item) + { + + //curr.编号 = head.编号; + //curr.主编号 = item.编号; + curr.DJYCHILDRENID = item.DJYCHILDRENID; + curr.BSNO = item.BSNO; + curr.录入日期 = item.录入日期; + curr.主提单号 = item.主提单号; + curr.分提单号 = item.分提单号; + //订舱序列号 = item.bookingno; + curr.发货人代码 = item.发货人代码; + curr.收货人代码 = item.收货人代码; + curr.通知人代码 = item.通知人代码; + curr.代理内容 = item.代理内容; + curr.提单份数 = item.提单份数; + curr.签单方式 = item.签单方式; + curr.签单日期 = item.签单日期; + curr.签单地点 = item.签单地点; + curr.付费方式 = item.付费方式; + curr.预付地点 = item.预付地点; + curr.到付地点 = item.到付地点; + curr.运输条款 = item.运输条款; + curr.唛头 = item.唛头; + curr.运输方式 = item.运输方式; + curr.货物名称 = item.货物名称; + curr.货物描述 = item.货物描述; + curr.件数 = item.件数; + curr.包装 = item.包装; + curr.重量 = item.重量; + curr.尺码 = item.尺码; + curr.件数大写 = item.件数大写; + curr.集装箱 = item.集装箱; + curr.船公司 = item.船公司; + curr.货物标识 = item.货物标识; + curr.危险品分类 = item.危险品分类; + curr.危险品编号 = item.危险品编号; + curr.设置温度 = item.设置温度; + curr.冷藏通风量 = item.冷藏通风量; + curr.最低温度 = item.最低温度; + curr.最高温度 = item.最高温度; + curr.是否自有箱 = item.是否自有箱; + curr.委托编号 = item.委托编号; + curr.操作员 = item.操作员; + curr.揽货人 = item.揽货人; + curr.客服员 = item.客服员; + + curr.周次 = item.周次; + curr.运费协议号 = item.运费协议号; + + curr.运费协议号 = item.运费协议号; + curr.场站 = item.场站; + curr.船名 = item.船名; + curr.航次 = item.航次; + curr.开船日期 = item.开船日期; + curr.截港日期 = item.截港日期; + curr.预抵日期 = item.预抵日期; + curr.装港代码 = item.装港代码; + curr.装货港 = item.装货港; + curr.卸货代码 = item.卸货代码; + curr.卸货港 = item.卸货港; + curr.交货代码 = item.交货代码; + curr.交货地点 = item.交货地点; + curr.目的地代码 = item.目的地代码; + curr.目的地 = item.目的地; + curr.箱数大写 = item.箱数大写; + curr.合同号 = item.合同号; + curr.委托单位 = item.委托单位; + curr.报关行 = item.报关行; + curr.承运车队 = item.承运车队; + curr.货代公司 = item.货代公司; + curr.备案号 = item.备案号; + curr.航线 = item.航线; + curr.代理 = item.代理; + curr.录入人 = item.录入人; + + curr.箱TEU = item.箱TEU; + curr.箱型1 = item.箱型1; + curr.箱型2 = item.箱型2; + curr.箱型3 = item.箱型3; + curr.箱型4 = item.箱型4; + curr.箱型5 = item.箱型5; + curr.箱型6 = item.箱型6; + curr.箱型7 = item.箱型7; + curr.箱型8 = item.箱型8; + curr.箱型9 = item.箱型9; + curr.箱型10 = item.箱型10; + + curr.辅助字段一 = item.辅助字段一; + curr.辅助字段二 = item.辅助字段二; + curr.辅助字段三 = item.辅助字段三; + curr.辅助字段四 = item.辅助字段四; + curr.箱号封号 = item.箱号封号; + curr.件数包装 = item.件数包装; + curr.货物重量 = item.货物重量; + curr.货物尺码 = item.货物尺码; + + } + + public List GetOpStatus(t_op_seae_md head) { + var result = new List(); + + if (goodsStatus!=null && goodsStatus.Count>0) + { + foreach (var item in goodsStatus) { + var status= new t_op_state_md() { + 编号 = head.编号, + 业务状态 = item.statusName, + 是否完成 = item.finishTime == null ? false : true, + 完成时间 = item.finishTime , + 完成人 = item.finishTime == null ?null: head.操作员, + 备注 = item.remark, + 录入人 = head.操作员, + 录入日期 = item.finishTime==null?DateTime.Now: item.finishTime + }; + result.Add(status); + } + var _order = 1; + foreach (var item in result.OrderBy(x => x.录入日期)) { + item.顺序 = _order; + _order++; + } + + } + + return result; + } + + + public DateTime StartDatetime { get; set; } + //public DingCangHead() { + // StartDatetime=DateTime.Now; + //} + } + + + + public class DingCangCtn { + public long? id { get; set; } + public long? billid { get; set; } + public string ctncode { get; set; } //"string", + public string ctnall { get; set; } //"string", + public int? ctnnum { get; set; } = 0; + public int? teu { get; set; } = 0; + public string cntrno { get; set; } //"string", + public string sealno { get; set; } //"string", + public int? pkgs { get; set; } = 0; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0M; + public decimal? cbm { get; set; } = 0M; + public decimal? tareweight { get; set; } = 0M; + public string ctnstatus { get; set; } //"string", + public string weightype { get; set; } //"string", + public decimal? weighkgs { get; set; } = 0M; + public string weighattn { get; set; } //"string", + public string vgmconncom { get; set; } //"string", + public string weightel { get; set; } //"string", + public string weighdate { get; set; } //"string", + public string vgmaddr { get; set; } //"string", + public string vgmemail { get; set; } //"string", + public string remark { get; set; } //"string", + public List ctnDetailInputs { get; set; } + } + public class DingCangCtnDetail + { + public long? id { get; set; } + public string ctnid { get; set; } + public decimal? pkgs { get; set; } = 0M; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0M; + public decimal? cbm { get; set; } = 0M; + public string hscode { get; set; } //"string", + public string marks { get; set; } //"string", + public string description { get; set; } //"string", + public string remark { get; set; } + + } + public class DingCangbookingEDIExt { + public string weiTuoFang { get; set; } //"string", + public string sendCode { get; set; } //"string", + public string receiveCode { get; set; } //"string", + public string notifyCdoe { get; set; } //"string", + public string salerCode { get; set; } //"string", + public string masterBolIndicator { get; set; } //"string", + public string emanifestHbl { get; set; } //"string", + public string consigneeEdiCode { get; set; } //"string", + public string shipperEdiCode { get; set; } //"string", + public string ediAttn { get; set; } //"string", + public string ediAttnTel { get; set; } //"string", + public string ediAttnMail { get; set; } //"string", + public string amsConsignee { get; set; } //"string", + public string amsNotifyParty { get; set; } //"string", + public string opEName { get; set; } //"string", + public string opTel { get; set; } //"string", + public string opEmail { get; set; } //"string", + public string acihbl { get; set; } //"string", + public string s0CC0C { get; set; } //"string", + public string goodsName { get; set; } //"string", + public string masterBolIndicatorName { get; set; } //"string", + public string salerCodeName { get; set; } //"string", + public string ckhi { get; set; } //"string", + public string cncm { get; set; } //"string", + public string wncm { get; set; } //"string", + public string orderRemark { get; set; } //"string", + public string exRemark1 { get; set; } //"string", + public string exRemark2 { get; set; } //"string", + public string exRemark3 { get; set; } //"string", + public string exRemark4 { get; set; } //"string", + public decimal? kingTareweight { get; set; } = 0M; + } + + + + /// + /// 提单信息 + /// + public class DingCangTDXX { + + public long Id { get; set; } + + public string bsno { get; set; } //"string", + public string bsstatus { get; set; } //"string", + public string bsstatusname { get; set; } //"string", + public DateTime? bsdate { get; set; } //"2023-03-30T03:12:51.033Z", + public string mblno { get; set; } //"string", + public string hblno { get; set; } //"string", + public string bookingno { get; set; } //"string", + public string contractno { get; set; } //"string", + public string servicecontractno { get; set; } //"string", + public string shipperid { get; set; } //"string", + public string consigneeid { get; set; } //"string", + public string notifypartyid { get; set; } //"string", + public string shipper { get; set; } //"string", + public string consignee { get; set; } //"string", + public string notifyparty { get; set; } //"string", + public string notifypartY2 { get; set; } //"string", + public string yardid { get; set; } //"string", + public string yard { get; set; } //"string", + public string vesselid { get; set; } //"string", + public string vessel { get; set; } //"string", + public string voyno { get; set; } //"string", + public string voynoinner { get; set; } //"string", + public DateTime? etd { get; set; } //"2023-03-30T03:12:51.033Z", + + + public DateTime? atd { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closingdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closedocdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? closevgmdate { get; set; } //"2023-03-30T03:12:51.033Z", + public DateTime? eta { get; set; } //"2023-03-30T03:12:51.033Z", + public string placereceiptid { get; set; } //"string", + public string placereceipt { get; set; } //"string", + public string portloadid { get; set; } //"string", + public string portload { get; set; } //"string", + public string portdischargeid { get; set; } //"string", + public string portdischarge { get; set; } //"string", + public string placedeliveryid { get; set; } //"string", + public string placedelivery { get; set; } //"string", + public string destinationid { get; set; } //"string", + public string destination { get; set; } //"string", + public string nobill { get; set; } //"string", + public string copynobill { get; set; } //"string", + public string issuetype { get; set; } //"string", + public DateTime? issuedate { get; set; } //"2023-03-30T03:12:51.033Z", + public string issueplaceid { get; set; } //"string", + public string issueplace { get; set; } //"string", + public string blfrt { get; set; } //"string", + public string prepardat { get; set; } //"string", + public string payableat { get; set; } //"string", + public string service { get; set; } //"string", + public string marks { get; set; } //"string", + public string hscode { get; set; } //"string", + public string description { get; set; } //"string", + public int? pkgs { get; set; } = 0; + public string kindpkgs { get; set; } //"string", + public decimal? kgs { get; set; } = 0; + public decimal? cbm { get; set; } = 0; + public string totalno { get; set; } //"string", + public string cntrtotal { get; set; } //"string", + public string carrierid { get; set; } //"string", + public string carrier { get; set; } //"string", + public string cargoid { get; set; } //"string", + public string dclass { get; set; } //"string", + public string dunno { get; set; } //"string", + public string dpage { get; set; } //"string", + public string dlabel { get; set; } //"string", + public string linkman { get; set; } //"string", + public string tempid { get; set; } //"string", + public string tempset { get; set; } //"string", + public string reeferf { get; set; } //"string", + public string humidity { get; set; } //"string", + public string tempmin { get; set; } //"string", + public string tempmax { get; set; } //"string", + public bool? iscontainersoc { get; set; } //true, + public string soremark { get; set; } //"string", + public string siremark { get; set; } //"string", + public string yardremark { get; set; } //"string", + public string compid { get; set; } //"string", + public string compname { get; set; } //"string", + public string shippername { get; set; } //"string", + public string shipperaddR1 { get; set; } //"string", + public string shipperaddR2 { get; set; } //"string", + public string shipperaddR3 { get; set; } //"string", + public string shippercity { get; set; } //"string", + public string shipperprovince { get; set; } //"string", + public string shipperpostcode { get; set; } //"string", + public string shippercountry { get; set; } //"string", + public string shipperattn { get; set; } //"string", + public string shippertel { get; set; } //"string", + public string consigneename { get; set; } //"string", + public string consigneeaddR1 { get; set; } //"string", + public string consigneeaddR2 { get; set; } //"string", + public string consigneeaddR3 { get; set; } //"string", + public string consigneecity { get; set; } //"string", + public string consigneeprovince { get; set; } //"string", + public string consigneepostcode { get; set; } //"string", + public string consigneercountry { get; set; } //"string", + public string consigneeattn { get; set; } //"string", + public string consigneetel { get; set; } //"string", + public string notifypartyname { get; set; } //"string", + public string notifypartyaddR1 { get; set; } //"string", + public string notifypartyaddR2 { get; set; } //"string", + public string notifypartyaddR3 { get; set; } //"string", + public string notifypartycity { get; set; } //"string", + public string notifypartyprovince { get; set; } //"string", + public string notifypartypostcode { get; set; } //"string", + public string notifypartycountry { get; set; } //"string", + public string notifypartyattn { get; set; } //"string", + public string notifypartytel { get; set; } //"string", + public string pono { get; set; } //"string", + public string opid { get; set; } //"string", + public string docid { get; set; } //"string", + public string op { get; set; } //"string", + public string doc { get; set; } //"string", + public string saleid { get; set; } //"string", + public string sale { get; set; } //"string", + public string custserviceid { get; set; } //"string", + public string custservice { get; set; } //"string", + public string customername { get; set; } //"string", + public string forwarder { get; set; } //"string", + public string shipagency { get; set; } //"string", + public string customser { get; set; } //"string", + public string trucker { get; set; } //"string", + public string agentid { get; set; } //"string", + public long? customerid { get; set; } //= 0; + public string forwarderid { get; set; } //"string", + public string shipagencyid { get; set; } //"string", + public string customserid { get; set; } //"string", + public string truckerid { get; set; } //"string", + public string agentname { get; set; } //"string", + + /// + /// 境外代理 内容 + /// + public string foreignAgent { get; set; } //境外代理, + + public string weituo { get; set; } //"string", + public string consigneedooraddr { get; set; } //"string", + public string shipperdooraddr { get; set; } //"string", + public string scaccode { get; set; } //"string", + public string itncode { get; set; } //"string", + public string prepardatid { get; set; } //"string", + public string payableatid { get; set; } //"string", + public string custno { get; set; } //"string", + public string transportid { get; set; } //"string", + public string transport { get; set; } //"string", + public string thirdpayaddr { get; set; } //"string", + public string yardcontract { get; set; } //"string", + public string yardcontracttel { get; set; } //"string", + public string yardcontractemail { get; set; } //"string", + public bool? feeself { get; set; } //true, + public string lanecode { get; set; } //"string", + public string lanename { get; set; } //"string", + public string freightpayer { get; set; } //"string", + public string goodscode { get; set; } //"string", + public string goodsname { get; set; } //"string", + public string pkgstotal { get; set; } //"string", + public string kgstotal { get; set; } //"string", + public string cbmtotal { get; set; } //"string", + public string routeid { get; set; } //"string", + public string route { get; set; } //"string", + public string warehouse { get; set; } //"string", + public string warehouseID { get; set; } //"string", + public string epCode { get; set; } //"string", + public string lineName { get; set; } //"string", + public List ctnInputs { get; set; } + public DingCangbookingEDIExt bookingEDIExt { get; set; } + } + + public class DingCanggoodsStatus + { + public string statusName { get; set; } //"string", + public DateTime? finishTime { get; set; }//2023-03-30T03:12:51.034Z", + public string remark { get; set; } //"string", + public string extData { get; set; }//"string", + + } + + public class 大简云业务函电 { + public t_op_seae_md opseae { get; set; } + public t_op_letter_md HeadLetter { get; set; } = new t_op_letter_md(); + + public OpLetterBase ChildLetter { get; set; } + + public 大简云业务函电() { } + + public bool IsDeleted { get; set; } = false; + + public static 大简云业务函电 getHelper(string lettername, OpLetterBase childletter) { + var ds6 = new DS6DataContext(); + var opseaeList = ds6.t_op_seae.Where(x => x.DJYID == childletter.DJYBOOKINGID).ToList(); + var result = new 大简云业务函电(); + if (opseaeList == null || opseaeList.Count == 0) { + return result; + } + result.opseae = opseaeList[0]; + result.HeadLetter = new t_op_letter_md(); + result.HeadLetter.编号 = result.opseae.编号; + result.HeadLetter.函电名称 = lettername; + + //该字段用于:保存新增的业务函电时,需先保存op_letter ,但该表是自增序列号表, + //如这种业务函电在一个订舱中多于一个(如派车),则无法定位到正确的新增op_letter + //故增加此字段,以记录该条业务函电的主键。 + + //如这种业务函电在一个订舱中只有一个(如订舱),则djyid和DJYBOOKINGID字符串相同; + + //如多于一个(如派车),则op_letter.djybookingid=op_letter_pc.djybookingid + //且这种业务函电 需要在调用getHelper方法获得【大简云业务函电】对象时,传DJYBOOKINGID字段值 + result.HeadLetter.DJYBOOKINGID = childletter.DJYBOOKINGID; + result.HeadLetter.DJYLETTERID = childletter.DJYLETTERID; + + result.ChildLetter = childletter; + return result; + } + + public void DoSave() { + if (string.IsNullOrWhiteSpace(HeadLetter.编号)) + { + return; + } + else { + //如果具体业务函电已存在 则更新之 + //判断依据为是否存在 + SaveLetter(); + } + } + + public void SaveLetter(object 大简云对象=null) { + var result = new OpLetterBase(); + var ds6 = new DS6DataContext(); + + void SaveHeadLetter(string 函电名称) { + // + ds6.t_op_letter.Add(HeadLetter); + ds6.SaveChanges(); + + var letterheads = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == HeadLetter.函电名称).ToList(); + + if (letterheads != null || letterheads.Count > 0) { + + HeadLetter = letterheads[0]; + } + //return new t_op_letter_md(); + + } + + void UpdHeadLetter(string 函电名称) + { + // + + var UpdHeadLetterList = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称== 函电名称).ToList(); + + if (UpdHeadLetterList != null || UpdHeadLetterList.Count > 0) + { + var UpdHead = UpdHeadLetterList[0]; + UpdHead.HEAD_TO = HeadLetter.HEAD_TO; + UpdHead.HEAD_ATTN = HeadLetter.HEAD_ATTN; + UpdHead.签发人 = HeadLetter.签发人; + UpdHead.签发日期 = HeadLetter.签发日期; + } + //return new t_op_letter_md(); + + } + + void DelHeadLetter(string 函电名称) + { + var delheadList = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == 函电名称).ToList(); + if (delheadList != null && delheadList.Count > 0) { + var delhead= delheadList[0]; + ds6.t_op_letter.Remove(delhead); + } + } + + //没有找到业务 也就没有可以保存的op_letter 直接退出 + if (HeadLetter == null) return; + + //var currlist = new List(); + if (HeadLetter.函电名称 == "入货通知") { + + var currHeadLetterList= ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称== HeadLetter.函电名称).ToList(); + + var currlist = new List(); + + if (currHeadLetterList != null && currHeadLetterList.Count > 0) { + var headid = currHeadLetterList[0].LE_ID; + currlist = ds6.t_op_letter_rh.Where(x => x.LE_ID == headid).ToList(); + } + + //首先判断是否为删除 如果是 执行删除 + if (IsDeleted) + { + //找到具体letter 如有则定位到opletter + //两个都要删除 + + if (currHeadLetterList != null && currHeadLetterList.Count > 0) + { + + //ds6.t_op_letter.Remove(currHeadLetterList[0]); + + if (currlist != null && currlist.Count > 0) + { + var delrec = currlist[0]; + ds6.t_op_letter_rh.Remove(delrec); + } + + DelHeadLetter(HeadLetter.函电名称); + + ds6.SaveChanges(); + return; + } + } + else + { + + if (currlist != null && currlist.Count > 0) + { + UpdHeadLetter(HeadLetter.函电名称); + //寻找 + var updrec = currlist[0]; + updrec.getCopy(ChildLetter, typeof(t_op_letter_rh_md)); + ds6.t_op_letter_rh.AddOrUpdate(updrec); + + } + else + { + SaveHeadLetter(HeadLetter.函电名称); + if (HeadLetter.LE_ID == 0) return; + ChildLetter.LE_ID = HeadLetter.LE_ID; + ds6.t_op_letter_rh.Add((t_op_letter_rh_md)ChildLetter); + } + } + } + if (HeadLetter.函电名称 == "派车通知") + { + var 派车对象 = (大简云派车)大简云对象; + + var currHeadLetterList = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.函电名称 == HeadLetter.函电名称 && x.DJYLETTERID== HeadLetter.DJYLETTERID).ToList(); + + var currlist = new List(); + + if (currHeadLetterList != null && currHeadLetterList.Count > 0) + { + var headid = currHeadLetterList[0].LE_ID; + currlist = ds6.t_op_letter_pc.Where(x => x.LE_ID == headid).ToList(); + } + + if (IsDeleted) + { + //找到具体letter 如有则定位到opletter + //两个都要删除 + if (currlist != null && currlist.Count > 0) + { + var delrec = currlist[0]; + ds6.t_op_letter_pc.Remove(delrec); + + DelHeadLetter(HeadLetter.函电名称); + + ds6.SaveChanges(); + return; + } + opseae.承运车队 = ""; + opseae.派车日期 = null; + ds6.t_op_seae.AddOrUpdate(opseae); + } + else { + opseae.承运车队 = ((t_op_letter_pc_md)ChildLetter).承运车队; + + var 派车日 =new DateTime(); + try + { + if (派车对象.main.truckTime != null) + { + 派车日 = (DateTime)(派车对象.main.truckTime); + 派车日 = new DateTime(派车日.Year, 派车日.Month, 派车日.Day); + } + } + catch (Exception) + { + } + + opseae.派车日期 = 派车日; + + ds6.t_op_seae.AddOrUpdate(opseae); + + if (currHeadLetterList == null || currHeadLetterList.Count == 0) + { + ds6.t_op_letter.Add(HeadLetter); + ds6.SaveChanges(); + + var letterheads = ds6.t_op_letter.Where(x => x.编号 == opseae.编号 && x.DJYLETTERID== HeadLetter.DJYLETTERID).ToList(); + + if (letterheads != null || letterheads.Count > 0) + { + HeadLetter = letterheads[0]; + } + } + + if (currlist != null && currlist.Count > 0) + { + //寻找 + var updrec = currlist[0]; + updrec.getCopy(ChildLetter, typeof(t_op_letter_pc_md)); + ds6.t_op_letter_pc.AddOrUpdate(updrec); + + } + else + { + + + if (HeadLetter.LE_ID == 0) return; + ChildLetter.LE_ID = HeadLetter.LE_ID; + ds6.t_op_letter_pc.Add((t_op_letter_pc_md)ChildLetter); + } + + + var ctninfo = 派车对象.main.contaList; + var currctn = ds6.t_op_letter_pc_ctn.Where(x => x.LE_ID == HeadLetter.LE_ID).ToList(); + + if (currctn != null && currctn.Count > 0) + { + ds6.t_op_letter_pc_ctn.RemoveRange(currctn); + } + + if (ctninfo != null && ctninfo.Count > 0) + { + foreach (var djyctn in ctninfo) + { + var newctn = djyctn.GetPcCtn(HeadLetter); + ds6.t_op_letter_pc_ctn.Add(newctn); + } + } + } + + + } + + ds6.SaveChanges(); + } + } + + public class 大简云入货通知 + { + public long BookingId { get; set; } + + public long Id { get; set; } + /// + /// TO + /// + public string ToName { get; set; } + /// + /// ATTN + /// + public string Attn { get; set; } + /// + /// ATTN电话 + /// + public string AttnTel { get; set; } + /// + /// ATTN邮箱 + /// + public string AttnMail { get; set; } + /// + /// FROM + /// + public string FromName { get; set; } + /// + /// FROM电话 + /// + public string FromTel { get; set; } + /// + /// FROM邮箱 + /// + public string FromMail { get; set; } + /// + /// 描述 + /// + public string Description { get; set; } + /// + /// 截单时间 + /// + public DateTime? CloseDocTime { get; set; } + /// + /// 截港时间 + /// + public DateTime? ClosingTime { get; set; } + /// + /// 截VGM时间 + /// + public DateTime? VgmTime { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } + + /// + /// 场站代码 + /// + public string YARDID { get; set; } + /// + /// 场站 + /// + public string YARD { get; set; } + /// + /// 场站联系人 + /// + public string YARDCONTRACT { get; set; } + /// + /// 场站联系人电话 + /// + public string YARDCONTRACTTEL { get; set; } + + /// + /// 是否删除 ture删除 否则新增或修改 + /// + public bool IsDeleted { get; set; } = false; + + public 大简云业务函电 GetLetter() { + var letterchild = new t_op_letter_rh_md + { + LE_ID = 0, + 入货场站 = SetLength( YARD,30), + 入货截至时间 = ClosingTime == null ? "" : ((DateTime)ClosingTime).ToString("yyyy-MM-dd"), + 场站联系人 = SetLength(YARDCONTRACT,60), + 场站联系电话 = SetLength(YARDCONTRACTTEL,60), + 备注 = SetLength(Remark,200), + DJYLETTERID = Id, + DJYBOOKINGID= BookingId + }; + var result = 大简云业务函电.getHelper( "入货通知", letterchild); + result.HeadLetter.HEAD_TO = SetLength(ToName,60); + result.HeadLetter.HEAD_ATTN = SetLength(Attn,60); + result.HeadLetter.签发人 = SetLength(FromName,10); + result.HeadLetter.签发日期 = DateTime.Now; + + result.IsDeleted= IsDeleted; + //result.IsDeleted = true; + return result; + } + } + + public class 大简云派车 + { + public class 派车head + { + public long gid { get; set; } + public string messageType { get; set; } + public string senderId { get; set; } + public string senderName { get; set; } + public string receiverId { get; set; } + public string receiverName { get; set; } + public string token { get; set; } + public string version { get; set; } + public string requestDate { get; set; } + public string senderKey { get; set; } + public string requestAction { get; set; } + } + + public class 派车main + { + public string operType { get; set; } + + //tenantId + + /// + /// 派车单ID + /// + public long id { get; set; } + /// + /// 订舱ID + /// + public long bookingId { get; set; } + + public long? truckId { get; set; } + public string truckCode { get; set; } + public string truckName { get; set; } + public string toName { get; set; } + public string attn { get; set; } + public string attnTel { get; set; } + public string attnMail { get; set; } + public string attnFax { get; set; } + public string fromName { get; set; } + public string fromTel { get; set; } + public string fromMail { get; set; } + public string fromFax { get; set; } + public decimal? kgs { get; set; } + public decimal? fee { get; set; } + public string payMethod { get; set; } + public string payMethodName { get; set; } + public DateTime? truckTime { get; set; } + public string yardid { get; set; } + public string yard { get; set; } + public string yardcontract { get; set; } + public string yardcontracttel { get; set; } + public string factoryId { get; set; } + public string factoryCode { get; set; } + public string factoryName { get; set; } + public string factoryContact { get; set; } + public string factoryTel { get; set; } + public string returnTime { get; set; } + public string inYardID { get; set; } + public string inYard { get; set; } + public string inYardContact { get; set; } + public string inYardContractTel { get; set; } + public DateTime? needArriveTime { get; set; } + public string closingTime { get; set; } + public string pickUpTime { get; set; } + public string isGuaJi { get; set; } + public string attention { get; set; } + public string remark { get; set; } + public string dispatcherId { get; set; } + public string dispatcherName { get; set; } + public string factoryAddr { get; set; } + public string callBackStatus { get; set; } + + public bool IsDeleted { get { + return operType == "Delete"; + } + } + public List contaList { get; set; }=new List(); + + public string 箱型箱量() { + var result = ""; + var 箱型箱量dic=new Dictionary(); + foreach (var conta in contaList) { + if (箱型箱量dic.ContainsKey(conta.ctnall)) + { + 箱型箱量dic[conta.ctnall] += conta.ctnnum == null ? 0 : (int)conta.ctnnum; + } + else { + 箱型箱量dic.Add(conta.ctnall, conta.ctnnum == null ? 0 : (int)conta.ctnnum); + } + } + + if (箱型箱量dic.Count > 0) { + foreach (var item in 箱型箱量dic) { + if (result == "") result += " "; + result += item.Key+"*"+item.Value.ToString(); + } + + } + + return result; + } + } + + public class conta + { + public string ctncode { get; set; } + public string ctnall { get; set; } + public int? ctnnum { get; set; } + public int? teu { get; set; } + public string cntrno { get; set; } + public string sealno { get; set; } + public decimal? pkgs { get; set; } + public string kindpkgs { get; set; } + public decimal? kgs { get; set; } + public decimal? cbm { get; set; } + public decimal? tareweight { get; set; } + public string ctnstatus { get; set; } + public string weightype { get; set; } + public string weighkgs { get; set; } + public string weighattn { get; set; } + public string vgmconncom { get; set; } + public string weightel { get; set; } + public string weighdate { get; set; } + public string vgmaddr { get; set; } + public string vgmemail { get; set; } + public string remark { get; set; } + public string carNumber { get; set; } + public string carDriver { get; set; } + public string carDriverTel { get; set; } + + public t_op_letter_pc_ctn_md GetPcCtn(t_op_letter_md HeadLetter) { + var result =new t_op_letter_pc_ctn_md() + { + LE_ID= HeadLetter.LE_ID, + 表现形式= ctnall, + 箱号 = cntrno, + 封号 = sealno, + 数量 = ctnnum==null?0:(int)ctnnum, + 件数 = pkgs==null?0:(int)pkgs, + 包装 = kindpkgs, + 重量 = kgs, + 尺码 = cbm, + 车牌号 = carNumber, + 司机 = carDriver, + 司机电话 = carDriverTel + }; + return result; + } + } + + public 派车head head { get; set; } + public 派车main main { get; set; } + + + public 大简云业务函电 GetLetter() + { + var letterchild = new t_op_letter_pc_md + { + 承运车队 = SetLength(main.truckName,30), + 箱型箱量 = SetLength(main.箱型箱量(),50), + 背箱场站 = SetLength(main.yard,30), + 场站联系人 = SetLength(main.yardcontract,60), + 场站电话 = SetLength(main.yardcontracttel,60), + 要求到厂时间 = main.needArriveTime == null ? "" : ((DateTime)main.needArriveTime).ToString("yyyy-MM-dd HH:mm:ss"), + 厂家地址 = SetLength(main.factoryAddr,100), + 厂家联系人 = SetLength(main.factoryContact,60), + 厂家联系电话 = SetLength(main.factoryTel,60), + 返箱地址 = SetLength(main.inYard,100), + 返箱联系人 = SetLength(main.inYardContact,60), + 返箱联系电话 = SetLength(main.inYardContractTel,60), + 备注 = SetLength(main.remark,200), + 陆运费 = main.fee, + 结算方式 = main.payMethodName, + DJYLETTERID = main.id, + DJYBOOKINGID = main.bookingId + }; + var result = 大简云业务函电.getHelper( "派车通知", letterchild); + if (result.HeadLetter == null) return result; + result.IsDeleted = main.IsDeleted; + if(!string.IsNullOrWhiteSpace(main.toName)) + result.HeadLetter.HEAD_TO = SetLength(main.toName,60); + if (!string.IsNullOrWhiteSpace(main.attn)) + result.HeadLetter.HEAD_ATTN = SetLength(main.attn,60); + if (!string.IsNullOrWhiteSpace(main.fromName)) + result.HeadLetter.签发人 = SetLength(main.fromName,10); + if (!string.IsNullOrWhiteSpace(main.fromName)) + result.HeadLetter.签发日期 = DateTime.Now; + return result; + } + } + + public class 获取编号Helper { + + private static readonly Lazy<获取编号Helper> lazy = new Lazy<获取编号Helper>(() => new 获取编号Helper()); + public static 获取编号Helper Instance { get { return lazy.Value; } } + private 获取编号Helper() { } + + public static int newno { get; set; } = 0; + public string DoGet() { + + + try + { + //logger.Debug("获取编号"); + DS6DataContext DS6Data = new DS6DataContext(); + var 编号 = DS6Data.t_op_seae.Max(m => m.编号); + if (编号 == null) 编号 = "0"; + var new编号 = (int.Parse(编号) + 1).ToString().PadLeft(10, ' '); + + return new编号; + + } + catch (Exception ex) + { + logger.Debug("获取编号错误"); + return DoGet(); + } + finally { + + } + } + } + public class 获取业务编号Helper + { + + private static readonly Lazy<获取业务编号Helper> lazy = new Lazy<获取业务编号Helper>(() => new 获取业务编号Helper()); + public static 获取业务编号Helper Instance { get { return lazy.Value; } } + private 获取业务编号Helper() { } + + /// + /// 调用DS6的委托编号存储过程 + /// + /// + /// SE加会计期间年月 共8位 + /// + public string DS6GetBSNO(string Code) + { + + //string strConnection = "user id=sa;password=sa;initial catalog=MyTest;Server=YHB;Connect Timeout=30"; + using (SqlConnection conn = new SqlConnection(DS6ConnStr)) + { + conn.Open(); + using (SqlCommand sqlComm = conn.CreateCommand()) + { + //设置要调用的存储过程的名称 + sqlComm.CommandText = "p_no_get"; + //指定SqlCommand对象传给数据库的是存储过程的名称而不是sql语句 + sqlComm.CommandType = CommandType.StoredProcedure; + + SqlParameter username = sqlComm.Parameters.Add(new SqlParameter("@Code", SqlDbType.VarChar, 20)); + //指明"@username"是输入参数 + username.Direction = ParameterDirection.Input; + //为“@username”参数赋值 + username.Value = Code; + + SqlParameter Num = sqlComm.Parameters.Add(new SqlParameter("@Num", SqlDbType.VarChar, 20)); + //指定"@password"为输出参数 + Num.Direction = ParameterDirection.Output; + //执行 + sqlComm.ExecuteNonQuery(); + //得到输出参数的值,把赋值给name,注意,这里得到的是object类型的,要进行相应的类型轮换 + string num = Convert.ToString(sqlComm.Parameters["@Num"].Value); + + return num; + //MessageBox.Show(passwrod); + } + } + return ""; + } + } + + #endregion + + static string NumberToEnglishString(int number) + { + if (number < 0) //暂不考虑负数 + { + return ""; + } + if (number < 20) //0到19 + { + switch (number) + { + case 0: + return "zero"; + case 1: + return "one"; + case 2: + return "two"; + case 3: + return "three"; + case 4: + return "four"; + case 5: + return "five"; + case 6: + return "sex"; + case 7: + return "seven"; + case 8: + return "eight"; + case 9: + return "nine"; + case 10: + return "ten"; + case 11: + return "eleven"; + case 12: + return "twelve"; + case 13: + return "thirteen"; + case 14: + return "fourteen"; + case 15: + return "fifteen"; + case 16: + return "sixteen"; + case 17: + return "seventeen"; + case 18: + return "eighteen"; + case 19: + return "nineteen"; + default: + return ""; + } + } + if (number < 100) //20到99 + { + if (number % 10 == 0) //20,30,40,...90的输出 + { + switch (number) + { + case 20: + return "twenty"; + case 30: + return "thirty"; + case 40: + return "forty"; + case 50: + return "fifty"; + case 60: + return "sixty"; + case 70: + return "seventy"; + case 80: + return "eighty"; + case 90: + return "ninety"; + default: + return ""; + } + } + else //21.22,.99 思路:26=20+6 + { + return string.Format("{0} {1}", NumberToEnglishString(10 * (number / 10)), + NumberToEnglishString(number % 10)); + } + } + if (number < 1000) //100到999 百级 + { + if (number % 100 == 0) + { + return string.Format("{0} hundred", NumberToEnglishString(number / 100)); + } + else + { + return string.Format("{0} hundred and {1}", NumberToEnglishString(number / 100), + NumberToEnglishString(number % 100)); + } + } + if (number < 1000000) //1000到999999 千级 + { + if (number % 1000 == 0) + { + return string.Format("{0} thousand", NumberToEnglishString(number / 1000)); + } + else + { + return string.Format("{0} thousand and {1}", NumberToEnglishString(number / 1000), + NumberToEnglishString(number % 1000)); + } + } + if (number < 1000000000) //1000 000到999 999 999 百万级 + { + if (number % 1000 == 0) + { + return string.Format("{0} million", NumberToEnglishString(number / 1000000)); + } + else + { + return string.Format("{0} million and {1}", NumberToEnglishString(number / 1000000), + NumberToEnglishString(number % 1000000)); + } + } + if (number <= int.MaxValue) //十亿 级 + { + if (number % 1000000000 == 0) + { + return string.Format("{0} billion", NumberToEnglishString(number / 1000000000)); + } + else + { + return string.Format("{0} billion and {1}", NumberToEnglishString(number / 1000000000), + NumberToEnglishString(number % 1000000000)); + } + } + return ""; + } + + public static string SetLength(string oldstr, int length) + { + var str = string.IsNullOrWhiteSpace(oldstr) ? "" : (len(oldstr) > length) ? SubString2( oldstr,0, length) : oldstr; + return str; + } + public static int len(string str) + { + System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding(); + byte[] b = n.GetBytes(str); + int length = 0; // l 为字符串的实际长度 + for (int i = 0; i <= b.Length - 1; i++) + { + if (b[i] == 63) //判断是否为汉字或全脚符号 + { + length++; + } + length++; + } + return length; + } + + public static string SubString2(string str, int startIndex, int length) + { + byte[] b = System.Text.Encoding.Default.GetBytes(str); + if(length> b.Length) + { + length = b.Length; + } + return System.Text.Encoding.Default.GetString(b, startIndex, length); + } + + + public static DateTime? SetDayZero(DateTime? dt) + { + var result = new DateTime?(); + result = null; + if (dt != null) result = new DateTime(((DateTime)dt).Year, ((DateTime)dt).Month, ((DateTime)dt).Day); + return result; + } + + public static DateTime? SetDayMinute(DateTime? dt) + { + var result = new DateTime?(); + result = null; + if (dt != null) result = new DateTime(((DateTime)dt).Year, ((DateTime)dt).Month, ((DateTime)dt).Day, ((DateTime)dt).Hour, ((DateTime)dt).Minute, ((DateTime)dt).Second); + return result; + } + + public static string 设置换行(string str) { + if (string.IsNullOrWhiteSpace(str)) return ""; + + var myStr = Regex.Replace(str, "(? dic) + { + var result = ""; + + foreach (var item in dic) + { + result += item.Key + "::" + item.Value + ";;"; + } + + return result; + } + #endregion + + #region 将一个用;;和::隔开的文本转化为dictionary + public static Dictionary StrToDic(string dicstr) + { + var result = new Dictionary(); + + var list = Regex.Split(dicstr, ";;").ToList(); + + foreach (var item in list) + { + var itemarray = Regex.Split(item, "::"); + if (itemarray.Length < 2) continue; + result.Add(itemarray[0], itemarray[1] == null ? "" : itemarray[1]); + } + + return result; + } + #endregion + + public static Dictionary GetLogicInfo(string BSNO, string PROPNAME) + { + + CommonDataContext cdc = new CommonDataContext(); + + var result = new Dictionary(); + + var infoList = cdc.OP_LOGICINFO.Where(x => x.BSNO == BSNO && x.PROPNAME == PROPNAME).ToList(); + + if (infoList != null && infoList.Count > 0) + { + result = StrToDic(infoList[0].PROPVALUE); + } + + return result; + } + + public static void SaveLogicInfo(string BSNO, string PROPNAME, Dictionary InfoDic) + { + + CommonDataContext cdc = new CommonDataContext(); + + var result = new Dictionary(); + + var infoList = cdc.OP_LOGICINFO.Where(x => x.BSNO == BSNO && x.PROPNAME == PROPNAME).ToList(); + + if (infoList != null && infoList.Count > 0) + { + infoList[0].PROPVALUE = DicToStr(InfoDic); + cdc.OP_LOGICINFO.AddOrUpdate(infoList[0]); + cdc.SaveChanges(); + } + else + { + var newinfo = new OP_LOGICINFO_md(); + newinfo.GID = Guid.NewGuid(); + newinfo.BSNO = BSNO; + newinfo.PROPNAME = PROPNAME; + newinfo.PROPVALUE = DicToStr(InfoDic); + cdc.OP_LOGICINFO.Add(newinfo); + cdc.SaveChanges(); + } + } + + #endregion + + //public class ThreadSaveDS6_List + //{ + // public static bool inworking { get; set; } = false; + + // public static List 待处理列表 = new List(); + + // public static List 处理中列表 = new List(); + + // public static List 当前处理中DJYID列表 = new List(); + + // public static void 处理完成(long DJYID) { + + // if (处理中列表 != null && 处理中列表.Count > 0) { + // if (处理中列表.Exists(x => x.Id == DJYID)) { + // try { + // var delrec = 处理中列表.FirstOrDefault(x => x.Id == DJYID); + // 处理中列表.Remove(delrec); + // }catch (Exception e) + // { + // // + // } + // } + // } + // } + // public void FuncSend(object o) + // { + // if (inworking == true) return; + + // inworking = true; + + // if (处理中列表 == null || 处理中列表.Count == 0) + // { + // 当前处理中DJYID列表 = new List(); + // } + // else { + // 当前处理中DJYID列表 = 处理中列表.Select(s => s.Id).ToList(); + // } + + // var newrec = (List)o; + + // foreach (var item in newrec) { + // item.StartDatetime=DateTime.Now; + // } + + // 待处理列表.AddRange(newrec); + + // //var 待处理 + + // void 执行待处理() { + + // var dellist = new List(); + // foreach (var item in 待处理列表) + // { + // if (当前处理中DJYID列表.Exists(x => x == item.Id)) + // { + // continue; + // } + // else + // { + // dellist.Add(item.Id); + // 当前处理中DJYID列表.Add(item.Id); + // 处理中列表.Add(item); + // //Do_DingCangToDS6(item); + // } + // } + // if (dellist != null && dellist.Count > 0) + // { + // foreach (var delid in dellist) + // { + // if (待处理列表.Exists(x => x.Id == delid)) + // { + // var delrec = 待处理列表.FirstOrDefault(x => x.Id == delid); + // 待处理列表.Remove(delrec); + // } + // } + // } + // } + + // try + // { + // while (待处理列表 != null && 待处理列表.Count > 0) { + + // DateTime dt1 = DateTime.Now; + // while ((DateTime.Now - dt1).TotalMilliseconds < 100) + // { + // continue; + // } + + // 执行待处理(); + // } + + // } + // catch (Exception e) + // { + + // } + + // finally { + // inworking = false; + // } + // } + //} + + public class ThreadSaveDS6_Single + { + //public static bool inworking { get; set; } = false; + //public static List 处理中id列表 = new List(); + + public void FuncSend(object o) + { + + var itemstr = (string)o; + + try + { + Do_DingCangToDS6(itemstr); + } + catch (Exception e) + { + var errorobjstr = JsonConvert.SerializeObject(e); + logger.Error($"导入出错:{e}//{errorobjstr}"); + } + + finally + { + //inworking = false; + } + } + } + + } + + + /// + /// 汉字转拼音类 + /// + public class Hz2Py + { + private static int[] pyValue = new int[] + { + -20319,-20317,-20304,-20295,-20292,-20283,-20265,-20257,-20242,-20230,-20051,-20036, + -20032,-20026,-20002,-19990,-19986,-19982,-19976,-19805,-19784,-19775,-19774,-19763, + -19756,-19751,-19746,-19741,-19739,-19728,-19725,-19715,-19540,-19531,-19525,-19515, + -19500,-19484,-19479,-19467,-19289,-19288,-19281,-19275,-19270,-19263,-19261,-19249, + -19243,-19242,-19238,-19235,-19227,-19224,-19218,-19212,-19038,-19023,-19018,-19006, + -19003,-18996,-18977,-18961,-18952,-18783,-18774,-18773,-18763,-18756,-18741,-18735, + -18731,-18722,-18710,-18697,-18696,-18526,-18518,-18501,-18490,-18478,-18463,-18448, + -18447,-18446,-18239,-18237,-18231,-18220,-18211,-18201,-18184,-18183, -18181,-18012, + -17997,-17988,-17970,-17964,-17961,-17950,-17947,-17931,-17928,-17922,-17759,-17752, + -17733,-17730,-17721,-17703,-17701,-17697,-17692,-17683,-17676,-17496,-17487,-17482, + -17468,-17454,-17433,-17427,-17417,-17202,-17185,-16983,-16970,-16942,-16915,-16733, + -16708,-16706,-16689,-16664,-16657,-16647,-16474,-16470,-16465,-16459,-16452,-16448, + -16433,-16429,-16427,-16423,-16419,-16412,-16407,-16403,-16401,-16393,-16220,-16216, + -16212,-16205,-16202,-16187,-16180,-16171,-16169,-16158,-16155,-15959,-15958,-15944, + -15933,-15920,-15915,-15903,-15889,-15878,-15707,-15701,-15681,-15667,-15661,-15659, + -15652,-15640,-15631,-15625,-15454,-15448,-15436,-15435,-15419,-15416,-15408,-15394, + -15385,-15377,-15375,-15369,-15363,-15362,-15183,-15180,-15165,-15158,-15153,-15150, + -15149,-15144,-15143,-15141,-15140,-15139,-15128,-15121,-15119,-15117,-15110,-15109, + -14941,-14937,-14933,-14930,-14929,-14928,-14926,-14922,-14921,-14914,-14908,-14902, + -14894,-14889,-14882,-14873,-14871,-14857,-14678,-14674,-14670,-14668,-14663,-14654, + -14645,-14630,-14594,-14429,-14407,-14399,-14384,-14379,-14368,-14355,-14353,-14345, + -14170,-14159,-14151,-14149,-14145,-14140,-14137,-14135,-14125,-14123,-14122,-14112, + -14109,-14099,-14097,-14094,-14092,-14090,-14087,-14083,-13917,-13914,-13910,-13907, + -13906,-13905,-13896,-13894,-13878,-13870,-13859,-13847,-13831,-13658,-13611,-13601, + -13406,-13404,-13400,-13398,-13395,-13391,-13387,-13383,-13367,-13359,-13356,-13343, + -13340,-13329,-13326,-13318,-13147,-13138,-13120,-13107,-13096,-13095,-13091,-13076, + -13068,-13063,-13060,-12888,-12875,-12871,-12860,-12858,-12852,-12849,-12838,-12831, + -12829,-12812,-12802,-12607,-12597,-12594,-12585,-12556,-12359,-12346,-12320,-12300, + -12120,-12099,-12089,-12074,-12067,-12058,-12039,-11867,-11861,-11847,-11831,-11798, + -11781,-11604,-11589,-11536,-11358,-11340,-11339,-11324,-11303,-11097,-11077,-11067, + -11055,-11052,-11045,-11041,-11038,-11024,-11020,-11019,-11018,-11014,-10838,-10832, + -10815,-10800,-10790,-10780,-10764,-10587,-10544,-10533,-10519,-10331,-10329,-10328, + -10322,-10315,-10309,-10307,-10296,-10281,-10274,-10270,-10262,-10260,-10256,-10254 + }; + + + private static string[] pyName = new string[] + { + "A","Ai","An","Ang","Ao","Ba","Bai","Ban","Bang","Bao","Bei","Ben", + "Beng","Bi","Bian","Biao","Bie","Bin","Bing","Bo","Bu","Ba","Cai","Can", + "Cang","Cao","Ce","Ceng","Cha","Chai","Chan","Chang","Chao","Che","Chen","Cheng", + "Chi","Chong","Chou","Chu","Chuai","Chuan","Chuang","Chui","Chun","Chuo","Ci","Cong", + "Cou","Cu","Cuan","Cui","Cun","Cuo","Da","Dai","Dan","Dang","Dao","De", + "Deng","Di","Dian","Diao","Die","Ding","Diu","Dong","Dou","Du","Duan","Dui", + "Dun","Duo","E","En","Er","Fa","Fan","Fang","Fei","Fen","Feng","Fo", + "Fou","Fu","Ga","Gai","Gan","Gang","Gao","Ge","Gei","Gen","Geng","Gong", + "Gou","Gu","Gua","Guai","Guan","Guang","Gui","Gun","Guo","Ha","Hai","Han", + "Hang","Hao","He","Hei","Hen","Heng","Hong","Hou","Hu","Hua","Huai","Huan", + "Huang","Hui","Hun","Huo","Ji","Jia","Jian","Jiang","Jiao","Jie","Jin","Jing", + "Jiong","Jiu","Ju","Juan","Jue","Jun","Ka","Kai","Kan","Kang","Kao","Ke", + "Ken","Keng","Kong","Kou","Ku","Kua","Kuai","Kuan","Kuang","Kui","Kun","Kuo", + "La","Lai","Lan","Lang","Lao","Le","Lei","Leng","Li","Lia","Lian","Liang", + "Liao","Lie","Lin","Ling","Liu","Long","Lou","Lu","Lv","Luan","Lue","Lun", + "Luo","Ma","Mai","Man","Mang","Mao","Me","Mei","Men","Meng","Mi","Mian", + "Miao","Mie","Min","Ming","Miu","Mo","Mou","Mu","Na","Nai","Nan","Nang", + "Nao","Ne","Nei","Nen","Neng","Ni","Nian","Niang","Niao","Nie","Nin","Ning", + "Niu","Nong","Nu","Nv","Nuan","Nue","Nuo","O","Ou","Pa","Pai","Pan", + "Pang","Pao","Pei","Pen","Peng","Pi","Pian","Piao","Pie","Pin","Ping","Po", + "Pu","Qi","Qia","Qian","Qiang","Qiao","Qie","Qin","Qing","Qiong","Qiu","Qu", + "Quan","Que","Qun","Ran","Rang","Rao","Re","Ren","Reng","Ri","Rong","Rou", + "Ru","Ruan","Rui","Run","Ruo","Sa","Sai","San","Sang","Sao","Se","Sen", + "Seng","Sha","Shai","Shan","Shang","Shao","She","Shen","Sheng","Shi","Shou","Shu", + "Shua","Shuai","Shuan","Shuang","Shui","Shun","Shuo","Si","Song","Sou","Su","Suan", + "Sui","Sun","Suo","Ta","Tai","Tan","Tang","Tao","Te","Teng","Ti","Tian", + "Tiao","Tie","Ting","Tong","Tou","Tu","Tuan","Tui","Tun","Tuo","Wa","Wai", + "Wan","Wang","Wei","Wen","Weng","Wo","Wu","Xi","Xia","Xian","Xiang","Xiao", + "Xie","Xin","Xing","Xiong","Xiu","Xu","Xuan","Xue","Xun","Ya","Yan","Yang", + "Yao","Ye","Yi","Yin","Ying","Yo","Yong","You","Yu","Yuan","Yue","Yun", + "Za", "Zai","Zan","Zang","Zao","Ze","Zei","Zen","Zeng","Zha","Zhai","Zhan", + "Zhang","Zhao","Zhe","Zhen","Zheng","Zhi","Zhong","Zhou","Zhu","Zhua","Zhuai","Zhuan", + "Zhuang","Zhui","Zhun","Zhuo","Zi","Zong","Zou","Zu","Zuan","Zui","Zun","Zuo" + }; + + /// + /// 把汉字转换成拼音(全拼) + /// + /// 汉字字符串 + /// 转换后的拼音(全拼)字符串 + public static string Convert(string hzString) + { + // 匹配中文字符 + Regex regex = new Regex("^[\u4e00-\u9fa5]$"); + byte[] array = new byte[2]; + string pyString = ""; + int chrAsc = 0; + int i1 = 0; + int i2 = 0; + char[] noWChar = hzString.ToCharArray(); + + for (int j = 0; j < noWChar.Length; j++) + { + // 中文字符 + if (regex.IsMatch(noWChar[j].ToString())) + { + array = System.Text.Encoding.Default.GetBytes(noWChar[j].ToString()); + i1 = (short)(array[0]); + i2 = (short)(array[1]); + chrAsc = i1 * 256 + i2 - 65536; + if (chrAsc > 0 && chrAsc < 160) + { + pyString += noWChar[j]; + } + else + { + // 修正部分文字 + if (chrAsc == -9254) // 修正“圳”字 + pyString += "Zhen"; + else + { + for (int i = (pyValue.Length - 1); i >= 0; i--) + { + if (pyValue[i] <= chrAsc) + { + pyString += pyName[i]; + break; + } + } + } + } + } + // 非中文字符 + else + { + pyString += noWChar[j].ToString(); + } + } + return pyString; + } + } + + + + + + //private static string GetCharSpellCode(string CnChar) + //{ + // long iCnChar; + + + // byte[] ZW = System.Text.Encoding.Default.GetBytes(CnChar); + + // //如果是字母,则直接返回 + // if (ZW.Length == 1) + // { + // return CnChar.ToUpper(); + // } + // else + // { + // // get the array of byte from the single char + // int i1 = (short)(ZW[0]); + // int i2 = (short)(ZW[1]); + // iCnChar = i1 * 256 + i2; + // } + // #region table of the constant list + // //expresstion + // //table of the constant list + // // 'A'; //45217..45252 + // // 'B'; //45253..45760 + // // 'C'; //45761..46317 + // // 'D'; //46318..46825 + // // 'E'; //46826..47009 + // // 'F'; //47010..47296 + // // 'G'; //47297..47613 + + // // 'H'; //47614..48118 + // // 'J'; //48119..49061 + // // 'K'; //49062..49323 + // // 'L'; //49324..49895 + // // 'M'; //49896..50370 + // // 'N'; //50371..50613 + // // 'O'; //50614..50621 + // // 'P'; //50622..50905 + // // 'Q'; //50906..51386 + + // // 'R'; //51387..51445 + // // 'S'; //51446..52217 + // // 'T'; //52218..52697 + // //没有U,V + // // 'W'; //52698..52979 + // // 'X'; //52980..53640 + // // 'Y'; //53689..54480 + // // 'Z'; //54481..55289 + // #endregion + // // iCnChar match the constant + // if ((iCnChar >= 45217) && (iCnChar <= 45252)) + // { + // return "A"; + // } + // else if ((iCnChar >= 45253) && (iCnChar <= 45760)) + // { + // return "B"; + // } + // else if ((iCnChar >= 45761) && (iCnChar <= 46317)) + // { + // return "C"; + // } + // else if ((iCnChar >= 46318) && (iCnChar <= 46825)) + // { + // return "D"; + // } + // else if ((iCnChar >= 46826) && (iCnChar <= 47009)) + // { + // return "E"; + // } + // else if ((iCnChar >= 47010) && (iCnChar <= 47296)) + // { + // return "F"; + // } + // else if ((iCnChar >= 47297) && (iCnChar <= 47613)) + // { + // return "G"; + // } + // else if ((iCnChar >= 47614) && (iCnChar <= 48118)) + // { + // return "H"; + // } + // else if ((iCnChar >= 48119) && (iCnChar <= 49061)) + // { + // return "J"; + // } + // else if ((iCnChar >= 49062) && (iCnChar <= 49323)) + // { + // return "K"; + // } + // else if ((iCnChar >= 49324) && (iCnChar <= 49895)) + // { + // return "L"; + // } + // else if ((iCnChar >= 49896) && (iCnChar <= 50370)) + // { + // return "M"; + // } + + // else if ((iCnChar >= 50371) && (iCnChar <= 50613)) + // { + // return "N"; + // } + // else if ((iCnChar >= 50614) && (iCnChar <= 50621)) + // { + // return "O"; + // } + // else if ((iCnChar >= 50622) && (iCnChar <= 50905)) + // { + // return "P"; + // } + // else if ((iCnChar >= 50906) && (iCnChar <= .51386)) + // { + // return "Q"; + // } + // else if ((iCnChar >= 51387) && (iCnChar <= 51445)) + // { + // return "R"; + // } + // else if ((iCnChar >= 51446) && (iCnChar <= 52217)) + // { + // return "S"; + // } + // else if ((iCnChar >= 52218) && (iCnChar <= 52697)) + // { + // return "T"; + // } + // else if ((iCnChar >= 52698) && (iCnChar <= 52979)) + // { + // return "W"; + // } + // else if ((iCnChar >= 52980) && (iCnChar <= 53640)) + // { + // return "X"; + // } + // else if ((iCnChar >= 53689) && (iCnChar <= 54480)) + // { + // return "Y"; + // } + // else if ((iCnChar >= 54481) && (iCnChar <= 55289)) + // { + // return "Z"; + // } + // else return ("?"); + //} +} diff --git a/D7DJYMQ/DSWeb.DJYMQ_TemporaryKey.pfx b/D7DJYMQ/DSWeb.DJYMQ_TemporaryKey.pfx new file mode 100644 index 00000000..56d7387f Binary files /dev/null and b/D7DJYMQ/DSWeb.DJYMQ_TemporaryKey.pfx differ diff --git a/D7DJYMQ/DsSendMail.cs b/D7DJYMQ/DsSendMail.cs new file mode 100644 index 00000000..e2610df6 --- /dev/null +++ b/D7DJYMQ/DsSendMail.cs @@ -0,0 +1,359 @@ +using System; +using System.Text; +using System.Net; +using System.Net.Mail; +using System.Net.Mime; +using System.Threading; +using System.Reflection; +using System.IO; +using System.Globalization; +using System.Linq; + +namespace D7DJYMQ +{ + /// + /// 邮件发送类 + /// + public class SendEmail + { + private MailMessage mailMessage = new MailMessage(); //实例化一个邮件类 + + #region 构造函数 + /// + /// 构造函数 + /// + /// 收件人地址(多个以,号分开) + /// 发件人地址 + /// 主题 + /// 正文 + public SendEmail(string toAddresses, string fromAddress, string title, string body) + : this(toAddresses, fromAddress, "", "", title, body, false) + { + } + + /// + /// 构造函数 + /// + /// 收件人地址 + /// 发件人地址 + /// 收件人名字 + /// 发件人姓名 + /// 主题 + /// 正文 + /// 正文是否为html格式 + public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml) + { + + mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936)); + if (toName.Equals("")) + mailMessage.To.Add(toAddress); + else + mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936))); + + mailMessage.Subject = title; + mailMessage.SubjectEncoding = Encoding.GetEncoding(936); + + mailMessage.Body = body; + mailMessage.IsBodyHtml = isBodyHtml; + mailMessage.BodyEncoding = Encoding.GetEncoding(936); + } + #endregion + + /// + /// 设置SMTP,并且将邮件发送出去 + /// 所有参数都设置完成后再调用该方法 + /// + /// 发件人密码 + /// SMTP服务器地址 + public void SetSmtp(string password, string smtpHost) + { + SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal); + } + + /// + /// 设置SMTP,并且将邮件发送出去 + /// 所有参数都设置完成后再调用该方法 + /// + /// 发件人地址(必须为真实有效的email地址) + /// 发件人密码 + /// SMTP服务器地址 + /// SMTP服务器的端口 + /// SMTP服务器是否启用SSL加密 + /// 邮件的优先级 + public void SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) + { + SmtpClient smtp = new SmtpClient(smtpHost,smtpPort); +// smtp.DeliveryMethod = SmtpDeliveryMethod.Network; + smtp.DeliveryMethod = SmtpDeliveryMethod.Network; + + // smtp.UseDefaultCredentials = true; + //if (isEnableSsl) + //{ + // smtp.UseDefaultCredentials = true; + // System.Net.NetworkCredential nc = new System.Net.NetworkCredential(address, password); + // smtp.Credentials = nc.GetCredential(smtpHost, smtpPort, "NTLM"); + //} + //else + + System.Net.NetworkCredential nc = new System.Net.NetworkCredential(address, password); + smtp.Credentials = nc; + + + //smtp.Credentials = new NetworkCredential(address, password); + //smtp.Host = smtpHost; + //smtp.Port = smtpPort; + + + smtp.EnableSsl = isEnableSsl; + // smtp.UseDefaultCredentials = true; + // mailMessage.Priority = priority; + try + { + smtp.Send(mailMessage); //发送邮件 + } + catch (Exception e) + { + smtp.Dispose(); + } + finally + { + + smtp.Dispose(); + } + smtp.Dispose(); + } + + + + class Mailinfo { + public SendEmail se { get; set; } + public string address { get; set; } + public string password { get; set; } + public string smtpHost { get; set; } + public int smtpPort { get; set; } + public bool isEnableSsl { get; set; } + public MailPriority priority { get; set; } + + public Mailinfo(SendEmail se, string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) + { + this.se = se; + this.address = address; + this.password = password; + this.smtpHost = smtpHost; + this.smtpPort = smtpPort; + this.isEnableSsl = isEnableSsl; + this.priority = priority; + } + } + + class ThreadMail + { + + public void FuncSend(object o) + { + Mailinfo Mailinfo = o as Mailinfo; + + Mailinfo.se.SetSmtp(Mailinfo.address, Mailinfo.password, Mailinfo.smtpHost, Mailinfo.smtpPort, Mailinfo.isEnableSsl, Mailinfo.priority); + } + } + + public void SetSmtp_thread( string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) { + ThreadMail tmail = new ThreadMail(); + //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + Thread thread1 = new Thread(new ParameterizedThreadStart(tmail.FuncSend)); + Mailinfo mi = new Mailinfo(this, address, password, smtpHost, smtpPort, isEnableSsl, priority); + thread1.Start(mi); + } + + #region //设置邮件地址 + /// + /// 设置更多收件人 + /// + /// 收件人地址 + public void SetMoreToAddress(string toAddresses) + { + mailMessage.To.Add(toAddresses); + } + + /// + /// 设置更多收件人 + /// + /// 收件人地址 + /// 收件人名字 + public void SetMoreToAddress(string toAddress, string toName) + { + mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936))); + } + + /// + /// 设置抄送者(多个以,号分开) + /// + /// 抄送者地址 + public void SetCarbonCopyFor(string ccAddresses) + { + mailMessage.CC.Add(ccAddresses); + } + + /// + /// 设置抄送者 + /// + /// 抄送者地址 + /// 抄送者名字 + public void SetCarbonCopyFor(string ccAddress, string ccName) + { + mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936))); + } + + /// + /// 设置密送者(多个以,号分开) + /// + /// 密送者 + public void SetBlindCarbonCopyFor(string bccAddresses) + { + mailMessage.Bcc.Add(bccAddresses); + } + + /// + /// 设置密送者 + /// + /// 密送者 + /// 密送者名字 + public void SetBlindCarbonCopyFor(string bccAddress, string bccName) + { + mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936))); + } + #endregion + + #region 添加附件 + /// + /// 添加附件(自动识别文件类型) + /// + /// 单个文件的路径 + public void Attachments(string fileName) + { + mailMessage.Attachments.Add(new Attachment(fileName)); + } + + /// + /// 添加附件(默认为富文本RTF格式) + /// + /// 单个文件的路径 + public void AttachmentsForRTF(string fileName) + { + mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Rtf)); + } + + + //public void SaveToEml(string emlFileAbsolutePath) + //{ + // const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; + // using (MemoryStream ms = new MemoryStream()) + // { + //     Assembly assembly = typeof(System.Net.Mail.SmtpClient).Assembly; + //     Type tMailWriter = assembly.GetType("System.Net.Mail.MailWriter"); + //     object mailWriter = Activator.CreateInstance(tMailWriter, flags, null, new object[] { ms }, CultureInfo.InvariantCulture); + // mailMessage.GetType().GetMethod("Send", flags).Invoke(mailMessage, new object[] { mailWriter, true }); + //     File.WriteAllText(emlFileAbsolutePath, System.Text.Encoding.Default.GetString(ms.ToArray()), System.Text.Encoding.Default); + // } + //} + + public struct MailBillType + { + public const string 舱单 = "EDI"; + public const string VGM = "VGM"; + } + + public struct MailInfo { + public const string 舱单_系统参数路径名 = "DSFTP_EDI_FTP_EDIPATH"; + + public const string VGM_系统参数路径名 = "DSFTP_EDI_FTP_VGMPATH"; + + public const string 舱单_标题头部_旧可解析 = "申请发送 "; + + public const string 舱单_标题头部_新 = "舱单发送-"; + + public const string VGM_标题头部_旧可解析 = "申请发送VGM-"; + + public const string VGM_标题头部_新 = "VGM发送-"; + } + + + public void SaveToEml(string emlFileAbsolutePath, string billtype) + { + + var assembly = typeof(SmtpClient).Assembly; + var mailWriterType = assembly.GetType("System.Net.Mail.MailWriter"); + + using (var memoryStream = new MemoryStream()) + { + // Get reflection info for MailWriter contructor + var mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null); + + // Construct MailWriter object with our FileStream + var mailWriter = mailWriterContructor.Invoke(new object[] { memoryStream }); + + // Get reflection info for Send() method on MailMessage + var sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic); + + //20210622 标题 按GB2312转base64 + + var mailhead = ""; + var ftphead = ""; + + if(billtype== MailBillType.舱单) + { + mailhead = MailInfo.舱单_标题头部_新; + ftphead = MailInfo.舱单_标题头部_旧可解析; + } + if (billtype == MailBillType.VGM) + { + mailhead = MailInfo.VGM_标题头部_新; + ftphead = MailInfo.VGM_标题头部_旧可解析; + } + string title = Convert.ToBase64String(System.Text.Encoding.GetEncoding(936).GetBytes(mailMessage.Subject.Replace(mailhead, ftphead))); + var codedtitle= "=?GB2312?B?"+title+"?="; + + // Call method passing in MailWriter + sendMethod.Invoke(mailMessage, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true, true }, null); + + // Finally get reflection info for Close() method on our MailWriter + var closeMethod = mailWriter.GetType().GetMethod("Close", BindingFlags.Instance | BindingFlags.NonPublic); + + // Call close method + closeMethod.Invoke(mailWriter, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { }, null); + + var _str = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray()).Replace(mailMessage.Subject, codedtitle); + + File.WriteAllText(emlFileAbsolutePath, _str, System.Text.Encoding.Default); + //return Encoding.ASCII.GetString(memoryStream.ToArray()); + } + + } + + public MailMessage getMailMessage() { + return mailMessage; + } + + #endregion + + /// + /// 将MailMessage保存为eml文件 + /// + /// 待保存的具有内容的MailMessage + /// 保存后的eml文件的路径 + public void SaveToEml(string emlFileAbsolutePath) + { + const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; + using (MemoryStream ms = new MemoryStream()) + { + Assembly assembly = typeof(System.Net.Mail.SmtpClient).Assembly; + Type tMailWriter = assembly.GetType("System.Net.Mail.MailWriter"); + object mailWriter = Activator.CreateInstance(tMailWriter, flags, null, new object[] { ms }, CultureInfo.InvariantCulture); + mailMessage.GetType().GetMethod("Send", flags).Invoke(mailMessage, new object[] { mailWriter, true }); + File.WriteAllText(emlFileAbsolutePath, System.Text.Encoding.Default.GetString(ms.ToArray()), System.Text.Encoding.Default); + } + } + + + } +} \ No newline at end of file diff --git a/D7DJYMQ/JobListener.cs b/D7DJYMQ/JobListener.cs new file mode 100644 index 00000000..972b4b32 --- /dev/null +++ b/D7DJYMQ/JobListener.cs @@ -0,0 +1,126 @@ +using log4net; +using Quartz; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DSWeb.BillCenter.Service +{ + public class JobListener : ISchedulerListener + { + private ILog logger = LogManager.GetLogger("JobListener"); + + public void JobAdded(IJobDetail jobDetail) + { + logger.Debug($"Job被添加:{jobDetail.JobType}"); + } + + public void JobDeleted(JobKey jobKey) + { + + } + + public void JobPaused(JobKey jobKey) + { + + } + + public void JobResumed(JobKey jobKey) + { + + } + + public void JobScheduled(ITrigger trigger) + { + + } + + public void JobsPaused(string jobGroup) + { + + } + + public void JobsResumed(string jobGroup) + { + + } + + public void JobUnscheduled(TriggerKey triggerKey) + { + + } + + public void SchedulerError(string msg, SchedulerException cause) + { + logger.Error(msg); + + var excep = cause as Exception; + while (true) + { + logger.Error(excep.Message); + logger.Error(excep.StackTrace); + + excep = excep.InnerException; + } + + } + + public void SchedulerInStandbyMode() + { + + } + + public void SchedulerShutdown() + { + logger.Debug($"SchedulerShutdown"); + } + + public void SchedulerShuttingdown() + { + + } + + public void SchedulerStarted() + { + logger.Debug($"SchedulerStarted"); + + } + + public void SchedulerStarting() + { + + } + + public void SchedulingDataCleared() + { + + } + + public void TriggerFinalized(ITrigger trigger) + { + + } + + public void TriggerPaused(TriggerKey triggerKey) + { + + } + + public void TriggerResumed(TriggerKey triggerKey) + { + + } + + public void TriggersPaused(string triggerGroup) + { + + } + + public void TriggersResumed(string triggerGroup) + { + + } + } +} diff --git a/D7DJYMQ/Program.cs b/D7DJYMQ/Program.cs new file mode 100644 index 00000000..39b37fe5 --- /dev/null +++ b/D7DJYMQ/Program.cs @@ -0,0 +1,57 @@ +using log4net; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Topshelf; + +namespace D7DJYMQ +{ + class Program + { + private static ILog logger = LogManager.GetLogger("DS7Date"); + static void Main(string[] args) + { + var serviceName = ConfigurationManager.AppSettings["ServiceName"]; + var serviceDisplayName = ConfigurationManager.AppSettings["ServiceDisplayName"]; + + if (Environment.UserInteractive) + { + Console.Title = serviceDisplayName; + } + + Host host = HostFactory.New(x => + { + // 基本的配置 + x.RunAsLocalSystem(); + x.SetServiceName(serviceName); + x.SetDisplayName(serviceDisplayName); + x.StartAutomaticallyDelayed(); + x.EnableShutdown(); + logger.Debug($"启动接收大简云数据接收服务"); + // 注册服务 + x.Service(hostSettings => new DS7Date()); + logger.Debug($"注册服务"); + + // 设置服务失败后的操作,分别对应第一次、第二次、后续 + x.EnableServiceRecovery(t => + { + logger.Debug($"注册服失败"); + t.RestartService(0); + + t.RestartService(0); + + t.RestartService(0); + + t.OnCrashOnly(); + + //t.SetResetPeriod(1); + }); + }); + + host.Run(); + } + } +} diff --git a/D7DJYMQ/Properties/AssemblyInfo.cs b/D7DJYMQ/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..3285b05a --- /dev/null +++ b/D7DJYMQ/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("DSWeb.Service.Output.DS7")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DSWeb.Service.Output.DS7")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("324de2ce-c592-4a91-8b40-856652e0d0f0")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)] diff --git a/D7DJYMQ/log4net.config b/D7DJYMQ/log4net.config new file mode 100644 index 00000000..4655bde6 --- /dev/null +++ b/D7DJYMQ/log4net.config @@ -0,0 +1,46 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/D7DJYMQ/packages.config b/D7DJYMQ/packages.config new file mode 100644 index 00000000..e55d8f56 --- /dev/null +++ b/D7DJYMQ/packages.config @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/D7DJYMQ/quartz_jobs.xml b/D7DJYMQ/quartz_jobs.xml new file mode 100644 index 00000000..2a0ed956 --- /dev/null +++ b/D7DJYMQ/quartz_jobs.xml @@ -0,0 +1,62 @@ + + + + true + + + + + + + + + + \ No newline at end of file diff --git a/D7DJYMQ/说明.txt b/D7DJYMQ/说明.txt new file mode 100644 index 00000000..106acf09 --- /dev/null +++ b/D7DJYMQ/说明.txt @@ -0,0 +1,3 @@ +1:从大简云的公开消息队列,获取自己的业务,写入ds7经汉版的op_other表,作为舱单业务的数据 + +2:定时读取钉钉通讯录,向 \ No newline at end of file diff --git a/DSWeb.DJYMQ/DS7Date.cs b/DSWeb.DJYMQ/DS7Date.cs new file mode 100644 index 00000000..29cbc2af --- /dev/null +++ b/DSWeb.DJYMQ/DS7Date.cs @@ -0,0 +1,313 @@ +using log4net; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Data.SqlClient; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Topshelf; + +namespace DSWeb.Service.Output.DS7 +{ + public class DS7Date : ServiceControl + { + private static string MQURL = ConfigurationManager.AppSettings["DJYMQURL"]; + private static string connStr = ConfigurationManager.AppSettings["ConnectionString"]; + private static string virtualhost = ConfigurationManager.AppSettings["virtualhost"]; + + + private static string ExchangeName = ConfigurationManager.AppSettings["MQExchangeName"]; + private static string QueueName = ConfigurationManager.AppSettings["MQQueueName"]; + + private static string MAILSENDACCOUNT = ConfigurationManager.AppSettings["MAILSENDACCOUNT"]; + private static string MAILSENDPASSWORD = ConfigurationManager.AppSettings["MAILSENDPASSWORD"]; + private static string MAILSENDSERVICE = ConfigurationManager.AppSettings["MAILSENDSERVICE"]; + private static string MAILSENDPORT = ConfigurationManager.AppSettings["MAILSENDPORT"]; + private static string MAILISSSL = ConfigurationManager.AppSettings["MAILISSSL"]; + private static string MAILTITLE = ConfigurationManager.AppSettings["MAILTITLE"]; + private static string BSSQL = ConfigurationManager.AppSettings["BSSQL"]; + + private static IConnection mqConn; + private static ILog logger = LogManager.GetLogger("DS7Date"); + + public bool Start(HostControl hostControl) + { + logger.Debug($"启动接收大简云订舱数据回推"); + var CompanyQueueName = QueueName; + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = new Uri(MQURL); + //factory.UserName = "xgs_test"; + //factory.Password = "xgs_test123"; + factory.VirtualHost = virtualhost; + + mqConn = factory.CreateConnection(); + + IModel model = mqConn.CreateModel(); + + model.ExchangeDeclare(ExchangeName, ExchangeType.Direct); + model.QueueDeclare(CompanyQueueName, false, false, false, null); + model.QueueBind(CompanyQueueName, ExchangeName, QueueName); + + var consumer = new EventingBasicConsumer(model); + consumer.Received += (ch, ea) => + { + var body = ea.Body; + var strBody = Encoding.UTF8.GetString(body.ToArray()); + logger.Debug($"收到简云截单日期数据回推消息:{strBody}"); + + try + { + //回写数据 + var dateback = JsonConvert.DeserializeAnonymousType(strBody, new { vessel = string.Empty, voyage = string.Empty, ship_agency = string.Empty, cut_off_time = string.Empty, etd = string.Empty }); + + if (!string.IsNullOrEmpty(dateback.vessel) && !string.IsNullOrEmpty(dateback.voyage) && !string.IsNullOrEmpty(dateback.ship_agency) && !string.IsNullOrEmpty(dateback.cut_off_time)) + { + using (SqlConnection dbcon = new SqlConnection(connStr)) + { + dbcon.Open(); + string maildescrption = ""; + var FORWARDER = GetCustEdi(dbcon, dateback.ship_agency); + var SendMailList = new List(); + if (!string.IsNullOrEmpty(FORWARDER)) + { + var opseaelist = GetBs(dbcon, "VESSEL='" + dateback.vessel + "' AND VOYNO='" + dateback.voyage + "' and FORWARDER='" + FORWARDER + "'"); + if (opseaelist != null && opseaelist.Count != 0) + { + var opemail = ""; + foreach (var opseae in opseaelist) + { + var tastStr = $" update op_seae set CLOSEDOCDATE='{dateback.cut_off_time}' where BSNO='{opseae.BSNO}' "; + SqlCommand cmdtast = new SqlCommand(tastStr, dbcon); + cmdtast.ExecuteNonQuery(); + logger.Debug($"已更新截单日期{dateback.cut_off_time},{opseae.MBLNO},{opseae.BSNO}"); + var sendmail = SendMailList.Find(x => x.OP == opseae.OP); + if (sendmail != null) + { + sendmail.MAILDESCRIPTION = sendmail.MAILDESCRIPTION + Environment.NewLine + opseae.MBLNO; + } + else + { + var newsendmail = new SendMail(); + newsendmail.OP = opseae.OP; + newsendmail.MAIL = opseae.MAIL; + newsendmail.MAILDESCRIPTION = opseae.MBLNO; + SendMailList.Add(newsendmail); + } + + } + + } + } + else + { + logger.Debug($"{dateback.ship_agency}没有找到对应的订舱代理"); + + } + if (SendMailList != null && SendMailList.Count != 0) + { + foreach (var SendMail in SendMailList) + { + SendEmail se = new SendEmail(SendMail.MAIL, MAILSENDACCOUNT, "", "", "截港日期自动更新", SendMail.MAILDESCRIPTION, false); + + se.SetSmtp(MAILSENDACCOUNT, MAILSENDPASSWORD, MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT), false, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 + logger.Debug($"已给操作{SendMail.OP}发送邮件{SendMail.MAIL}{SendMail.MAILDESCRIPTION}"); + + + } + } + + + } + } + + } + catch (Exception ex) + { + logger.Error($"处理简云订舱数据回推时出错:" + ex.Message); + logger.Error(ex.Message); + logger.Error(ex.StackTrace); + } + }; + model.BasicConsume(CompanyQueueName, true, consumer); + + //var task = Task.Run(() => + //{ + // while (true) + // { + // var result = model.BasicGet(queue: CompanyQueueName, autoAck: true); + // if (result == null) { Thread.Sleep(10); continue; }; + // var strBody = Encoding.UTF8.GetString(result.Body.ToArray()); + // logger.Debug($"收到简云截单日期数据回推消息:{strBody}"); + + // try + // { + // //回写数据 + // var dateback = JsonConvert.DeserializeAnonymousType(strBody, new { vessel = string.Empty, voyage = string.Empty, ship_agency = string.Empty, cut_off_time = string.Empty, etd = string.Empty }); + + // if (!string.IsNullOrEmpty(dateback.vessel) && !string.IsNullOrEmpty(dateback.voyage) && !string.IsNullOrEmpty(dateback.ship_agency) && !string.IsNullOrEmpty(dateback.cut_off_time)) + // { + // using (SqlConnection dbcon = new SqlConnection(connStr)) + // { + // dbcon.Open(); + // string maildescrption = ""; + // var FORWARDER = GetCustEdi(dbcon, dateback.ship_agency); + // var SendMailList = new List(); + // if (!string.IsNullOrEmpty(FORWARDER)) + // { + // var opseaelist = GetBs(dbcon, "VESSEL='" + dateback.vessel + "' AND VOYNO='" + dateback.voyage + "' and FORWARDER='" + FORWARDER + "'" + BSSQL); + // if (opseaelist != null && opseaelist.Count != 0) + // { + // var opemail = ""; + // foreach (var opseae in opseaelist) + // { + // var tastStr = $" update op_seae set CLOSEDOCDATE='{dateback.cut_off_time}' where BSNO='{opseae.BSNO}' "; + // SqlCommand cmdtast = new SqlCommand(tastStr, dbcon); + // cmdtast.ExecuteNonQuery(); + // logger.Debug($"已更新截单日期{dateback.cut_off_time},{opseae.MBLNO},{opseae.BSNO}"); + // var sendmail = SendMailList.Find(x => x.OP == opseae.OP); + // if (sendmail != null) + // { + // sendmail.MAILDESCRIPTION = sendmail.MAILDESCRIPTION + Environment.NewLine + opseae.MBLNO; + // } + // else + // { + // var newsendmail = new SendMail(); + // newsendmail.OP = opseae.OP; + // newsendmail.MAIL = opseae.MAIL; + // newsendmail.MAILDESCRIPTION = opseae.MBLNO; + // SendMailList.Add(newsendmail); + // } + + // } + + // } + // } + // else + // { + // logger.Debug($"{dateback.ship_agency}没有找到对应的订舱代理"); + + // } + // if (SendMailList != null && SendMailList.Count != 0) + // { + // foreach (var SendMail in SendMailList) + // { + // SendEmail se = new SendEmail(SendMail.MAIL, MAILSENDACCOUNT, "", "", "截港日期自动更新", SendMail.MAILDESCRIPTION, false); + + // se.SetSmtp(MAILSENDACCOUNT, MAILSENDPASSWORD, MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT), false, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 + // logger.Debug($"已给操作{SendMail.OP}发送邮件{SendMail.MAIL}{SendMail.MAILDESCRIPTION}"); + + + // } + // } + + + // } + // } + + // } + // catch (Exception ex) + // { + // logger.Error($"处理简云订舱数据回推时出错:" + ex.Message); + // logger.Error(ex.Message); + // logger.Error(ex.StackTrace); + // } + + // //model.BasicConsume(CompanyQueueName, true, consumer); + // //Console.WriteLine(msg); + // } + //}); + + //task.Wait(); + //model.Close(); + //mqConn.Close(); + return true; + } + + public bool Stop(HostControl hostControl) + { + // 结束 + logger.Debug("停止运行"); + + //StdSchedulerFactory.GetDefaultScheduler().Shutdown(); + if (mqConn != null && mqConn.IsOpen) + { + mqConn.Close(); + mqConn = null; + } + + + return true; + } + + public class MsOpSeae + { + public string BSNO { get; set; } + public string MBLNO { get; set; } + public string OP { get; set; } + public string MAIL { get; set; } + } + public class SendMail + { + public string OP { get; set; } + public string MAIL { get; set; } + + public string MAILDESCRIPTION { get; set; } + + } + static public List GetBs(SqlConnection dbcon, string constr) + { + var opseaeList = new List(); + var strSql = new StringBuilder(); + strSql.Append("select BSNO,MBLNO,OP,FORWARDER,(SELECT TOP 1 EMAIL1 FROM VW_user WHERE SHOWNAME=op_seae.OP) EMAIL from op_seae where " + constr); + strSql.Append(" ORDER BY OP "); + SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Rows.Count > 0) + { + foreach (DataRow row in table.Rows) + { + var opseae = new MsOpSeae(); + opseae.BSNO = Convert.ToString(row["BSNO"].ToString()); + opseae.MBLNO = Convert.ToString(row["MBLNO"].ToString()); + opseae.OP = Convert.ToString(row["OP"].ToString()); + opseae.MAIL = Convert.ToString(row["EMAIL"].ToString()); + opseaeList.Add(opseae); + } + } + + return opseaeList; + } + static public string GetCustEdi(SqlConnection dbcon, string constr) + { + string result = ""; + var strSql = new StringBuilder(); + strSql.Append("select CUST from code_cust_edi where EDINAME='DJY' AND EDICODE='" + constr + "'"); + SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Rows.Count > 0) + { + foreach (DataRow row in table.Rows) + { + result = Convert.ToString(row["CUST"].ToString()); + + } + } + + return result; + } + + } + + + +} diff --git a/DSWeb.DJYMQ/DsSendMail.cs b/DSWeb.DJYMQ/DsSendMail.cs new file mode 100644 index 00000000..71e5b6c8 --- /dev/null +++ b/DSWeb.DJYMQ/DsSendMail.cs @@ -0,0 +1,359 @@ +using System; +using System.Text; +using System.Net; +using System.Net.Mail; +using System.Net.Mime; +using System.Threading; +using System.Reflection; +using System.IO; +using System.Globalization; +using System.Linq; + +namespace DSWeb.Service.Output.DS7 +{ + /// + /// 邮件发送类 + /// + public class SendEmail + { + private MailMessage mailMessage = new MailMessage(); //实例化一个邮件类 + + #region 构造函数 + /// + /// 构造函数 + /// + /// 收件人地址(多个以,号分开) + /// 发件人地址 + /// 主题 + /// 正文 + public SendEmail(string toAddresses, string fromAddress, string title, string body) + : this(toAddresses, fromAddress, "", "", title, body, false) + { + } + + /// + /// 构造函数 + /// + /// 收件人地址 + /// 发件人地址 + /// 收件人名字 + /// 发件人姓名 + /// 主题 + /// 正文 + /// 正文是否为html格式 + public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml) + { + + mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936)); + if (toName.Equals("")) + mailMessage.To.Add(toAddress); + else + mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936))); + + mailMessage.Subject = title; + mailMessage.SubjectEncoding = Encoding.GetEncoding(936); + + mailMessage.Body = body; + mailMessage.IsBodyHtml = isBodyHtml; + mailMessage.BodyEncoding = Encoding.GetEncoding(936); + } + #endregion + + /// + /// 设置SMTP,并且将邮件发送出去 + /// 所有参数都设置完成后再调用该方法 + /// + /// 发件人密码 + /// SMTP服务器地址 + public void SetSmtp(string password, string smtpHost) + { + SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal); + } + + /// + /// 设置SMTP,并且将邮件发送出去 + /// 所有参数都设置完成后再调用该方法 + /// + /// 发件人地址(必须为真实有效的email地址) + /// 发件人密码 + /// SMTP服务器地址 + /// SMTP服务器的端口 + /// SMTP服务器是否启用SSL加密 + /// 邮件的优先级 + public void SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) + { + SmtpClient smtp = new SmtpClient(smtpHost,smtpPort); +// smtp.DeliveryMethod = SmtpDeliveryMethod.Network; + smtp.DeliveryMethod = SmtpDeliveryMethod.Network; + + // smtp.UseDefaultCredentials = true; + //if (isEnableSsl) + //{ + // smtp.UseDefaultCredentials = true; + // System.Net.NetworkCredential nc = new System.Net.NetworkCredential(address, password); + // smtp.Credentials = nc.GetCredential(smtpHost, smtpPort, "NTLM"); + //} + //else + + System.Net.NetworkCredential nc = new System.Net.NetworkCredential(address, password); + smtp.Credentials = nc; + + + //smtp.Credentials = new NetworkCredential(address, password); + //smtp.Host = smtpHost; + //smtp.Port = smtpPort; + + + smtp.EnableSsl = isEnableSsl; + // smtp.UseDefaultCredentials = true; + // mailMessage.Priority = priority; + try + { + smtp.Send(mailMessage); //发送邮件 + } + catch (Exception e) + { + smtp.Dispose(); + } + finally + { + + smtp.Dispose(); + } + smtp.Dispose(); + } + + + + class Mailinfo { + public SendEmail se { get; set; } + public string address { get; set; } + public string password { get; set; } + public string smtpHost { get; set; } + public int smtpPort { get; set; } + public bool isEnableSsl { get; set; } + public MailPriority priority { get; set; } + + public Mailinfo(SendEmail se, string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) + { + this.se = se; + this.address = address; + this.password = password; + this.smtpHost = smtpHost; + this.smtpPort = smtpPort; + this.isEnableSsl = isEnableSsl; + this.priority = priority; + } + } + + class ThreadMail + { + + public void FuncSend(object o) + { + Mailinfo Mailinfo = o as Mailinfo; + + Mailinfo.se.SetSmtp(Mailinfo.address, Mailinfo.password, Mailinfo.smtpHost, Mailinfo.smtpPort, Mailinfo.isEnableSsl, Mailinfo.priority); + } + } + + public void SetSmtp_thread( string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) { + ThreadMail tmail = new ThreadMail(); + //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + Thread thread1 = new Thread(new ParameterizedThreadStart(tmail.FuncSend)); + Mailinfo mi = new Mailinfo(this, address, password, smtpHost, smtpPort, isEnableSsl, priority); + thread1.Start(mi); + } + + #region //设置邮件地址 + /// + /// 设置更多收件人 + /// + /// 收件人地址 + public void SetMoreToAddress(string toAddresses) + { + mailMessage.To.Add(toAddresses); + } + + /// + /// 设置更多收件人 + /// + /// 收件人地址 + /// 收件人名字 + public void SetMoreToAddress(string toAddress, string toName) + { + mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936))); + } + + /// + /// 设置抄送者(多个以,号分开) + /// + /// 抄送者地址 + public void SetCarbonCopyFor(string ccAddresses) + { + mailMessage.CC.Add(ccAddresses); + } + + /// + /// 设置抄送者 + /// + /// 抄送者地址 + /// 抄送者名字 + public void SetCarbonCopyFor(string ccAddress, string ccName) + { + mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936))); + } + + /// + /// 设置密送者(多个以,号分开) + /// + /// 密送者 + public void SetBlindCarbonCopyFor(string bccAddresses) + { + mailMessage.Bcc.Add(bccAddresses); + } + + /// + /// 设置密送者 + /// + /// 密送者 + /// 密送者名字 + public void SetBlindCarbonCopyFor(string bccAddress, string bccName) + { + mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936))); + } + #endregion + + #region 添加附件 + /// + /// 添加附件(自动识别文件类型) + /// + /// 单个文件的路径 + public void Attachments(string fileName) + { + mailMessage.Attachments.Add(new Attachment(fileName)); + } + + /// + /// 添加附件(默认为富文本RTF格式) + /// + /// 单个文件的路径 + public void AttachmentsForRTF(string fileName) + { + mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Rtf)); + } + + + //public void SaveToEml(string emlFileAbsolutePath) + //{ + // const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; + // using (MemoryStream ms = new MemoryStream()) + // { + //     Assembly assembly = typeof(System.Net.Mail.SmtpClient).Assembly; + //     Type tMailWriter = assembly.GetType("System.Net.Mail.MailWriter"); + //     object mailWriter = Activator.CreateInstance(tMailWriter, flags, null, new object[] { ms }, CultureInfo.InvariantCulture); + // mailMessage.GetType().GetMethod("Send", flags).Invoke(mailMessage, new object[] { mailWriter, true }); + //     File.WriteAllText(emlFileAbsolutePath, System.Text.Encoding.Default.GetString(ms.ToArray()), System.Text.Encoding.Default); + // } + //} + + public struct MailBillType + { + public const string 舱单 = "EDI"; + public const string VGM = "VGM"; + } + + public struct MailInfo { + public const string 舱单_系统参数路径名 = "DSFTP_EDI_FTP_EDIPATH"; + + public const string VGM_系统参数路径名 = "DSFTP_EDI_FTP_VGMPATH"; + + public const string 舱单_标题头部_旧可解析 = "申请发送 "; + + public const string 舱单_标题头部_新 = "舱单发送-"; + + public const string VGM_标题头部_旧可解析 = "申请发送VGM-"; + + public const string VGM_标题头部_新 = "VGM发送-"; + } + + + public void SaveToEml(string emlFileAbsolutePath, string billtype) + { + + var assembly = typeof(SmtpClient).Assembly; + var mailWriterType = assembly.GetType("System.Net.Mail.MailWriter"); + + using (var memoryStream = new MemoryStream()) + { + // Get reflection info for MailWriter contructor + var mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null); + + // Construct MailWriter object with our FileStream + var mailWriter = mailWriterContructor.Invoke(new object[] { memoryStream }); + + // Get reflection info for Send() method on MailMessage + var sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic); + + //20210622 标题 按GB2312转base64 + + var mailhead = ""; + var ftphead = ""; + + if(billtype== MailBillType.舱单) + { + mailhead = MailInfo.舱单_标题头部_新; + ftphead = MailInfo.舱单_标题头部_旧可解析; + } + if (billtype == MailBillType.VGM) + { + mailhead = MailInfo.VGM_标题头部_新; + ftphead = MailInfo.VGM_标题头部_旧可解析; + } + string title = Convert.ToBase64String(System.Text.Encoding.GetEncoding(936).GetBytes(mailMessage.Subject.Replace(mailhead, ftphead))); + var codedtitle= "=?GB2312?B?"+title+"?="; + + // Call method passing in MailWriter + sendMethod.Invoke(mailMessage, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true, true }, null); + + // Finally get reflection info for Close() method on our MailWriter + var closeMethod = mailWriter.GetType().GetMethod("Close", BindingFlags.Instance | BindingFlags.NonPublic); + + // Call close method + closeMethod.Invoke(mailWriter, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { }, null); + + var _str = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray()).Replace(mailMessage.Subject, codedtitle); + + File.WriteAllText(emlFileAbsolutePath, _str, System.Text.Encoding.Default); + //return Encoding.ASCII.GetString(memoryStream.ToArray()); + } + + } + + public MailMessage getMailMessage() { + return mailMessage; + } + + #endregion + + /// + /// 将MailMessage保存为eml文件 + /// + /// 待保存的具有内容的MailMessage + /// 保存后的eml文件的路径 + public void SaveToEml(string emlFileAbsolutePath) + { + const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; + using (MemoryStream ms = new MemoryStream()) + { + Assembly assembly = typeof(System.Net.Mail.SmtpClient).Assembly; + Type tMailWriter = assembly.GetType("System.Net.Mail.MailWriter"); + object mailWriter = Activator.CreateInstance(tMailWriter, flags, null, new object[] { ms }, CultureInfo.InvariantCulture); + mailMessage.GetType().GetMethod("Send", flags).Invoke(mailMessage, new object[] { mailWriter, true }); + File.WriteAllText(emlFileAbsolutePath, System.Text.Encoding.Default.GetString(ms.ToArray()), System.Text.Encoding.Default); + } + } + + + } +} \ No newline at end of file diff --git a/JobDjyUpdateDate/DsSendMail.cs b/JobDjyUpdateDate/DsSendMail.cs new file mode 100644 index 00000000..a1db49c8 --- /dev/null +++ b/JobDjyUpdateDate/DsSendMail.cs @@ -0,0 +1,359 @@ +using System; +using System.Text; +using System.Net; +using System.Net.Mail; +using System.Net.Mime; +using System.Threading; +using System.Reflection; +using System.IO; +using System.Globalization; +using System.Linq; + +namespace JobSendAgentMail +{ + /// + /// 邮件发送类 + /// + public class SendEmail + { + private MailMessage mailMessage = new MailMessage(); //实例化一个邮件类 + + #region 构造函数 + /// + /// 构造函数 + /// + /// 收件人地址(多个以,号分开) + /// 发件人地址 + /// 主题 + /// 正文 + public SendEmail(string toAddresses, string fromAddress, string title, string body) + : this(toAddresses, fromAddress, "", "", title, body, false) + { + } + + /// + /// 构造函数 + /// + /// 收件人地址 + /// 发件人地址 + /// 收件人名字 + /// 发件人姓名 + /// 主题 + /// 正文 + /// 正文是否为html格式 + public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml) + { + + mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936)); + if (toName.Equals("")) + mailMessage.To.Add(toAddress); + else + mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936))); + + mailMessage.Subject = title; + mailMessage.SubjectEncoding = Encoding.GetEncoding(936); + + mailMessage.Body = body; + mailMessage.IsBodyHtml = isBodyHtml; + mailMessage.BodyEncoding = Encoding.GetEncoding(936); + } + #endregion + + /// + /// 设置SMTP,并且将邮件发送出去 + /// 所有参数都设置完成后再调用该方法 + /// + /// 发件人密码 + /// SMTP服务器地址 + public void SetSmtp(string password, string smtpHost) + { + SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal); + } + + /// + /// 设置SMTP,并且将邮件发送出去 + /// 所有参数都设置完成后再调用该方法 + /// + /// 发件人地址(必须为真实有效的email地址) + /// 发件人密码 + /// SMTP服务器地址 + /// SMTP服务器的端口 + /// SMTP服务器是否启用SSL加密 + /// 邮件的优先级 + public void SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) + { + SmtpClient smtp = new SmtpClient(smtpHost,smtpPort); +// smtp.DeliveryMethod = SmtpDeliveryMethod.Network; + smtp.DeliveryMethod = SmtpDeliveryMethod.Network; + + // smtp.UseDefaultCredentials = true; + //if (isEnableSsl) + //{ + // smtp.UseDefaultCredentials = true; + // System.Net.NetworkCredential nc = new System.Net.NetworkCredential(address, password); + // smtp.Credentials = nc.GetCredential(smtpHost, smtpPort, "NTLM"); + //} + //else + + System.Net.NetworkCredential nc = new System.Net.NetworkCredential(address, password); + smtp.Credentials = nc; + + + //smtp.Credentials = new NetworkCredential(address, password); + //smtp.Host = smtpHost; + //smtp.Port = smtpPort; + + + smtp.EnableSsl = isEnableSsl; + // smtp.UseDefaultCredentials = true; + // mailMessage.Priority = priority; + try + { + smtp.Send(mailMessage); //发送邮件 + } + catch (Exception e) + { + smtp.Dispose(); + } + finally + { + + smtp.Dispose(); + } + smtp.Dispose(); + } + + + + class Mailinfo { + public SendEmail se { get; set; } + public string address { get; set; } + public string password { get; set; } + public string smtpHost { get; set; } + public int smtpPort { get; set; } + public bool isEnableSsl { get; set; } + public MailPriority priority { get; set; } + + public Mailinfo(SendEmail se, string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) + { + this.se = se; + this.address = address; + this.password = password; + this.smtpHost = smtpHost; + this.smtpPort = smtpPort; + this.isEnableSsl = isEnableSsl; + this.priority = priority; + } + } + + class ThreadMail + { + + public void FuncSend(object o) + { + Mailinfo Mailinfo = o as Mailinfo; + + Mailinfo.se.SetSmtp(Mailinfo.address, Mailinfo.password, Mailinfo.smtpHost, Mailinfo.smtpPort, Mailinfo.isEnableSsl, Mailinfo.priority); + } + } + + public void SetSmtp_thread( string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority) { + ThreadMail tmail = new ThreadMail(); + //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void + Thread thread1 = new Thread(new ParameterizedThreadStart(tmail.FuncSend)); + Mailinfo mi = new Mailinfo(this, address, password, smtpHost, smtpPort, isEnableSsl, priority); + thread1.Start(mi); + } + + #region //设置邮件地址 + /// + /// 设置更多收件人 + /// + /// 收件人地址 + public void SetMoreToAddress(string toAddresses) + { + mailMessage.To.Add(toAddresses); + } + + /// + /// 设置更多收件人 + /// + /// 收件人地址 + /// 收件人名字 + public void SetMoreToAddress(string toAddress, string toName) + { + mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936))); + } + + /// + /// 设置抄送者(多个以,号分开) + /// + /// 抄送者地址 + public void SetCarbonCopyFor(string ccAddresses) + { + mailMessage.CC.Add(ccAddresses); + } + + /// + /// 设置抄送者 + /// + /// 抄送者地址 + /// 抄送者名字 + public void SetCarbonCopyFor(string ccAddress, string ccName) + { + mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936))); + } + + /// + /// 设置密送者(多个以,号分开) + /// + /// 密送者 + public void SetBlindCarbonCopyFor(string bccAddresses) + { + mailMessage.Bcc.Add(bccAddresses); + } + + /// + /// 设置密送者 + /// + /// 密送者 + /// 密送者名字 + public void SetBlindCarbonCopyFor(string bccAddress, string bccName) + { + mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936))); + } + #endregion + + #region 添加附件 + /// + /// 添加附件(自动识别文件类型) + /// + /// 单个文件的路径 + public void Attachments(string fileName) + { + mailMessage.Attachments.Add(new Attachment(fileName)); + } + + /// + /// 添加附件(默认为富文本RTF格式) + /// + /// 单个文件的路径 + public void AttachmentsForRTF(string fileName) + { + mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Rtf)); + } + + + //public void SaveToEml(string emlFileAbsolutePath) + //{ + // const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; + // using (MemoryStream ms = new MemoryStream()) + // { + //     Assembly assembly = typeof(System.Net.Mail.SmtpClient).Assembly; + //     Type tMailWriter = assembly.GetType("System.Net.Mail.MailWriter"); + //     object mailWriter = Activator.CreateInstance(tMailWriter, flags, null, new object[] { ms }, CultureInfo.InvariantCulture); + // mailMessage.GetType().GetMethod("Send", flags).Invoke(mailMessage, new object[] { mailWriter, true }); + //     File.WriteAllText(emlFileAbsolutePath, System.Text.Encoding.Default.GetString(ms.ToArray()), System.Text.Encoding.Default); + // } + //} + + public struct MailBillType + { + public const string 舱单 = "EDI"; + public const string VGM = "VGM"; + } + + public struct MailInfo { + public const string 舱单_系统参数路径名 = "DSFTP_EDI_FTP_EDIPATH"; + + public const string VGM_系统参数路径名 = "DSFTP_EDI_FTP_VGMPATH"; + + public const string 舱单_标题头部_旧可解析 = "申请发送 "; + + public const string 舱单_标题头部_新 = "舱单发送-"; + + public const string VGM_标题头部_旧可解析 = "申请发送VGM-"; + + public const string VGM_标题头部_新 = "VGM发送-"; + } + + + public void SaveToEml(string emlFileAbsolutePath, string billtype) + { + + var assembly = typeof(SmtpClient).Assembly; + var mailWriterType = assembly.GetType("System.Net.Mail.MailWriter"); + + using (var memoryStream = new MemoryStream()) + { + // Get reflection info for MailWriter contructor + var mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null); + + // Construct MailWriter object with our FileStream + var mailWriter = mailWriterContructor.Invoke(new object[] { memoryStream }); + + // Get reflection info for Send() method on MailMessage + var sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic); + + //20210622 标题 按GB2312转base64 + + var mailhead = ""; + var ftphead = ""; + + if(billtype== MailBillType.舱单) + { + mailhead = MailInfo.舱单_标题头部_新; + ftphead = MailInfo.舱单_标题头部_旧可解析; + } + if (billtype == MailBillType.VGM) + { + mailhead = MailInfo.VGM_标题头部_新; + ftphead = MailInfo.VGM_标题头部_旧可解析; + } + string title = Convert.ToBase64String(System.Text.Encoding.GetEncoding(936).GetBytes(mailMessage.Subject.Replace(mailhead, ftphead))); + var codedtitle= "=?GB2312?B?"+title+"?="; + + // Call method passing in MailWriter + sendMethod.Invoke(mailMessage, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true, true }, null); + + // Finally get reflection info for Close() method on our MailWriter + var closeMethod = mailWriter.GetType().GetMethod("Close", BindingFlags.Instance | BindingFlags.NonPublic); + + // Call close method + closeMethod.Invoke(mailWriter, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { }, null); + + var _str = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray()).Replace(mailMessage.Subject, codedtitle); + + File.WriteAllText(emlFileAbsolutePath, _str, System.Text.Encoding.Default); + //return Encoding.ASCII.GetString(memoryStream.ToArray()); + } + + } + + public MailMessage getMailMessage() { + return mailMessage; + } + + #endregion + + /// + /// 将MailMessage保存为eml文件 + /// + /// 待保存的具有内容的MailMessage + /// 保存后的eml文件的路径 + public void SaveToEml(string emlFileAbsolutePath) + { + const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; + using (MemoryStream ms = new MemoryStream()) + { + Assembly assembly = typeof(System.Net.Mail.SmtpClient).Assembly; + Type tMailWriter = assembly.GetType("System.Net.Mail.MailWriter"); + object mailWriter = Activator.CreateInstance(tMailWriter, flags, null, new object[] { ms }, CultureInfo.InvariantCulture); + mailMessage.GetType().GetMethod("Send", flags).Invoke(mailMessage, new object[] { mailWriter, true }); + File.WriteAllText(emlFileAbsolutePath, System.Text.Encoding.Default.GetString(ms.ToArray()), System.Text.Encoding.Default); + } + } + + + } +} \ No newline at end of file diff --git a/JobDjyUpdateDate/JobSendAgentMail.csproj b/JobDjyUpdateDate/JobSendAgentMail.csproj new file mode 100644 index 00000000..339f0526 --- /dev/null +++ b/JobDjyUpdateDate/JobSendAgentMail.csproj @@ -0,0 +1,94 @@ + + + + + Debug + AnyCPU + {A6656568-5C05-4E6C-856B-3FBE6367EA62} + Library + Properties + JobSendAgentMail + JobSendAgentMail + v4.5.1 + 512 + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\packages\Common.Logging.3.3.1\lib\net40\Common.Logging.dll + + + ..\packages\Common.Logging.Core.3.3.1\lib\net40\Common.Logging.Core.dll + + + ..\packages\HtmlAgilityPack.1.11.29\lib\Net45\HtmlAgilityPack.dll + + + ..\packages\log4net.2.0.8\lib\net40-full\log4net.dll + + + False + ..\packages\MailKit.2.7.0\lib\net45\MailKit.dll + + + False + ..\packages\MimeKit.2.8.0\lib\net45\MimeKit.dll + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Quartz.2.6.2\lib\net40\Quartz.dll + + + + + + + + + + + + + + + + + + Designer + + + + + + + PreserveNewest + Designer + + + + + + + \ No newline at end of file diff --git a/JobDjyUpdateDate/JobSendAgentMail.sln b/JobDjyUpdateDate/JobSendAgentMail.sln new file mode 100644 index 00000000..04898a74 --- /dev/null +++ b/JobDjyUpdateDate/JobSendAgentMail.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.645 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JobSendAgentMail", "JobSendAgentMail.csproj", "{A6656568-5C05-4E6C-856B-3FBE6367EA62}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A6656568-5C05-4E6C-856B-3FBE6367EA62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6656568-5C05-4E6C-856B-3FBE6367EA62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6656568-5C05-4E6C-856B-3FBE6367EA62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6656568-5C05-4E6C-856B-3FBE6367EA62}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F248838F-C29F-4E83-9BE4-082DCE9504F6} + EndGlobalSection +EndGlobal diff --git a/JobDjyUpdateDate/JobSendBooking.cs b/JobDjyUpdateDate/JobSendBooking.cs new file mode 100644 index 00000000..58fb4730 --- /dev/null +++ b/JobDjyUpdateDate/JobSendBooking.cs @@ -0,0 +1,218 @@ +using log4net; +using Quartz; +using System; +using System.Data; +using System.Data.SqlClient; +using System.IO; +using System.Linq; +using System.Text; +using MailKit.Net.Smtp; +using MimeKit; +using HtmlAgilityPack; + + +namespace JobSendAgentMail +{ + public class JobSendBooking : IJob + { + private ILog log = LogManager.GetLogger(typeof(JobSendBooking)); + + public void Execute(IJobExecutionContext context) + { + + string connStr = context.JobDetail.JobDataMap.GetString("ConnectString"); + string querySql = context.JobDetail.JobDataMap.GetString("QuerySql"); + string hblquerySql = context.JobDetail.JobDataMap.GetString("HblQuerySql"); + string DocType = context.JobDetail.JobDataMap.GetString("DocType"); + string D7FilePath = context.JobDetail.JobDataMap.GetString("D7FilePath"); + string MAILSENDACCOUNT = context.JobDetail.JobDataMap.GetString("MAILSENDACCOUNT"); + string MAILSENDPASSWORD = context.JobDetail.JobDataMap.GetString("MAILSENDPASSWORD"); + string MAILSENDSERVICE = context.JobDetail.JobDataMap.GetString("MAILSENDSERVICE"); + string MAILSENDPORT = context.JobDetail.JobDataMap.GetString("MAILSENDPORT"); + string MAILISSSL = context.JobDetail.JobDataMap.GetString("MAILISSSL"); + string MAILTEMPLATE = context.JobDetail.JobDataMap.GetString("MAILTEMPLATE"); + string MAILTITLEJOB = context.JobDetail.JobDataMap.GetString("MAILTITLE"); + log.Debug($"开始执行代理发送邮件"); + using (SqlConnection dbcon = new SqlConnection(connStr)) + { + SqlDataAdapter adapter = new SqlDataAdapter(querySql, dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Columns.Contains("MBLNO") && table.Columns.Contains("AGENTID")) + { + if (table.Rows.Count > 0) + { + + foreach (DataRow row in table.Rows) + { + if (row["MBLNO"].ToString() != "" && row["AGENTID"].ToString() != "") + { + + var htmlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, MAILTEMPLATE); + var content = File.ReadAllText(htmlFile); + + var REMARKSTR = row["BLREMARK"].ToString(); + + REMARKSTR = REMARKSTR.Replace("\r\n", "
"); + REMARKSTR = REMARKSTR.Replace("\n", "
"); + REMARKSTR = REMARKSTR.Replace("\r", ""); + content = content.Replace("$MBLNO$", row["MBLNO"].ToString()); + content = content.Replace("$ETD$", row["ETD"].ToString()); + content = content.Replace("$BLFRT$", row["BLFRT"].ToString()); + content = content.Replace("$PORTLOAD$", row["PORTLOAD"].ToString()); + content = content.Replace("$PORTDISCHARGE$", row["PORTDISCHARGE"].ToString()); + content = content.Replace("$DESTINATION$", row["DESTINATION"].ToString()); + content = content.Replace("$ATD$", row["ATD"].ToString()); + content = content.Replace("$HBLNO$", row["HBLNO"].ToString()); + content = content.Replace("$ORDERNO$", row["ORDERNO"].ToString()); + content = content.Replace("$ETA$", row["ETA"].ToString()); + content = content.Replace("$CNTRTOTAL$", row["CNTRTOTAL"].ToString()); + content = content.Replace("$CARRIERID$", row["CARRIERID"].ToString()); + content = content.Replace("$ISSUETYPE$", row["ISSUETYPE"].ToString()); + content = content.Replace("$BLREMARK$", REMARKSTR); + + var MAILTITLE = MAILTITLEJOB; + MAILTITLE = MAILTITLE.Replace("$MBLNO$", row["MBLNO"].ToString()); + MAILTITLE = MAILTITLE.Replace("$ETD$", row["ETD"].ToString()); + MAILTITLE = MAILTITLE.Replace("$BLFRT$", row["BLFRT"].ToString()); + MAILTITLE = MAILTITLE.Replace("$PORTLOAD$", row["PORTLOAD"].ToString()); + MAILTITLE = MAILTITLE.Replace("$PORTDISCHARGE$", row["PORTDISCHARGE"].ToString()); + MAILTITLE = MAILTITLE.Replace("$DESTINATION$", row["DESTINATION"].ToString()); + MAILTITLE = MAILTITLE.Replace("$ATD$", row["ATD"].ToString()); + MAILTITLE = MAILTITLE.Replace("$HBLNO$", row["HBLNO"].ToString()); + MAILTITLE = MAILTITLE.Replace("$ORDERNO$", row["ORDERNO"].ToString()); + MAILTITLE = MAILTITLE.Replace("$ETA$", row["ETA"].ToString()); + MAILTITLE = MAILTITLE.Replace("$CNTRTOTAL$", row["CNTRTOTAL"].ToString()); + MAILTITLE = MAILTITLE.Replace("$CARRIERID$", row["CARRIERID"].ToString()); + MAILTITLE = MAILTITLE.Replace("$ISSUETYPE$", row["ISSUETYPE"].ToString()); + MAILTITLE = MAILTITLE.Replace("$BLREMARK$", row["BLREMARK"].ToString()); + + SqlDataAdapter hbladapter = new SqlDataAdapter(hblquerySql + " where BSNO='" + row["BSNO"].ToString() + "'", dbcon); + DataTable hbltable = new DataTable(); + hbladapter.Fill(hbltable); + var hblstr = ""; + if (hbltable.Rows.Count > 0) + { + + foreach (DataRow hblrow in hbltable.Rows) + { + hblstr = hblstr + "HB/L:" + hblrow["HBLNO"].ToString() + "-" + hblrow["ISSUETYPE"].ToString() + ":hold
"; + } + } + content = content.Replace("$HBLCONTENT$", hblstr); + StringWriter writer = new StringWriter(); + HtmlDocument htmlDoc = new HtmlDocument(); + htmlDoc.LoadHtml(content); + htmlDoc.Save(writer); + string str = writer.ToString(); + try + { + var message = new MimeMessage(); + message.From.Add(new MailboxAddress(row["OPNAME"].ToString(), row["OPEMAIL"].ToString())); + var maillist = row["AGENTEMAIL"].ToString().Split(';'); + foreach (var mailaddr in maillist) + { + message.To.Add(MailboxAddress.Parse(mailaddr)); + } + message.To.Add(MailboxAddress.Parse(row["OPEMAIL"].ToString())); +// message.Subject = "Pre-alert/" + row["ORDERNO"].ToString() + "/" + row["HBLNO"].ToString(); + message.Subject = MAILTITLE; + var html = new TextPart("html") + { + Text = str + }; + MimeEntity entity = html; + + //SendEmail se = new SendEmail(row["AGENTEMAIL"].ToString(), row["OPEMAIL"].ToString(), "", row["OPNAME"].ToString(), "Pre-alert/" + row["ORDERNO"].ToString() + "/" + row["HBLNO"].ToString(), str,true); + + + SqlDataAdapter fileadapter = new SqlDataAdapter("SELECT * FROM Receipt_Doc where RECEIPTTYPE='" + DocType + "' and BSNO='" + row["BSNO"].ToString() + "'", dbcon); + DataTable filetable = new DataTable(); + fileadapter.Fill(filetable); + if (filetable.Rows.Count > 0) + { + var mult = new Multipart("mixed") { html }; + foreach (DataRow filerow in filetable.Rows) + { + var attfile = filerow["Driect_URL"].ToString(); + if (!string.IsNullOrEmpty(attfile)) + { + attfile = attfile.Replace("../../", D7FilePath); + while ((attfile.IndexOf("/") >= 0)) + { + attfile = attfile.Replace("/", @"\"); + } + + if (File.Exists(attfile)) + { + + var tmpDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp"); + if (!Directory.Exists(tmpDir)) + { + Directory.CreateDirectory(tmpDir); + } + var tmpFile = Path.Combine(tmpDir, filerow["URL"].ToString()); + File.Copy(attfile, tmpFile, true); + + var attPart = new MimePart(); + attPart.Content = new MimeContent(new FileStream(attfile, FileMode.Open)); + attPart.ContentDisposition = new ContentDisposition(ContentDisposition.Attachment); + attPart.FileName = filerow["URL"].ToString(); + + mult.Add(attPart); + //se.Attachments(attfile); + + } + else + { + log.Debug($"附件文件:{attfile}不存在"); + // logger.Error($"邮件{sendMail.GID}的附件文件{att.FilePath}不存在"); + } + } + } + entity = mult; + } + + //se.SetSmtp(MAILSENDACCOUNT, MAILSENDPASSWORD, MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT), Convert.ToBoolean(MAILISSSL), System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 + + message.Body = entity; + using (var client = new SmtpClient()) + { + client.Connect(MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT), Convert.ToBoolean(MAILISSSL)); + client.Authenticate(MAILSENDACCOUNT, MAILSENDPASSWORD); + client.Send(message); + client.Disconnect(true); + } + log.Debug($"邮件发送成功"); + + + } + catch (Exception ex) + { + log.Debug($"邮件发送失败:错误信息{ex.Message}"); + + } + + + } + else { + log.Debug($"资料不全:{row["BSNO"].ToString()}"); + + } + } + + + } + else + { + log.Debug($"未查询到数据,SQL语句:{querySql}"); + } + } + else + { + log.Error($"未包含所需的列(mblno,carrierid,portloadid),SQL语句:{querySql}"); + } + } + } + } +} diff --git a/JobDjyUpdateDate/JobSendCtn.cs b/JobDjyUpdateDate/JobSendCtn.cs new file mode 100644 index 00000000..1972764b --- /dev/null +++ b/JobDjyUpdateDate/JobSendCtn.cs @@ -0,0 +1,116 @@ +using log4net; +using Quartz; +using System; +using System.Data; +using System.Data.SqlClient; +using System.IO; +using System.Linq; +using System.Text; +using MailKit.Net.Smtp; +using MimeKit; +using HtmlAgilityPack; + + +namespace JobSendAgentMail +{ + public class JobSendCtn : IJob + { + private ILog log = LogManager.GetLogger(typeof(JobSendCtn)); + + public void Execute(IJobExecutionContext context) + { + + string connStr = context.JobDetail.JobDataMap.GetString("ConnectString"); + string querySql = context.JobDetail.JobDataMap.GetString("QuerySql"); + string MAILSENDACCOUNT = context.JobDetail.JobDataMap.GetString("MAILSENDACCOUNT"); + string MAILSENDPASSWORD = context.JobDetail.JobDataMap.GetString("MAILSENDPASSWORD"); + string MAILSENDSERVICE = context.JobDetail.JobDataMap.GetString("MAILSENDSERVICE"); + string MAILSENDPORT = context.JobDetail.JobDataMap.GetString("MAILSENDPORT"); + string MAILISSSL = context.JobDetail.JobDataMap.GetString("MAILISSSL"); + //string MAILTEMPLATE = context.JobDetail.JobDataMap.GetString("MAILTEMPLATE"); + string MAILTITLEJOB = context.JobDetail.JobDataMap.GetString("MAILTITLE"); + string receiver = context.JobDetail.JobDataMap.GetString("MAILRECEIVER"); + log.Debug($"开始执行发送邮件"); + string maildescrption = ""; + using (SqlConnection dbcon = new SqlConnection(connStr)) + { + SqlDataAdapter adapter = new SqlDataAdapter(querySql, dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Columns.Contains("箱号")) + { + if (table.Rows.Count > 0) + { + + foreach (DataRow row in table.Rows) + { + if (row["箱号"].ToString() != "") + { + + maildescrption = maildescrption + Environment.NewLine + row["箱号"].ToString(); + + + } + else { + log.Debug($"资料不全:{row["BSNO"].ToString()}"); + + } + } + + + } + else + { + log.Debug($"未查询到数据,SQL语句:{querySql}"); + } + + if (!string.IsNullOrEmpty(maildescrption)) { + + try + { + SendEmail se = new SendEmail(receiver, MAILSENDACCOUNT, "", "", MAILTITLEJOB, maildescrption, false); + + se.SetSmtp(MAILSENDACCOUNT, MAILSENDPASSWORD, MAILSENDSERVICE,Convert.ToInt16(MAILSENDPORT), false, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 + + + //var message = new MimeMessage(); + //message.From.Add(new MailboxAddress(MAILSENDACCOUNT, MAILSENDACCOUNT)); + //var maillist = receiver.Split(';'); + //foreach (var mailaddr in maillist) + //{ + // message.To.Add(MailboxAddress.Parse(mailaddr)); + //} + //message.Subject = MAILTITLEJOB; + //var bodyBuilder = new BodyBuilder(); + //bodyBuilder.TextBody = maildescrption; + + //message.Body = bodyBuilder.ToMessageBody(); + //using (var client = new SmtpClient()) + //{ + // client.Connect(MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT),false); + // client.Authenticate(MAILSENDACCOUNT, MAILSENDPASSWORD); + // client.Send(message); + // client.Disconnect(true); + //} + log.Debug($"邮件发送成功"); + + + } + catch (Exception ex) + { + log.Debug($"邮件发送失败:错误信息{ex.Message}"); + + } + + } + + + } + else + { + log.Error($"未包含所需的列(mblno,carrierid,portloadid),SQL语句:{querySql}"); + } + } + } + } +} diff --git a/JobDjyUpdateDate/MailTemplate.html b/JobDjyUpdateDate/MailTemplate.html new file mode 100644 index 00000000..4f6f6a7e --- /dev/null +++ b/JobDjyUpdateDate/MailTemplate.html @@ -0,0 +1,32 @@ + + +

+

+ pre-alert +

+ Dear + Customer:
+ Pls refer pre-alert as + below:
+ S/S:$CARRIERID$
+ VOL:$CNTRTOTAL$
+ POL:$PORTLOAD$
+ POD:$PORTDISCHARGE$
+ DEST:$DESTINATION$
+ ATD:$ATD$
+ ETA:$ETA$
+ MB/L:$MBLNO$-$ISSUETYPE$:hold
+ $HBLCONTENT$ + Importance:
+ Please hold the subject shipment till + further notice from Perways.
+ MUST release the shipment against Telex + Release HB/L from consignee and releasing notice from + Perways.
+ If you have any questions, pls let us know. + Thanks. +

+

+
+

+ diff --git a/JobDjyUpdateDate/Properties/AssemblyInfo.cs b/JobDjyUpdateDate/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..234cc948 --- /dev/null +++ b/JobDjyUpdateDate/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("JobYunDang")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("JobYunDang")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("a76c1698-c924-44fa-8a64-51329927d7e0")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/JobDjyUpdateDate/job_scheduling_data_2_0.xsd b/JobDjyUpdateDate/job_scheduling_data_2_0.xsd new file mode 100644 index 00000000..7bff0f0a --- /dev/null +++ b/JobDjyUpdateDate/job_scheduling_data_2_0.xsd @@ -0,0 +1,364 @@ + + + + + + + Root level node + + + + + + Commands to be executed before scheduling the jobs and triggers in this file. + + + + + Directives to be followed while scheduling the jobs and triggers in this file. + + + + + + + + + + + + + + Version of the XML Schema instance + + + + + + + + + + Delete all jobs, if any, in the identified group. "*" can be used to identify all groups. Will also result in deleting all triggers related to the jobs. + + + + + Delete all triggers, if any, in the identified group. "*" can be used to identify all groups. Will also result in deletion of related jobs that are non-durable. + + + + + Delete the identified job if it exists (will also result in deleting all triggers related to it). + + + + + + + + + + + Delete the identified trigger if it exists (will also result in deletion of related jobs that are non-durable). + + + + + + + + + + + + + + + + Whether the existing scheduling data (with same identifiers) will be overwritten. If false, and ignore-duplicates is not false, and jobs or triggers with the same names already exist as those in the file, an error will occur. + + + + + If true (and overwrite-existing-data is false) then any job/triggers encountered in this file that have names that already exist in the scheduler will be ignored, and no error will be produced. + + + + + If true trigger's start time is calculated based on earlier run time instead of fixed value. Trigger's start time must be undefined for this to work. + + + + + + + + Define a JobDetail + + + + + + + + + + + + + + + + + Define a JobDataMap + + + + + + + + + Define a JobDataMap entry + + + + + + + + + + Define a Trigger + + + + + + + + + + + Common Trigger definitions + + + + + + + + + + + + + + + + + + + + + + + Define a SimpleTrigger + + + + + + + + + + + + + + + + + Define a CronTrigger + + + + + + + + + + + + + + + Define a DateIntervalTrigger + + + + + + + + + + + + + + + + Cron expression (see JavaDoc for examples) + + Special thanks to Chris Thatcher (thatcher@butterfly.net) for the regular expression! + + Regular expressions are not my strong point but I believe this is complete, + with the caveat that order for expressions like 3-0 is not legal but will pass, + and month and day names must be capitalized. + If you want to examine the correctness look for the [\s] to denote the + seperation of individual regular expressions. This is how I break them up visually + to examine them: + + SECONDS: + ( + ((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?) + | (([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9])) + | ([\?]) + | ([\*]) + ) [\s] + MINUTES: + ( + ((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?) + | (([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9])) + | ([\?]) + | ([\*]) + ) [\s] + HOURS: + ( + ((([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?,)*([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?) + | (([\*]|[0-9]|[0-1][0-9]|[2][0-3])/([0-9]|[0-1][0-9]|[2][0-3])) + | ([\?]) + | ([\*]) + ) [\s] + DAY OF MONTH: + ( + ((([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?,)*([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?(C)?) + | (([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])/([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?) + | (L(-[0-9])?) + | (L(-[1-2][0-9])?) + | (L(-[3][0-1])?) + | (LW) + | ([1-9]W) + | ([1-3][0-9]W) + | ([\?]) + | ([\*]) + )[\s] + MONTH: + ( + ((([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?,)*([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?) + | (([1-9]|0[1-9]|1[0-2])/([1-9]|0[1-9]|1[0-2])) + | (((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?,)*(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?) + | ((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)/(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)) + | ([\?]) + | ([\*]) + )[\s] + DAY OF WEEK: + ( + (([1-7](-([1-7]))?,)*([1-7])(-([1-7]))?) + | ([1-7]/([1-7])) + | (((MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?,)*(MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?(C)?) + | ((MON|TUE|WED|THU|FRI|SAT|SUN)/(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?) + | (([1-7]|(MON|TUE|WED|THU|FRI|SAT|SUN))(L|LW)?) + | (([1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)#([1-7])?) + | ([\?]) + | ([\*]) + ) + YEAR (OPTIONAL): + ( + [\s]? + ([\*])? + | ((19[7-9][0-9])|(20[0-9][0-9]))? + | (((19[7-9][0-9])|(20[0-9][0-9]))/((19[7-9][0-9])|(20[0-9][0-9])))? + | ((((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?,)*((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?)? + ) + + + + + + + + + + Number of times to repeat the Trigger (-1 for indefinite) + + + + + + + + + + Simple Trigger Misfire Instructions + + + + + + + + + + + + + + + Cron Trigger Misfire Instructions + + + + + + + + + + + + Date Interval Trigger Misfire Instructions + + + + + + + + + + + + Interval Units + + + + + + + + + + + + + \ No newline at end of file diff --git a/JobDjyUpdateDate/packages.config b/JobDjyUpdateDate/packages.config new file mode 100644 index 00000000..95e32a09 --- /dev/null +++ b/JobDjyUpdateDate/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/JobDjyUpdateDate/quartz_jobs.xml b/JobDjyUpdateDate/quartz_jobs.xml new file mode 100644 index 00000000..9a8ae42d --- /dev/null +++ b/JobDjyUpdateDate/quartz_jobs.xml @@ -0,0 +1,80 @@ + + + + true + + + + + + JobSendBooking + Job + 订阅数据 + JobSendAgentMail.JobSendCtn,JobSendAgentMail + true + false + + + + ConnectString + Data Source=119.167.78.10,1433;Initial Catalog=DATA;Persist Security Info=True;User ID=sa;Password=yongfa_123 + + + + QuerySql + + SELECT 箱号 FROM [dbo].[t_op_ctn_detail] where isnull(是否还箱,0)=0 and (GETDATE()-动态时间)>180 + + + + + MAILSENDACCOUNT + han_xuntao@163.com + + + + MAILSENDPASSWORD + ds20040201 + + + + MAILSENDSERVICE + smtp.163.com + + + + MAILSENDPORT + 25 + + + + MAILISSSL + false + + + MAILRECEIVER + e.control@win-fast.com.cn,e.control2@win-fast.com.cn + + + + MAILTITLE + 集装箱超期提醒 + + + + + + + + TriggerBooking + Job + 订阅数据触发器 + JobSendBooking + Job + 0 55 14 * * ? + + + + + + \ No newline at end of file diff --git a/JobDjyUpdateDate/quartz_jobs11.xml b/JobDjyUpdateDate/quartz_jobs11.xml new file mode 100644 index 00000000..5b684a35 --- /dev/null +++ b/JobDjyUpdateDate/quartz_jobs11.xml @@ -0,0 +1,103 @@ + + + + true + + + + + + JobSendBooking + Job + 订阅数据 + JobSendAgentMail.JobSendBooking,JobSendAgentMail + true + false + + + + ConnectString + Data Source=www.perways.net,18866;Initial Catalog=ShippingWeb_SZYT;Persist Security Info=True;User ID=sa;Password=Ds20040201 + + + + QuerySql + + select BSNO,MBLNO,ORDERNO,OPERATORFAX AS BLREMARK,AGENTID,BLFRT,PORTLOAD,PORTDISCHARGE,DESTINATION,CONVERT(varchar(100), ETD, 23) AS ETD,ATD,HBLNO,CONVERT(varchar(100), ETA, 23) ETA,CNTRTOTAL,( + SELECT CODENAME FROM info_client WHERE SHORTNAME=OP_SEAE.CARRIER) CARRIERID,(CASE WHEN ISSUETYPE='电放' then 'Telex release'else case when ISSUETYPE='正本' then 'Original Bill' else case when ISSUETYPE='SWB' then 'Seaway Bill' else case when issuetype='云提单'then'INTELLIGENT BL'else '' end end end end) ISSUETYPE,(SELECT TOP 1 USERNAME FROM [user] where SHOWNAME=op_seae.OP) OPNAME,(SELECT TOP 1 email1 FROM [VW_user] where SHOWNAME=op_seae.OP) OPEMAIL, (((SELECT TOP 1 EMAIL FROM info_client where SHORTNAME=op_seae.AGENTID ))+';'+( SELECT TOP 1 email1 FROM [VW_userquan] where SHOWNAME=op_seae.SALE )) AGENTEMAIL from op_seae WHERE custno like 'CXE22050397' + + + + HblQuerySql + + select HBLNO,(CASE WHEN ISSUETYPE='电放' then 'Telex release'else + case when ISSUETYPE='正本' then 'Original Bill' else case when ISSUETYPE='SWB' then 'Seaway Bill' else case when issuetype='云提单'then'INTELLIGENT BL'else '' end end end end ) ISSUETYPE + from op_seae_billmanage + + + + + DocType + PA + + + + D7FilePath + D:\东胜\DONGSHENGWEB\ + + + + MAILSENDACCOUNT + szytcus@perways.com + + + + MAILSENDPASSWORD + PER202100558YT12 + + + + MAILSENDSERVICE + smtp.263.net + + + + MAILSENDPORT + 25 + + + + MAILISSSL + false + + + MAILTEMPLATE + MailTemplate.html + + + + + + + + TriggerBooking + Job + 订阅数据触发器 + JobSendBooking + Job + 0 34 14 * * ? + + + + + + \ No newline at end of file diff --git a/JobScheduler/JobAutoCreateFee.dll b/JobScheduler/JobAutoCreateFee.dll new file mode 100644 index 00000000..60490795 Binary files /dev/null and b/JobScheduler/JobAutoCreateFee.dll differ diff --git a/JobScheduler/JobAutoCreateFee.pdb b/JobScheduler/JobAutoCreateFee.pdb new file mode 100644 index 00000000..8b4f29f3 Binary files /dev/null and b/JobScheduler/JobAutoCreateFee.pdb differ diff --git a/JobSendAgentMail/JobDjy2D7Date.cs b/JobSendAgentMail/JobDjy2D7Date.cs new file mode 100644 index 00000000..202c2caf --- /dev/null +++ b/JobSendAgentMail/JobDjy2D7Date.cs @@ -0,0 +1,210 @@ +using log4net; +using Quartz; +using System; +using System.Data; +using System.Data.SqlClient; +using RabbitMQ.Client; +using System.IO; +using System.Linq; +using System.Text; +using MailKit.Net.Smtp; +using MimeKit; +using HtmlAgilityPack; +using System.Collections.Generic; +using System.Configuration; +using System.Threading.Tasks; +using System.Threading; +using Newtonsoft.Json; + +namespace JobSendAgentMail +{ + public class MsOpSeae + { + public string BSNO { get; set; } + public string MBLNO { get; set; } + public string OP { get; set; } + public string MAIL { get; set; } + } + public class SendMail + { + public string OP { get; set; } + public string MAIL { get; set; } + + public string MAILDESCRIPTION { get; set; } + + } + + public class JobDjy2D7Date : IJob + { + private ILog log = LogManager.GetLogger(typeof(JobDjy2D7Date)); + private static IConnection mqConn; + + public void Execute(IJobExecutionContext context) + { + + string connStr = context.JobDetail.JobDataMap.GetString("ConnectString"); + string MQURL = context.JobDetail.JobDataMap.GetString("DJYMQURL"); + string virtualhost = context.JobDetail.JobDataMap.GetString("virtualhost"); + string ExchangeName = context.JobDetail.JobDataMap.GetString("MQExchangeName"); + string QueueName = context.JobDetail.JobDataMap.GetString("MQQueueName"); + string BSSQL = context.JobDetail.JobDataMap.GetString("BSSQL"); + + + string MAILSENDACCOUNT = context.JobDetail.JobDataMap.GetString("MAILSENDACCOUNT"); + string MAILSENDPASSWORD = context.JobDetail.JobDataMap.GetString("MAILSENDPASSWORD"); + string MAILSENDSERVICE = context.JobDetail.JobDataMap.GetString("MAILSENDSERVICE"); + string MAILSENDPORT = context.JobDetail.JobDataMap.GetString("MAILSENDPORT"); + string MAILISSSL = context.JobDetail.JobDataMap.GetString("MAILISSSL"); + + log.Debug($"启动接收大简云数据回推"); + var CompanyQueueName = QueueName; + ConnectionFactory factory = new ConnectionFactory(); + factory.Uri = new Uri(MQURL); + //factory.UserName = "xgs_test"; + //factory.Password = "xgs_test123"; + factory.VirtualHost = virtualhost; + + mqConn = factory.CreateConnection(); + + IModel model = mqConn.CreateModel(); + + var task = Task.Run(() => + { + while (true) + { + var result = model.BasicGet(queue: CompanyQueueName, autoAck: true); + if (result == null) { Thread.Sleep(10); continue; }; + var strBody = Encoding.UTF8.GetString(result.Body.ToArray()); + log.Debug($"收到简云截单日期数据回推消息:{strBody}"); + + try + { + //回写数据 + var dateback = JsonConvert.DeserializeAnonymousType(strBody, new { vessel = string.Empty, voyage = string.Empty, ship_agency = string.Empty, cut_off_time = string.Empty, etd = string.Empty }); + + if (!string.IsNullOrEmpty(dateback.vessel) && !string.IsNullOrEmpty(dateback.voyage) && !string.IsNullOrEmpty(dateback.ship_agency) && !string.IsNullOrEmpty(dateback.cut_off_time)) + { + using (SqlConnection dbcon = new SqlConnection(connStr)) + { + dbcon.Open(); + string maildescrption = ""; + var FORWARDER = GetCustEdi(dbcon, dateback.ship_agency); + var SendMailList = new List(); + if (!string.IsNullOrEmpty(FORWARDER)) + { + var opseaelist = GetBs(dbcon, "VESSEL='" + dateback.vessel + "' AND VOYNO='" + dateback.voyage + "' and FORWARDER='" + FORWARDER + "'" + BSSQL); + if (opseaelist != null && opseaelist.Count != 0) + { + var opemail = ""; + foreach (var opseae in opseaelist) + { + var tastStr = $" update op_seae set CLOSEDOCDATE='{dateback.cut_off_time}' where BSNO='{opseae.BSNO}' "; + SqlCommand cmdtast = new SqlCommand(tastStr, dbcon); + cmdtast.ExecuteNonQuery(); + log.Debug($"已更新截单日期{dateback.cut_off_time},{opseae.MBLNO},{opseae.BSNO}"); + var sendmail = SendMailList.Find(x => x.OP == opseae.OP); + if (sendmail != null) + { + sendmail.MAILDESCRIPTION = sendmail.MAILDESCRIPTION + Environment.NewLine + opseae.MBLNO; + } + else + { + var newsendmail = new SendMail(); + newsendmail.OP = opseae.OP; + newsendmail.MAIL = opseae.MAIL; + newsendmail.MAILDESCRIPTION = opseae.MBLNO; + SendMailList.Add(newsendmail); + } + + } + + } + } + else + { + log.Debug($"{dateback.ship_agency}没有找到对应的订舱代理"); + + } + if (SendMailList != null && SendMailList.Count != 0) + { + foreach (var SendMail in SendMailList) + { + SendEmail se = new SendEmail(SendMail.MAIL, MAILSENDACCOUNT, "", "", "截港日期自动更新", SendMail.MAILDESCRIPTION, false); + + se.SetSmtp(MAILSENDACCOUNT, MAILSENDPASSWORD, MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT), false, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法 + log.Debug($"已给操作{SendMail.OP}发送邮件{SendMail.MAIL}{SendMail.MAILDESCRIPTION}"); + + + } + } + + + } + } + + } + catch (Exception ex) + { + log.Error($"处理大简云数据回推时出错:" + ex.Message); + log.Error(ex.Message); + log.Error(ex.StackTrace); + } + + //model.BasicConsume(CompanyQueueName, true, consumer); + //Console.WriteLine(msg); + } + }); + + task.Wait(); + model.Close(); + mqConn.Close(); + + + } + + static public List GetBs(SqlConnection dbcon, string constr) + { + var opseaeList = new List(); + var strSql = new StringBuilder(); + strSql.Append("select BSNO,MBLNO,OP,FORWARDER,(SELECT TOP 1 EMAIL1 FROM VW_user WHERE SHOWNAME=op_seae.OP) EMAIL from op_seae where " + constr); + strSql.Append(" ORDER BY OP "); + SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Rows.Count > 0) + { + foreach (DataRow row in table.Rows) + { + var opseae = new MsOpSeae(); + opseae.BSNO = Convert.ToString(row["BSNO"].ToString()); + opseae.MBLNO = Convert.ToString(row["MBLNO"].ToString()); + opseae.OP = Convert.ToString(row["OP"].ToString()); + opseae.MAIL = Convert.ToString(row["EMAIL"].ToString()); + opseaeList.Add(opseae); + } + } + + return opseaeList; + } + static public string GetCustEdi(SqlConnection dbcon, string constr) + { + string result = ""; + var strSql = new StringBuilder(); + strSql.Append("select CUST from code_cust_edi where EDINAME='DJY' AND EDICODE='" + constr + "'"); + SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon); + DataTable table = new DataTable(); + adapter.Fill(table); + if (table.Rows.Count > 0) + { + foreach (DataRow row in table.Rows) + { + result = Convert.ToString(row["CUST"].ToString()); + + } + } + + return result; + } + + } +} diff --git a/JobSendAgentMail/quartz_jobs11.xml b/JobSendAgentMail/quartz_jobs11.xml new file mode 100644 index 00000000..5b684a35 --- /dev/null +++ b/JobSendAgentMail/quartz_jobs11.xml @@ -0,0 +1,103 @@ + + + + true + + + + + + JobSendBooking + Job + 订阅数据 + JobSendAgentMail.JobSendBooking,JobSendAgentMail + true + false + + + + ConnectString + Data Source=www.perways.net,18866;Initial Catalog=ShippingWeb_SZYT;Persist Security Info=True;User ID=sa;Password=Ds20040201 + + + + QuerySql + + select BSNO,MBLNO,ORDERNO,OPERATORFAX AS BLREMARK,AGENTID,BLFRT,PORTLOAD,PORTDISCHARGE,DESTINATION,CONVERT(varchar(100), ETD, 23) AS ETD,ATD,HBLNO,CONVERT(varchar(100), ETA, 23) ETA,CNTRTOTAL,( + SELECT CODENAME FROM info_client WHERE SHORTNAME=OP_SEAE.CARRIER) CARRIERID,(CASE WHEN ISSUETYPE='电放' then 'Telex release'else case when ISSUETYPE='正本' then 'Original Bill' else case when ISSUETYPE='SWB' then 'Seaway Bill' else case when issuetype='云提单'then'INTELLIGENT BL'else '' end end end end) ISSUETYPE,(SELECT TOP 1 USERNAME FROM [user] where SHOWNAME=op_seae.OP) OPNAME,(SELECT TOP 1 email1 FROM [VW_user] where SHOWNAME=op_seae.OP) OPEMAIL, (((SELECT TOP 1 EMAIL FROM info_client where SHORTNAME=op_seae.AGENTID ))+';'+( SELECT TOP 1 email1 FROM [VW_userquan] where SHOWNAME=op_seae.SALE )) AGENTEMAIL from op_seae WHERE custno like 'CXE22050397' + + + + HblQuerySql + + select HBLNO,(CASE WHEN ISSUETYPE='电放' then 'Telex release'else + case when ISSUETYPE='正本' then 'Original Bill' else case when ISSUETYPE='SWB' then 'Seaway Bill' else case when issuetype='云提单'then'INTELLIGENT BL'else '' end end end end ) ISSUETYPE + from op_seae_billmanage + + + + + DocType + PA + + + + D7FilePath + D:\东胜\DONGSHENGWEB\ + + + + MAILSENDACCOUNT + szytcus@perways.com + + + + MAILSENDPASSWORD + PER202100558YT12 + + + + MAILSENDSERVICE + smtp.263.net + + + + MAILSENDPORT + 25 + + + + MAILISSSL + false + + + MAILTEMPLATE + MailTemplate.html + + + + + + + + TriggerBooking + Job + 订阅数据触发器 + JobSendBooking + Job + 0 34 14 * * ? + + + + + + \ No newline at end of file