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.

212 lines
7.4 KiB
C#

11 months ago
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 HtmlAgilityPack;
using System.Data.Entity;
using System.Text.RegularExpressions;
using System.Net;
using System.IO.Compression;
namespace Job_DSWMS_REPORT
{
/// <summary>
/// 新仓储系统 分类监管 报文上传
/// </summary>
public class Job_DSWMS_REPORT_1 : IJob
{
private ILog log = LogManager.GetLogger(typeof(Job_DSWMS_REPORT_1));
private string USERCODE = "";
private string PWD = "";
private string SERVERUrl = "";
private string SERVERPORTUrl = "";
private string FilePath = "";
public void Execute(IJobExecutionContext context)
{
log.Debug($"Execute开始");
USERCODE = context.JobDetail.JobDataMap.GetString("USERCODE");
PWD = context.JobDetail.JobDataMap.GetString("PWD");
SERVERUrl = context.JobDetail.JobDataMap.GetString("SERVERUrl");
SERVERPORTUrl = context.JobDetail.JobDataMap.GetString("SERVERPORTUrl");
FilePath = context.JobDetail.JobDataMap.GetString("FilePath");
//1调用URL指定的接口 得到返回数据 取得其中的文件名
//2从URL+文件名中取得文件,保存至指定文件夹
try
{
var filename = getFileName();
DownLoad(filename);
}
catch (Exception ex) {
log.Error("错误中断0:" + ex.Message);
}
}
public class WMSXMLResult {
bool status { get; set; }
string code { get; set; }
public string data { get; set; }
}
private string getFileName() {
string strBuff = "";
var url = SERVERPORTUrl + "?USERCODE="+USERCODE+"&PWD="+ PWD;
var rtn = DoGet(url);
//"{\"status\":true,\"code\":null,\"message\":\"\",\"data\":\"Upload/FLJG/2021_07_06_YLDY_StockApply.FLJGRX\"}"
var jsonObj = JsonConvert.DeserializeObject<WMSXMLResult>(rtn);
return jsonObj.data;
}
public static string DoPost(string url, string json, int timeout = 10000)
{
try
{
string responseString = "";//post返回的结果
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, err) => { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Method = "POST";
req.Timeout = timeout;
req.Headers.Add("Accept-Encoding", "gzip, deflate");
if (!string.IsNullOrWhiteSpace(json))
{
byte[] postBytes = Encoding.UTF8.GetBytes(json);
req.ContentType = "application/json; charset=utf-8";
req.ContentLength = Encoding.UTF8.GetByteCount(json);
Stream stream = req.GetRequestStream();
stream.Write(postBytes, 0, postBytes.Length);
stream.Close();
}
else
{
req.ContentLength = 0;
}
var response = req.GetResponse();
responseString = GetResponseBody((HttpWebResponse)response);
return responseString;
}
catch (Exception e) {
return e.Message;
}
}
public static string DoGet(string url)
{
string responseString = "";//post返回的结果
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, err) => { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Method = "GET";
req.ContentLength = 0;
var response = req.GetResponse();
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
responseString = streamRead.ReadToEnd();
response.Close();
streamRead.Close();
return responseString;
}
public string DownLoad(string FileName)
{
var url = SERVERUrl + FileName;
var fr = FileName.Split('/').ToList();
var fileSaveName = fr[fr.Count - 1];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
byte[] fileBytes;
using (WebResponse webRes = request.GetResponse())
{
int length = (int)webRes.ContentLength;
HttpWebResponse response = webRes as HttpWebResponse;
Stream stream = response.GetResponseStream();
var contentdisposition = response.Headers["Content-Disposition"];
var filename = fileSaveName;
//读取到内存
MemoryStream stmMemory = new MemoryStream();
byte[] buffer = new byte[length];
int i;
//将字节逐个放入到Byte中
while ((i = stream.Read(buffer, 0, buffer.Length)) > 0)
{
stmMemory.Write(buffer, 0, i);
}
fileBytes = stmMemory.ToArray();//文件流Byte
FileStream fs = new FileStream(FilePath+"\\" + filename, FileMode.OpenOrCreate);
stmMemory.WriteTo(fs);
stmMemory.Close();
fs.Close();
return FilePath + filename;
}
}
private static string GetResponseBody(HttpWebResponse response)
{
string responseBody = string.Empty;
if (response.ContentEncoding != null && response.ContentEncoding.ToLower().Contains("gzip"))
{
using (GZipStream stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
{
using (StreamReader reader = new StreamReader(stream))
{
responseBody = reader.ReadToEnd();
}
}
}
else if (response.ContentEncoding != null && response.ContentEncoding.ToLower().Contains("deflate"))
{
using (DeflateStream stream = new DeflateStream(
response.GetResponseStream(), CompressionMode.Decompress))
{
using (StreamReader reader =
new StreamReader(stream, Encoding.UTF8))
{
responseBody = reader.ReadToEnd();
}
}
}
else
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
responseBody = reader.ReadToEnd();
}
}
}
return responseBody;
}
}
}