From a77b709548c8c19ba790c91506dc076629db1d36 Mon Sep 17 00:00:00 2001 From: zhuyiyi <649091362@qq.com> Date: Wed, 8 Jul 2026 08:59:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=B0=E9=B8=BF=E4=B8=9A?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xhyOrderFile.aspx | 1 + xhyOrderFile.aspx.cs | 458 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 459 insertions(+) create mode 100644 xhyOrderFile.aspx create mode 100644 xhyOrderFile.aspx.cs diff --git a/xhyOrderFile.aspx b/xhyOrderFile.aspx new file mode 100644 index 0000000..328cd53 --- /dev/null +++ b/xhyOrderFile.aspx @@ -0,0 +1 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xhyOrderFile.aspx.cs" Inherits="xhyOrderFile" %> \ No newline at end of file diff --git a/xhyOrderFile.aspx.cs b/xhyOrderFile.aspx.cs new file mode 100644 index 0000000..a2ca853 --- /dev/null +++ b/xhyOrderFile.aspx.cs @@ -0,0 +1,458 @@ +using AjaxControlToolkit.HtmlEditor.ToolbarButtons; +using Aliyun.OSS; +using Aliyun.OSS.Common; +using BizCom; +using ICSharpCode.SharpZipLib.Zip; +using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Net.Http; +using System.Net.PeerToPeer; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Security.Principal; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using Utils.Serialization; + + +public partial class xhyOrderFile : System.Web.UI.Page +{ + public static string upPath = ConfigurationManager.AppSettings["upPath"]; + public static string copyPath = ConfigurationManager.AppSettings["copyPath"]; + + public static string siteUrl = ConfigurationManager.AppSettings["OriSiteUrl"]; + + [DllImport("DrvInterface64.dll", CharSet = CharSet.Unicode)] + public static extern uint DecFile(string filename); + + [DllImport("DrvInterface64.dll", CharSet = CharSet.Unicode)] + public static extern int IsFileEncrypted(string filename);//返回1为加密,0为未被加密 + [DllImport("DrvInterface64.dll", CharSet = CharSet.Ansi)] + public static extern void CreateUserKey(StringBuilder key, int len); + [DllImport("DrvInterface64.dll", CharSet = CharSet.Ansi)] + public static extern int InitAesKey(StringBuilder key, int len); + + [DllImport("DrvInterface64.dll")] + public static extern int IsInitedAesKey(); + + private void conErc(string msg) + { + XLog.SaveLog(0, msg); + Response.Write(msg); + //Response.StatusCode = (int)HttpStatusCode.NotFound; + //Response.End(); + } + + private void conSuc(string msg) + { + Response.Write("{\"type\":\"success\",\"result\":\"" + msg + "\"}"); + //Response.End(); + } + + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + Response.Buffer = true; + downloadMore(); + } + } + + private string getCanDownFile(string fileName) + { + string[] extArr = new string[] { ".cdr", ".zip", ".rar", ".pdf" }; + foreach (string ext in extArr) + { + string fname = fileName + ext; + if (File.Exists(fname)) + { + return ext; + } + } + + return ""; + } + static bool running = false; + static HttpClient client = new HttpClient(); + static string pUrl = "http://test.new-only.com:54444/shopPlat/front/needlogin/erp/orderFile.do"; + static string pCheckUrl = "http://test.new-only.com:54444/shopPlat/front/needlogin/erp/checkOrderParam.do"; + static string userName = "18959023975"; + static string passWord = "lt50510"; + private void downloadMore() + { + if (running) + { + conSuc("运行中!"); + return; + } + running = true; + + var identity = WindowsIdentity.GetCurrent(); + var principal = new WindowsPrincipal(identity); + Task.Run(async () => + { + using (identity.Impersonate()) + { + StringBuilder sql = new StringBuilder(); + sql.AppendFormat("select * from CE_ErpXhyOrderInfo WITH(nolock) where type = 0"); + int userId = 1; + DataTable dt = CeErpTradeCell.ExecuteDataset(sql.ToString()).Tables[0]; + string updateSql = ""; + if (dt != null && dt.Rows.Count > 0) + { + foreach (DataRow dr in dt.Rows) + { + string json = dr["json"].ToString(); + string ctid = dr["ctid"].ToString(); + string post_url = dr["url"].ToString(); + string id = dr["id"].ToString(); + + try + { + CeErpTradeCell itemData = CeErpTradeCell.GetByCtid(ctid); + List files = new List(); + List tids = new List(); + string filePath = ""; + string finishDesignTime = getDesignTime(itemData.FinishDesignTime); + string df_name = upPath + "\\" + finishDesignTime + "\\" + formatMemo(itemData.seller_memo); + string ext = getCanDownFile(df_name); + if (string.IsNullOrEmpty(ext)) + { + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '文件不存在!',type=2,sendtime = GETDATE() where id= {0};", id); + CeErpTradeLog.ExecuteNonQuery(updateSql); + continue; + } + string fname = df_name + ext; + string rname = formatMemo(itemData.seller_memo) + ext; + + if (itemData.OrderState != 6) + { + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '订单状态不正确!',type=2,sendtime = GETDATE() where id= {0};", id); + CeErpTradeLog.ExecuteNonQuery(updateSql); + continue; + } + int IsFileEncrypt = IsFileEncrypted(fname); + if (IsFileEncrypt == 1 && File.Exists(fname)) + { + string key = "gBQnlxiBb7MthH9644V0W0pFwqYZgyy7"; + var sb = new StringBuilder(key); + + //Linux系统的接口要调用一次,Windows系统要调用两次 + CreateUserKey(sb, key.Length); + CreateUserKey(sb, key.Length); //破解用dse生成的文件,需要调2次。 + int result = InitAesKey(sb, sb.Length); + result = IsInitedAesKey(); + if (result != 1) + { + addLog(ctid, userId, "初始化秘钥失败" + result, 0); + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '解密失败!',type=2,sendtime = GETDATE() where id= {0};", id); + CeErpTradeLog.ExecuteNonQuery(updateSql); + continue; + } + uint a = DecFile(fname); + if (a != 0) + { + addLog(ctid, userId, "解密失败" + a, 0); + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '解密失败!' ,type=2,sendtime = GETDATE() where id= {0};", id); + CeErpTradeLog.ExecuteNonQuery(updateSql); + continue; + } + } + if (string.IsNullOrEmpty(fname)) + { + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '解密失败!',type=2,sendtime = GETDATE() where id= {0};", id); + CeErpTradeLog.ExecuteNonQuery(updateSql); + continue; + } + try + { + + long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); + Dictionary param = new Dictionary(); + param.Add("orderNo", itemData.ctid); + param.Add("useract", userName); + param.Add("timestamp", timestamp); + param.Add("sign", GetMD5Hash(itemData.ctid + timestamp.ToString()) + GetMD5Hash(passWord)); + string url = pUrl + "?" + ToUrlParams(param); + + filePath = copyFile(getDesignDate(itemData.FinishDesignTime), "XHY", fname, rname); + + writeLog("XHY复制文件!:" + fname); + writeLog("XHY复制文件!地址:" + filePath); + + using (var postVars = new MultipartFormDataContent()) + { + + postVars.Add(new StringContent(json), "json"); + if (filePath != null) + { + postVars.Add(new ByteArrayContent(File.ReadAllBytes(filePath)), "file", Path.GetFileName(filePath)); + } + var request = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = new Uri(url), + Headers = + { + { "ContentType", "application/json" }, + }, + }; + request.Content = postVars; + + using (var response = await client.SendAsync(request)) + { + string responseBody = await response.Content.ReadAsStringAsync(); + + string result = response.Content.ReadAsStringAsync().Result; + + ApiXhyResponse xhyResponse = JsonConvert.DeserializeObject(result); + if (xhyResponse.code == 200) + { + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '{1}',type=1,sendtime = GETDATE() where id= {0};", id, xhyResponse.message); + updateSql += string.Format("update CE_ErpTradeCell set OrderState=6,IsVerifyToSupplier=0 where ctid ='{0}' and OrderState=5 and IsVerifyToSupplier=2;", itemData.ctid); + } + else + { + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '{1}',type=2,sendtime = GETDATE() where id= {0};", id, xhyResponse.message); + } + CeErpTradeLog.ExecuteNonQuery(updateSql); + } + + } + } + catch (Exception ex) + { + writeLog("Xh复制文件出错!" + ex.Message); + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = '复制文件出错!{1}' ,type=2,sendtime = GETDATE() where id= {0};", id, ex.Message); + CeErpTradeLog.ExecuteNonQuery(updateSql); + } + + } + catch (Exception ex) + { + writeLog("Xh打包文件出错!" + ex.Message); + updateSql = string.Format("update CE_ErpXhyOrderInfo set message = 'Xh打包文件出错!{1}' ,type=2,sendtime = GETDATE() where id= {0};", id, ex.Message); + CeErpTradeLog.ExecuteNonQuery(updateSql); + } + + } + } + running = false; + } + }); + + conSuc("运行结束!"); + //FileOssUp(); + } + + private static string dealMemoName(string name) + { + string[] al = name.Split('-'); + List list = new List(); + string pa = string.Empty; + for (int i = 0; i < al.Length; i++) + { + if (i == 1) + { + if (al[i].Contains("(") || al[i].Contains("(")) + { + string tname = al[i].Replace(")", "").Replace(")", "").Replace("(", "").Replace("(", ""); + if (!string.IsNullOrEmpty(tname)) + { + pa = al[i]; + } + continue; + } + + } + list.Add(al[i]); + } + if (!string.IsNullOrEmpty(pa)) + { + list.Insert(3, pa); + } + name = string.Join("-", list); + return name; + } + + + private string formatMemo(object memo) + { + string m = memo.ToString(); + m = m.Replace("\\", "").Replace("/", "").Replace(":", "").Replace("*", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", ""); + return m; + } + + private string copyFile(string date, string supplier, string file, string rname, string zipName = "") + { + string path = getCopyPath(date, supplier, zipName); + + if (!Directory.Exists(path)) Directory.CreateDirectory(path); + string fname = Path.GetFileName(file); + File.Copy(file, path + "\\" + rname, true); + if (!File.Exists(path + "\\" + rname)) + { + File.Copy(file, path + "\\" + rname, true); + } + return path + "\\" + rname; + } + + private string getCopyPath(string date, string supplier, string zipName = "") + { + string path = copyPath + "\\" + date + "\\" + supplier + "\\" + "车间下载"; + if (!string.IsNullOrEmpty(zipName)) + { + path = path + "\\" + zipName; + } + return path; + } + + private string getDesignTime(object v) + { + if (v.ToString() == "") return ""; + return Convert.ToDateTime(v).ToString("yyyyMMdd"); + } + + private string getDesignDate(object v) + { + int year = DateTime.Now.Year; + int month = DateTime.Now.Month; + int day = DateTime.Now.Day; + return year + "\\" + month + "\\" + day; + /*if (v.ToString() == "") return ""; + return Convert.ToDateTime(v).ToString("yyyy-MM-dd");*/ + } + + + static Dictionary replaceRules = new Dictionary + { + { "皙贝", "白卡" }, + { "睿狐", "莱尼" }, + { "岚蝶", "安格" }, + { "琮纹", "刚古" }, + { "珠光", "珠光" }, + { "溪雪", "珠光" }, + { "雅柔", "雅柔" }, + { "萱姿", "雅柔" }, + { "草香", "草香" }, + { "芳怡", "草香" }, + { "金绒", "牛皮" }, + { "素芸", "棉卡" }, + { "玉蕊", "蛋壳" } + }; + + public static void addLog(string ctid, int userid, string con, int orderState = 0, int aftersaleState = 0) + { + CeErpTradeLog log = new CeErpTradeLog(); + log.tid = ctid; + log.UserId = userid; + log.Con = con; + log.OrderState = orderState; + log.AfterSaleState = aftersaleState; + log.OperateTime = DateTime.Now; + log.Create(); + } + private static string logPath = ConfigurationManager.AppSettings["curPath"] + "\\log"; + private static object logFlag = new object(); + public static void writeLog(string log) + { + lock (logFlag) + { + using (FileStream fileStream = new FileStream(logPath + "\\" + DateTime.Now.ToString("yy-MM-dd") + ".log", FileMode.Append, FileAccess.Write)) + { + using (StreamWriter sw = new StreamWriter(fileStream, Encoding.Default)) + { + sw.Write(log + " ------时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n"); + sw.Flush(); + } + } + } + } + public static string GetMD5Hash(string input) + { + // 创建一个MD5对象 + using (MD5 md5 = MD5.Create()) + { + // 将输入字符串转换为字节数组 + byte[] inputBytes = Encoding.UTF8.GetBytes(input); + // 计算输入字节数组的哈希值 + byte[] hashBytes = md5.ComputeHash(inputBytes); + // 将字节数组转换为字符串 + StringBuilder hashString = new StringBuilder(); + foreach (byte b in hashBytes) + { + hashString.AppendFormat("{0:x2}", b); + } + return hashString.ToString(); + } + } + public static string ToUrlParams(Dictionary jsonObject) + { + if (jsonObject == null || jsonObject.Count == 0) + return string.Empty; + + var sb = new StringBuilder(); + bool first = true; + + foreach (var kvp in jsonObject) + { + string key = kvp.Key; + object value = kvp.Value; + + if (value == null) continue; + + // 判断是否为集合(排除字符串) + IEnumerable enumerable = value as IEnumerable; + if (enumerable != null && !(value is string)) + { + int index = 0; + foreach (var item in enumerable) + { + string encodedKey = Uri.EscapeDataString(key) + "[" + index + "]"; + string encodedValue = Uri.EscapeDataString(item != null ? item.ToString() : string.Empty); + AppendParameter(sb, ref first, encodedKey, encodedValue); + index++; + } + } + else + { + string encodedKey = Uri.EscapeDataString(key); + string encodedValue = Uri.EscapeDataString(value.ToString()); + AppendParameter(sb, ref first, encodedKey, encodedValue); + } + } + + return sb.ToString(); + } + + private static void AppendParameter(StringBuilder sb, ref bool first, string key, string value) + { + if (!first) + sb.Append('&'); + else + first = false; + + sb.Append(key).Append('=').Append(value); + } + public class ApiXhyResponse + { + public string message { get; set; } + public int code { get; set; } + } + + public class Data + { + public string msg { get; set; } + + public double price { get; set; } + } +}