using Aliyun.OSS; using Aliyun.OSS.Common; using Aspose.Imaging.FileFormats.Tiff.FileManagement; using BizCom; using ICSharpCode.SharpZipLib.Zip; using MSharp.Framework; using NPOI.OpenXmlFormats.Dml.Diagram; using NPOI.OpenXmlFormats.Shared; using NPOI.POIFS.Properties; using SiteCore.Handler; using SiteCore.Redis; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Runtime.InteropServices; using System.Security.Principal; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; using System.Web.Services.Description; using System.Web.UI; public partial class supplierBuildFile : 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; 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_ErpPackData WITH(nolock) where upStatus = 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 packId = dr["ID"].ToString(); try { CeErpTradeLog.ExecuteNonQuery(string.Format("update CE_ErpPackData set upStatus = 1 where ID= {0} ;", packId)); DataTable itemData = CeErpTradeCell.ExecuteDataset(string.Format("select ctid,seller_memo,FinishDesignTime,OrderState,SupplierName,OrderSn,tid from view_erptradecell where FinishDesignTime is not null and ctid in (SELECT ctid FROM CE_ErpPackDataItem WHERE packId = {0})", packId)).Tables[0]; List files = new List(); List tids = new List(); int upStatus = 3; string url = ""; if (itemData != null && itemData.Rows.Count > 0) { foreach (DataRow row in itemData.Rows) { string finishDesignTime = getDesignTime(row["FinishDesignTime"]); string ctid = row["ctid"].ToString(); string df_name = upPath + "\\" + finishDesignTime + "\\" + formatMemo(row["seller_memo"]); string ext = getCanDownFile(df_name); if (string.IsNullOrEmpty(ext)) { //不存在则打包失败 updateSql += string.Format("update CE_ErpPackDataItem set message = '文件不存在!' where packId= {0} and ctid='{1}' ;", packId, ctid); files = new List(); break; } string fname = df_name + ext; if (Convert.ToInt16(row["OrderState"]) != 6) { updateSql += string.Format("update CE_ErpPackDataItem set message = '订单状态不正确!' where packId= {0} and ctid='{1}' ;", packId, ctid); 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); continue; } uint a = DecFile(fname); if (a != 0) { addLog(ctid, userId, "解密失败" + a, 0); continue; } } if (string.IsNullOrEmpty(fname)) { continue; } try { copyFile(getDesignDate(row["FinishDesignTime"]), row["SupplierName"].ToString(), fname); files.Add(fname); tids.Add("'" + ctid + "'"); } catch (Exception ex) { writeLog("打包复制文件出错!" + ex.Message); updateSql += string.Format("update CE_ErpPackDataItem set message = '复制文件出错!{2}' where packId= {0} and ctid='{1}' ;", packId, ctid, ex.Message); files = new List();//清空数据 break; } } if (files.Count == 0) { updateSql += string.Format("update CE_ErpPackData set upStatus = 3,message='没有可打包文件!' where ID= {0} ;", packId); continue; } else { MemoryStream ms = new MemoryStream(); byte[] buffer = null; using (ZipFile file = ZipFile.Create(ms)) { file.BeginUpdate(); //file.NameTransform = new ZipNameTransform(); file.NameTransform = new MyNameTransfom(); for (int i = 0; i < files.Count; i++) { if (File.Exists(files[i])) { try { file.Add(files[i]); } catch (Exception ex) { } } } file.CommitUpdate(); buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); //读取文件内容(1次读ms.Length/1024M) ms.Flush(); ms.Close(); } url = FileOssUp(buffer, dr["fileName"].ToString()); if (url != null) { upStatus = 2; updateSql += string.Format("insert into CE_ErpTradeLog(tid,orderstate,userid,operatetime,con) select ctid,{1},{2},getdate(),'{3}' from ce_erptradecell where ctid in ({0}) ;", string.Join(",", tids), (int)OrderState.下单完成, 0, "下载设计文件"); } } } updateSql += string.Format("update CE_ErpPackData set upStatus = {1},fileUrl='{2}' where ID= {0} ;", packId, upStatus, url); } catch (Exception ex) { writeLog("打包文件出错!" + ex.Message); updateSql += string.Format("update CE_ErpPackData set upStatus = 3 where ID= {0} ;", packId); } } CeErpTradeLog.ExecuteNonQuery(updateSql); } running = false; } }); conSuc("运行结束!"); //FileOssUp(); } private string formatMemo(object memo) { string m = memo.ToString(); m = m.Replace("\\", "").Replace("/", "").Replace(":", "").Replace("*", "").Replace("?", "").Replace("<", "").Replace(">", "").Replace("|", ""); return m; } private void copyFile(string date, string supplier, string file) { string path = copyPath + "\\" + date + "\\" + supplier + "\\" + "车间下载"; if (!Directory.Exists(path)) Directory.CreateDirectory(path); string fname = Path.GetFileName(file); File.Copy(file, path + "\\" + fname, true); if (!File.Exists(path + "\\" + fname)) { File.Copy(file, path + "\\" + fname, true); } } private string getDesignTime(object v) { if (v.ToString() == "") return ""; return Convert.ToDateTime(v).ToString("yyyyMMdd"); } private string getDesignDate(object v) { return DateTime.Now.ToString("yyyy-MM-dd"); /*if (v.ToString() == "") return ""; return Convert.ToDateTime(v).ToString("yyyy-MM-dd");*/ } private string FileOssUp(byte[] buffer, string fileName) { // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 var endpoint = "https://oss-cn-fuzhou.aliyuncs.com"; // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 var accessKeyId = "LTAI5tE7wuNkeT9jZ42bQnyr"; var accessKeySecret = "NnutvWhKl4HbQFSad3HosYbCkEkbjN"; // 填写Bucket名称,例如examplebucket。 var bucketName = "dfdiyfile"; // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 var objectName = "supplierFile/" + fileName; // 填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。 string region = "cn-fuzhou"; // 创建ClientConfiguration实例,按照您的需要修改默认参数。 var conf = new ClientConfiguration(); // 设置v4签名。 conf.SignatureVersion = SignatureVersion.V4; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { MemoryStream requestContent = new MemoryStream(buffer); // 上传文件。 client.PutObject(bucketName, objectName, requestContent); } catch (Exception ex) { writeLog("打包文件上传oss出错!" + ex.Message); return null; } return "https://dfdiyfile.oss-cn-fuzhou.aliyuncs.com/" + objectName; } /// 批量进行多个文件压缩到一个文件 /// /// 文件列表(绝对路径) 这里用的数组,你可以用list 等或者 /// 生成的zip文件名称 private void ZipFileDownload(int userId, List ctidLst, List files, string zipFileName, int onlyDownFile, int isFromClient) { // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 var endpoint = "https://oss-cn-fuzhou.aliyuncs.com"; // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 var accessKeyId = "LTAI5tE7wuNkeT9jZ42bQnyr"; var accessKeySecret = "NnutvWhKl4HbQFSad3HosYbCkEkbjN"; // 填写Bucket名称,例如examplebucket。 var bucketName = "dfdiyfile"; // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 var objectName = "exampledir/exampleobject.txt"; // 填写字符串。 var objectContent = "More than just cloud."; // 填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。 const string region = "oss-cn-fuzhou"; // 创建ClientConfiguration实例,按照您的需要修改默认参数。 var conf = new ClientConfiguration(); // 设置v4签名。 conf.SignatureVersion = SignatureVersion.V4; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { MemoryStream ms = new MemoryStream(); byte[] buffer = null; using (ZipFile file = ZipFile.Create(ms)) { file.BeginUpdate(); //file.NameTransform = new ZipNameTransform(); file.NameTransform = new MyNameTransfom(); file.Add("C:\\Users\\231010\\Downloads\\setup.exe"); file.CommitUpdate(); buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); //读取文件内容(1次读ms.Length/1024M) ms.Flush(); ms.Close(); } MemoryStream requestContent = new MemoryStream(buffer); // 上传文件。 client.PutObject(bucketName, objectName, requestContent); Console.WriteLine("Put object succeeded"); } catch (Exception ex) { Console.WriteLine("Put object failed, {0}", ex.Message); } conSuc("上传成功!"); return; //for (int i = 0; i < addFiles.Count; i++) //{ // updateIsDownSuccess(userId, addCtid[i]); //} //StringBuilder sql = new StringBuilder(); //string tids = string.Join(",", addCtid); //sql.AppendFormat("update CE_ErpTradeCell set OrderState = 6 where ctid in ({0}) ;", ("'" + tids.Replace(",", "','") + "'")); //CeErpTradeCell.ExecuteNonQuery(sql.ToString()); //sql = new StringBuilder(); //sql.AppendFormat("insert into CE_ErpTradeLog(tid,orderstate,userid,operatetime,con) select ctid,{1},{2},getdate(),'{3}' from ce_erptradecell where ctid in ({0}) ;", ("'" + tids.Replace(",", "','") + "'"), (int)OrderState.下单完成, userId, "下载设计文件"); //CeErpTradeCell.ExecuteNonQuery(sql.ToString()); } //public static object downfileObj = new object(); private void downLoadFile(int userId, string ctid, string file, int onlyDownFile, int isFromClient) { string filePath = file; string dfile = Path.GetFileName(file); FileStream fs = new FileStream(filePath, FileMode.Open); byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); Response.Clear(); // Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "application/octet-stream"; //通知浏览器下载文件而不是打开\\fileDownload=true; path=/ Response.AddHeader("Set-Cookie", "fileDownload=true; path=/;"); //Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate"); Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(dfile, System.Text.Encoding.UTF8)); Response.AddHeader("Content-Length", bytes.Length.ToString()); Response.AddHeader("Access-Control-Expose-Headers", "Content-Disposition"); Response.BinaryWrite(bytes); Response.Flush(); //updateIsDownSuccess(userId, ctid); //StringBuilder sql = new StringBuilder(); //string tids = string.Join(",", ctid); //sql.AppendFormat("update CE_ErpTradeCell set OrderState = 6 where ctid in ({0}) ;", ("'" + tids.Replace(",", "','") + "'")); //CeErpTradeCell.ExecuteNonQuery(sql.ToString()); //sql = new StringBuilder(); //sql.AppendFormat("insert into CE_ErpTradeLog(tid,orderstate,userid,operatetime,con) select ctid,{1},{2},getdate(),'{3}' from ce_erptradecell where ctid in ({0}) ;", ("'" + tids.Replace(",", "','") + "'"), (int)OrderState.下单完成, userId, "下载设计文件"); //CeErpTradeCell.ExecuteNonQuery(sql.ToString()); } 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(); } } } } }