You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/JobAutoCreateFee/JobBcEdiReplyContrast.cs

430 lines
16 KiB
C#

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; }
}
}
}