Esempio n. 1
0
        protected override void calculate()
        {
            #region khoi dau
            base.calculate();
            CalculationEventArg evt = new CalculationEventArg();
            //evt.Type = EnumTypeOfLoopCalculation.InListCalculators;
            evt.CurrentIndexCalculator = this._index;
            evt.Log = string.Format("**********  Bắt đầu tính giá cho hẻm {0} ********", vitri);
            onCalculating(evt);
            #endregion

            //[thaydoi] - them cac khai bao can thiet
            //************************************
            #region khai bao cac bien
            //Lay connection info hien tai
            SdeConnection conn = new SdeConnection();
            ISdeConnectionInfo sdeConn = conn as ISdeConnectionInfo;
            IWorkspaceEdit wspEdit = (IWorkspaceEdit)sdeConn.Workspace;
            IMultiuserWorkspaceEdit mwspEdit = (IMultiuserWorkspaceEdit)sdeConn.Workspace;
            this._fcName = new TnFeatureClassName(sdeConn.Workspace);
            this._tblName = new TnTableName(sdeConn.Workspace);
            IFeatureWorkspace fw = (IFeatureWorkspace)sdeConn.Workspace;
            ICopyFeatures copyTool = new DataManager(sdeConn.Workspace, sdeConn.Environment);

            #region thua

            //string thuaName = string.Format("{0}_{1}", DataNameTemplate.Thua, this._currentConfig.NamApDung);
            //_fcName.FC_THUA.NAME = thuaName;
            ////MessageBox.Show(string.Format("line 55 CalcMattien {0}", thuaName));
            //_fcName.FC_THUA.InitIndex();
            //IFeatureClass thuaFeatureClass = fw.OpenFeatureClass(thuaName);
            //IFeatureLayer thuaFeatureLayer = new FeatureLayerClass();
            //thuaFeatureLayer.FeatureClass = thuaFeatureClass;
            //IFeatureSelection thuaFeatureSelection;
            #endregion
            #region xa
            IFeatureClass xaFeatureClass = fw.OpenFeatureClass(DataNameTemplate.Ranh_Xa_Poly);
            IFeatureLayer xaFeatureLayer = new FeatureLayerClass();
            xaFeatureLayer.FeatureClass = xaFeatureClass;
            IFeatureSelection xaFeatureSelection;
            #endregion
            #region duong
            IFeatureClass duongFeatureClass = fw.OpenFeatureClass(DataNameTemplate.Duong);
            IFeatureLayer duongFeatureLayer = new FeatureLayerClass();
            duongFeatureLayer.FeatureClass = duongFeatureClass;
            IFeatureSelection duongFeatureSelection;
            //_fcName.FC_DUONG.InitIndex();
            #endregion

            #region hem
            IFeatureClass hemFeatureClass = fw.OpenFeatureClass(DataNameTemplate.Hem);
            IFeatureLayer hemChinhFeatureLayer = new FeatureLayerClass();
            hemChinhFeatureLayer.FeatureClass = hemFeatureClass;
            IFeatureSelection hemChinhFeatureSelection;

            //IFeatureClass hemPhuFeatureClass = fw.OpenFeatureClass(DataNameTemplate.Hem);
            IFeatureLayer hemPhuFeatureLayer = new FeatureLayerClass();
            hemPhuFeatureLayer.FeatureClass = hemFeatureClass;
            IFeatureSelection hemPhuFeatureSelection;
            //_fcName.FC_DUONG.InitIndex();
            #endregion
            #region gia dat hem
            string gdh = DataNameTemplate.Gia_Hem + "_" + _currentConfig.NamApDung.ToString();
            _fcName.FC_GIA_DAT_HEM.NAME = gdh;
            _fcName.FC_GIA_DAT_HEM.InitIndex();
            IFeatureClass gdhChinhFeatureClass = fw.OpenFeatureClass(gdh);
            IFeatureLayer gdhChinhFeatureLayer = new FeatureLayerClass();
            gdhChinhFeatureLayer.FeatureClass = gdhChinhFeatureClass;
            IFeatureSelection gdhChinhFeatureSelection;
            ITable tblGdhChinh = (ITable)gdhChinhFeatureClass;
            ISDETableEditor sdeTblGdhEditor = new SDETable(tblGdhChinh, sdeConn.Workspace);
            #endregion

            #region thua gia dat
            //string tgdDraft = string.Format("{0}_{1}", DataNameTemplate.Thua_Gia_Dat_Draft, this._currentConfig.NamApDung);
            //_fcName.FC_THUA_GIADAT_DRAFT.NAME = tgdDraft;
            //_fcName.FC_THUA_GIADAT_DRAFT.InitIndex();
            ////_fcName.FC_THUA_GIADAT_DRAFT.NAME = tgdDraft;
            ////_fcName.FC_THUA_GIADAT_DRAFT.InitIndex();
            //IFeatureClass tgdFeatureClass=null;
            //try
            //{
            //    tgdFeatureClass = fw.OpenFeatureClass(tgdDraft);
            //}
            //catch (Exception exc)
            //{
            //    evt.Log = string.Format("Không tìm thấy lớp dữ liệu: {0}", tgdDraft);
            //    onCalculating(evt);
            //    onFinished(evt);
            //    return;
            //}
            //ITable tblThuaGiaDat = (ITable)tgdFeatureClass;
            //IFeatureLayer tgdFeatureLayer = new FeatureLayerClass();
            //ISDETableEditor sdeTblTgdEditor = new SDETable(tblThuaGiaDat, sdeConn.Workspace);
            #endregion

            #region gia dat duong
            //string gdd = string.Format("{0}_{1}", DataNameTemplate.Gia_Dat_Duong, this._currentConfig.NamApDung);
            //_tblName.GIA_DAT_DUONG.NAME = gdd;
            //_tblName.GIA_DAT_DUONG.InitIndex();
            #endregion

            #region ten duong
            ITable tblTenDuong;
            try
            {
                tblTenDuong = fw.OpenTable(DataNameTemplate.Ten_Duong);
            }
            catch (Exception exc)
            {
                evt.Log = string.Format("Không tìm thấy lớp dữ liệu: {0}", DataNameTemplate.Ten_Duong);
                onCalculating(evt);
                onFinished(evt);
                return;
            }
            #endregion

            #region loai dat
            //ITable tblLoaiDat;
            //try
            //{
            //    tblLoaiDat = fw.OpenTable(DataNameTemplate.Loai_Dat);
            //}
            //catch (Exception exc)
            //{
            //    evt.Log = string.Format("Không tìm thấy lớp dữ liệu: {0}", DataNameTemplate.Loai_Dat);
            //    onCalculating(evt);
            //    onFinished(evt);
            //    return;
            //}
            #endregion

            #region he so vi tri
            //ITable tblHesoVitri;
            //try
            //{
            //    tblHesoVitri = fw.OpenTable(DataNameTemplate.He_So_K);
            //}
            //catch (Exception exc)
            //{
            //    evt.Log = string.Format("Không tìm thấy lớp dữ liệu: {0}", DataNameTemplate.He_So_K);
            //    onCalculating(evt);
            //    onFinished(evt);
            //    return;
            //}
            #endregion

            #region khac
            IQueryFilter qrf = new QueryFilterClass();
            IDataManager _dataManager;
            ISdeVersionInfo _version;
            IBuffer _bufferTool;
            //IClip _clipTool;
            IErase _eraseTool;
            ITnSystemTempPath _sysTempPath;
            _sysTempPath = new TnSystemTempPath();
            bool result = false;
            int sothuatimthay = 0;
            int sothuatinhduoc = 0;
            int sothuaKhongTinhDuoc = 0;
            _dataManager = new DataManager(sdeConn.Workspace, sdeConn.Environment);
            _version = SdeVersionsTool.CallMe();
            //_clipTool = new GExtractTool(sdeConn.Environment);
            _eraseTool = new GExtractTool(sdeConn.Environment);
            string duongBuffer200mNoSde = FilterSdeLayerName.GetActualName(DataNameTemplate.Duong_Buffer_);
            duongBuffer200mNoSde += "200";
            string hemErase200mNoSde = FilterSdeLayerName.GetActualName(DataNameTemplate.Hem_Erase_);
            hemErase200mNoSde += "200";
            //string duongBuffer50mCoSde = string.Format("{0}{1}", DataNameTemplate.Duong_Buffer_, 50);
            string hemErase200mCoSde = string.Format("{0}{1}", DataNameTemplate.Hem_Erase_, 200);
            #endregion

            #endregion
            //************************************

            //*******************************************
            //===========================================
            //===========================================

            #region bat dau tinh
            _bufferTool = new GProximityTool(sdeConn.Environment);

            if (!_dataManager.LayerExist(duongBuffer200mNoSde))
            {

                _bufferTool.BufferInsideSde(duongFeatureClass.AliasName, duongBuffer200mNoSde, 200);
            }
            IFeatureClass duongBuff200FeatureClass = fw.OpenFeatureClass(duongBuffer200mNoSde);
            IFeatureLayer duongBuff200FeatureLayer = new FeatureLayerClass();
            ISelectionSet duongBuff200Sls;
            IFeatureSelection duongBuff200Fsls;
            duongBuff200FeatureLayer.FeatureClass = duongBuff200FeatureClass;
            #region test
            //string ex = string.Format("VongLap(ChonDuong('dorong=10'),VongLap(ChonThua('dientich<1.5'),test([doituonglap]),[doituonglap]))");
            ////ex=string.Format("VongLap(DuongDangChon(),VongLap()
            //Evaluation evalu = new Evaluation(ex);
            //evalu.DuongLayer = duongFeatureLayer;
            //evalu.ThuaLayer = thuaFeatureLayer;
            //evalu.EvaluateCalculating();
            //return;

            #endregion

            //[thaydoi] - cac may tinh khac chi can thay dieu kien truy van he so vi tri
            //******************************************************************
            #region lay cac quy tac tim vi tri

            //#region log---
            //evt.Log = string.Format("\n----Lấy các quy tắc tìm vị trí thửa từ bảng {0}, ứng với hệ số {1} ...", DataNameTemplate.He_So_K, TnHeSoK.DatOMtTtDt);
            //onCalculating(evt);
            //#endregion
            ////MessageBox.Show(String.Format("line 189 CalcThuaMattien, hsk={0}",TnHeSoK.DatOMtTtDt));
            //qrf.WhereClause = string.Format("{0}='{1}'", "hesovitri", TnHeSoK.DatOMtTtDt);
            //ICursor cur = tblHesoVitri.Search(qrf, false);
            //string quytac = "";
            //string cachtinh = "";
            //string cachtinhdongia = "";
            //try
            //{
            //    IRow row = cur.NextRow();
            //    if (row != null)
            //    {

            //        quytac = row.get_Value(_tblName.HESO_VITRI.GetIndex(_tblName.HESO_VITRI.QUY_TAC)).ToString();
            //        cachtinh = row.get_Value(_tblName.HESO_VITRI.GetIndex(_tblName.HESO_VITRI.CACH_TINH)).ToString();
            //        cachtinhdongia = row.get_Value(_tblName.HESO_VITRI.GetIndex(_tblName.HESO_VITRI.CACH_TINH_DON_GIA)).ToString();
            //        //MessageBox.Show(string.Format("line 198 CalcMatTien, quytac={0}", quytac));
            //    }
            //}
            //catch { }
            //finally
            //{
            //    Marshal.ReleaseComObject(cur);
            //}
            #endregion

            #region tinh theo xa
            if (this._inputParams.MA_XA != "-1")
            {
                //[kodoi]
                //=======================
                #region chon xa co ma dang xet
                //neu dang tinh cho 1 xa
                if (_inputParams.MA_XA != "*")
                {
                    qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_RANH_XA_POLY.MA_XA, _inputParams.MA_XA);
                }
                else//neu dang tinh cho toan huyen
                {
                    qrf.WhereClause = "";
                }
                ISelectionSet xaSelectionSet = xaFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionOnlyOne, sdeConn.Workspace);
                xaFeatureSelection = (IFeatureSelection)xaFeatureLayer;
                xaFeatureSelection.SelectionSet = xaSelectionSet;
                #endregion
                //=======================

                #region vong lap tung xa

                //[thaydoi] - co the them bien chay
                //*************************
                #region khoi dau
                IEnumIDs xaIds = xaSelectionSet.IDs;
                int xaId = 0;
                IFeature xaFt = null;
                List<object> lstMaDuong = new List<object>();
                #endregion
                //*************************

                while ((xaId = xaIds.Next()) != -1)
                {
                    //[kodoi]
                    //=======================
                    #region lay thong tin xa
                    xaFt = xaFeatureClass.GetFeature(xaId);
                    string maxa = xaFt.get_Value(xaFt.Fields.FindField(_fcName.FC_RANH_XA_POLY.MA_XA)).ToString();
                    string tenxa = xaFt.get_Value(xaFt.Fields.FindField(_fcName.FC_RANH_XA_POLY.TEN_XA)).ToString();
                    string loaixa = xaFt.get_Value(xaFt.Fields.FindField(_fcName.FC_RANH_XA_POLY.MA_LOAI_XA)).ToString();
                    #endregion

                    #region -----log
                    evt.Log = string.Format("\n************************************************");
                    evt.Log += string.Format("\n******   Đang tính cho xã/phường: {0}  ******", tenxa);
                    evt.Log += string.Format("\n************************************************");
                    onCalculating(evt);
                    #endregion

                    #region tim duong trong khu vuc do thi bang qua xa

                    //chon xa dang xet
                    qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_RANH_XA_POLY.OID, xaId);
                    xaSelectionSet = xaFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionOnlyOne, sdeConn.Workspace);
                    xaFeatureSelection = (IFeatureSelection)xaFeatureLayer;
                    xaFeatureSelection.SelectionSet = xaSelectionSet;
                    //Chon cac duong co do rong theo quy dinh
                    qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_DUONG.PHAN_LOAI, _isDothi);// "maduong='2'";
                    ISelectionSet duongSelectionSet = duongFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, sdeConn.Workspace);
                    duongFeatureSelection = (IFeatureSelection)duongFeatureLayer;
                    duongFeatureSelection.SelectionSet = duongSelectionSet;

                    //bat dau truy van khong gian
                    _qrBl.FromLayer = duongFeatureLayer;
                    _qrBl.ByLayer = xaFeatureLayer;
                    _qrBl.LayerSelectionMethod = esriLayerSelectionMethod.esriLayerSelectIntersect;
                    _qrBl.ResultType = esriSelectionResultEnum.esriSelectionResultAnd;
                    _qrBl.UseSelectedFeatures = true;

                    duongSelectionSet = _qrBl.Select();

                    #endregion
                    //=======================

                    #region vong lap xet tung duong

                    //[thaydoi] - co the them bien chay
                    //===============================
                    #region khoi dau
                    IEnumIDs eIds = duongSelectionSet.IDs;
                    int duongId;
                    IFeature ftDuong;
                    int iDuong = 0;
                    int progressingTotalCount = 1;
                    evt.Reset();
                    evt.ProgressingTotal = duongSelectionSet.Count;
                    onCalculating(evt);
                    //List<object> lstMaDuong = new List<object>();
                    #endregion
                    //================================

                    while ((duongId = eIds.Next()) != -1)
                    {
                        //[kodoi]
                        //======================
                        #region log-----
                        evt.Reset();
                        evt.ProgressingTotalCount = progressingTotalCount;
                        onCalculating(evt);
                        progressingTotalCount++;
                        #endregion
                        //======================

                        //[capnhat] - lay ten duong tu bang ten duong
                        //++++++++++++++++++++++++
                        #region lay thong tin cua duong dang xet

                        ftDuong = duongFeatureClass.GetFeature(duongId);
                        string tenduong = "";//ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.TEN_DUONG)).ToString();
                        object maduong = ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.MA_DUONG));
                        lstMaDuong.Add(maduong);
                        string batdau = "";// ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.BAT_DAU)).ToString();
                        string ketthuc = "";// ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.KET_THUC)).ToString();

                        #endregion
                        //++++++++++++++++++++++++

                        //[kodoi]
                        //Chon duong dang xet, buoc này de ra layer duong dung de truy van khong gian cac thua dat
                        //====================
                        #region chon duong dang xet
                        qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_DUONG.OID, duongId);
                        duongSelectionSet = duongFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionOnlyOne, sdeConn.Workspace);
                        duongFeatureSelection = (IFeatureSelection)duongFeatureLayer;

                        duongFeatureSelection.SelectionSet = duongSelectionSet;
                        #endregion
                        //====================

                        //tim cac thua theo dieu kien mat tien

                        //doc cach tim thua trong bang he so vi tri
                        //lay cach tim cho dat o
                        //truyen thong so cach tinh,thualayer,duonglayer,khoangcach

                        //MessageBox.Show(func);
                        //func = "ChongLop([INTERSECT],[NEW_SELECTION],1) Then ChongLop([CONTAINED_BY],[AND_SELECTION],50)";

                        //[kodoi]
                        //============================

                        #region chon hem chinh cua duong
                        qrf.WhereClause = string.Format("{0}='{1}' and ({2}='{3}' or {4} is null)", _fcName.FC_HEM.MA_DUONG, maduong, _fcName.FC_HEM.HEM_CHINH, 0, _fcName.FC_HEM.HEM_CHINH);
                        ISelectionSet hemChinhSelectionSet = hemFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, sdeConn.Workspace);
                        hemChinhFeatureSelection = (IFeatureSelection)hemChinhFeatureLayer;
                        hemChinhFeatureSelection.SelectionSet = hemChinhSelectionSet;

                        #endregion

                        #region clip cac hem vua tim duoc

                        #region delete bang hem_sau100m_clip
                        IFeatureClass hemClipFc = null;
                        #region log---
                        evt.Log = string.Format("\n----Kiểm tra, xóa bảng {0} ...", hemErase200mCoSde);
                        onCalculating(evt);
                        #endregion

                        //if (_dataManager.LayerExist(hemErase200mNoSde))
                        //{
                        //thuaClipFc = fw.OpenFeatureClass("sde.thua_sau50m_clip");
                        //mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                        //wspEdit.StartEditing(false);
                        //wspEdit.StartEditOperation();
                        try
                        {
                            ((IFeatureClassManager)_dataManager).DeleteFcInSde(hemErase200mCoSde);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("line 924 CalGiaHemTren200,ex=" + ex.ToString());
                        }
                        //((IDataset)thuaClipFc).Delete();
                        //wspEdit.StopEditOperation();
                        //wspEdit.StopEditing(true);
                        //}
                        #endregion

                        #region chon duong buffer 100 dang xet
                        qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_DUONG.OID, duongId);
                        duongBuff200Sls = duongBuff200FeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionOnlyOne, sdeConn.Workspace);
                        duongBuff200Fsls = (IFeatureSelection)duongBuff200FeatureLayer;
                        duongBuff200Fsls.SelectionSet = duongBuff200Sls;
                        #endregion

                        #region chon hem nam trong vung buffer 200m nhưng khong nam trong vùng buffer 100m
                        _qrBl.FromLayer = hemChinhFeatureLayer;
                        _qrBl.ByLayer = duongFeatureLayer;
                        _qrBl.LayerSelectionMethod = esriLayerSelectionMethod.esriLayerSelectContainedBy;
                        _qrBl.ResultType = esriSelectionResultEnum.esriSelectionResultSubtract;
                        _qrBl.UseSelectedFeatures = true;
                        _qrBl.BufferDistance = 200;
                        try
                        {
                            hemChinhSelectionSet = _qrBl.Select();
                            hemChinhFeatureSelection = (IFeatureSelection)hemChinhFeatureLayer;
                            hemChinhFeatureSelection.SelectionSet = hemChinhSelectionSet;
                        }
                        catch
                        { continue; }

                        if (!(hemChinhSelectionSet.Count > 0))
                        {
                            continue;
                        }
                        #endregion

                        #region log---
                        evt.Log = string.Format("\n----Kiểm tra, clip hẻm theo đường buffer {0}m, lưu vào bảng {1} ...", _currentConfig.DKhoangCach50mMatTien, hemErase200mCoSde);
                        onCalculating(evt);
                        #endregion

                        string hemlyr = string.Format("{0}/{1}", _sysTempPath.TempPath, hemErase200mNoSde);
                        string duonglyr = string.Format("{0}/{1}", _sysTempPath.TempPath, duongBuffer200mNoSde);
                        _eraseTool.EraseByLayerFileInsideSde(hemChinhFeatureLayer, hemlyr, duongBuff200FeatureLayer, duonglyr, hemErase200mNoSde);
                        try
                        {
                            hemClipFc = fw.OpenFeatureClass(hemErase200mCoSde);
                        }
                        catch (Exception ex) { continue; }
                        _version.RegisterDataset((IDataset)hemClipFc, true, true);
                        #endregion

                        #region xet tung hem da clip

                        //[thaydoi] - co the them bien chay
                        //********************
                        #region khoi dau
                        //IFeatureCursor hemErCur = hemClipFc.Search(null, false);

                        IEnumIDs hemChinhIds = hemChinhSelectionSet.IDs;
                        int hemChinhId;
                        IFeature hemChinhFt;
                        int iHem = 0;
                        List<object[,]> pairColValTgd = new List<object[,]>();
                        int rowTgdNnHandleUpdate = 0;
                        List<object> newId = new List<object>();
                        #endregion
                        try
                        {
                            while ((hemChinhId = hemChinhIds.Next()) != -1)
                            {
                                //he so vi tri hem ung voi doan sau <100m
                                int hesoVitri = 3;
                                #region lay thong tin hem dang xet

                                //[kodoi]
                                //============================
                                #region lay thong tin co ban
                                hemChinhFt = hemFeatureClass.GetFeature(hemChinhId);
                                //hemErId = hemErFt.OID;
                                object maHem = hemChinhFt.get_Value(hemChinhFt.Fields.FindField(_fcName.FC_HEM.MA_HEM));

                                #endregion

                                #endregion

                                #region kiem tra trong bang giadat_hem, voi dieu kien:mahem,hesovitri,khoagia=0
                                evt.Reset();
                                evt.Log = "\n[!]--- Kiểm tra các hẻm đã có giá, cập nhật giá mới ...";
                                onCalculating(evt);
                                qrf.WhereClause = string.Format("({0}='{1}' or {2} is null) and {3}='{4}' and {5}='{6}'",
                                    _fcName.FC_GIA_DAT_HEM.LOCKED, 0, _fcName.FC_GIA_DAT_HEM.LOCKED,
                                    _fcName.FC_GIA_DAT_HEM.MA_HEM, maHem,
                                    _fcName.FC_GIA_DAT_HEM.HE_SO, hesoVitri);
                                IFeatureCursor gdhChinhFcs = gdhChinhFeatureClass.Search(qrf, false);
                                IFeature gdhChinhFt = null;

                                try
                                {
                                    gdhChinhFt = gdhChinhFcs.NextFeature();//dam bao la chi co 1 hang ket qua
                                    if (gdhChinhFt != null)
                                    {
                                        //MessageBox.Show("co");
                                        //kiem tra co cho phep tinh lai vi tri
                                        //neu co:xoa feater cu,them feature moi
                                        #region xet thua da co vi tri

                                        bool isOverWritePos = true;

                                        if (!isOverWritePos)
                                        {
                                            newId.Add(gdhChinhFt.OID);
                                            //continue;
                                        }
                                        else
                                        {
                                            //[kodoi]
                                            //===================
                                            #region xoa feature cu
                                            if (mwspEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned))
                                            {
                                                mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                                            }
                                            else
                                            {
                                                wspEdit.StartEditing(true);
                                            }
                                            wspEdit.StartEditOperation();
                                            //qrf.WhereClause = string.Format("{0}='{1}'", "OBJECTID", tgdRow.OID);
                                            //tblThuaGiaDat.DeleteSearchedRows(qrf);
                                            gdhChinhFt.Delete();
                                            wspEdit.StopEditOperation();
                                            wspEdit.StopEditing(true);
                                            #endregion
                                            //===================
                                            #region chon trong bang thua clip
                                            qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_HEM.MA_HEM, maHem);
                                            IFeatureCursor hemClipFcur = hemClipFc.Search(qrf, false);
                                            IFeature hemErFt = null;
                                            try
                                            {
                                                hemErFt = hemClipFcur.NextFeature();
                                                if (hemErFt == null)
                                                {
                                                    continue;
                                                }
                                            }
                                            catch (Exception ex) { return; }
                                            finally { Marshal.ReleaseComObject(hemClipFcur); }

                                            #region lay thong tin thua clip
                                            //IArea area = (IArea)hemClipFt.Shape;
                                            #endregion

                                            #endregion
                                            //[thaydoi] - them gia tri
                                            //**********************
                                            #region them feature moi
                                            if (mwspEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned))
                                            {
                                                mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                                            }
                                            else
                                            {
                                                wspEdit.StartEditing(true);
                                            }
                                            wspEdit.StartEditOperation();
                                            object copiedId = copyTool.Copy(hemErFt, gdhChinhFeatureClass);
                                            try
                                            {
                                                wspEdit.StopEditOperation();
                                                wspEdit.StopEditing(true);
                                            }
                                            catch (Exception ex)
                                            {
                                                MessageBox.Show("line 1292 CalcGiaHemChinh ex=" + ex.ToString());
                                                wspEdit.StopEditOperation();
                                                wspEdit.StopEditing(false);
                                            }

                                            //them gia tri mathua,maduong,hesovitri
                                            pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.MA_HEM), maHem } });
                                            pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.MA_DUONG), maduong } });
                                            pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.LOCKED), 0 } });
                                            pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.HE_SO), hesoVitri } });
                                            //MessageBox.Show(string.Format("line 1062 CalcGiaHemChinh mahem={0},maduong={1}", maHem, maduong));
                                            sdeTblGdhEditor.CacheData(copiedId, rowTgdNnHandleUpdate, pairColValTgd, EnumTypeOfEdit.UPDATE);
                                            rowTgdNnHandleUpdate++;
                                            pairColValTgd.Clear();
                                            //MessageBox.Show("line 1066 CalcGiaHemChinh copyid=" + copiedId);
                                            newId.Add(copiedId);
                                            #endregion
                                            //**********************
                                        }

                                        #endregion

                                    }
                                    else
                                    {
                                        //MessageBox.Show("ko co");
                                        //[thaydoi] - them cac gia tri thich hop vao thua_giadat
                                        //***********************************
                                        #region chon trong bang thua clip
                                        qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_HEM.MA_HEM, maHem);
                                        //MessageBox.Show("line 1322 CalcGiaHemChinh, mahem=" + maHem);
                                        IFeatureCursor hemClipFcur = hemClipFc.Search(qrf, false);
                                        IFeature hemErFt = null;
                                        try
                                        {
                                            hemErFt = hemClipFcur.NextFeature();
                                            if (hemErFt == null)
                                            {
                                                continue;
                                            }
                                        }
                                        catch (Exception ex) { return; }
                                        finally { Marshal.ReleaseComObject(hemClipFcur); }

                                        #region lay thong tin thua clip
                                        //IArea area = (IArea)hemClipFt.Shape;
                                        #endregion

                                        #endregion
                                        #region them feature moi
                                        if (mwspEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned))
                                        {
                                            mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                                        }
                                        else
                                        {
                                            wspEdit.StartEditing(true);
                                        }
                                        wspEdit.StartEditOperation();
                                        object copiedId = copyTool.Copy(hemErFt, gdhChinhFeatureClass);
                                        try
                                        {
                                            wspEdit.StopEditOperation();
                                            wspEdit.StopEditing(true);
                                        }
                                        catch (Exception ex)
                                        {
                                            MessageBox.Show("line 1355 CalcGiaHemChinh ex=" + ex.ToString());
                                            wspEdit.StopEditOperation();
                                            wspEdit.StopEditing(false);
                                        }

                                        //them gia tri mathua,maduong,hesovitri
                                        pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.MA_HEM), maHem } });
                                        pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.MA_DUONG), maduong } });
                                        pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.HE_SO), hesoVitri } });
                                        pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.LOCKED), 0 } });
                                        //MessageBox.Show(string.Format("line 1125 CalcGiaHemChinh mahem={0},maduong={1}",maHem,maduong));
                                        sdeTblGdhEditor.CacheData(copiedId, rowTgdNnHandleUpdate, pairColValTgd, EnumTypeOfEdit.UPDATE);
                                        rowTgdNnHandleUpdate++;
                                        pairColValTgd.Clear();
                                        //MessageBox.Show("line 1129 CalcGiaHemChinh copyid=" + copiedId);
                                        newId.Add(copiedId);

                                        #endregion
                                        //***********************************
                                    }
                                    //MessageBox.Show(newId.Count.ToString());
                                }
                                catch (Exception e1)
                                {
                                    MessageBox.Show(string.Format("CalcGiaHemChinh, line 1448-\n{0}", e1));
                                }
                                finally { Marshal.ReleaseComObject(gdhChinhFcs); }

                                #endregion
                            }
                        }
                        catch (Exception ex) { }
                        //finally { Marshal.ReleaseComObject(hemErCur); }

                        #endregion

                        //[kodoi]
                        //============================
                        #region luu thong tin vao bang gia dat
                        if (!sdeTblGdhEditor.IsEditing())
                        {
                            sdeTblGdhEditor.StartEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                            sdeTblGdhEditor.StartEditOperation();
                        }

                        #region ----log
                        evt.Log = string.Format("\n----||| Đang lưu vị trí các thửa vào bảng {0} |||---- ", gdhChinhFeatureClass.AliasName);
                        onCalculating(evt);
                        #endregion
                        try
                        {
                            sdeTblGdhEditor.SaveEdit();
                            sdeTblGdhEditor.StopEditOperation();
                            sdeTblGdhEditor.StopEditing(true);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("line 1405 CalcGiaHemChinh ex=" + ex.ToString());
                            sdeTblGdhEditor.StopEditOperation();
                            sdeTblGdhEditor.StopEditing(false);
                        }

                        #region ----log
                        evt.Log = string.Format("\n----||| Đã lưu vị trí các thửa vào bảng {0} |||---- ", gdhChinhFeatureClass.AliasName);
                        onCalculating(evt);
                        #endregion

                        #endregion

                        #region tinh gia dat cho cac hem vua them vi tri
                        CalcLandprice calc = new CalcLandprice(this);
                        //MessageBox.Show(string.Format("final:{0}", newId.Count));

                        calc.CalcGiaHem(newId);
                        newId.Clear();
                        #endregion
                        //============================

                    }
                    #endregion

                }
                #endregion
            }
            #endregion
            //=====================================================================
            //=====================================================================
            #region tinh theo duong,doan duong

            else
            {
                #region timduong co ten dang xet
                //tinh theo doan duong
                #region tinh theo doan duong
                if (_inputParams.MA_DUONG != "-1")
                {
                    qrf.WhereClause = string.Format("{0}={1} and {2}={3}", _fcName.FC_DUONG.MA_DUONG, _inputParams.MA_DUONG, _fcName.FC_DUONG.PHAN_LOAI, _isDothi);// "maduong='2'";

                    #region ----log
                    evt.Log = string.Format("\n************************************************");
                    evt.Log += string.Format("\n******   Đang tính cho đoạn đường có mã: {0}  ******", _inputParams.MA_DUONG);
                    evt.Log += string.Format("\n************************************************");
                    onCalculating(evt);
                    #endregion
                }
                #endregion
                //tinh cho 1 duong
                #region tinh cho 1 duong
                else if (_inputParams.TEN_DUONG != "" && _inputParams.TEN_DUONG != "*")
                {
                    //phai sua lai thiet ke
                    //dung relationshipclass many to many gia duong va ten duong
                    #region tim trong bang ten duong
                    qrf.WhereClause = string.Format("{0}=N'{1}'", _tblName.TEN_DUONG.TEN_DUONG, _inputParams.TEN_DUONG);
                    ICursor tenduongCur = tblTenDuong.Search(qrf, false);
                    object idDuong;
                    List<object> lstIdDuong = new List<object>();
                    try
                    {
                        IRow tenduongRow = null;
                        while ((tenduongRow = tenduongCur.NextRow()) != null)
                        {
                            idDuong = tenduongRow.get_Value(tenduongRow.Fields.FindField(_tblName.TEN_DUONG.MA_DUONG));
                            lstIdDuong.Add(idDuong);
                        }
                    }
                    catch
                    { }
                    finally { Marshal.ReleaseComObject(tenduongCur); }
                    #endregion

                    #region tim trong bang duong
                    string q = "";
                    for (int i = 0; i < lstIdDuong.Count; i++)
                    {
                        if (i == lstIdDuong.Count - 1)
                        {
                            q += string.Format("{0}='{1}'", _fcName.FC_DUONG.MA_DUONG, lstIdDuong[i]);
                        }
                        else
                        {
                            q += string.Format("{0}='{1}' or ", _fcName.FC_DUONG.MA_DUONG, lstIdDuong[i]);
                        }
                    }
                    qrf.WhereClause = q;// "maduong='2'";

                    #region ----log
                    evt.Log = string.Format("\n************************************************");
                    evt.Log += string.Format("\n******   Đang tính cho cả đường: {0}  ******", _inputParams.TEN_DUONG);
                    evt.Log += string.Format("\n************************************************");
                    onCalculating(evt);
                    #endregion
                    #endregion
                }
                #endregion
                //tinh cho ca duong
                else
                {
                    qrf.WhereClause = "";
                }
                //MessageBox.Show(string.Format("whereclause:{0}",duong.QueryFilter.WhereClause));
                ISelectionSet duongSelectionSet = duongFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, sdeConn.Workspace);

                if (duongSelectionSet.Count == 0)
                {
                    return;
                }
                duongFeatureSelection = (IFeatureSelection)duongFeatureLayer;
                duongFeatureSelection.SelectionSet = duongSelectionSet;

                #endregion

                #region vong lap xet tung duong

                //[thaydoi] - co the them bien chay
                //===============================
                #region khoi dau
                IEnumIDs eIds = duongSelectionSet.IDs;
                int duongId;
                IFeature ftDuong;
                int iDuong = 0;
                int progressingTotalCount = 1;
                evt.Reset();
                evt.ProgressingTotal = duongSelectionSet.Count;
                onCalculating(evt);
                List<object> lstMaDuong = new List<object>();
                #endregion
                //================================

                while ((duongId = eIds.Next()) != -1)
                {
                    //[kodoi]
                    //======================
                    #region log-----
                    evt.Reset();
                    evt.ProgressingTotalCount = progressingTotalCount;
                    onCalculating(evt);
                    progressingTotalCount++;
                    #endregion
                    //======================

                    //[capnhat] - lay ten duong tu bang ten duong
                    //++++++++++++++++++++++++
                    #region lay thong tin cua duong dang xet

                    ftDuong = duongFeatureClass.GetFeature(duongId);
                    string tenduong = "";//ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.TEN_DUONG)).ToString();
                    object maduong = ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.MA_DUONG));
                    lstMaDuong.Add(maduong);
                    string batdau = "";// ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.BAT_DAU)).ToString();
                    string ketthuc = "";// ftDuong.get_Value(_fcName.FC_DUONG.GetIndex(_fcName.FC_DUONG.KET_THUC)).ToString();

                    #endregion
                    //++++++++++++++++++++++++

                    //[kodoi]
                    //Chon duong dang xet, buoc này de ra layer duong dung de truy van khong gian cac thua dat
                    //====================
                    #region chon duong dang xet
                    qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_DUONG.OID, duongId);
                    duongSelectionSet = duongFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionOnlyOne, sdeConn.Workspace);
                    duongFeatureSelection = (IFeatureSelection)duongFeatureLayer;

                    duongFeatureSelection.SelectionSet = duongSelectionSet;
                    #endregion
                    //====================

                    //tim cac thua theo dieu kien mat tien

                    //doc cach tim thua trong bang he so vi tri
                    //lay cach tim cho dat o
                    //truyen thong so cach tinh,thualayer,duonglayer,khoangcach

                    //MessageBox.Show(func);
                    //func = "ChongLop([INTERSECT],[NEW_SELECTION],1) Then ChongLop([CONTAINED_BY],[AND_SELECTION],50)";

                    //[kodoi]
                    //============================

                    #region chon hem chinh cua duong
                    qrf.WhereClause = string.Format("{0}='{1}' and ({2}='{3}' or {4} is null)", _fcName.FC_HEM.MA_DUONG, maduong, _fcName.FC_HEM.HEM_CHINH, 0, _fcName.FC_HEM.HEM_CHINH);
                    ISelectionSet hemChinhSelectionSet = hemFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, sdeConn.Workspace);
                    hemChinhFeatureSelection = (IFeatureSelection)hemChinhFeatureLayer;
                    hemChinhFeatureSelection.SelectionSet = hemChinhSelectionSet;

                    #endregion

                    #region clip cac hem vua tim duoc

                    #region delete bang hem_sau100m_clip
                    IFeatureClass hemClipFc = null;
                    #region log---
                    evt.Log = string.Format("\n----Kiểm tra, xóa bảng {0} ...", hemErase200mCoSde);
                    onCalculating(evt);
                    #endregion

                    //if (_dataManager.LayerExist(hemErase200mNoSde))
                    //{
                        //thuaClipFc = fw.OpenFeatureClass("sde.thua_sau50m_clip");
                        //mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                        //wspEdit.StartEditing(false);
                        //wspEdit.StartEditOperation();
                        try
                        {
                            ((IFeatureClassManager)_dataManager).DeleteFcInSde(hemErase200mCoSde);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("line 924 CalGiaHemTren200,ex=" + ex.ToString());
                        }
                        //((IDataset)thuaClipFc).Delete();
                        //wspEdit.StopEditOperation();
                        //wspEdit.StopEditing(true);
                    //}
                    #endregion

                    #region chon duong buffer 100 dang xet
                    qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_DUONG.OID, duongId);
                    duongBuff200Sls = duongBuff200FeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionOnlyOne, sdeConn.Workspace);
                    duongBuff200Fsls = (IFeatureSelection)duongBuff200FeatureLayer;
                    duongBuff200Fsls.SelectionSet = duongBuff200Sls;
                    #endregion

                    #region chon hem nam trong vung buffer 200m nhưng khong nam trong vùng buffer 100m
                    _qrBl.FromLayer = hemChinhFeatureLayer;
                    _qrBl.ByLayer = duongFeatureLayer;
                    _qrBl.LayerSelectionMethod = esriLayerSelectionMethod.esriLayerSelectContainedBy;
                    _qrBl.ResultType = esriSelectionResultEnum.esriSelectionResultSubtract;
                    _qrBl.UseSelectedFeatures = true;
                    _qrBl.BufferDistance = 200;
                    try
                    {
                        hemChinhSelectionSet = _qrBl.Select();
                        hemChinhFeatureSelection = (IFeatureSelection)hemChinhFeatureLayer;
                        hemChinhFeatureSelection.SelectionSet = hemChinhSelectionSet;
                    }
                    catch
                    { continue; }

                    if (!(hemChinhSelectionSet.Count > 0))
                    {
                        continue;
                    }
                    #endregion

                    #region log---
                    evt.Log = string.Format("\n----Kiểm tra, clip hẻm theo đường buffer {0}m, lưu vào bảng {1} ...", _currentConfig.DKhoangCach50mMatTien, hemErase200mCoSde);
                    onCalculating(evt);
                    #endregion

                    string hemlyr = string.Format("{0}/{1}", _sysTempPath.TempPath, hemErase200mNoSde);
                    string duonglyr = string.Format("{0}/{1}", _sysTempPath.TempPath, duongBuffer200mNoSde);
                    _eraseTool.EraseByLayerFileInsideSde(hemChinhFeatureLayer, hemlyr, duongBuff200FeatureLayer, duonglyr, hemErase200mNoSde);
                    try
                    {
                        hemClipFc = fw.OpenFeatureClass(hemErase200mCoSde);
                    }
                    catch (Exception ex) { continue; }
                    _version.RegisterDataset((IDataset)hemClipFc, true, true);
                    #endregion

                    #region xet tung hem da clip

                    //[thaydoi] - co the them bien chay
                    //********************
                    #region khoi dau
                    //IFeatureCursor hemErCur = hemClipFc.Search(null, false);

                    IEnumIDs hemChinhIds = hemChinhSelectionSet.IDs;
                    int hemChinhId;
                    IFeature hemChinhFt;
                    int iHem = 0;
                    List<object[,]> pairColValTgd = new List<object[,]>();
                    int rowTgdNnHandleUpdate = 0;
                    List<object> newId = new List<object>();
                    #endregion
                    try
                    {
                        while ((hemChinhId = hemChinhIds.Next()) != -1)
                        {
                            //he so vi tri hem ung voi doan sau <100m
                            int hesoVitri = 3;
                            #region lay thong tin hem dang xet

                            //[kodoi]
                            //============================
                            #region lay thong tin co ban
                            hemChinhFt = hemFeatureClass.GetFeature(hemChinhId);
                            //hemErId = hemErFt.OID;
                            object maHem = hemChinhFt.get_Value(hemChinhFt.Fields.FindField(_fcName.FC_HEM.MA_HEM));

                            #endregion

                            #endregion

                            #region kiem tra trong bang giadat_hem, voi dieu kien:mahem,hesovitri,khoagia=0
                            evt.Reset();
                            evt.Log = "\n[!]--- Kiểm tra các hẻm đã có giá, cập nhật giá mới ...";
                            onCalculating(evt);
                            qrf.WhereClause = string.Format("({0}='{1}' or {2} is null) and {3}='{4}' and {5}='{6}'",
                                _fcName.FC_GIA_DAT_HEM.LOCKED, 0, _fcName.FC_GIA_DAT_HEM.LOCKED,
                                _fcName.FC_GIA_DAT_HEM.MA_HEM, maHem,
                                _fcName.FC_GIA_DAT_HEM.HE_SO, hesoVitri);
                            IFeatureCursor gdhChinhFcs = gdhChinhFeatureClass.Search(qrf, false);
                            IFeature gdhChinhFt = null;

                            try
                            {
                                gdhChinhFt = gdhChinhFcs.NextFeature();//dam bao la chi co 1 hang ket qua
                                if (gdhChinhFt != null)
                                {
                                    //MessageBox.Show("co");
                                    //kiem tra co cho phep tinh lai vi tri
                                    //neu co:xoa feater cu,them feature moi
                                    #region xet thua da co vi tri

                                    bool isOverWritePos = true;

                                    if (!isOverWritePos)
                                    {
                                        newId.Add(gdhChinhFt.OID);
                                        //continue;
                                    }
                                    else
                                    {
                                        //[kodoi]
                                        //===================
                                        #region xoa feature cu
                                        if (mwspEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned))
                                        {
                                            mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                                        }
                                        else
                                        {
                                            wspEdit.StartEditing(true);
                                        }
                                        wspEdit.StartEditOperation();
                                        //qrf.WhereClause = string.Format("{0}='{1}'", "OBJECTID", tgdRow.OID);
                                        //tblThuaGiaDat.DeleteSearchedRows(qrf);
                                        gdhChinhFt.Delete();
                                        wspEdit.StopEditOperation();
                                        wspEdit.StopEditing(true);
                                        #endregion
                                        //===================
                                        #region chon trong bang thua clip
                                        qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_HEM.MA_HEM, maHem);
                                        IFeatureCursor hemClipFcur = hemClipFc.Search(qrf, false);
                                        IFeature hemErFt = null;
                                        try
                                        {
                                            hemErFt = hemClipFcur.NextFeature();
                                            //MessageBox.Show("line 1058 CalcGiaHemTren200, id="+hemErFt.get_Value(0));
                                            if (hemErFt == null)
                                            {
                                                continue;
                                            }
                                        }
                                        catch (Exception ex) { continue; }
                                        finally { Marshal.ReleaseComObject(hemClipFcur); }

                                        #region lay thong tin thua clip
                                        //IArea area = (IArea)hemClipFt.Shape;
                                        #endregion

                                        #endregion
                                        //[thaydoi] - them gia tri
                                        //**********************
                                        #region them feature moi
                                        if (mwspEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned))
                                        {
                                            mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                                        }
                                        else
                                        {
                                            wspEdit.StartEditing(true);
                                        }
                                        wspEdit.StartEditOperation();
                                        object copiedId = copyTool.Copy(hemErFt, gdhChinhFeatureClass);
                                        try
                                        {
                                            wspEdit.StopEditOperation();
                                            wspEdit.StopEditing(true);
                                        }
                                        catch (Exception ex)
                                        {
                                            MessageBox.Show("line 1292 CalcGiaHemChinh ex=" + ex.ToString());
                                            wspEdit.StopEditOperation();
                                            wspEdit.StopEditing(false);
                                        }

                                        //them gia tri mathua,maduong,hesovitri
                                        pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.MA_HEM), maHem } });
                                        pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.MA_DUONG), maduong } });
                                        pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.LOCKED), 0 } });
                                        pairColValTgd.Add(new object[,] { { gdhChinhFt.Fields.FindField(_fcName.FC_GIA_DAT_HEM.HE_SO), hesoVitri } });
                                        //MessageBox.Show(string.Format("line 1062 CalcGiaHemChinh mahem={0},maduong={1}", maHem, maduong));
                                        sdeTblGdhEditor.CacheData(copiedId, rowTgdNnHandleUpdate, pairColValTgd, EnumTypeOfEdit.UPDATE);
                                        rowTgdNnHandleUpdate++;
                                        pairColValTgd.Clear();
                                        //MessageBox.Show("line 1066 CalcGiaHemChinh copyid=" + copiedId);
                                        newId.Add(copiedId);
                                        #endregion
                                        //**********************
                                    }

                                    #endregion

                                }
                                else
                                {
                                    //MessageBox.Show("ko co");
                                    //[thaydoi] - them cac gia tri thich hop vao thua_giadat
                                    //***********************************
                                    #region chon trong bang thua clip
                                    qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_HEM.MA_HEM, maHem);
                                    //MessageBox.Show("line 1322 CalcGiaHemChinh, mahem=" + maHem);
                                    IFeatureCursor hemClipFcur = hemClipFc.Search(qrf, false);
                                    IFeature hemErFt = null;
                                    try
                                    {
                                        hemErFt = hemClipFcur.NextFeature();
                                        if (hemErFt == null)
                                        {
                                            continue;
                                        }
                                    }
                                    catch (Exception ex) { return; }
                                    finally { Marshal.ReleaseComObject(hemClipFcur); }

                                    #region lay thong tin thua clip
                                    //IArea area = (IArea)hemClipFt.Shape;
                                    #endregion

                                    #endregion
                                    #region them feature moi
                                    if (mwspEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned))
                                    {
                                        mwspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                                    }
                                    else
                                    {
                                        wspEdit.StartEditing(true);
                                    }
                                    wspEdit.StartEditOperation();
                                    object copiedId = copyTool.Copy(hemErFt, gdhChinhFeatureClass);
                                    try
                                    {
                                        wspEdit.StopEditOperation();
                                        wspEdit.StopEditing(true);
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show("line 1355 CalcGiaHemChinh ex=" + ex.ToString());
                                        wspEdit.StopEditOperation();
                                        wspEdit.StopEditing(false);
                                    }

                                    //them gia tri mathua,maduong,hesovitri
                                    pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.MA_HEM), maHem } });
                                    pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.MA_DUONG), maduong } });
                                    pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.HE_SO), hesoVitri } });
                                    pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.LOCKED), 0 } });
                                    //MessageBox.Show(string.Format("line 1125 CalcGiaHemChinh mahem={0},maduong={1}",maHem,maduong));
                                    sdeTblGdhEditor.CacheData(copiedId, rowTgdNnHandleUpdate, pairColValTgd, EnumTypeOfEdit.UPDATE);
                                    rowTgdNnHandleUpdate++;
                                    pairColValTgd.Clear();
                                    //MessageBox.Show("line 1129 CalcGiaHemChinh copyid=" + copiedId);
                                    newId.Add(copiedId);

                                    #endregion
                                    //***********************************
                                }
                                //MessageBox.Show(newId.Count.ToString());
                            }
                            catch (Exception e1)
                            {
                                MessageBox.Show(string.Format("CalcGiaHemChinh, line 1448-\n{0}", e1));
                            }
                            finally { Marshal.ReleaseComObject(gdhChinhFcs); }

                            #endregion
                        }
                    }
                    catch (Exception ex) { }
                    //finally { Marshal.ReleaseComObject(hemErCur); }

                    #endregion

                    //[kodoi]
                    //============================
                    #region luu thong tin vao bang gia dat
                    if (!sdeTblGdhEditor.IsEditing())
                    {
                        sdeTblGdhEditor.StartEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                        sdeTblGdhEditor.StartEditOperation();
                    }

                    #region ----log
                    evt.Log = string.Format("\n----||| Đang lưu vị trí các thửa vào bảng {0} |||---- ", gdhChinhFeatureClass.AliasName);
                    onCalculating(evt);
                    #endregion
                    try
                    {
                        sdeTblGdhEditor.SaveEdit();
                        sdeTblGdhEditor.StopEditOperation();
                        sdeTblGdhEditor.StopEditing(true);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("line 1405 CalcGiaHemChinh ex=" + ex.ToString());
                        sdeTblGdhEditor.StopEditOperation();
                        sdeTblGdhEditor.StopEditing(false);
                    }

                    #region ----log
                    evt.Log = string.Format("\n----||| Đã lưu vị trí các thửa vào bảng {0} |||---- ", gdhChinhFeatureClass.AliasName);
                    onCalculating(evt);
                    #endregion

                    #endregion

                    #region tinh gia dat cho cac hem vua them vi tri
                    CalcLandprice calc = new CalcLandprice(this);
                    //MessageBox.Show(string.Format("final:{0}", newId.Count));

                    calc.CalcGiaHem(newId);
                    newId.Clear();
                    #endregion
                    //============================

                }
                #endregion
            }
            #endregion

            #endregion

            //===========================================
            //===========================================
            //*******************************************

            //[kodoi]
            //==============
            #region doan ket
            sothuatinhduoc = sothuatimthay - sothuaKhongTinhDuoc;

            #region ----log
            evt.Log = string.Format("\n\n**************************************\n******* Đã tính xong các thửa phi nông nghiệp tại đô thị vị trí mặt tiền*******\n**********************************");
            //evt.Log += string.Format("\n Số thửa tìm thấy: {0}", sothuatimthay);
            //evt.Log += string.Format("\n Số thửa được tính: {0}", sothuatinhduoc);
            onCalculating(evt);
            #endregion
            evt.Reset();
            evt.ProgressingTotalCount = ".";
            evt.ProgressingTotal = ".";
            onCalculating(evt);
            evt.CurrentIndexCalculator = this._index;
            onFinished(evt);
            #endregion
            //==============
        }