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

781 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;
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 isnull(HBLNO,'')='' and {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"));
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获取爬取的数据
//字段说明http://123.234.225.158:32222/manage/file
JObject reqObj = new JObject();
reqObj.Add("user_key", "QDDJY");
reqObj.Add("user_secret", "YGH2020");
//下方此处无关权限 只用于区分调用来源
reqObj.Add("customer_id", "DY_DingShiWuLiuXinXi");
reqObj.Add("customer_name", "大简云定时读取物流信息");
reqObj.Add("web_code", "HLW_CD");
reqObj.Add("bno", new JValue(MBLNO));
reqObj.Add("vessel_name", "");
reqObj.Add("voyage_no", "");
reqObj.Add("wharf_name", "");
reqObj.Add("req_type", "0");
reqObj.Add("web_user", "");
reqObj.Add("web_psw", "");
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
{
var PortResult = Newtonsoft.Json.JsonConvert.DeserializeObject<RepWLXXModel>(rtn);
if (PortResult.code == 200)
{
var portstatus = PortResult.data[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);
}
}
DelMinMblno(connStr);
}
}
else {
if (PortResult.msg.Contains("单号信息不存在"))
{
}
log.Debug($"【{MBLNO}】code={PortResult.code}:"+PortResult.msg) ;
DelMinMblno(connStr);
}
//if (rtn.Contains("单号信息不存在"))
//{
// DelMinMblno(connStr);
//}
//else
//if (rtn.Contains("验证码") || rtn.Contains("无可用账号") || rtn.Contains("当前单号无信息"))
//{
// log.Debug($"没有查询到{MBLNO}的信息");
//}
//else
//{
//}
}
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("user_key", "QDDJY");
reqObj.Add("user_secret", "YGH2020");
//下方此处无关权限 只用于区分调用来源
reqObj.Add("customer_id", "DY_DingShiWuLiuXinXi");
reqObj.Add("customer_name", "大简云定时读取物流信息");
reqObj.Add("web_code", "HLW_CD");
reqObj.Add("bno", new JValue(MBLNO));
reqObj.Add("vessel_name", "");
reqObj.Add("voyage_no", "");
reqObj.Add("wharf_name", "");
reqObj.Add("req_type", "0");
reqObj.Add("web_user", "");
reqObj.Add("web_psw", "");
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
{
var PortResult = Newtonsoft.Json.JsonConvert.DeserializeObject<RepWLXXModel>(rtn);
if (PortResult.code == 200)
{
//if (rtn.Contains("单号信息不存在"))
//{
// DelMinMblno(connStr);
//}
//else
//if (rtn.Contains("验证码") || rtn.Contains("无可用账号") || rtn.Contains("当前单号无信息"))
//{
// log.Debug($"没有查询到{MBLNO}的信息");
//}
//else
//{
var portstatus = PortResult.data[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);
}
else
{
if (PortResult.msg.Contains("单号信息不存在"))
{
//DelMinMblno(connStr);
}
log.Debug($"【{MBLNO}】code={PortResult.code}:" + PortResult.msg);
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 ) ");
}
}
}