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/Job_DSWMS_REPORT/Job_DSWMS_REPORT_1.cs

212 lines
7.4 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 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;
}
}
}