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/JobPingTaiWork/Job_WLXX.cs

755 lines
31 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using log4net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Quartz;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using HcUtility.Core;
using HcUtility.Comm;
using System.Data.Entity;
using RabbitMQ.Client;
namespace JobPingTaiWork
{
public class blnopack {
//private static MBLNOList;
}
public class JobWLXXSave : IJob
{
private ILog log = LogManager.GetLogger(typeof(JobWLXXSave));
private string connStr { get; set; }
private string TimeType { get; set; }
private Int32 StartDays { get; set; }
private Int32 EndDays { get; set; }
//
private Int32 StartTime_single { get; set; }
private Int32 EndTime_single { get; set; }
public void Execute(IJobExecutionContext context)
{
log.Debug($"Execute开始");
try
{
connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
StartDays = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("StartDays"));
EndDays = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("EndDays"));
TimeType = context.JobDetail.JobDataMap.GetString("TimeType");
StartTime_single = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("StartTime_single"));
EndTime_single = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("EndTime_single"));
log.Debug($"连接字符串:{connStr}");
log.Debug($"起始天数:{StartDays}");
log.Debug($"终止天数:{EndDays}");
log.Debug($"时间类型:{TimeType}");
var nowhour = DateTime.Now.Hour;
var sqlQuery = " Select case when isnull(HBLNO,'')<>'' then HBLNO else MBLNO end MBLNO,MFNO from op_seae_edi ";
var queryfield = "";
if (TimeType == "录入日期") {
queryfield = " INPUTDATE ";
}
if (TimeType == "发送日期")
{
queryfield = " SENDTIME ";
}
if (TimeType == "开船日期")
{
queryfield = " ETD ";
}
var startdate = DateTime.Now.AddDays(-StartDays).ToString("yyyy-MM-dd");
var enddate = DateTime.Now.AddDays(-EndDays+1).ToString("yyyy-MM-dd");
if (StartTime_single <= nowhour && nowhour < EndTime_single) {
startdate = DateTime.Now.AddDays(0).ToString("yyyy-MM-dd" );
enddate = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
}
sqlQuery += string.Format(" where {0}>='{1}' and {2}<'{3}' ", queryfield, startdate, queryfield, enddate);
sqlQuery += " and not exists (select 1 from op_seae_edi_status where mfno=op_seae_edi.mfno and statustext= '接受申报' ) and dbo.getblno(mfno) not in(select mblno from wlxx_mblno) and isnull(ISdelete,0)=0 order by "+ queryfield;
var MBLNOList = DoWork.GetMBLNOList(connStr, sqlQuery);
if (MBLNOList.Count == 0)
{
log.Debug("没有要发送的数据!");
return;
}
//然后将所有提单号存入数据库
var SaveSql = Local_Mblnomb.getSaveSql(MBLNOList);
using (SqlConnection dbcon = new SqlConnection(connStr))
{
dbcon.Open();
using (SqlTransaction trans = dbcon.BeginTransaction())
{
//增加判断 如果
foreach (string Sqlitem in SaveSql)
{
if (!string.IsNullOrWhiteSpace(Sqlitem))
{
//log.Debug($"TaskSqlitem{TaskSqlitem}");
SqlCommand cmd = new SqlCommand(Sqlitem, dbcon, trans);
cmd.ExecuteNonQuery();
}
}
trans.Commit();
}
dbcon.Close();
}
}
catch (Exception ex)
{
log.Error(ex.Message);
log.Error(ex.StackTrace);
}
}
private void DoSendMessage(string mblno) {
}
}
public class JobWLXXGet : IJob
{
private ILog log = LogManager.GetLogger(typeof(JobWLXXGet));
private string connStr { get; set; }
private string reqUrl { get; set; }
private Int32 reqTimeout { get; set; }
public void Execute(IJobExecutionContext context)
{
try
{
connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
reqUrl = context.JobDetail.JobDataMap.GetString("ReqUrl");
reqTimeout = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("RequestTimeout"));
var mqConnStr = context.JobDetail.JobDataMap.GetString("RabbitConnectString");
log.Debug($"连接字符串:{connStr}");
log.Debug($"请求URL{reqUrl}");
log.Debug($"请求超时:{reqTimeout}");
EdiStatusDAL.connstr = connStr;
//查找wlxx_mblno 当中最早的数据
var getsqlstr = "select * from wlxx_mblno where id = (select min(id) from wlxx_mblno)";
var MBLNOList = DoWork.GetMBLNOList(connStr, getsqlstr);
if (MBLNOList.Count == 0)
{
log.Debug("没有要查询的数据!");
return;
}
var MBLNO = MBLNOList[0].MBLNO;
var MFNO = MBLNOList[0].MFNO;
//访问url获取爬取的数据
JObject reqObj = new JObject();
reqObj.Add("yardid", "WLXX");
reqObj.Add("mblno", new JValue(MBLNO));
reqObj.Add("isweb", "2");
reqObj.Add("wltype", "WLXX");
string mailAddr = "";
string rtn = "";
List<WLXXModel> mList;
RepWLXXModel mWLXX;
try
{
log.Debug($"请求数据:{reqObj}");
rtn = WebRequestHelper.DoPost(reqUrl, reqObj.ToString(Newtonsoft.Json.Formatting.None), reqTimeout * 1000);
log.Debug($"返回数据:{rtn}");
try
{
if (rtn.Contains("单号信息不存在")) {
DelMinMblno(connStr);
}
else
if ( rtn.Contains("验证码") || rtn.Contains("无可用账号") || rtn.Contains("当前单号无信息"))
{
log.Debug($"没有查询到{MBLNO}的信息");
}
else
{
var needPushStatus = false;
var PortResult = Newtonsoft.Json.JsonConvert.DeserializeObject<RepWLXXModel>(rtn);
var portstatus = PortResult.message[0];
edistatusMb newStatusRecord = new edistatusMb();
//var laststatus = portstatus.getlaststatus();
var Localstatuslist = EdiStatusDAL.GetDataList(connStr, " MFNO='"+MFNO+"' ");
var PortStatusList = portstatus.getstatusList();
if (PortStatusList.Count > 0)
{
foreach (var newstatus in PortStatusList)
{
var upd = false;
if (Localstatuslist.Count > 0)
foreach (var status in Localstatuslist)
{
if (status.GetValue("statustext") == newstatus.status)
{
if (newstatus.needinsert())
{
newStatusRecord = status;
newStatusRecord.SetValue("statustime", newstatus.timestr);
//newStatusRecord.SetValue("statustime", newstatus.timestr);
newStatusRecord.SetValue("ShenBaoXiangShu", portstatus.ShenBaoXiangShu);
newStatusRecord.DbOperationType = DbOperationType.DbotUpd;
//result = SaveStatus(newStatusRecord, headdata.MFNO);
upd = true;
EdiStatusDAL.Update(newStatusRecord);
needPushStatus = true;
}
else {
newStatusRecord = status;
EdiStatusDAL.Delete(newStatusRecord);
}
}
}
if (!upd && newstatus.needinsert())
{
//循环完了没找到同状态 则新增一条
//newStatusRecord.SetValue("gid", Guid.NewGuid().ToString());
newStatusRecord.SetValue("mfno",MFNO);
if (!string.IsNullOrWhiteSpace(newstatus.timestr))
newStatusRecord.SetValue("statustime", newstatus.timestr);
newStatusRecord.SetValue("statustext", newstatus.status);
newStatusRecord.SetValue("ShenBaoXiangShu", portstatus.ShenBaoXiangShu);
newStatusRecord.DbOperationType= DbOperationType.DbotIns;
newStatusRecord.SetValue("mblno", MBLNO);
EdiStatusDAL.Insert(newStatusRecord);
needPushStatus= true;
}
}
DelMinMblno(connStr);
}
if(needPushStatus)
{
//回推舱单状态
try
{
if (string.IsNullOrEmpty(mqConnStr))
{
log.Warn($"未配置舱单回推消息队列,不会回推状态:{MFNO}");
}
else
{
log.Debug($"准备推送舱单状态回推到消息队列:{string.Join(",", MFNO)}");
//推送消息
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = mqConnStr;
var mqConn = factory.CreateConnection("JobPingTaiWork");
var exchangeName = "myshiping.feedback.status.cangdan";
IModel model = mqConn.CreateModel();
model.ExchangeDeclare(exchange: exchangeName, type: ExchangeType.Fanout);
model.BasicPublish(exchange: exchangeName,
routingKey: "",
basicProperties: null,
body: Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new { MfnoList = new string[] { MFNO } })));
mqConn.Close();
log.Debug($"推送舱单状态回推消息完成");
}
}
catch (Exception ex)
{
log.Error($"推送舱单状态回推消息失败:{ex.Message}");
log.Error(ex.StackTrace);
}
}
}
}
catch (Exception e)
{
log.Debug($"saveerror1: {e.Message}");
}
}
catch (Exception ex)
{
log.Debug($"saveerror2: {ex.Message}");
}
}
catch (Exception ex)
{
log.Debug($"catch{ex.Message}");
log.Error(ex.Message);
log.Error(ex.StackTrace);
}
}
public static void DelMinMblno(string connStr) {
var _r = DoWork.ExecSql(connStr," delete from wlxx_mblno where id =(select min(id) from wlxx_mblno ) ");
}
public static void DelMinMblno_1(string connStr)
{
var _r = DoWork.ExecSql(connStr, " delete from wlxx_mblno_1 where id =(select min(id) from wlxx_mblno_1 ) ");
}
}
//public class JobWLXX_GetDelay : IJob
//{
// //从WLXX_MBLNO_DELAY表中查找时间合适的数据
// //插入到WLXX_MBLNO表中 并将其ID数字放置在靠前位置
// private ILog log = LogManager.GetLogger(typeof(JobWLXX_GetDelay));
// private string connStr { get; set; }
// private string reqUrl { get; set; }
// private Int32 reqTimeout { get; set; }
// private Int32 ReadDealyMinutes { get; set; }
// public void Execute(IJobExecutionContext context)
// {
// try
// {
// connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
// reqUrl = context.JobDetail.JobDataMap.GetString("ReqUrl");
// reqTimeout = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("RequestTimeout"));
// ReadDealyMinutes = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("ReadDealyMinutes"));
// log.Debug($"连接字符串:{connStr}");
// log.Debug($"请求URL{reqUrl}");
// log.Debug($"请求超时:{reqTimeout}");
// log.Debug($"读取未完成后延迟时间(分钟){ReadDealyMinutes}");
// EdiStatusDAL.connstr = connStr;
// //查找 WLXX_MBLNO_DELAY 当中时间早于当前时间的数据
// var getsqlstr = "select * from WLXX_MBLNO_DELAY where READTIME<=getdate()";
// var MBLNOList = DoWork.GetMBLNOList(connStr, getsqlstr);
// if (MBLNOList.Count == 0)
// {
// log.Debug("没有要查询的数据!");
// return;
// }
// var id = MBLNOList[0].id;
// var MBLNO = MBLNOList[0].MBLNO;
// var MFNO = MBLNOList[0].MFNO;
// //访问url获取爬取的数据
// JObject reqObj = new JObject();
// reqObj.Add("yardid", "WLXX");
// reqObj.Add("mblno", new JValue(MBLNO));
// reqObj.Add("isweb", "2");
// reqObj.Add("wltype", "WLXX");
// string mailAddr = "";
// string rtn = "";
// List<WLXXModel> mList;
// RepWLXXModel mWLXX;
// try
// {
// log.Debug($"请求数据:{reqObj}");
// rtn = WebRequestHelper.DoPost(reqUrl, reqObj.ToString(Newtonsoft.Json.Formatting.None), reqTimeout * 1000);
// log.Debug($"返回数据:{rtn}");
// try
// {
// if (rtn.Contains("单号信息不存在"))
// {
// DelMinMblno(connStr);
// DelayMblno(connStr, id);
// }
// else
// if (rtn.Contains("验证码") || rtn.Contains("无可用账号") || rtn.Contains("当前单号无信息"))
// {
// log.Debug($"没有查询到{MBLNO}的信息");
// DelayMblno(connStr, id);
// }
// else
// {
// var PortResult = Newtonsoft.Json.JsonConvert.DeserializeObject<RepWLXXModel>(rtn);
// var portstatus = PortResult.message[0];
// edistatusMb newStatusRecord = new edistatusMb();
// //var laststatus = portstatus.getlaststatus();
// var Localstatuslist = EdiStatusDAL.GetDataList(connStr, " MFNO='" + MFNO + "' ");
// var PortStatusList = portstatus.getstatusList();
// if (PortStatusList.Count > 0)
// {
// foreach (var newstatus in PortStatusList)
// {
// var upd = false;
// if (Localstatuslist.Count > 0)
// foreach (var status in Localstatuslist)
// {
// if (status.GetValue("statustext") == newstatus.status)
// {
// if (newstatus.needinsert())
// {
// newStatusRecord = status;
// newStatusRecord.SetValue("statustime", newstatus.timestr);
// //newStatusRecord.SetValue("statustime", newstatus.timestr);
// newStatusRecord.SetValue("ShenBaoXiangShu", portstatus.ShenBaoXiangShu);
// newStatusRecord.DbOperationType = DbOperationType.DbotUpd;
// //result = SaveStatus(newStatusRecord, headdata.MFNO);
// upd = true;
// EdiStatusDAL.Update(newStatusRecord);
// }
// else
// {
// newStatusRecord = status;
// EdiStatusDAL.Delete(newStatusRecord);
// }
// }
// }
// if (!upd && newstatus.needinsert())
// {
// //循环完了没找到同状态 则新增一条
// //newStatusRecord.SetValue("gid", Guid.NewGuid().ToString());
// newStatusRecord.SetValue("mfno", MFNO);
// if (!string.IsNullOrWhiteSpace(newstatus.timestr))
// newStatusRecord.SetValue("statustime", newstatus.timestr);
// newStatusRecord.SetValue("statustext", newstatus.status);
// newStatusRecord.SetValue("ShenBaoXiangShu", portstatus.ShenBaoXiangShu);
// newStatusRecord.DbOperationType = DbOperationType.DbotIns;
// newStatusRecord.SetValue("mblno", MBLNO);
// EdiStatusDAL.Insert(newStatusRecord);
// }
// }
// //如果有接受申报或装载放行 则删除WLXX_MBLNO_DELAY当中的该提单号数据
// if (portstatus.临时读取完成())
// {
// DelDelayMblno(connStr, id);
// }
// else
// {
// DelayMblno(connStr, id);
// }
// DelMinMblno(connStr);
// }
// }
// }
// catch (Exception e)
// {
// log.Debug($"saveerror1: {e.Message}");
// }
// }
// catch (Exception ex)
// {
// log.Debug($"saveerror2: {ex.Message}");
// }
// }
// catch (Exception ex)
// {
// log.Debug($"catch{ex.Message}");
// log.Error(ex.Message);
// log.Error(ex.StackTrace);
// }
// }
// public static void DelMinMblno(string connStr)
// {
// var _r = DoWork.ExecSql(connStr, " delete from wlxx_mblno where id =(select min(id) from wlxx_mblno ) ");
// }
// public static void DelayMblno(string connStr,string id)
// {
// var _r = DoWork.ExecSql(connStr, " update WLXX_MBLNO_DELAY set READTIME=dateadd(minute,2,getdate()) where id= "+id);
// }
// public static void DelDelayMblno(string connStr, string id)
// {
// var _r0 = DoWork.ExecSql(connStr, " update OP_SEAE_EDI_FENDANSEND set CANSEND=1 where mblno=(select mblno from WLXX_MBLNO_DELAY where id= " + id+")");
// var _r = DoWork.ExecSql(connStr, " delete from WLXX_MBLNO_DELAY where id= " + id);
// }
//}
public class JobWLXXSave_D6 : IJob
{
private ILog log = LogManager.GetLogger(typeof(JobWLXXSave_D6));
private string connStr { get; set; }
private string TimeType { get; set; }
private Int32 StartDays { get; set; }
private Int32 EndDays { get; set; }
//private Int32 ChaXunJianGe { get; set; }
public void Execute(IJobExecutionContext context)
{
log.Debug($"Execute开始");
try
{
connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
StartDays = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("StartDays"));
EndDays = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("EndDays"));
TimeType = context.JobDetail.JobDataMap.GetString("TimeType");
log.Debug($"连接字符串:{connStr}");
log.Debug($"起始天数:{StartDays}");
log.Debug($"终止天数:{EndDays}");
log.Debug($"时间类型:{TimeType}");
var queryfield = "录入日期";
if (TimeType == "录入日期")
{
queryfield = " 录入日期 ";
}
//if (TimeType == "发送日期")
//{
// queryfield = " SENDTIME ";
//}
if (TimeType == "开船日期")
{
queryfield = " 开船日期 ";
}
var startdate = DateTime.Now.AddDays(-StartDays).ToString("yyyy-MM-dd");
var enddate = DateTime.Now.AddDays(-EndDays + 1).ToString("yyyy-MM-dd");
/*select s.*
from (
select *, row_number() over (partition by [手机号] order by [店铺]) as group_idx
from table_name
) s
where s.group_idx = 1*/
var sqlQuery = " select 编号 MFNO,case when isnull(分提单号,'')<>'' then 分提单号 else 主提单号 end MBLNO,case when isnull(分提单号,'')<>'' then 0 else 1 end ISMAIN from t_op_seae_edi ";
sqlQuery += string.Format(" where EDI类型='CN' and {0}>='{1}' and {2}<'{3}' and isnull(申报状态,'')='' order by 录入日期 desc", queryfield, startdate, queryfield, enddate);
//sqlQuery += " and not exists (select 1 from op_seae_edi_status where mfno=op_seae_edi.mfno and statustext= '装载放行' ) and dbo.getblno(mfno) not in(select mblno from wlxx_mblno) order by " + queryfield;
var MBLNOList = DoWork.GetMBLNOList_D6(connStr, sqlQuery);
if (MBLNOList.Count == 0)
{
log.Debug("没有要发送的数据!");
return;
}
//然后将所有提单号存入数据库
var SaveSql = Local_Mblnomb.getSaveSql_D6(MBLNOList);
using (SqlConnection dbcon = new SqlConnection(connStr))
{
dbcon.Open();
using (SqlTransaction trans = dbcon.BeginTransaction())
{
//增加判断 如果
foreach (string Sqlitem in SaveSql)
{
if (!string.IsNullOrWhiteSpace(Sqlitem))
{
//log.Debug($"TaskSqlitem{TaskSqlitem}");
SqlCommand cmd = new SqlCommand(Sqlitem, dbcon, trans);
cmd.ExecuteNonQuery();
}
}
trans.Commit();
}
dbcon.Close();
}
}
catch (Exception ex)
{
log.Error(ex.Message);
log.Error(ex.StackTrace);
}
}
private void DoSendMessage(string mblno)
{
}
}
public class JobWLXXGet_D6 : IJob
{
private ILog log = LogManager.GetLogger(typeof(JobWLXXGet_D6));
private string connStr { get; set; }
private string reqUrl { get; set; }
private Int32 reqTimeout { get; set; }
public void Execute(IJobExecutionContext context)
{
try
{
connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
reqUrl = context.JobDetail.JobDataMap.GetString("ReqUrl");
reqTimeout = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("RequestTimeout"));
log.Debug($"连接字符串:{connStr}");
log.Debug($"请求URL{reqUrl}");
log.Debug($"请求超时:{reqTimeout}");
EdiStatusDAL.connstr = connStr;
//查找wlxx_mblno 当中最早的数据
var getsqlstr = "select * from wlxx_mblno where id = (select min(id) from wlxx_mblno)";
var MBLNOList = DoWork.GetMBLNOList_D6(connStr, getsqlstr);
if (MBLNOList.Count == 0)
{
log.Debug("没有要查询的数据!");
return;
}
var MBLNO = MBLNOList[0].MBLNO;
var MFNO = MBLNOList[0].MFNO;
var ISMAIN = MBLNOList[0].ISMAIN;
//访问url获取爬取的数据
JObject reqObj = new JObject();
reqObj.Add("yardid", "WLXX");
reqObj.Add("mblno", new JValue(MBLNO));
reqObj.Add("isweb", "2");
reqObj.Add("wltype", "WLXX");
string mailAddr = "";
string rtn = "";
List<WLXXModel> mList;
RepWLXXModel mWLXX;
try
{
log.Debug($"请求数据:{reqObj}");
rtn = WebRequestHelper.DoPost(reqUrl, reqObj.ToString(Newtonsoft.Json.Formatting.None), reqTimeout * 1000);
log.Debug($"返回数据:{rtn}");
try
{
if (rtn.Contains("单号信息不存在"))
{
DelMinMblno(connStr);
}
else
if (rtn.Contains("验证码") || rtn.Contains("无可用账号") || rtn.Contains("当前单号无信息"))
{
log.Debug($"没有查询到{MBLNO}的信息");
}
else
{
var PortResult = Newtonsoft.Json.JsonConvert.DeserializeObject<RepWLXXModel>(rtn);
var portstatus = PortResult.message[0];
edistatusMb newStatusRecord = new edistatusMb();
//var laststatus = portstatus.getlaststatus();
var Localstatuslist = EdiStatusDAL_D6.GetDataList(connStr, " 编号='" + MFNO + "' ");
if (Localstatuslist.Count > 0) {
var localrecord = Localstatuslist[0];
//如果数据里的这条信息状态与返回状态不同
if (localrecord.GetValue("申报状态") != portstatus.getlaststatus_str_D6(ISMAIN)) {
EdiStatusDAL_D6.Update(portstatus, localrecord.GetValue("编号"),ISMAIN);
}
}
DelMinMblno(connStr);
}
}
catch (Exception e)
{
log.Debug($"saveerror1: {e.Message}");
}
}
catch (Exception ex)
{
log.Debug($"saveerror2: {ex.Message}");
}
}
catch (Exception ex)
{
log.Debug($"catch{ex.Message}");
log.Error(ex.Message);
log.Error(ex.StackTrace);
}
}
public static void DelMinMblno(string connStr)
{
var _r = DoWork.ExecSql(connStr, " delete from wlxx_mblno where id =(select min(id) from wlxx_mblno ) ");
}
}
}