Example #1
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 public IVTestDataTransferThreadWrapper(IVTestDeviceElement device, ParameterizedThreadStart threadStart)
 {
     this.Loop           = true;
     this.Device         = device;
     this.AutoResetEvent = new AutoResetEvent(false);
     this.Thread         = new Thread(threadStart);
 }
Example #2
0
 /// <summary>
 /// 数据转置
 /// </summary>
 private void TransferData(IVTestDataTransferThreadWrapper wrapper)
 {
     while (wrapper.Loop)
     {
         try
         {
             IVTestDeviceElement device      = wrapper.Device;
             DateTime            dtStartTime = DateTime.Now;
             //获取IV测试数据文件路径。
             string strFileFullName = IVTestDataTransferAction.GetFullFile(device.Path, device.Format);
             string msg             = string.Empty;
             if (!string.IsNullOrEmpty(strFileFullName))
             {
                 string accConString = string.Format(device.ConnectionString, strFileFullName);
                 IVTestDataTransferAction sdgData = new IVTestDataTransferAction(accConString);
                 sdgData.Execute(device);
                 DateTime dtEndTime = DateTime.Now;
                 if (sdgData.TransferCount > 0)
                 {
                     msg = string.Format("MES.IVTestDataTransfer:开始时间:{0};结束时间:{1};耗用时间:{2}秒;转置 {5} 设备数据数量:{3}。{4}",
                                         dtStartTime
                                         , dtEndTime
                                         , (dtEndTime - dtStartTime).TotalSeconds
                                         , sdgData.TransferCount
                                         , strFileFullName
                                         , wrapper.Device.Name);
                     this._eventLog.WriteEntry(msg);
                 }
             }
             else
             {
                 msg = string.Format("MES.IVTestDataTransfer:开始时间:{0};获取{1} ACCESS数据库文件失败。", dtStartTime, wrapper.Device.Name);
                 this._eventLog.WriteEntry(msg);
             }
         }
         catch (Exception ex)
         {
             this._eventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error);
         }
         if (wrapper.Loop)
         {
             Thread.Sleep(1000);
         }
     }
     wrapper.AutoResetEvent.Set();
 }
Example #3
0
        public static string UploadFile(string strFileName, IVTestDeviceElement element)
        {
            string strMessage = "";

            try
            {
                if (File.Exists(strFileName))
                {
                    FileInfo fInfo = new FileInfo(strFileName);
                    FtpManager.UploadFile(fInfo, element.FtpTargetFolder, element.FtpServer, element.FtpUser, element.FtpPassword);
                    strMessage = string.Format("上传图片({0})成功", strFileName);
                }
                else
                {
                    strMessage = string.Format("图片({0})不存在", strFileName);
                }
            }
            catch (Exception err)
            {
                strMessage = err.Message;
            }
            return(strMessage);
        }
Example #4
0
        private void FrmIVDataUpload_Load(object sender, EventArgs e)
        {
            timer1.Enabled = false;

            bool   blFound  = false;
            string hostInfo = Dns.GetHostName();

            System.Net.IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
            //IPAddress ipaddress = addressList[0];
            //string ips = ipaddress.ToString();
            //MessageBox.Show(ips);


            //获取配置节信息
            this._section = (IVTestConfigurationSection)ConfigurationManager.GetSection("mes.ivtest");
            //增加线程个数。
            foreach (IVTestDeviceElement element in this._section.Devices)
            {
                foreach (IPAddress ipAddress in addressList)
                {
                    strIP = ipAddress.ToString();
                    if (strIP == element.Name)
                    {
                        blFound        = true;
                        _deviceElement = element;
                        break;
                    }
                }
            }
            if (blFound == false)
            {
                MessageBox.Show("此电脑的IP地址没有在配置文件中找到对应的配置,请联系IT");
                Application.Exit();
            }
            else
            {
                txtFilePath.Text = CommonFun.GetFullFile(_deviceElement.Path, _deviceElement.Format);
                //txtFilePath.Text = _deviceElement.Path;
                txtSourceImagePath.Text = _deviceElement.SourceImagePathRoot;
            }

            string strSql = " select top 1 * from [dbo].[ZWIP_IV_TEST] where EQUIPMENT_CODE='"
                            + _deviceElement.EqpName + "'  order by TEST_TIME desc";

            DataTable dt = DatabaseEx.getDbInstance().getDataTable(strSql);

            if (dt != null && dt.Rows.Count > 0)
            {
                txtTestTime.Text = string.Format("{0:yyyy-MM-dd HH:mm:ss}", dt.Rows[0]["TEST_TIME"].ToString());
                //txtTestTime.Text = string.Format("{0:yyyy-MM-dd HH:mm:ss}", "2015-06-11 09:10:10");
            }
            else
            {
                txtTestTime.Text = "1900-01-01 01:01:01";
            }
            txtEqpName.Text = _deviceElement.EqpName;

            btnStart.Enabled     = true;
            btnPause.Enabled     = false;
            txtEqpName.ReadOnly  = true;
            txtTestTime.ReadOnly = true;
            //btnStart_Click(null, null);

            notifyIVData.Visible = false;
        }
Example #5
0
        /// <summary>
        /// 将数据从Access数据库转移到MES数据库。
        /// </summary>
        /// <param name="element">设备配置。</param>
        /// <returns>true:转置成功。false:转置失败。</returns>
        public void Execute(IVTestDeviceElement element, System.DateTime MaxTestDateTimeFromServer)
        {
            double ctm = 0.0;
            bool   blTransferDataResult = true;
            string strTransferDataMsg   = "";

            dNewMaxTestTime    = MaxTestDateTimeFromServer;
            dMaxUploadTestTime = MaxTestDateTimeFromServer;
            List <string> lstImageFiles   = new List <string>();
            List <string> lstSqlForInsert = new List <string>();
            List <string> lstSqlForUpdateIVDataDefault = new List <string>();

            try
            {
                strAccessFullPath = CommonFun.GetFullFile(element.Path, element.Format);
                strImageFullPath  = CommonFun.GetFullPath(element.SourceImagePathRoot, element.SourceImagePathFormat);

                AccessConnectionString = string.Format(element.ConnectionString, strAccessFullPath);
                if (string.IsNullOrEmpty(strAccessFullPath))
                {
                    strTransferDataMsg   = string.Format("没有找到对应的IV数据文件{0} ", strAccessFullPath);
                    blTransferDataResult = false;
                }

                DataSet       dsIVTestData = new DataSet();
                StringBuilder sbSql        = new StringBuilder();
                string        sql          = string.Empty;
                if (blTransferDataResult)
                {
                    #region //Access 数据库正确
                    //组织查询IV测试数据的SQL语句
                    if (element.Type == IVTestDeviceType.Customer)
                    {
                        sql = element.Sql;
                    }
                    else
                    {
                        sql = GetQueryTestDataSql(element.Type);
                    }
                    //SELECT [Test_Date], [ID], [ModEff], [Rsh], [Rs], [FF], [Isc], [Voc], [Ipm],
                    //[Vpm], [Pmax], [Temp], [EnvTemp], [TMod], [Insol], [SunRef], [Test_Time] ,[StdIsc1],[Stdsun1],[StdIsc2],[Stdsun2] FROM SunData;
                    sbSql.AppendFormat("SELECT TOP 1 '{2}' AS DeviceNo,a.* FROM ({0}) a WHERE a.TTIME>'{1}' ORDER BY a.TTIME ASC",
                                       sql,
                                       MaxTestDateTimeFromServer.ToString("yyyy-MM-dd HH:mm:ss"),
                                       element.EqpName);

                    //创建 Access的连接对象。
                    using (OleDbConnection oleCon = new OleDbConnection(this.AccessConnectionString))
                    {
                        oleCon.Open();
                        using (OleDbCommand oleCmd = oleCon.CreateCommand())
                        {
                            //从Access数据库获取>开始日期和开始时间的数据。
                            oleCmd.CommandType = CommandType.Text;
                            oleCmd.CommandText = sbSql.ToString();
                            OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCmd);
                            oleAdapter.Fill(dsIVTestData);
                        }
                        oleCon.Close();
                    }
                    #endregion //End Access数据库正确
                }
                DataTable dt = null;
                //新增IV测试数据

                if (dsIVTestData != null && dsIVTestData.Tables.Count > 0 && dsIVTestData.Tables[0].Rows.Count > 0)
                {
                    #region //Get Access IV测试数据
                    sql = string.Format(@" select top 1 * from [dbo].[ZWIP_IV_TEST] 
                        where EQUIPMENT_CODE='{0}'and LOT_NUMBER like 'JZ%' and IS_DEFAULT =1 order by TEST_TIME desc ", element.EqpName);

                    string strCalibrateTime = "";
                    string strCalibrationNo = "";
                    dt = DatabaseEx.getDbInstance().getDataTable(sql);
                    if (dt.Rows.Count > 0)
                    {
                        strCalibrateTime = dt.Rows[0]["TEST_TIME"].ToString();
                        strCalibrationNo = dt.Rows[0]["LOT_NUMBER"].ToString();
                    }

                    string strInsertSql = "";
                    bool   isDefault    = false;
                    foreach (DataRow dr in dsIVTestData.Tables[0].Rows)
                    {
                        isDefault = false;
                        if (!Convert.ToString(dr["LOT_NUMBER"]).ToUpper().StartsWith("JZ"))
                        {
                            #region not JZ
                            sql = string.Format(@"SELECT a.[LOT_NUMBER],     
                            a.[ROUTE_STEP_NAME],
                            a.STATE_FLAG,
                            b.ATTRIBUTE_NAME,
                            b.ATTRIBUTE_VALUE  
                            FROM [dbo].[WIP_LOT] a  inner join [dbo].[FMM_ROUTE_STEP_ATTR] b
                            on a.ROUTE_STEP_NAME = b.ROUTE_STEP_NAME
                            and a.ROUTE_NAME = b.ROUTE_NAME 
                            where a.LOT_NUMBER ='{0}'
                            and b.ATTRIBUTE_NAME ='IsAllowIVTestData'", Convert.ToString(dr["LOT_NUMBER"]).ToUpper());

                            strTransferDataMsg = strTransferDataMsg + "\n\t" + Convert.ToString(dr["LOT_NUMBER"]).ToUpper();

                            dt = DatabaseEx.getDbInstance().getDataTable(sql);
                            if (dt.Rows.Count > 0)
                            {
                                if (dt.Rows[0]["STATE_FLAG"].ToString() == "8")
                                {
                                    //批次一定要在等待出站状态下才能把 ISDefault=1
                                    if (bool.TryParse(dt.Rows[0]["ATTRIBUTE_VALUE"].ToString(), out isDefault))
                                    {
                                        if (isDefault == true)
                                        {
                                            lstSqlForUpdateIVDataDefault.Add(Convert.ToString(dr["LOT_NUMBER"]).ToUpper());
                                            sql = string.Format(@"SELECT * FROM dbo.FMM_EQUIPMENT_PRG_RULE WHERE CONTROL_OBJ=7 AND EQUIPMENT_CODE='{0}'", element.EqpName);
                                            dt  = DatabaseEx.getDbInstance().getDataTable(sql);
                                            double max = 0.00;
                                            double min = 0.00;
                                            if (dt.Rows.Count > 0)
                                            {
                                                if (Convert.ToDouble(dt.Rows[0]["CONTROL_VALUE"]) > Convert.ToDouble(dt.Rows[1]["CONTROL_VALUE"]))
                                                {
                                                    max = (dt.Rows[0]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["CONTROL_VALUE"]) : 0);
                                                    min = (dt.Rows[1]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[1]["CONTROL_VALUE"]) : 0);
                                                    if (min <= Convert.ToDouble(dr["AMBIENTTEMP"]) && Convert.ToDouble(dr["AMBIENTTEMP"]) <= max)
                                                    {
                                                        isDefault = true;
                                                    }
                                                    else
                                                    {
                                                        isDefault = false;
                                                        MessageBox.Show("测试温度超过控制参数设置温度范围,上传数据为无效值,请联系动力!");
                                                    }
                                                }
                                                else
                                                {
                                                    min = (dt.Rows[0]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["CONTROL_VALUE"]) : 0);
                                                    max = (dt.Rows[1]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[1]["CONTROL_VALUE"]) : 0);
                                                    if (min <= Convert.ToDouble(dr["AMBIENTTEMP"]) && Convert.ToDouble(dr["AMBIENTTEMP"]) <= max)
                                                    {
                                                        isDefault = true;
                                                    }
                                                    else
                                                    {
                                                        isDefault = false;
                                                        MessageBox.Show("测试温度超过控制参数设置温度范围,上传数据为无效值,请联系动力!");
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }


                            #region ctm的计算
                            //ctm的计算

                            DataTable dtCTM  = new DataTable();
                            string    sqlCTM = string.Format(@"SELECT  t1.LOT_NUMBER ,
                                                                    t1.MATERIAL_CODE ,
                                                                    t2.MAIN_RAW_QTY ,
                                                                    t1.ATTR_1
                                                            FROM    dbo.WIP_LOT AS t1
                                                                    INNER JOIN dbo.FMM_MATERIAL AS t2 ON t2.MATERIAL_CODE = t1.MATERIAL_CODE
                                                            WHERE   t1.LOT_NUMBER = '{0}'", Convert.ToString(dr["LOT_NUMBER"]).ToUpper());
                            dtCTM = DatabaseEx.getDbInstance().getDataTable(sqlCTM);

                            if (dtCTM != null && dtCTM.Rows.Count > 0)
                            {
                                //CTM计算方式 PM*0.156*0.156*1000*mainQTY*18.1/100
                                //组件电池片数
                                double mainQTY = 1.0;
                                double.TryParse(dtCTM.Rows[0][2].ToString(), out mainQTY);
                                //组件的转换率
                                double conversion = 1.0;

                                string attr = dtCTM.Rows[0][3].ToString();

                                if (attr.Contains("%"))
                                {
                                    attr = attr.Substring(0, attr.Length - 1);
                                }
                                double.TryParse(attr, out conversion);

                                double pm = 1.0;
                                double.TryParse(dr["PM"].ToString(), out pm);

                                ctm = pm / (0.156 * 0.156 * 1000 * mainQTY * conversion / 100);
                                ctm = Math.Round(ctm, 4);
                            }
                            else
                            {
                                ctm = 0.0;
                            }
                            #endregion
                            #endregion
                        }
                        else
                        {
                            #region JZ
                            if (Convert.ToString(dr["LOT_NUMBER"]).ToUpper().Length < 11)
                            {
                                isDefault = false;
                            }
                            else
                            {
                                string testLot = Convert.ToString(dr["LOT_NUMBER"]).ToUpper().Substring(0, 11);
                                double testISC = (dr["ISC"] != DBNull.Value ? Convert.ToDouble(dr["ISC"]) : 0);
                                double testVOC = (dr["VOC"] != DBNull.Value ? Convert.ToDouble(dr["VOC"]) : 0);
                                double testPM  = (dr["PM"] != DBNull.Value ? Convert.ToDouble(dr["PM"]) : 0);
                                double testAmbientTemperature = (dr["AMBIENTTEMP"] != DBNull.Value ? Convert.ToDouble(dr["AMBIENTTEMP"]) : 0);

                                sql = string.Format(@"SELECT 
	                                       [CALIBRATION_PLATE_ID]
                                          ,[MAX_PM]
                                          ,[MIN_PM]
                                          ,[MAX_ISC]
                                          ,[MIN_ISC]
                                          ,[MAX_VOC]
                                          ,[MIN_VOC]
                                      FROM [dbo].[FMM_CALIBRATION_PLATE]
                                      WHERE  CALIBRATION_PLATE_ID='{0}'", testLot);

                                strTransferDataMsg = strTransferDataMsg + "\n\t" + Convert.ToString(dr["LOT_NUMBER"]).ToUpper();
                                dt = DatabaseEx.getDbInstance().getDataTable(sql);
                                if (dt.Rows.Count > 0)
                                {
                                    double maxPM  = (dt.Rows[0]["MAX_PM"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["MAX_PM"]) : 0);
                                    double minPM  = (dt.Rows[0]["MIN_PM"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["MIN_PM"]) : 0);
                                    double maxISC = (dt.Rows[0]["MAX_ISC"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["MAX_ISC"]) : 0);
                                    double minISC = (dt.Rows[0]["MIN_ISC"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["MIN_ISC"]) : 0);
                                    double maxVOC = (dt.Rows[0]["MAX_VOC"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["MAX_VOC"]) : 0);
                                    double minVOC = (dt.Rows[0]["MIN_VOC"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["MIN_VOC"]) : 0);

                                    if (minPM < testPM && testPM < maxPM && minISC < testISC && testISC < maxISC && minVOC < testVOC && testVOC < maxVOC)
                                    {
                                        //isDefault = true;
                                        sql = string.Format(@"SELECT * FROM dbo.FMM_EQUIPMENT_PRG_RULE WHERE CONTROL_OBJ=7 AND EQUIPMENT_CODE='{0}'", element.EqpName);
                                        dt  = DatabaseEx.getDbInstance().getDataTable(sql);
                                        double max = 0.00;
                                        double min = 0.00;
                                        if (dt.Rows.Count > 0)
                                        {
                                            if (Convert.ToDouble(dt.Rows[0]["CONTROL_VALUE"]) > Convert.ToDouble(dt.Rows[1]["CONTROL_VALUE"]))
                                            {
                                                max = (dt.Rows[0]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["CONTROL_VALUE"]) : 0);
                                                min = (dt.Rows[1]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[1]["CONTROL_VALUE"]) : 0);
                                                if (min <= Convert.ToDouble(dr["AMBIENTTEMP"]) && Convert.ToDouble(dr["AMBIENTTEMP"]) <= max)
                                                {
                                                    isDefault = true;
                                                }
                                                else
                                                {
                                                    isDefault = false;
                                                    MessageBox.Show("测试温度超过控制参数设置温度范围,上传数据为无效值,请联系动力!");
                                                }
                                            }
                                            else
                                            {
                                                min = (dt.Rows[0]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[0]["CONTROL_VALUE"]) : 0);
                                                max = (dt.Rows[1]["CONTROL_VALUE"] != DBNull.Value ? Convert.ToDouble(dt.Rows[1]["CONTROL_VALUE"]) : 0);
                                                if (min <= Convert.ToDouble(dr["AMBIENTTEMP"]) && Convert.ToDouble(dr["AMBIENTTEMP"]) <= max)
                                                {
                                                    isDefault = true;
                                                }
                                                else
                                                {
                                                    isDefault = false;
                                                    MessageBox.Show("测试温度超过控制参数设置温度范围,上传数据为无效值,请联系动力!");
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        isDefault = false;
                                    }
                                }
                            }
                            #endregion
                        }

                        #region Builder Insert Sql

                        lstImageFiles.Add(Convert.ToString(dr["LOT_NUMBER"]).ToUpper());

                        strInsertSql = @" INSERT INTO [dbo].[ZWIP_IV_TEST](
                            [LOT_NUMBER],[TEST_TIME],[EQUIPMENT_CODE],[PM]
                            ,[ISC],[IPM],[VOC],[VPM]
                            ,[FF],[EFF],[RS],[RSH]
                            ,[AMBIENTTEMP],[SENSORTEMP],[INTENSITY]
                            ,[COEF_PMAX]
                            ,[COEF_ISC],[COEF_VOC],[COEF_IMAX],[COEF_VMAX]
                            ,[COEF_FF],[DEC_CTM],[PS_CODE],[PS_ITEM_NO]
                            ,[PS_SUBCODE],[IS_DEFAULT],[IS_PRINT],[PRINT_TIME]
                            ,[PRINT_COUNT],[CALIBRATE_TIME],[CALIBRATION_NO]
                            ,[STDISC1],[STDSUN1],[STDISC2],[STDSUN2],[CREATOR],[CREATE_TIME],[EDITOR],[EDIT_TIME]) values (";

                        strInsertSql = strInsertSql + "'" + Convert.ToString(dr["LOT_NUMBER"]).ToUpper() + "',";
                        strInsertSql = strInsertSql + "'" + Convert.ToString(dr["TTIME"]).ToUpper() + "',";

                        if (DateTime.TryParse(dr["TTIME"].ToString(), out dNewMaxTestTime) == false)
                        {
                            blTransferDataResult = false;
                            strTransferDataMsg   = "IV数据生成的日期格式不正确,请联系设备厂商。";
                            break;
                        }

                        strInsertSql = strInsertSql + "'" + element.EqpName + "',";
                        strInsertSql = strInsertSql + "'" + (dr["PM"] != DBNull.Value ? Convert.ToDouble(dr["PM"]) : 0) + "',";

                        // ,[ISC],[IPM],[VOC],[VPM]
                        strInsertSql = strInsertSql + "'" + (dr["ISC"] != DBNull.Value ? Convert.ToDouble(dr["ISC"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["IPM"] != DBNull.Value ? Convert.ToDouble(dr["IPM"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["VOC"] != DBNull.Value ? Convert.ToDouble(dr["VOC"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["VPM"] != DBNull.Value ? Convert.ToDouble(dr["VPM"]) : 0) + "',";

                        //[FF],[EFF],[RS],[RSH]
                        strInsertSql = strInsertSql + "'" + (dr["FF"] != DBNull.Value ? Convert.ToDouble(dr["FF"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["EFF"] != DBNull.Value ? Convert.ToDouble(dr["EFF"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["RS"] != DBNull.Value ? Convert.ToDouble(dr["RS"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["RSH"] != DBNull.Value ? Convert.ToDouble(dr["RSH"]) : 0) + "',";

                        //,[AMBIENTTEMP],[SENSORTEMP],[INTENSITY]
                        strInsertSql = strInsertSql + "'" + (dr["AMBIENTTEMP"] != DBNull.Value ? Convert.ToDouble(dr["AMBIENTTEMP"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["SENSORTEMP"] != DBNull.Value ? Convert.ToDouble(dr["SENSORTEMP"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["INTENSITY"] != DBNull.Value ? Convert.ToDouble(dr["INTENSITY"]) : 0) + "',";

                        // ,[COEF_PMAX]
                        strInsertSql = strInsertSql + "'" + (dr["PM"] != DBNull.Value ? Convert.ToDouble(dr["PM"]) : 0) + "',";

                        //,[COEF_ISC],[COEF_VOC],[COEF_IMAX],[COEF_VMAX]
                        strInsertSql = strInsertSql + "'" + (dr["ISC"] != DBNull.Value ? Convert.ToDouble(dr["ISC"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["VOC"] != DBNull.Value ? Convert.ToDouble(dr["VOC"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["IPM"] != DBNull.Value ? Convert.ToDouble(dr["IPM"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["VPM"] != DBNull.Value ? Convert.ToDouble(dr["VPM"]) : 0) + "',";
                        // ,[COEF_FF],
                        strInsertSql = strInsertSql + "'" + (dr["FF"] != DBNull.Value ? Convert.ToDouble(dr["FF"]) : 0) + "',";

                        //[DEC_CTM],[PS_CODE],[PS_ITEM_NO]
                        string _ctm = ctm.ToString();
                        //select ATTR_1 from WIP_LOT where LOT_NUMBER='JN2230937214299'
                        strInsertSql = strInsertSql + "'" + _ctm + "',";    //修改这里
                        strInsertSql = strInsertSql + "NULL,";
                        strInsertSql = strInsertSql + "NULL,";

                        //,[PS_SUBCODE],[IS_DEFAULT],[IS_PRINT],[PRINT_TIME]
                        strInsertSql = strInsertSql + "NULL,";
                        if (isDefault)
                        {
                            strInsertSql = strInsertSql + "'1',";
                        }
                        else
                        {
                            strInsertSql = strInsertSql + "'0',";
                        }
                        strInsertSql = strInsertSql + "'0',";
                        strInsertSql = strInsertSql + "NULL,";

                        // ,[PRINT_COUNT],[CALIBRATE_TIME],[CALIBRATION_NO],
                        strInsertSql = strInsertSql + "'0',";
                        strInsertSql = strInsertSql + "'" + strCalibrateTime + "',";
                        strInsertSql = strInsertSql + "'" + strCalibrationNo + "',";
                        //,[STDISC1],[STDSUN1],[STDISC2],[STDSUN2]
                        strInsertSql = strInsertSql + "'" + (dr["STDISC1"] != DBNull.Value ? Convert.ToDouble(dr["STDISC1"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["STDSUN1"] != DBNull.Value ? Convert.ToDouble(dr["STDSUN1"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["STDISC2"] != DBNull.Value ? Convert.ToDouble(dr["STDISC2"]) : 0) + "',";
                        strInsertSql = strInsertSql + "'" + (dr["STDSUN2"] != DBNull.Value ? Convert.ToDouble(dr["STDSUN2"]) : 0) + "',";

                        //,[CREATOR],[CREATE_TIME],[EDITOR],[EDIT_TIME],
                        string strDateTime = System.DateTime.Now.ToString();
                        strInsertSql = strInsertSql + "'system',";
                        strInsertSql = strInsertSql + "'" + strDateTime + "',";
                        strInsertSql = strInsertSql + "'system',";
                        strInsertSql = strInsertSql + "'" + strDateTime + "'";


                        strInsertSql = strInsertSql + ")";
                        lstSqlForInsert.Add(strInsertSql);

                        strInsertSql = "";
                        isDefault    = false;
                        #endregion
                    }

                    sql = "";
                    if (blTransferDataResult)
                    {
                        if (lstSqlForUpdateIVDataDefault != null && lstSqlForUpdateIVDataDefault.Count > 0)
                        {
                            string strWhere = "";
                            foreach (string lotNumber in lstSqlForUpdateIVDataDefault)
                            {
                                strWhere = "'" + lotNumber + "',";
                            }
                            if (strWhere.Length > 0)
                            {
                                strWhere = strWhere.Substring(0, strWhere.Length - 1).Trim();
                            }
                            sql = " update ZWIP_IV_TEST set IS_DEFAULT=0 where IS_DEFAULT=1 and LOT_NUMBER in(" + strWhere + ")";
                            lstSqlForInsert.Insert(0, sql);
                        }
                        string strExeResult = DatabaseEx.getDbInstance().ExecuteNonQuery(lstSqlForInsert);
                        if (strExeResult != "" && strExeResult.Length > 0)
                        {
                            blTransferDataResult = false;
                            strTransferDataMsg   = strExeResult;
                        }
                        if (blTransferDataResult)
                        {
                            #region //上传Image图片
                            try
                            {
                                foreach (string strLot in lstImageFiles)
                                {
                                    //Upload Image Files
                                    string strFileName = strImageFullPath + strLot + "." + element.ImageExtensionName;
                                    if (File.Exists(strFileName))
                                    {
                                        FileInfo fInfo = new FileInfo(strFileName);
                                        FtpManager.UploadFile(fInfo, element.FtpTargetFolder, element.FtpServer, element.FtpUser, element.FtpPassword);
                                    }
                                }
                            }
                            catch (Exception exe)
                            {
                                string s = exe.Message;
                            }
                            #endregion
                        }
                    }
                    #endregion //End Get Access IV测试数据
                }
            }
            catch (Exception ex)
            {
                blTransferDataResult = false;
                strTransferDataMsg   = ex.Message;
            }
            finally
            {
                lstSqlForInsert.Clear();
                lstSqlForUpdateIVDataDefault.Clear();
            }


            DataTransferFinishedArgs arg = new DataTransferFinishedArgs();
            arg.TransferDataResult = blTransferDataResult;
            arg.TransferDbFile     = strAccessFullPath;
            arg.MaxTestDateTime    = dNewMaxTestTime;

            if (blTransferDataResult)
            {
                strTransferDataMsg = string.Format("{1:yyyy-MM-dd HH:mm:ss}上传IV数据成功>{0} ", strTransferDataMsg, System.DateTime.Now.ToString());
            }
            else
            {
                strTransferDataMsg = string.Format("{1:yyyy-MM-dd HH:mm:ss}上传IV数据失败>{0} ", strTransferDataMsg, System.DateTime.Now.ToString());
                //arg.MaxTestDateTime = dMaxUploadTestTime;
            }
            arg.TransferMsg = strTransferDataMsg;

            if (OnDataTransferFinished != null)
            {
                OnDataTransferFinished(this, arg);
            }
        }
        /// <summary>
        /// 将数据从Access数据库转移到MES数据库。
        /// </summary>
        /// <param name="element">设备配置。</param>
        /// <returns>true:转置成功。false:转置失败。</returns>
        public void Execute(IVTestDeviceElement element, System.DateTime MaxTestDateTimeFromServer)
        {
            bool   blTransferDataResult = true;
            string strTransferDataMsg   = "";

            dNewMaxTestTime    = MaxTestDateTimeFromServer;
            dMaxUploadTestTime = MaxTestDateTimeFromServer;
            List <string> lstSqlForInsert = new List <string>();
            List <string> lstSqlForUpdateIVDataDefault = new List <string>();

            try
            {
                String _day = SqlHelper.ExecuteDataTable("select max(InspectTime) from ZWIP_COROL_TEST", connHost).Rows[0][0].ToString();

                string    _str = "select top 1 [LotSN] ,[InspectTime] ,[InspectResult] ,[InspectValue],[BlueValue],[Operator],[Shift],[RcpName],[LocalIp],[DeviceID] from t_ColorInspectResult  where InspectTime > '" + _day + "'order by [InspectTime] ";
                DataTable d1t  = SqlHelper.ExecuteDataTable(_str, connClient);
                if (d1t.Rows.Count > 0)
                {
                }
                else
                {
                    strTransferDataMsg   = string.Format("没有找到对应的COLOR数据文件{0} ", strAccessFullPath);
                    blTransferDataResult = false;
                }
                DataTable dt = null;

                if (blTransferDataResult)
                {
                    String _keysql = "select count(*) from ZWIP_COROL_TEST where LOT_NUMBER ='" + d1t.Rows[0]["LotSN"].ToString() + "'and InspectTime='" + d1t.Rows[0]["InspectTime"].ToString() + "'";
                    int    _key    = Convert.ToInt32(SqlHelper.ExecuteDataTable(_keysql, connHost).Rows[0][0]);
                    if (_key == 0)
                    {
                        #region Builder Insert Sql
                        StringBuilder sbsql = new StringBuilder();
                        sbsql.Append("INSERT INTO [ZWIP_COROL_TEST] ([LOT_NUMBER] ,[InspectTime] ,[InspctResult],[InspectValue] ,[BlueValue]  ,[Opetator] ,[Shift] ,[RcpName]  ,[LocalIp],[DeviceID] ,[DataTime])");
                        sbsql.Append("VALUES ( ");
                        sbsql.Append("'" + d1t.Rows[0]["LotSN"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["InspectTime"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["InspectResult"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["InspectValue"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["BlueValue"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["Operator"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["Shift"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["RcpName"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["LocalIp"].ToString() + "',");
                        sbsql.Append("'" + d1t.Rows[0]["DeviceID"].ToString() + "',");
                        sbsql.Append("'" + DateTime.Now + "'");
                        sbsql.Append(" )");

                        string _str1 = sbsql.ToString();

                        SqlHelper.ExecuteNonQuery(_str1, connHost);
                        sbsql.Clear();
                        //isDefault = false;
                        #endregion
                    }
                    else
                    {
                        strTransferDataMsg = string.Format("{1:yyyy-MM-dd HH:mm:ss}数据已存在>{0} ", strTransferDataMsg, System.DateTime.Now.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                blTransferDataResult = false;
                strTransferDataMsg   = ex.Message;
            }
            finally
            {
                lstSqlForInsert.Clear();
                lstSqlForUpdateIVDataDefault.Clear();
            }


            DataTransferFinishedArgs arg = new DataTransferFinishedArgs();
            arg.TransferDataResult = blTransferDataResult;
            arg.TransferDbFile     = strAccessFullPath;
            if (blTransferDataResult)
            {
                strTransferDataMsg  = string.Format("{1:yyyy-MM-dd HH:mm:ss}上传Coler数据成功>{0} ", strTransferDataMsg, System.DateTime.Now.ToString());
                arg.MaxTestDateTime = dNewMaxTestTime;
            }
            else
            {
                strTransferDataMsg  = string.Format("{1:yyyy-MM-dd HH:mm:ss}上传Coler数据失败>{0} ", strTransferDataMsg, System.DateTime.Now.ToString());
                arg.MaxTestDateTime = dMaxUploadTestTime;
            }
            arg.TransferMsg = strTransferDataMsg;

            if (OnDataTransferFinished != null)
            {
                OnDataTransferFinished(this, arg);
            }
        }
Example #7
0
        /// <summary>
        /// 将数据从Access数据库转移到MES数据库。
        /// </summary>
        /// <param name="element">设备配置。</param>
        /// <returns>true:转置成功。false:转置失败。</returns>
        public bool Execute(IVTestDeviceElement element)
        {
            try
            {
                //根据设备代码获取SQL Server数据库中最大的测试时间值。
                DateTime     dtMaxTestTime = new DateTime(2000, 1, 1);
                PagingConfig cfg           = new PagingConfig()
                {
                    PageNo   = 0,
                    PageSize = 1,
                    Where    = string.Format("Key.EquipmentCode='{0}'", element.Name),
                    OrderBy  = "Key.TestTime Desc"
                };
                using (IVTestDataServiceClient client = new IVTestDataServiceClient())
                {
                    MethodReturnResult <IList <IVTestData> > result = client.Get(ref cfg);
                    if (result.Code == 0 &&
                        result.Data != null &&
                        result.Data.Count > 0)
                    {
                        dtMaxTestTime = result.Data[0].Key.TestTime;
                    }
                    client.Close();
                }
                //组织查询IV测试数据的SQL语句
                StringBuilder sbSql = new StringBuilder();
                string        sql   = string.Empty;

                if (element.Type == IVTestDeviceType.Customer)
                {
                    sql = element.Sql;
                }
                else
                {
                    sql = GetQueryTestDataSql(element.Type);
                }
                sbSql.AppendFormat("SELECT TOP 100 '{2}' AS DeviceNo,a.* FROM ({0}) a WHERE a.TTIME>'{1}' ORDER BY a.TTIME ASC",
                                   sql,
                                   dtMaxTestTime.ToString("yyyy-MM-dd HH:mm:ss"),
                                   element.Name);
                DataSet dsIVTestData = new DataSet();
                //创建 Access的连接对象。
                using (OleDbConnection oleCon = new OleDbConnection(this.AccessConnectionString))
                {
                    oleCon.Open();
                    using (OleDbCommand oleCmd = oleCon.CreateCommand())
                    {
                        //从Access数据库获取>开始日期和开始时间的数据。
                        oleCmd.CommandType = CommandType.Text;
                        oleCmd.CommandText = sbSql.ToString();
                        OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCmd);
                        oleAdapter.Fill(dsIVTestData);
                    }
                    oleCon.Close();
                }
                //新增IV测试数据
                if (dsIVTestData != null && dsIVTestData.Tables.Count > 0 && dsIVTestData.Tables[0].Rows.Count > 0)
                {
                    IVTestDataTransferParameter p = new IVTestDataTransferParameter();
                    p.List = new List <IVTestData>();
                    foreach (DataRow dr in dsIVTestData.Tables[0].Rows)
                    {
                        IVTestData iv = new IVTestData();
                        iv.Key = new IVTestDataKey()
                        {
                            EquipmentCode = element.Name,
                            LotNumber     = Convert.ToString(dr["LOT_NUMBER"]).ToUpper(),
                            TestTime      = Convert.ToDateTime(dr["TTIME"])
                        };
                        //--TTIME 测试时间
                        //--LOT_NUMBER 批次号
                        //--FF 填充因子
                        //--ISC 测试短路电流
                        //--EFF 组件转换效率
                        //--RSH 串联电阻
                        //--RS 并联电阻
                        //--VOC 测试开路电压
                        //--IPM 测试最大电流
                        //--PM 测试最大功率
                        //--VPM 测试最大电压
                        //--AMBIENTTEMP 测度温度
                        //--SENSORTEMP 环境温度
                        //--INTENSITY 光强
                        iv.FF  = dr["FF"] != DBNull.Value ? Convert.ToDouble(dr["FF"]) : 0;
                        iv.ISC = dr["ISC"] != DBNull.Value ? Convert.ToDouble(dr["ISC"]) : 0;
                        iv.EFF = dr["EFF"] != DBNull.Value ? Convert.ToDouble(dr["EFF"]) : 0;
                        iv.RSH = dr["RSH"] != DBNull.Value ? Convert.ToDouble(dr["RSH"]) : 0;
                        iv.RS  = dr["RS"] != DBNull.Value ? Convert.ToDouble(dr["RS"]) : 0;
                        iv.VOC = dr["VOC"] != DBNull.Value ? Convert.ToDouble(dr["VOC"]) : 0;
                        iv.IPM = dr["IPM"] != DBNull.Value ? Convert.ToDouble(dr["IPM"]) : 0;
                        iv.PM  = dr["PM"] != DBNull.Value ? Convert.ToDouble(dr["PM"]) : 0;
                        iv.VPM = dr["VPM"] != DBNull.Value ? Convert.ToDouble(dr["VPM"]) : 0;
                        iv.AmbientTemperature = dr["AMBIENTTEMP"] != DBNull.Value ? Convert.ToDouble(dr["AMBIENTTEMP"]) : 0;
                        iv.SensorTemperature  = dr["SENSORTEMP"] != DBNull.Value ? Convert.ToDouble(dr["SENSORTEMP"]) : 0;
                        iv.Intensity          = dr["INTENSITY"] != DBNull.Value ? Convert.ToDouble(dr["INTENSITY"]) : 0;
                        iv.CoefFF             = iv.FF;
                        iv.CoefIPM            = iv.IPM;
                        iv.CoefISC            = iv.ISC;
                        iv.CoefPM             = iv.PM;
                        iv.CoefVOC            = iv.VOC;
                        iv.CoefVPM            = iv.VPM;
                        iv.IsDefault          = false;
                        iv.IsPrint            = false;
                        //新增IV测试数据。
                        p.List.Add(iv);
                    }
                    //开始移转IV测试数据。
                    if (p.List.Count != 0)
                    {
                        using (IVTestDataTransferServiceClient client = new IVTestDataTransferServiceClient())
                        {
                            MethodReturnResult result = client.Transfer(p);
                            if (result.Code > 0)
                            {
                                EventLog.WriteEntry(EVENT_SOURCE_NAME
                                                    , string.Format("{0}:{1}", element.Name, result.Message)
                                                    , EventLogEntryType.Error);
                                client.Close();
                                return(false);
                            }
                            else
                            {
                                this.TransferCount = p.List.Count;
                                client.Close();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry(EVENT_SOURCE_NAME
                                    , string.Format("{0}:{1}", element.Name, ex.Message)
                                    , EventLogEntryType.Error);
                return(false);
            }
            return(true);
        }