using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Configuration;


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QMFrameWork.Data;
using QMAPP.FJC.Entity.FIS;
using System.Data;
using System.Collections;
using Model;


namespace DCS.Common
{
    public class PrintCode
    {
        /// <summary>
        /// 获取打印标签模板
        /// </summary>
        string strGetPrintModel = ConfigUtil.GetPrintModel();
        /// <summary>
        /// 获取第三方打印程序
        /// </summary>
        string strGetPrintExe = ConfigUtil.GetPrintExe();
        /// <summary>
        /// 获取打印标签文本数据
        /// </summary>
        string strGetDataFile = ConfigUtil.GetDataFile();

        #region 生成txt文件(打印条码使用)
        /// <summary>
        /// 生成txt文件
        /// </summary>
        /// <param name="_type">状态:0 下线打印  1 补打条码 </param>
        /// <param name="zcNum">总成条码</param>
        /// <param name="prodNo">零件号</param>
        public void WriteFile(string _type, string zcNum, string prodNo, DateTime time)
        {
            StringBuilder sb = new StringBuilder();

            //工厂名称
            string factoryName = "FJC Chengdu";

            #region 获得零件号名称
            //获得零件号名称判断字段
            string zcNumTemp = zcNum.Substring(7, 1);
            string prodName = "";
            if (zcNumTemp == "A")
            {
                prodName = "NCS GP IP 黑";
            }
            else if (zcNumTemp == "B")
            {
                prodName = "NCS GP IP 灰";
            }
            else if (zcNumTemp == "C")
            {
                prodName = "NCS IP";
            }
            #endregion

            #region 获得生产时间
            string dateString = "";//生产时间
            string paraId = "";//参数ID,用来标记班次
            string classOneTime = "";//标记班次1的班次时间
            string classTwoTime = "";//标记班次2的班次时间
            string classThreeTime = "";//标记班次3的班次时间
            StringBuilder sbsql = new StringBuilder();
            sbsql.Append("SELECT [PARAID],[PARAVALUE]  FROM T_QM_PARA  WHERE FLAGDEL=0 AND PARATYPE = 7");
            //DataTable dt = SqlHelper.QueryReturnDataTable(sbsql.ToString());

            QMAPP.ServicesAgent.ServiceAgent agent = QMAPP.WinForm.ClientContext.GetServiceAgent();
            DataTable dt = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_WriteFile.ToString(), sbsql);

          

            if (dt.Rows.Count > 0)
            {
                // 取得班次时间
                foreach (DataRow item in dt.Rows)
                {
                    if (item["PARAID"].ToString() == "05")
                    {
                        classOneTime = item["PARAVALUE"].ToString();
                    }
                    if (item["PARAID"].ToString() == "06")
                    {
                        classTwoTime = item["PARAVALUE"].ToString();
                    }
                    if (item["PARAID"].ToString() == "07")
                    {
                        classThreeTime = item["PARAVALUE"].ToString();
                    }
                }

                // 确定日期--------------------------------------------------------------------------
                // 如果早于一班时间,算前一天的班次
                string resultDate = time.ToString("yyyy-MM-dd");
                string classThisTime = time.ToString("yyyy-MM-dd HH:mm:ss").Substring(11, 8);
                if (Convert.ToDateTime(classThisTime) < Convert.ToDateTime(classOneTime))
                {
                    resultDate = time.AddDays(-1).ToString("yyyy-MM-dd");
                }
                
                // 计算班次--------------------------------------------------------------------------
                // 计算班次开始时间点
                string resultClass = "";
                DateTime testTime0 = Convert.ToDateTime(classThisTime);
                DateTime testTime1 = Convert.ToDateTime(classOneTime);
                DateTime testTime2 = Convert.ToDateTime(classTwoTime);
                DateTime testTime3 = Convert.ToDateTime(classThreeTime);
                if (testTime2 > testTime3)
                {
                    testTime3 = Convert.ToDateTime(classThreeTime).AddDays(1);
                }
                if (testTime0 < testTime1)
                {
                    testTime0 = Convert.ToDateTime(classThisTime).AddDays(1);
                }
                if (testTime0 >= testTime1 && testTime0 < testTime2)
                {
                    resultClass = " A";
                }
                else if (testTime0 >= testTime2 && testTime0 < testTime3)
                {
                    resultClass = " B";
                }
                else
                {
                    resultClass = " C";
                }

                //拼写时间串
                dateString = resultDate + resultClass;            
            }
            #endregion

            //生成文本头
            sb.Append("\"总成条码\",");
            sb.Append("\"零件名称\",");
            sb.Append("\"工厂名称\",");
            sb.Append("\"零件号\",");
            sb.Append("\"时间\"");

            //生成文本数据
            sb.Append("\r\n\"" + zcNum + "\",");//加\R\N
            sb.Append("\"" + prodName + "\",");//加\R\N
            sb.Append("\"" + factoryName + "\",");//加\R\N
            sb.Append("\"" + prodNo + "\",");//零件号
            sb.Append("\"" + dateString.Replace("/",".") + "\"");

            //默认数据文件位置
            string labelDataFile = ConfigurationManager.AppSettings.Get("LabelDataFile"); //"d://barcode.txt";
            labelDataFile = strGetDataFile;
            if (String.IsNullOrEmpty(labelDataFile))
            {
                labelDataFile = ConfigurationManager.AppSettings.Get("LabelDataFile"); //"d://barcode.txt";
            }
            StreamWriter sw = new StreamWriter(labelDataFile, false, Encoding.Default);
            sw.Write(sb.ToString());
            sw.Flush();
            sw.Close();            
        }
        #endregion

        #region 打印标签
        /// <summary>
        /// 打印标签
        /// </summary>
        public void PinrtHU()
        {
            //string logFile = "d:\\logFile.txt";
            //if (System.IO.File.Exists(logFile))
            //{
            //    System.IO.File.AppendAllText(logFile, "A |" + DateTime.Now.ToLongTimeString());
            //}
            //else
            //{
            //    System.IO.File.WriteAllText(logFile, "B |" + DateTime.Now.ToLongTimeString());
            //}
            //string labelQdfFile = ConfigurationManager.AppSettings.Get("LabelQdfFile");//"d://barcode.qdf"; 

            string labelQdfFile = strGetPrintModel;
            if (String.IsNullOrEmpty(labelQdfFile))
            {
                labelQdfFile = ConfigurationManager.AppSettings.Get("LabelQdfFile");//"d://barcode.qdf"; 
            }
            //string labelPrinter = ConfigurationManager.AppSettings.Get("LabelPrinter"); //"C://Program Files//lmw32//lmwprint.exe";
            string labelPrinter = strGetPrintExe;
            if (String.IsNullOrEmpty(labelPrinter))
            {
                labelPrinter = ConfigurationManager.AppSettings.Get("LabelPrinter"); //"C://Program Files//lmw32//lmwprint.exe";
            }
            //System.IO.File.AppendAllText(logFile, "C |" + DateTime.Now.ToLongTimeString());
            //ProcessStartInfo psi = new ProcessStartInfo();
            //System.IO.File.AppendAllText(logFile, "D |" + DateTime.Now.ToLongTimeString());
            //psi.FileName = labelPrinter;
            //System.IO.File.AppendAllText(logFile, "E |" + DateTime.Now.ToLongTimeString());
            //psi.Arguments = "\"" + labelQdfFile + "\"";

            //System.IO.File.AppendAllText(logFile, "F |" + DateTime.Now.ToLongTimeString());
           
            Process[] pro = Process.GetProcesses();
            foreach (Process proces in pro)
            {
                if (proces.ProcessName == "Lmwprint"&&(DateTime.Now-proces.StartTime).Seconds>3)
                {
                    proces.Kill();
                }
            }
            Process.Start(labelPrinter, "\"" + labelQdfFile + "\"");
            //System.IO.File.AppendAllText(logFile, "G |" + DateTime.Now.ToLongTimeString());
        }
        #endregion



        #region 打印标签
        /// <summary>
        /// 打印标签
        /// </summary>
        public void PinrtFirstPlaceHU()
        {

            string labelQdfFile = ConfigUtil.GetFirstPlacePrintModel();
            if (String.IsNullOrEmpty(labelQdfFile))
            {
                labelQdfFile = ConfigurationManager.AppSettings.Get("LabelQdfFilePlace");//"d://barcode.qdf"; 
            }
            string labelPrinter = strGetPrintExe;
            if (String.IsNullOrEmpty(labelPrinter))
            {
                labelPrinter = ConfigurationManager.AppSettings.Get("LabelMatrix"); //"C://Program Files//lmw32//lmwprint.exe";
            }
            //System.IO.File.AppendAllText(logFile, "C |" + DateTime.Now.ToLongTimeString());
            //ProcessStartInfo psi = new ProcessStartInfo();
            //System.IO.File.AppendAllText(logFile, "D |" + DateTime.Now.ToLongTimeString());
            //psi.FileName = labelPrinter;
            //System.IO.File.AppendAllText(logFile, "E |" + DateTime.Now.ToLongTimeString());
            //psi.Arguments = "\"" + labelQdfFile + "\"";

            //System.IO.File.AppendAllText(logFile, "F |" + DateTime.Now.ToLongTimeString());
            WriteFileForFirstPlace("");
            Process[] pro = Process.GetProcesses();
            foreach (Process proces in pro)
            {
                if (proces.ProcessName == "Lmwprint" && (DateTime.Now - proces.StartTime).Seconds > 3)
                {
                    proces.Kill();
                }
            }
            Process.Start(labelPrinter, "\"" + labelQdfFile + "\"");
            //System.IO.File.AppendAllText(logFile, "G |" + DateTime.Now.ToLongTimeString());
        }
        #endregion


        #region 生成txt文件(打印条码使用)
        /// <summary>
        /// 生成txt文件
        /// </summary>
        public void WriteFileForFirstPlace(string _filePath)
        {
            StringBuilder sb = new StringBuilder();

            //生成文本头
            sb.Append("编码,显示值");
            //生成文本数据
            sb.Append("\r\n\"" + ConfigurationManager.AppSettings.Get("PlaceFirstPositionCode") + "\",");//加\R\N
            sb.Append("\"" + ConfigurationManager.AppSettings.Get("PlaceFirstPositionText") + "\",");//加\R\N

            //默认数据文件位置
            string labelDataFile = ConfigurationManager.AppSettings.Get("LabelDataFilePlace"); //"d://barcode.txt";
            //labelDataFile = strGetDataFile;
            if (String.IsNullOrEmpty(labelDataFile))
            {
                labelDataFile = ConfigurationManager.AppSettings.Get("LabelDataFilePlace"); //"d://barcode.txt";
            }
            StreamWriter sw = new StreamWriter(labelDataFile, false, Encoding.Default);
            sw.Write(sb.ToString());
            sw.Flush();
            sw.Close();
        }
        #endregion
    }
}