/// <summary>
    /// 采样任务分配信息
    /// </summary>
    /// <returns></returns>
    private string getTwoGridInfo()
    {
        if (this.PLAN_ID.Value.Length == 0)
        {
            return("");
        }

        TMisMonitorTaskVo objTask = new TMisMonitorTaskVo();

        objTask.PLAN_ID = this.PLAN_ID.Value;
        objTask         = new TMisMonitorTaskLogic().Details(objTask);

        string strSortname  = Request.Params["sortname"];
        string strSortorder = Request.Params["sortorder"];
        //当前页面
        int intPageIndex = Convert.ToInt32(Request.Params["page"]);
        //每页记录数
        int intPageSize = Convert.ToInt32(Request.Params["pagesize"]);

        TMisMonitorSubtaskVo objSubtask = new TMisMonitorSubtaskVo();

        objSubtask.TASK_ID = objTask.ID;
        DataTable dt = new TMisMonitorSubtaskLogic().SelectByTable(objSubtask, intPageIndex, intPageSize);

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            TMisMonitorSampleInfoVo objSampleInfo = new TMisMonitorSampleInfoVo();
            objSampleInfo.SUBTASK_ID = dt.Rows[i]["ID"].ToString();
            DataTable objDtSample = new TMisMonitorSampleInfoLogic().SelectByTableForPoint(objSampleInfo, 0, 0);
            if (objDtSample.Rows.Count > 0)
            {
                DataRow[] objDtMuMiRow = objDtSample.Select(" QC_TYPE='0'");
                foreach (DataRow dr in objDtMuMiRow)
                {
                    DataTable objDt = new TMisMonitorSampleInfoLogic().GetSampleInforForEnvQcSettingTable(dr["POINT_ID"].ToString(), DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString());
                    if (objDt.Rows.Count > 0)
                    {
                        string    strItemArry = "";
                        DataRow[] objExistRow = null;
                        //查找是否有做现场平行的质控计划
                        objExistRow = objDtSample.Select(" POINT_ID='" + dr["POINT_ID"].ToString() + "' AND QC_TYPE='3'");
                        if (objExistRow.Length <= 0)
                        {
                            DataRow[] drRow_PX = objDt.Select("QC_TYPE='3'");
                            if (drRow_PX.Length > 0)
                            {
                                strItemArry = "";
                                deleteSampleInfo(dr["ID"].ToString(), "3");
                                foreach (DataRow drItem in drRow_PX)
                                {
                                    strItemArry += drItem["ITEM_ID"].ToString() + ",";
                                }
                                strItemArry = strItemArry.Substring(0, strItemArry.Length - 1);
                                createQcInfo(dr["ID"].ToString(), "3", strItemArry);
                            }
                        }
                        //查找是否有做现场平行的空白计划
                        objExistRow = objDtSample.Select(" POINT_ID='" + dr["POINT_ID"].ToString() + "' AND QC_TYPE='1'");
                        if (objExistRow.Length <= 0)
                        {
                            DataRow[] drRow_KB = objDt.Select(" QC_TYPE='1'");

                            if (drRow_KB.Length > 0)
                            {
                                strItemArry = "";
                                deleteSampleInfo(dr["ID"].ToString(), "1");
                                foreach (DataRow drItem in drRow_KB)
                                {
                                    strItemArry += drItem["ITEM_ID"].ToString() + ",";
                                }
                                strItemArry = strItemArry.Substring(0, strItemArry.Length - 1);
                                createQcInfo(dr["ID"].ToString(), "1", strItemArry);
                            }
                        }
                    }
                }
            }
            if (dt.Rows[i]["SAMPLING_MANAGER_ID"].ToString().Length > 0)
            {
                dt.Rows[i]["SAMPLING_MANAGER_ID"] = new TSysUserLogic().Details(dt.Rows[i]["SAMPLING_MANAGER_ID"].ToString()).REAL_NAME;
            }
            else
            {
                dt.Rows[i]["SAMPLING_MANAGER_ID"] = "请选择";
            }
        }
        dt.DefaultView.Sort = "MONITOR_ID ASC";
        DataTable dtTemp        = dt.DefaultView.ToTable();
        int       intTotalCount = new TMisMonitorSubtaskLogic().GetSelectResultCount(objSubtask);
        string    strJson       = CreateToJson(dtTemp, intTotalCount);

        return(strJson);
    }
    /// <summary>
    /// 创建原因:根据指定监测项目属性ID 更新指定列的数据
    /// 创建人:胡方扬
    /// 创建时间:2013-07-09
    /// </summary>
    /// <returns></returns>
    public bool UpdateAttValue()
    {
        bool blFlag = false;

        if (!String.IsNullOrEmpty(strAttInfor_Id) && !String.IsNullOrEmpty(strUpdateCell))
        {
            blFlag = new TMisMonitorDustattributeSo2ornoxLogic().UpdateCell(strAttInfor_Id, strUpdateCell, strUpdateCellValue);

            Regex r = new Regex("^\\d+(\\.)?\\d*$");
            TMisMonitorDustattributeSo2ornoxVo So2ornoxVo = new TMisMonitorDustattributeSo2ornoxVo();
            So2ornoxVo = new TMisMonitorDustattributeSo2ornoxLogic().Details(strAttInfor_Id);
            if (blFlag)
            {
                switch (strUpdateCell)
                {
                case "SO2_POTENCY":            //SO2浓度
                    //计算SO2折算浓度:((21/(21-含氧量))*SO2浓度)/折算系数
                    decimal dPOTENCY = r.IsMatch(So2ornoxVo.SO2_POTENCY) ? decimal.Parse(So2ornoxVo.SO2_POTENCY) : 0;
                    decimal dOXYGEN  = r.IsMatch(So2ornoxVo.SMOKE_OXYGEN) ? decimal.Parse(So2ornoxVo.SMOKE_OXYGEN) : 0;
                    TMisMonitorDustinforVo DustinforVo = new TMisMonitorDustinforLogic().Details(So2ornoxVo.BASEINFOR_ID);
                    decimal dMODUL_NUM   = r.IsMatch(DustinforVo.MODUL_NUM) ? decimal.Parse(DustinforVo.MODUL_NUM) : 0;
                    decimal dPER_POTENCY = 0;
                    if (dMODUL_NUM != 0)
                    {
                        dPER_POTENCY = ((21 / (21 - dOXYGEN)) * dPOTENCY) / dMODUL_NUM;
                        blFlag       = new TMisMonitorDustattributeSo2ornoxLogic().UpdateCell(strAttInfor_Id, "SO2_PER_POTENCY", Math.Round(dPER_POTENCY, 0).ToString());
                    }
                    else
                    {
                        if (So2ornoxVo.SAMPLE_CODE == "平均")
                        {
                            //更新结果表
                            TMisMonitorResultVo objResultVo = new TMisMonitorResultLogic().Details(DustinforVo.SUBTASK_ID);
                            DataTable           dt          = new TMisMonitorSampleInfoLogic().SelectResultForSO2(objResultVo.SAMPLE_ID);
                            DataRow[]           dr;
                            dr = dt.Select("ITEM_NAME='二氧化硫'");
                            if (dr.Length > 0)
                            {
                                objResultVo             = new TMisMonitorResultVo();
                                objResultVo.ID          = dr[0]["ID"].ToString();
                                objResultVo.ITEM_RESULT = strUpdateCellValue;
                                blFlag = new TMisMonitorResultLogic().Edit(objResultVo);
                            }
                        }
                    }
                    //计算SO2排放量:(SO2浓度*标态流量)/1000000
                    decimal dSPEED = r.IsMatch(So2ornoxVo.NM_SPEED) ? decimal.Parse(So2ornoxVo.NM_SPEED) : 0;
                    blFlag = new TMisMonitorDustattributeSo2ornoxLogic().UpdateCell(strAttInfor_Id, "SO2_DISCHARGE", Math.Round((dPOTENCY * dSPEED) / 1000000, 3).ToString());
                    break;

                case "SO2_PER_POTENCY":
                    DustinforVo = new TMisMonitorDustinforLogic().Details(So2ornoxVo.BASEINFOR_ID);
                    dMODUL_NUM  = r.IsMatch(DustinforVo.MODUL_NUM) ? decimal.Parse(DustinforVo.MODUL_NUM) : 0;
                    if (dMODUL_NUM != 0 && So2ornoxVo.SAMPLE_CODE == "平均")
                    {
                        //更新结果表
                        TMisMonitorResultVo objResultVo = new TMisMonitorResultLogic().Details(DustinforVo.SUBTASK_ID);
                        DataTable           dt          = new TMisMonitorSampleInfoLogic().SelectResultForSO2(objResultVo.SAMPLE_ID);
                        DataRow[]           dr;
                        dr = dt.Select("ITEM_NAME='二氧化硫'");
                        if (dr.Length > 0)
                        {
                            objResultVo             = new TMisMonitorResultVo();
                            objResultVo.ID          = dr[0]["ID"].ToString();
                            objResultVo.ITEM_RESULT = strUpdateCellValue;
                            blFlag = new TMisMonitorResultLogic().Edit(objResultVo);
                        }
                    }
                    break;

                case "NOX_POTENCY":            //NOX浓度
                    //计算NOX折算浓度:((21/(21-含氧量))*NOX浓度)/折算系数
                    dPOTENCY     = r.IsMatch(So2ornoxVo.NOX_POTENCY) ? decimal.Parse(So2ornoxVo.NOX_POTENCY) : 0;
                    dOXYGEN      = r.IsMatch(So2ornoxVo.SMOKE_OXYGEN) ? decimal.Parse(So2ornoxVo.SMOKE_OXYGEN) : 0;
                    DustinforVo  = new TMisMonitorDustinforLogic().Details(So2ornoxVo.BASEINFOR_ID);
                    dMODUL_NUM   = r.IsMatch(DustinforVo.MODUL_NUM) ? decimal.Parse(DustinforVo.MODUL_NUM) : 0;
                    dPER_POTENCY = 0;
                    if (dMODUL_NUM != 0)
                    {
                        dPER_POTENCY = ((21 / (21 - dOXYGEN)) * dPOTENCY) / dMODUL_NUM;
                        blFlag       = new TMisMonitorDustattributeSo2ornoxLogic().UpdateCell(strAttInfor_Id, "NOX_PER_POTENCY", Math.Round(dPER_POTENCY, 0).ToString());
                    }
                    else
                    {
                        if (So2ornoxVo.SAMPLE_CODE == "平均")
                        {
                            //更新结果表
                            TMisMonitorResultVo objResultVo = new TMisMonitorResultLogic().Details(DustinforVo.SUBTASK_ID);
                            DataTable           dt          = new TMisMonitorSampleInfoLogic().SelectResultForSO2(objResultVo.SAMPLE_ID);
                            DataRow[]           dr;
                            dr = dt.Select("ITEM_NAME='氮氧化物'");
                            if (dr.Length > 0)
                            {
                                objResultVo             = new TMisMonitorResultVo();
                                objResultVo.ID          = dr[0]["ID"].ToString();
                                objResultVo.ITEM_RESULT = strUpdateCellValue;
                                blFlag = new TMisMonitorResultLogic().Edit(objResultVo);
                            }
                        }
                    }
                    //计算NOX排放量:(SO2浓度*标态流量)/1000000
                    dSPEED = r.IsMatch(So2ornoxVo.NM_SPEED) ? decimal.Parse(So2ornoxVo.NM_SPEED) : 0;
                    blFlag = new TMisMonitorDustattributeSo2ornoxLogic().UpdateCell(strAttInfor_Id, "NOX_DISCHARGE", Math.Round((dPOTENCY * dSPEED) / 1000000, 3).ToString());
                    break;

                case "NOX_PER_POTENCY":
                    DustinforVo = new TMisMonitorDustinforLogic().Details(So2ornoxVo.BASEINFOR_ID);
                    dMODUL_NUM  = r.IsMatch(DustinforVo.MODUL_NUM) ? decimal.Parse(DustinforVo.MODUL_NUM) : 0;
                    if (dMODUL_NUM != 0 && So2ornoxVo.SAMPLE_CODE == "平均")
                    {
                        //更新结果表
                        TMisMonitorResultVo objResultVo = new TMisMonitorResultLogic().Details(DustinforVo.SUBTASK_ID);
                        DataTable           dt          = new TMisMonitorSampleInfoLogic().SelectResultForSO2(objResultVo.SAMPLE_ID);
                        DataRow[]           dr;
                        dr = dt.Select("ITEM_NAME='氮氧化物'");
                        if (dr.Length > 0)
                        {
                            objResultVo             = new TMisMonitorResultVo();
                            objResultVo.ID          = dr[0]["ID"].ToString();
                            objResultVo.ITEM_RESULT = strUpdateCellValue;
                            blFlag = new TMisMonitorResultLogic().Edit(objResultVo);
                        }
                    }
                    break;

                default:
                    break;
                }
            }
        }
        return(blFlag);
    }
    protected void btnExport_Click(object sender, EventArgs e)
    {
        if (this.hidPlanId.Value.Length == 0)
        {
            return;
        }

        TMisContractPlanVo    objPlan       = new TMisContractPlanLogic().Details(this.hidPlanId.Value);
        string                strContractID = objPlan.CONTRACT_ID;
        TMisContractVo        objContract   = new TMisContractLogic().Details(strContractID);
        TMisContractCompanyVo objCompany    = new TMisContractCompanyLogic().Details(objContract.TESTED_COMPANY_ID);

        string strPointNames = "";
        string strItemS      = "";
        int    intPointCount = 0;

        GetInfoForPrint(ref strPointNames, ref intPointCount, ref strItemS);

        string strSAMPLE_ASK_DATE    = this.hidASK_DATE.Value;
        string strSAMPLE_FINISH_DATE = this.hidFINISH_DATE.Value;

        FileStream   file         = new FileStream(HttpContext.Current.Server.MapPath("template/MoniterTaskNotify.xls"), FileMode.Open, FileAccess.Read);
        HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
        ISheet       sheet        = hssfworkbook.GetSheet("Sheet1");

        sheet.GetRow(3).GetCell(1).SetCellValue(objContract.PROJECT_NAME);
        sheet.GetRow(3).GetCell(3).SetCellValue(objCompany.COMPANY_NAME);
        sheet.GetRow(4).GetCell(1).SetCellValue(objCompany.MONITOR_ADDRESS);
        sheet.GetRow(4).GetCell(3).SetCellValue(objCompany.CONTACT_NAME + "、" + objCompany.PHONE);
        sheet.GetRow(5).GetCell(1).SetCellValue(strSAMPLE_ASK_DATE);
        sheet.GetRow(5).GetCell(3).SetCellValue(strSAMPLE_FINISH_DATE);

        //获取当前监测类别信息
        DataTable dtMonitor = GetPendingPlanDistinctMonitorDataTable(objPlan.ID);
        //DataTable dtPoint = GetPendingPlanPointDataTable(objPlan.ID);
        DataTable dtPoint = new TMisMonitorSampleInfoLogic().GetSampleInfoByPlanID(objPlan.ID);

        if (dtMonitor.Rows.Count > 0)
        {
            int i = 0;
            foreach (DataRow drr in dtMonitor.Rows)
            {
                string strExportMonitorId = this.hidMonitorId.Value.ToString();
                //如果hidMonitorId值为空 表示选择的父节点,要导出当前任务所有的监测子任务,如果不为空,则表示选择了某条监测子任务
                if (!String.IsNullOrEmpty(strExportMonitorId))
                {
                    //如果监测子任务的监测类别不符合当前循环的监测类别,则跳出当前循环,继续下一循环,即:导出具体的监测子任务
                    if (strExportMonitorId != drr["MONITOR_ID"].ToString())
                    {
                        //跳出当前循环,继续下一循环
                        continue;
                    }
                }
                string    strMonitorName = "", strPointName = "", strOutValuePoint = "", strOutValuePointItems = "";
                DataRow[] drPoint = dtPoint.Select("MONITOR_ID='" + drr["MONITOR_ID"].ToString() + "'");
                if (drPoint.Length > 0)
                {
                    foreach (DataRow drrPoint in drPoint)
                    {
                        string strPointNameForItems = "", strPointItems = "";
                        strMonitorName = drrPoint["MONITOR_TYPE_NAME"].ToString();
                        strPointName  += drrPoint["SAMPLE_CODE"].ToString() + ":" + drrPoint["SAMPLE_NAME"].ToString() + ";\n";

                        //获取当前点位的监测项目
                        //DataTable dtPointItems = GetPendingPlanPointItemsDataTable(drrPoint["CONTRACT_POINT_ID"].ToString());
                        DataTable dtPointItems = new TMisMonitorSampleInfoLogic().GetItemInfoBySampleID(drrPoint["ID"].ToString());
                        if (dtPointItems.Rows.Count > 0)
                        {
                            foreach (DataRow drItems in dtPointItems.Rows)
                            {
                                strPointNameForItems = drrPoint["SAMPLE_NAME"] + ":";
                                strPointItems       += drItems["ITEM_NAME"].ToString() + "、";
                            }
                            strOutValuePointItems += strPointNameForItems + strPointItems.Substring(0, strPointItems.Length - 1) + ";\n";
                        }
                    }
                    //获取输出监测类型监测点位信息
                    strOutValuePoint += strPointName.Substring(0, strPointName.Length - 2) + ";\n";
                }

                sheet.GetRow(i + 7).GetCell(0).SetCellValue(strMonitorName);
                sheet.GetRow(i + 7).GetCell(1).SetCellValue(strOutValuePoint);
                sheet.GetRow(i + 7).GetCell(2).SetCellValue(strOutValuePointItems);

                i++;
            }
        }


        using (MemoryStream stream = new MemoryStream())
        {
            hssfworkbook.Write(stream);
            HttpContext curContext = HttpContext.Current;
            // 设置编码和附件格式
            curContext.Response.ContentType     = "application/vnd.ms-excel";
            curContext.Response.ContentEncoding = Encoding.UTF8;
            curContext.Response.Charset         = "";
            curContext.Response.AppendHeader("Content-Disposition",
                                             "attachment;filename=" + HttpUtility.UrlEncode("采样任务分配表.xls", Encoding.UTF8));
            curContext.Response.BinaryWrite(stream.GetBuffer());
            curContext.Response.End();
        }
    }
    /// <summary>
    /// 创建原因:计算原始记录表的平均数据
    /// 创建人:魏林
    /// 创建时间:2014-04-16
    /// </summary>
    /// <returns></returns>
    public string AvgAttInfor()
    {
        Regex   r = new Regex("^\\d+(\\.)?\\d*$");
        bool    iSuccess = true;
        decimal SMOKE_TEMPERATURE = 0, SMOKE_OXYGEN = 0, SMOKE_SPEED = 0, NM_SPEED = 0;
        decimal SO2_POTENCY = 0, SO2_PER_POTENCY = 0, SO2_DISCHARGE = 0;
        decimal NOX_POTENCY = 0, NOX_PER_POTENCY = 0, NOX_DISCHARGE = 0;
        decimal SMOKE_TEMPERATURE_COut = 0, SMOKE_OXYGEN_COut = 0, SMOKE_SPEED_COut = 0, NM_SPEED_COut = 0, SO2_POTENCY_COut = 0, SO2_PER_POTENCY_COut = 0, SO2_DISCHARGE_COut = 0, NOX_POTENCY_COut = 0, NOX_PER_POTENCY_COut = 0, NOX_DISCHARGE_COut = 0;
        int     iPRECISION = 0; //平均值的小数位位数

        if (!String.IsNullOrEmpty(strBaseInfor_Id))
        {
            TMisMonitorDustattributeSo2ornoxVo objDustAtt = new TMisMonitorDustattributeSo2ornoxVo();
            objDustAtt.BASEINFOR_ID = strBaseInfor_Id;
            objDustAtt.SORT_FIELD   = "ID";
            DataTable dt = new TMisMonitorDustattributeSo2ornoxLogic().SelectByTable(objDustAtt);
            if (dt.Rows[dt.Rows.Count - 1]["SAMPLE_CODE"].ToString() == "平均")
            {
                objDustAtt.SORT_FIELD = "";
                objDustAtt.ID         = dt.Rows[dt.Rows.Count - 1]["ID"].ToString();
                for (int i = 0; i < dt.Rows.Count - 1; i++)
                {
                    if (r.IsMatch(dt.Rows[i]["SMOKE_TEMPERATURE"].ToString()))
                    {
                        SMOKE_TEMPERATURE += decimal.Parse(dt.Rows[i]["SMOKE_TEMPERATURE"].ToString());
                    }
                    else
                    {
                        SMOKE_TEMPERATURE_COut = GetNumber(dt.Rows[i]["SMOKE_TEMPERATURE"].ToString());
                        SMOKE_TEMPERATURE     += SMOKE_TEMPERATURE_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SMOKE_OXYGEN"].ToString()))
                    {
                        SMOKE_OXYGEN += decimal.Parse(dt.Rows[i]["SMOKE_OXYGEN"].ToString());
                    }
                    else
                    {
                        SMOKE_OXYGEN_COut = GetNumber(dt.Rows[i]["SMOKE_OXYGEN"].ToString());
                        SMOKE_OXYGEN     += SMOKE_OXYGEN_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SMOKE_SPEED"].ToString()))
                    {
                        SMOKE_SPEED += decimal.Parse(dt.Rows[i]["SMOKE_SPEED"].ToString());
                    }
                    else
                    {
                        SMOKE_SPEED_COut = GetNumber(dt.Rows[i]["SMOKE_SPEED"].ToString());
                        SMOKE_SPEED     += SMOKE_SPEED_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NM_SPEED"].ToString()))
                    {
                        NM_SPEED += decimal.Parse(dt.Rows[i]["NM_SPEED"].ToString());
                    }
                    else
                    {
                        NM_SPEED_COut = GetNumber(dt.Rows[i]["NM_SPEED"].ToString());
                        NM_SPEED     += NM_SPEED_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SO2_POTENCY"].ToString()))
                    {
                        SO2_POTENCY += decimal.Parse(dt.Rows[i]["SO2_POTENCY"].ToString());
                    }
                    else
                    {
                        SO2_POTENCY_COut = GetNumber(dt.Rows[i]["SO2_POTENCY"].ToString());
                        SO2_POTENCY     += SO2_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SO2_PER_POTENCY"].ToString()))
                    {
                        SO2_PER_POTENCY += decimal.Parse(dt.Rows[i]["SO2_PER_POTENCY"].ToString());
                    }
                    else
                    {
                        SO2_PER_POTENCY_COut = GetNumber(dt.Rows[i]["SO2_PER_POTENCY"].ToString());
                        SO2_PER_POTENCY     += SO2_PER_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SO2_DISCHARGE"].ToString()))
                    {
                        SO2_DISCHARGE += decimal.Parse(dt.Rows[i]["SO2_DISCHARGE"].ToString());
                    }
                    else
                    {
                        SO2_DISCHARGE_COut = GetNumber(dt.Rows[i]["SO2_DISCHARGE"].ToString());
                        SO2_DISCHARGE     += SO2_DISCHARGE_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NOX_POTENCY"].ToString()))
                    {
                        NOX_POTENCY += decimal.Parse(dt.Rows[i]["NOX_POTENCY"].ToString());
                    }
                    else
                    {
                        NOX_POTENCY_COut = GetNumber(dt.Rows[i]["NOX_POTENCY"].ToString());
                        NOX_POTENCY     += NOX_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NOX_PER_POTENCY"].ToString()))
                    {
                        NOX_PER_POTENCY += decimal.Parse(dt.Rows[i]["NOX_PER_POTENCY"].ToString());
                    }
                    else
                    {
                        NOX_PER_POTENCY_COut = GetNumber(dt.Rows[i]["NOX_PER_POTENCY"].ToString());
                        NOX_PER_POTENCY     += NOX_PER_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NOX_DISCHARGE"].ToString()))
                    {
                        NOX_DISCHARGE += decimal.Parse(dt.Rows[i]["NOX_DISCHARGE"].ToString());
                    }
                    else
                    {
                        NOX_DISCHARGE_COut = GetNumber(dt.Rows[i]["NOX_DISCHARGE"].ToString());
                        NOX_DISCHARGE     += NOX_DISCHARGE_COut / 2;
                    }
                }
                iPRECISION = dt.Rows[0]["SMOKE_TEMPERATURE"].ToString().Contains('.') ? dt.Rows[0]["SMOKE_TEMPERATURE"].ToString().Split('.')[1].Length : 0;
                if (SMOKE_TEMPERATURE_COut != 0 && Math.Round(SMOKE_TEMPERATURE / (dt.Rows.Count - 1), iPRECISION) < SMOKE_TEMPERATURE_COut)
                {
                    objDustAtt.SMOKE_TEMPERATURE = SMOKE_TEMPERATURE_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SMOKE_TEMPERATURE = Math.Round(SMOKE_TEMPERATURE / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SMOKE_OXYGEN"].ToString().Contains('.') ? dt.Rows[0]["SMOKE_OXYGEN"].ToString().Split('.')[1].Length : 0;
                if (SMOKE_OXYGEN_COut != 0 && Math.Round(SMOKE_OXYGEN / (dt.Rows.Count - 1), iPRECISION) < SMOKE_OXYGEN_COut)
                {
                    objDustAtt.SMOKE_OXYGEN = SMOKE_OXYGEN_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SMOKE_OXYGEN = Math.Round(SMOKE_OXYGEN / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SMOKE_SPEED"].ToString().Contains('.') ? dt.Rows[0]["SMOKE_SPEED"].ToString().Split('.')[1].Length : 0;
                if (SMOKE_SPEED_COut != 0 && Math.Round(SMOKE_SPEED / (dt.Rows.Count - 1), iPRECISION) < SMOKE_SPEED_COut)
                {
                    objDustAtt.SMOKE_SPEED = SMOKE_SPEED_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SMOKE_SPEED = Math.Round(SMOKE_SPEED / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NM_SPEED"].ToString().Contains('.') ? dt.Rows[0]["NM_SPEED"].ToString().Split('.')[1].Length : 0;
                if (NM_SPEED_COut != 0 && Math.Round(NM_SPEED / (dt.Rows.Count - 1), iPRECISION) < NM_SPEED_COut)
                {
                    objDustAtt.NM_SPEED = NM_SPEED_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NM_SPEED = Math.Round(NM_SPEED / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SO2_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["SO2_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (SO2_POTENCY_COut != 0 && Math.Round(SO2_POTENCY / (dt.Rows.Count - 1), iPRECISION) < SO2_POTENCY_COut)
                {
                    objDustAtt.SO2_POTENCY = SO2_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SO2_POTENCY = Math.Round(SO2_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SO2_PER_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["SO2_PER_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (SO2_PER_POTENCY_COut != 0 && Math.Round(SO2_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION) < SO2_PER_POTENCY_COut)
                {
                    objDustAtt.SO2_PER_POTENCY = SO2_PER_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SO2_PER_POTENCY = Math.Round(SO2_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SO2_DISCHARGE"].ToString().Contains('.') ? dt.Rows[0]["SO2_DISCHARGE"].ToString().Split('.')[1].Length : 0;
                if (SO2_DISCHARGE_COut != 0 && Math.Round(SO2_DISCHARGE / (dt.Rows.Count - 1), iPRECISION) < SO2_DISCHARGE_COut)
                {
                    objDustAtt.SO2_DISCHARGE = SO2_DISCHARGE_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SO2_DISCHARGE = Math.Round(SO2_DISCHARGE / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NOX_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["NOX_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (NOX_POTENCY_COut != 0 && Math.Round(NOX_POTENCY / (dt.Rows.Count - 1), iPRECISION) < NOX_POTENCY_COut)
                {
                    objDustAtt.NOX_POTENCY = NOX_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NOX_POTENCY = Math.Round(NOX_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NOX_PER_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["NOX_PER_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (NOX_PER_POTENCY_COut != 0 && Math.Round(NOX_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION) < NOX_PER_POTENCY_COut)
                {
                    objDustAtt.NOX_PER_POTENCY = NOX_PER_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NOX_PER_POTENCY = Math.Round(NOX_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NOX_DISCHARGE"].ToString().Contains('.') ? dt.Rows[0]["NOX_DISCHARGE"].ToString().Split('.')[1].Length : 0;
                if (NOX_DISCHARGE_COut != 0 && Math.Round(NOX_DISCHARGE / (dt.Rows.Count - 1), iPRECISION) < NOX_DISCHARGE_COut)
                {
                    objDustAtt.NOX_DISCHARGE = NOX_DISCHARGE_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NOX_DISCHARGE = Math.Round(NOX_DISCHARGE / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iSuccess = new TMisMonitorDustattributeSo2ornoxLogic().Edit(objDustAtt);
            }
            else
            {
                objDustAtt.SORT_FIELD  = "";
                objDustAtt.ID          = GetSerialNumber("t_mis_dutyAttSo2InforID");
                objDustAtt.SAMPLE_CODE = "平均";
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (r.IsMatch(dt.Rows[i]["SMOKE_TEMPERATURE"].ToString()))
                    {
                        SMOKE_TEMPERATURE += decimal.Parse(dt.Rows[i]["SMOKE_TEMPERATURE"].ToString());
                    }
                    else
                    {
                        SMOKE_TEMPERATURE_COut = GetNumber(dt.Rows[i]["SMOKE_TEMPERATURE"].ToString());
                        SMOKE_TEMPERATURE     += SMOKE_TEMPERATURE_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SMOKE_OXYGEN"].ToString()))
                    {
                        SMOKE_OXYGEN += decimal.Parse(dt.Rows[i]["SMOKE_OXYGEN"].ToString());
                    }
                    else
                    {
                        SMOKE_OXYGEN_COut = GetNumber(dt.Rows[i]["SMOKE_OXYGEN"].ToString());
                        SMOKE_OXYGEN     += SMOKE_OXYGEN_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SMOKE_SPEED"].ToString()))
                    {
                        SMOKE_SPEED += decimal.Parse(dt.Rows[i]["SMOKE_SPEED"].ToString());
                    }
                    else
                    {
                        SMOKE_SPEED_COut = GetNumber(dt.Rows[i]["SMOKE_SPEED"].ToString());
                        SMOKE_SPEED     += SMOKE_SPEED_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NM_SPEED"].ToString()))
                    {
                        NM_SPEED += decimal.Parse(dt.Rows[i]["NM_SPEED"].ToString());
                    }
                    else
                    {
                        NM_SPEED_COut = GetNumber(dt.Rows[i]["NM_SPEED"].ToString());
                        NM_SPEED     += NM_SPEED_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SO2_POTENCY"].ToString()))
                    {
                        SO2_POTENCY += decimal.Parse(dt.Rows[i]["SO2_POTENCY"].ToString());
                    }
                    else
                    {
                        SO2_POTENCY_COut = GetNumber(dt.Rows[i]["SO2_POTENCY"].ToString());
                        SO2_POTENCY     += SO2_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SO2_PER_POTENCY"].ToString()))
                    {
                        SO2_PER_POTENCY += decimal.Parse(dt.Rows[i]["SO2_PER_POTENCY"].ToString());
                    }
                    else
                    {
                        SO2_PER_POTENCY_COut = GetNumber(dt.Rows[i]["SO2_PER_POTENCY"].ToString());
                        SO2_PER_POTENCY     += SO2_PER_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["SO2_DISCHARGE"].ToString()))
                    {
                        SO2_DISCHARGE += decimal.Parse(dt.Rows[i]["SO2_DISCHARGE"].ToString());
                    }
                    else
                    {
                        SO2_DISCHARGE_COut = GetNumber(dt.Rows[i]["SO2_DISCHARGE"].ToString());
                        SO2_DISCHARGE     += SO2_DISCHARGE_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NOX_POTENCY"].ToString()))
                    {
                        NOX_POTENCY += decimal.Parse(dt.Rows[i]["NOX_POTENCY"].ToString());
                    }
                    else
                    {
                        NOX_POTENCY_COut = GetNumber(dt.Rows[i]["NOX_POTENCY"].ToString());
                        NOX_POTENCY     += NOX_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NOX_PER_POTENCY"].ToString()))
                    {
                        NOX_PER_POTENCY += decimal.Parse(dt.Rows[i]["NOX_PER_POTENCY"].ToString());
                    }
                    else
                    {
                        NOX_PER_POTENCY_COut = GetNumber(dt.Rows[i]["NOX_PER_POTENCY"].ToString());
                        NOX_PER_POTENCY     += NOX_PER_POTENCY_COut / 2;
                    }

                    if (r.IsMatch(dt.Rows[i]["NOX_DISCHARGE"].ToString()))
                    {
                        NOX_DISCHARGE += decimal.Parse(dt.Rows[i]["NOX_DISCHARGE"].ToString());
                    }
                    else
                    {
                        NOX_DISCHARGE_COut = GetNumber(dt.Rows[i]["NOX_DISCHARGE"].ToString());
                        NOX_DISCHARGE     += NOX_DISCHARGE_COut / 2;
                    }
                }
                iPRECISION = dt.Rows[0]["SMOKE_TEMPERATURE"].ToString().Contains('.') ? dt.Rows[0]["SMOKE_TEMPERATURE"].ToString().Split('.')[1].Length : 0;
                if (SMOKE_TEMPERATURE_COut != 0 && Math.Round(SMOKE_TEMPERATURE / (dt.Rows.Count - 1), iPRECISION) < SMOKE_TEMPERATURE_COut)
                {
                    objDustAtt.SMOKE_TEMPERATURE = SMOKE_TEMPERATURE_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SMOKE_TEMPERATURE = Math.Round(SMOKE_TEMPERATURE / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SMOKE_OXYGEN"].ToString().Contains('.') ? dt.Rows[0]["SMOKE_OXYGEN"].ToString().Split('.')[1].Length : 0;
                if (SMOKE_OXYGEN_COut != 0 && Math.Round(SMOKE_OXYGEN / (dt.Rows.Count - 1), iPRECISION) < SMOKE_OXYGEN_COut)
                {
                    objDustAtt.SMOKE_OXYGEN = SMOKE_OXYGEN_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SMOKE_OXYGEN = Math.Round(SMOKE_OXYGEN / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SMOKE_SPEED"].ToString().Contains('.') ? dt.Rows[0]["SMOKE_SPEED"].ToString().Split('.')[1].Length : 0;
                if (SMOKE_SPEED_COut != 0 && Math.Round(SMOKE_SPEED / (dt.Rows.Count - 1), iPRECISION) < SMOKE_SPEED_COut)
                {
                    objDustAtt.SMOKE_SPEED = SMOKE_SPEED_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SMOKE_SPEED = Math.Round(SMOKE_SPEED / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NM_SPEED"].ToString().Contains('.') ? dt.Rows[0]["NM_SPEED"].ToString().Split('.')[1].Length : 0;
                if (NM_SPEED_COut != 0 && Math.Round(NM_SPEED / (dt.Rows.Count - 1), iPRECISION) < NM_SPEED_COut)
                {
                    objDustAtt.NM_SPEED = NM_SPEED_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NM_SPEED = Math.Round(NM_SPEED / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SO2_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["SO2_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (SO2_POTENCY_COut != 0 && Math.Round(SO2_POTENCY / (dt.Rows.Count - 1), iPRECISION) < SO2_POTENCY_COut)
                {
                    objDustAtt.SO2_POTENCY = SO2_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SO2_POTENCY = Math.Round(SO2_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SO2_PER_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["SO2_PER_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (SO2_PER_POTENCY_COut != 0 && Math.Round(SO2_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION) < SO2_PER_POTENCY_COut)
                {
                    objDustAtt.SO2_PER_POTENCY = SO2_PER_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SO2_PER_POTENCY = Math.Round(SO2_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["SO2_DISCHARGE"].ToString().Contains('.') ? dt.Rows[0]["SO2_DISCHARGE"].ToString().Split('.')[1].Length : 0;
                if (SO2_DISCHARGE_COut != 0 && Math.Round(SO2_DISCHARGE / (dt.Rows.Count - 1), iPRECISION) < SO2_DISCHARGE_COut)
                {
                    objDustAtt.SO2_DISCHARGE = SO2_DISCHARGE_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.SO2_DISCHARGE = Math.Round(SO2_DISCHARGE / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NOX_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["NOX_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (NOX_POTENCY_COut != 0 && Math.Round(NOX_POTENCY / (dt.Rows.Count - 1), iPRECISION) < NOX_POTENCY_COut)
                {
                    objDustAtt.NOX_POTENCY = NOX_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NOX_POTENCY = Math.Round(NOX_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NOX_PER_POTENCY"].ToString().Contains('.') ? dt.Rows[0]["NOX_PER_POTENCY"].ToString().Split('.')[1].Length : 0;
                if (NOX_PER_POTENCY_COut != 0 && Math.Round(NOX_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION) < NOX_PER_POTENCY_COut)
                {
                    objDustAtt.NOX_PER_POTENCY = NOX_PER_POTENCY_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NOX_PER_POTENCY = Math.Round(NOX_PER_POTENCY / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iPRECISION = dt.Rows[0]["NOX_DISCHARGE"].ToString().Contains('.') ? dt.Rows[0]["NOX_DISCHARGE"].ToString().Split('.')[1].Length : 0;
                if (NOX_DISCHARGE_COut != 0 && Math.Round(NOX_DISCHARGE / (dt.Rows.Count - 1), iPRECISION) < NOX_DISCHARGE_COut)
                {
                    objDustAtt.NOX_DISCHARGE = NOX_DISCHARGE_COut.ToString() + "(L)";
                }
                else
                {
                    objDustAtt.NOX_DISCHARGE = Math.Round(NOX_DISCHARGE / (dt.Rows.Count - 1), iPRECISION).ToString();
                }

                iSuccess = new TMisMonitorDustattributeSo2ornoxLogic().Create(objDustAtt);
            }
            //更新结果表
            TMisMonitorDustinforVo objDustinforVo = new TMisMonitorDustinforLogic().Details(strBaseInfor_Id);
            TMisMonitorResultVo    objResultVo    = new TMisMonitorResultLogic().Details(objDustinforVo.SUBTASK_ID);
            dt = new TMisMonitorSampleInfoLogic().SelectResultForSO2(objResultVo.SAMPLE_ID);
            DataRow[] dr;
            //二氧化硫
            dr = dt.Select("ITEM_NAME='二氧化硫'");
            if (dr.Length > 0)
            {
                objResultVo    = new TMisMonitorResultVo();
                objResultVo.ID = dr[0]["ID"].ToString();
                if (objDustinforVo.MODUL_NUM.Length > 0)
                {
                    objResultVo.ITEM_RESULT = objDustAtt.SO2_PER_POTENCY;
                }
                else
                {
                    objResultVo.ITEM_RESULT = objDustAtt.SO2_POTENCY;
                }
                iSuccess = new TMisMonitorResultLogic().Edit(objResultVo);
            }
            //氮氧化物
            dr = dt.Select("ITEM_NAME='氮氧化物'");
            if (dr.Length > 0)
            {
                objResultVo    = new TMisMonitorResultVo();
                objResultVo.ID = dr[0]["ID"].ToString();
                if (objDustinforVo.MODUL_NUM.Length > 0)
                {
                    objResultVo.ITEM_RESULT = objDustAtt.NOX_PER_POTENCY;
                }
                else
                {
                    objResultVo.ITEM_RESULT = objDustAtt.NOX_POTENCY;
                }
                iSuccess = new TMisMonitorResultLogic().Edit(objResultVo);
            }
        }
        return(iSuccess ? "1" : "0");
    }