|
|
|
|
using log4net;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Quartz;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Data.SqlClient;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using JobAutoCreateFee.Model;
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
namespace JobCreateFee
|
|
|
|
|
{
|
|
|
|
|
public class JobBcEdiReplyContrast : IJob
|
|
|
|
|
{
|
|
|
|
|
private ILog log = LogManager.GetLogger(typeof(JobBcEdiReplyContrast));
|
|
|
|
|
|
|
|
|
|
public void Execute(IJobExecutionContext context)
|
|
|
|
|
{
|
|
|
|
|
log.Debug($"Execute开始");
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
|
|
|
|
|
string BcPath = context.JobDetail.JobDataMap.GetString("BcPath");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string tempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "BcTmp");
|
|
|
|
|
//string BcPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "BcPath");
|
|
|
|
|
|
|
|
|
|
if (!Directory.Exists(tempPath))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(tempPath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string[] files = Directory.GetFiles(BcPath);
|
|
|
|
|
if (files.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (string file in files)
|
|
|
|
|
{
|
|
|
|
|
FileInfo fileInfo = new FileInfo(file);
|
|
|
|
|
string pathtxt = File.ReadAllText(file);
|
|
|
|
|
var opList = pathtxt.Split('\'');
|
|
|
|
|
var MBLNO = "";
|
|
|
|
|
var BSNO = "";
|
|
|
|
|
var PORTDISCHARGID = "";
|
|
|
|
|
var PORTDISCHARG = "";
|
|
|
|
|
var DESTINATIONID = "";
|
|
|
|
|
var DESTINATION = "";
|
|
|
|
|
var TMPSTR = "";
|
|
|
|
|
var CTNTYPE = "";
|
|
|
|
|
var CTNNUM = "";
|
|
|
|
|
int LOCCOUNT =0;
|
|
|
|
|
var FILETYPE = "";
|
|
|
|
|
log.Debug($"文件名"+ fileInfo.Name);
|
|
|
|
|
var ctnlist = new List<JsonCtn>();
|
|
|
|
|
foreach (var opstr in opList)
|
|
|
|
|
{
|
|
|
|
|
var line = opstr;
|
|
|
|
|
if (string.IsNullOrEmpty(line))
|
|
|
|
|
continue;
|
|
|
|
|
var head = "";
|
|
|
|
|
if (line.Length>=3)
|
|
|
|
|
head = line.Substring(0, 3);
|
|
|
|
|
if (head == "RFF")
|
|
|
|
|
{
|
|
|
|
|
var strtmp = GetPosStringplus(line, 2);
|
|
|
|
|
var strtmp2 = GetPosString(strtmp, 1);
|
|
|
|
|
string strRFF_Value = GetPosString(strtmp, 2);
|
|
|
|
|
if (strtmp2 == "BN") {
|
|
|
|
|
BSNO = strRFF_Value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (head == "LOC")
|
|
|
|
|
{
|
|
|
|
|
var strtmp = GetPosStringplus(line, 2);
|
|
|
|
|
var strtmp2 = GetPosStringplus(line, 3);
|
|
|
|
|
if (strtmp == "11")
|
|
|
|
|
{
|
|
|
|
|
var locValue1 = GetPosString(strtmp2, 1);
|
|
|
|
|
var locValue2 = GetPosString(strtmp2, 4);
|
|
|
|
|
if (LOCCOUNT==0)
|
|
|
|
|
{
|
|
|
|
|
PORTDISCHARGID = locValue1;
|
|
|
|
|
PORTDISCHARG = locValue2;
|
|
|
|
|
DESTINATIONID = locValue1;
|
|
|
|
|
DESTINATION = locValue2;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
DESTINATIONID = locValue1;
|
|
|
|
|
DESTINATION = locValue2;
|
|
|
|
|
}
|
|
|
|
|
LOCCOUNT = LOCCOUNT + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (head == "TMP")
|
|
|
|
|
{
|
|
|
|
|
TMPSTR=GetPosString(GetPosStringplus(line, 3), 1);
|
|
|
|
|
}
|
|
|
|
|
if (head == "EQD")
|
|
|
|
|
{
|
|
|
|
|
CTNTYPE = GetPosStringplus(line, 4);
|
|
|
|
|
}
|
|
|
|
|
if (head == "EQN")
|
|
|
|
|
{
|
|
|
|
|
CTNNUM = GetPosStringplus(line, 2);
|
|
|
|
|
var ctn = new JsonCtn();
|
|
|
|
|
ctn.CTNTYPE = CTNTYPE;
|
|
|
|
|
ctn.CTNNUM=CTNNUM;
|
|
|
|
|
ctnlist.Add(ctn);
|
|
|
|
|
}
|
|
|
|
|
if (head == "BGM")
|
|
|
|
|
{
|
|
|
|
|
FILETYPE = GetPosStringplus(line, 5);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!string.IsNullOrEmpty(BSNO)&& FILETYPE=="AP")
|
|
|
|
|
{
|
|
|
|
|
log.Debug($"提单号:" + BSNO);
|
|
|
|
|
var OPSEAE = GetOPSEAE(connStr, BSNO);
|
|
|
|
|
if (OPSEAE != null && !string.IsNullOrEmpty(OPSEAE.BSNO))
|
|
|
|
|
{
|
|
|
|
|
var ISBEUPDATE = false;
|
|
|
|
|
var bodystr = "";
|
|
|
|
|
if (OPSEAE.CTNLIST != null && OPSEAE.CTNLIST.Count != 0 && ctnlist != null && ctnlist.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (var ctn in OPSEAE.CTNLIST)
|
|
|
|
|
{
|
|
|
|
|
var isfind = false;
|
|
|
|
|
ctnlist.ForEach(i =>
|
|
|
|
|
{
|
|
|
|
|
if (i.CTNTYPE == ctn.CTNTYPE)
|
|
|
|
|
{
|
|
|
|
|
if (i.CTNNUM != ctn.CTNNUM)
|
|
|
|
|
{
|
|
|
|
|
ISBEUPDATE = true;
|
|
|
|
|
bodystr = bodystr + Environment.NewLine + "集装箱不一致:" + ctn.CTNTYPE + "*" + ctn.CTNNUM + "----" + i.CTNTYPE + "*" + i.CTNNUM;
|
|
|
|
|
}
|
|
|
|
|
isfind = true;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
if (!isfind)
|
|
|
|
|
{
|
|
|
|
|
bodystr = bodystr + Environment.NewLine + "集装箱不一致:" + ctn.CTNTYPE + "*" + ctn.CTNNUM + "----";
|
|
|
|
|
ISBEUPDATE = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bodystr = bodystr + Environment.NewLine + "集装箱不一致";
|
|
|
|
|
ISBEUPDATE = true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if ((OPSEAE.PORTDISCHARG != PORTDISCHARG))
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
|
|
// bodystr = bodystr + Environment.NewLine + "卸货港不一致:" + OPSEAE.PORTDISCHARG + "----" + PORTDISCHARG;
|
|
|
|
|
// ISBEUPDATE = true;
|
|
|
|
|
//}
|
|
|
|
|
if ((OPSEAE.PORTDISCHARGID != PORTDISCHARGID))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
bodystr = bodystr + Environment.NewLine + "卸货港代码不一致:" + OPSEAE.PORTDISCHARGID + "----" + PORTDISCHARGID;
|
|
|
|
|
ISBEUPDATE = true;
|
|
|
|
|
}
|
|
|
|
|
if ((OPSEAE.DESTINATIONID != DESTINATIONID))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
bodystr = bodystr + Environment.NewLine + "目的地代码不一致:" + OPSEAE.DESTINATIONID + "----" + DESTINATIONID;
|
|
|
|
|
ISBEUPDATE = true;
|
|
|
|
|
}
|
|
|
|
|
if ((OPSEAE.TMPSTR != TMPSTR))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
bodystr = bodystr + Environment.NewLine + "温度不一致:" + OPSEAE.TMPSTR + "----" + TMPSTR;
|
|
|
|
|
ISBEUPDATE = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ISBEUPDATE)
|
|
|
|
|
{
|
|
|
|
|
var stmpid = GetMailStmp(connStr);
|
|
|
|
|
SaveMail(connStr, OPSEAE.EMAIL, "CMA订舱信息不一致:" + BSNO, bodystr, stmpid);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (File.Exists(Path.Combine(tempPath, fileInfo.Name))){
|
|
|
|
|
File.Delete(Path.Combine(tempPath, fileInfo.Name));
|
|
|
|
|
}
|
|
|
|
|
File.Copy(file, Path.Combine(tempPath, fileInfo.Name));
|
|
|
|
|
File.Delete(file);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (File.Exists(Path.Combine(tempPath, fileInfo.Name)))
|
|
|
|
|
{
|
|
|
|
|
File.Delete(Path.Combine(tempPath, fileInfo.Name));
|
|
|
|
|
}
|
|
|
|
|
File.Copy(file, Path.Combine(tempPath, fileInfo.Name));
|
|
|
|
|
File.Delete(file);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
log.Error(ex.Message);
|
|
|
|
|
log.Error(ex.StackTrace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static JsonOpSeae GetOPSEAE(string connStr,string BSNO)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var result =new JsonOpSeae();
|
|
|
|
|
|
|
|
|
|
var sqlQuery = $" select top 1 主提单号,编号,卸货港,卸货代码,目的地,目的地代码,isnull(设置温度,'') 设置温度,isnull((select top 1 邮箱 from t_sys_employee where 姓名=t_op_seae.操作员),'') 邮箱 from t_op_seae where 主提单号='{BSNO}' ";
|
|
|
|
|
|
|
|
|
|
DataTable tQuery = QuerySql(connStr, sqlQuery);
|
|
|
|
|
|
|
|
|
|
if (tQuery.Rows.Count >= 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataRow row in tQuery.Rows)
|
|
|
|
|
{
|
|
|
|
|
result.PORTDISCHARG= row["卸货港"].ToString();
|
|
|
|
|
result.PORTDISCHARGID = row["卸货代码"].ToString();
|
|
|
|
|
result.TMPSTR = row["设置温度"].ToString();
|
|
|
|
|
result.BSNO = row["编号"].ToString();
|
|
|
|
|
result.EMAIL= row["邮箱"].ToString();
|
|
|
|
|
result.DESTINATION = row["目的地"].ToString();
|
|
|
|
|
result.DESTINATIONID = row["目的地代码"].ToString();
|
|
|
|
|
|
|
|
|
|
sqlQuery = $" select t_code_ctn.EDI代码,sum(t_op_ctn.数量) 数量 from t_op_ctn INNER JOIN t_code_ctn ON t_op_ctn.代码 = t_code_ctn.代码 where t_op_ctn.编号='{result.BSNO}' GROUP BY t_code_ctn.EDI代码 ";
|
|
|
|
|
|
|
|
|
|
var ctnlist = new List<JsonCtn>();
|
|
|
|
|
|
|
|
|
|
DataTable ctnQuery = QuerySql(connStr, sqlQuery);
|
|
|
|
|
if (ctnQuery.Rows.Count >= 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataRow row2 in ctnQuery.Rows)
|
|
|
|
|
{
|
|
|
|
|
var ctn = new JsonCtn();
|
|
|
|
|
ctn.CTNTYPE = row2["EDI代码"].ToString();
|
|
|
|
|
ctn.CTNNUM = row2["数量"].ToString();
|
|
|
|
|
ctnlist.Add(ctn);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
result.CTNLIST = ctnlist;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static DataTable QuerySql(string connStr, string condition)
|
|
|
|
|
{
|
|
|
|
|
SqlConnection conn = new SqlConnection(connStr);
|
|
|
|
|
SqlDataAdapter dataAdapter = new SqlDataAdapter(condition, conn);
|
|
|
|
|
DataTable tQuery = new DataTable();
|
|
|
|
|
dataAdapter.Fill(tQuery);
|
|
|
|
|
return tQuery;
|
|
|
|
|
}
|
|
|
|
|
public static string GetMailStmp(string connStr, string StmpID = "")
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var result = "";
|
|
|
|
|
|
|
|
|
|
var sqlQuery = " select * from Mail_Send_Smtp ";
|
|
|
|
|
if (StmpID != "") sqlQuery = sqlQuery + " WHERE GID='" + StmpID + "'";
|
|
|
|
|
|
|
|
|
|
DataTable tQuery = QuerySql(connStr, sqlQuery);
|
|
|
|
|
|
|
|
|
|
if (tQuery.Rows.Count >= 0)
|
|
|
|
|
{
|
|
|
|
|
result = tQuery.Rows[0]["GID"].ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
public static int ExecSql(string connStr, string SqlStr)
|
|
|
|
|
{
|
|
|
|
|
SqlConnection SCON = null;//连接对象
|
|
|
|
|
|
|
|
|
|
SqlCommand SCom = new SqlCommand();//命令对象
|
|
|
|
|
|
|
|
|
|
SCON = new SqlConnection(connStr);
|
|
|
|
|
|
|
|
|
|
SCON.Open();
|
|
|
|
|
|
|
|
|
|
SCom.CommandText = SqlStr;
|
|
|
|
|
|
|
|
|
|
SCom.Connection = SCON;
|
|
|
|
|
|
|
|
|
|
SCom.CommandType = CommandType.Text;
|
|
|
|
|
|
|
|
|
|
int num = SCom.ExecuteNonQuery();
|
|
|
|
|
|
|
|
|
|
SCON.Close();
|
|
|
|
|
|
|
|
|
|
return num;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static int SaveMail(string connStr, string sendto, string title, string body, string smtpid)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
var sqlstr = $" INSERT INTO [Mail_Send] ([GID],[SendTo],[Title],[Body],[SendStatus],[TryCount],[CreateTime],[SmtpConfig],[Sender],[ShowName]) select newid(),'{sendto}','{title}','{body.Replace("'", "''")}','Create',0,GETDATE(),'{smtpid}','','' ";
|
|
|
|
|
return ExecSql(connStr, sqlstr);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public static string GetPosStringplus(string str, int pos, bool isnum = false)
|
|
|
|
|
{
|
|
|
|
|
var result = "";
|
|
|
|
|
if (isnum) result = "0";
|
|
|
|
|
var j = 0;
|
|
|
|
|
if (str.IndexOf("+") == -1) return result;
|
|
|
|
|
str = str.Replace("??", "?").Replace("?'", "'").Replace("?+", "し");
|
|
|
|
|
for (int i = 1; i < pos; i++)
|
|
|
|
|
{
|
|
|
|
|
if (str.IndexOf("+") == -1) return result;
|
|
|
|
|
if (str.IndexOf("+") != -1)
|
|
|
|
|
{
|
|
|
|
|
j = str.IndexOf("+");
|
|
|
|
|
str = str.Substring(j + 1, str.Length - j - 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
j = str.IndexOf("+");
|
|
|
|
|
|
|
|
|
|
if (j != -1)
|
|
|
|
|
{
|
|
|
|
|
str = str.Substring(0, j);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (str.Length != 0)
|
|
|
|
|
str = str.Substring(0, str.Length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = str.Replace("し", "+");
|
|
|
|
|
if (isnum)
|
|
|
|
|
{
|
|
|
|
|
if (result == "")
|
|
|
|
|
result = "0";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public static string GetPosString(string str, int pos, bool isnum = false)
|
|
|
|
|
{
|
|
|
|
|
var result = "";
|
|
|
|
|
if (isnum) result = "0";
|
|
|
|
|
var j = 0;
|
|
|
|
|
if (str.IndexOf(":") == -1) return result;
|
|
|
|
|
str = str.Replace("??", "?").Replace("?:", "^").Replace("?'", "'");
|
|
|
|
|
for (int i = 1; i < pos; i++)
|
|
|
|
|
{
|
|
|
|
|
if (str.IndexOf(":") == -1) return result;
|
|
|
|
|
if (str.IndexOf(":") != -1)
|
|
|
|
|
{
|
|
|
|
|
j = str.IndexOf(":");
|
|
|
|
|
str = str.Substring(j + 1, str.Length - j - 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
j = str.IndexOf(":");
|
|
|
|
|
|
|
|
|
|
if (j != -1)
|
|
|
|
|
{
|
|
|
|
|
str = str.Substring(0, j);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (str.Length != 0)
|
|
|
|
|
str = str.Substring(0, str.Length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = str.Replace("^", ":");
|
|
|
|
|
if (isnum)
|
|
|
|
|
{
|
|
|
|
|
if (result == "")
|
|
|
|
|
result = "0";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public class JsonCtn
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public string CTNTYPE { get; set; }
|
|
|
|
|
public string CTNNUM { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class JsonOpSeae
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public string BSNO { get; set; }
|
|
|
|
|
public string MBLNO { get; set; }
|
|
|
|
|
public string EMAIL { get; set; }
|
|
|
|
|
public string PORTDISCHARGID { get; set; }
|
|
|
|
|
public string PORTDISCHARG { get; set; }
|
|
|
|
|
public string TMPSTR { get; set; }
|
|
|
|
|
public string DESTINATIONID { get; set; }
|
|
|
|
|
public string DESTINATION { get; set; }
|
|
|
|
|
public List<JsonCtn> CTNLIST { get; set; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|