年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1179 lines
60 KiB

using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Helper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using KUI.Windows;
using KGIS.Framework.Platform;
using KGIS.Framework.Maps;
using Kingo.PluginServiceInterface;
using System.IO;
using KGIS.Framework.DBOperator;
using Aspose.Cells;
using System.Data;
using KGIS.Framework.Utils.ExtensionMethod;
using Kingo.Plugin.BGResultManager.Model;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Carto;
using System.Runtime.InteropServices;
using KGIS.Framework.AE.GPHelper;
using KGIS.Framework.AE.ExtensionMethod;
using KGIS.Framework.AE;
using Path = System.IO.Path;
using KGIS.Framework.AE.Enum;
using KGIS.Framework.OpenData.Control;
using KGIS.Framework.OpenData.InterFace;
using KGIS.Framework.OpenData.Filter;
using Kingo.OpenData.Filter;
using IRDBHelper = KGIS.Framework.DBOperator.IRDBHelper;
namespace Kingo.Plugin.BGResultManager.View
{
/// <summary>
/// 年初末库报表汇总 的交互逻辑
/// </summary>
public partial class FrmNCMKHZExport : BaseWindow
{
private ProjectInfo projectInfo = null;
/// <summary>
/// 地类图斑年末库
/// </summary>
private IFeatureLayer m_DLTBLayer = null;
/// <summary>
/// 城镇村年末库
/// </summary>
private IFeatureLayer m_CZCDYDLayer = null;
private string ImportDataType = string.Empty;
private string s_SelPath = string.Empty;
private IWorkspaceAPI s_WsAPI = null;
public FrmNCMKHZExport()
{
InitializeComponent();
InitViewDisPaly();
}
public void InitViewDisPaly()
{
if (rbNOWNMK.IsChecked == true)
{
SelNMKPath.IsEnabled = false;
}
else
{
SelNMKPath.IsEnabled = true;
}
}
/// <summary>
/// 报表导出执行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnTBTQ_Click(object sender, RoutedEventArgs e)
{
double LDKZMJ = 0;
double HDKZMJ = 0;
projectInfo = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo);
if (projectInfo != null && projectInfo.CODE == null)
{
MessageHelper.ShowTips("工程信息中区划代码未配置,无法输出报表!");
return;
}
if (rbECTNMK.IsChecked == true)
{ //其他年末库报表
if (string.IsNullOrWhiteSpace(s_SelPath)) return;
if (ImportDataType == "MDB")
{
s_WsAPI = new WorkspaceAPI(s_SelPath, WorkspaceTypeEnum.MDBFile);
}
else
{
s_WsAPI = new WorkspaceAPI(s_SelPath, WorkspaceTypeEnum.GDBFile);
}
//源数据获取图层
if (s_WsAPI == null) return;//源数据不能为空
if (s_WsAPI.ExistFeatureClass("DLTB"))
{
m_DLTBLayer = new FeatureLayer { FeatureClass = s_WsAPI.OpenFeatureClass("DLTB").FeatureClass };
}
if (s_WsAPI.ExistFeatureClass("CZCDYD"))
{
m_CZCDYDLayer = new FeatureLayer { FeatureClass = s_WsAPI.OpenFeatureClass("CZCDYD").FeatureClass };
}
}
else
{ //当前年初库报表
m_DLTBLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑");
m_CZCDYDLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("CZCDYD");
//LDKZMJ = projectInfo.DCMJ2; //HDKZMJ = projectInfo.DCMJHD2;
}
try
{
if (m_DLTBLayer == null || m_CZCDYDLayer == null)
{
MessageHelper.ShowTips("获取年末库基础数据失败!");
return;
}
LDKZMJ = double.TryParse(LDMJTex.Text.ToTrim(), out double resultMJ) ? resultMJ : 0;
HDKZMJ = double.TryParse(HDMJTex.Text.ToTrim(), out resultMJ) ? resultMJ : 0;
if (LDKZMJ == 0 && HDKZMJ == 0)
{
if (MessageHelper.ShowYesNoAndTips("控制面积存在都为0的情况,是否继续执行?") != System.Windows.Forms.DialogResult.Yes)
return;
}
string OutPath = string.Empty;
System.Windows.Forms.SaveFileDialog dialog = new System.Windows.Forms.SaveFileDialog();
//dialog.Filter = "Excel文件|*.xlsx";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
OutPath = dialog.FileName;
}
if (!Directory.Exists(OutPath))
{
if (string.IsNullOrWhiteSpace(OutPath)) return;
Directory.CreateDirectory(OutPath);
}
PluginServiceInterface.CommonHelper.DelectDir(OutPath);//能删除就删除 删除报错不处理
this.ShowLoading("进行年末报表数据导出……", 0, 0);
JCTJB(LDKZMJ, HDKZMJ);
//视图报表导出
string dbPath = Directory.GetCurrentDirectory() + "\\Temp\\NMKMJHZDataSetOut\\NMKMJHZDB.sqlite";
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
List<DataDicTionary> dicList = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);//权属代码字典
foreach (Enum.ViewEntityEnum ViewTableitem in System.Enum.GetValues(typeof(Enum.ViewEntityEnum)))
{
string ExcelNameTemp = GetExcelName(ViewTableitem);
var sourcesfile = SysAppPath.GetCurrentAppPath() + string.Format(@"TempalateReports\视图报表模板\{0}", ExcelNameTemp);
Workbook workbook = new Workbook(sourcesfile);
workbook.CalculateFormula(true);
Worksheet sheet = workbook.Worksheets[0];
DataTable ViewTableTemp = dbHelper.ExecuteDatatable(ViewTableitem.ToString(), string.Format("select * from {0}", ViewTableitem.ToString()), true);
string TempPath = string.Format(@"{0}\{1}", OutPath, ExcelNameTemp);
if (ViewTableTemp != null && ViewTableTemp.Rows.Count > 0)
{
WriteExcel(sheet, ViewTableTemp, dicList);
workbook.Save(TempPath);
}
else//若是没有数据复制文件即可
{
WriteExcel(sheet, ViewTableTemp, dicList);
workbook.Save(TempPath);
}
}
this.CloseLoading();
MessageHelper.ShowTips("报表导出成功!");
}
catch (Exception ex)
{
this.CloseLoading();
MessageHelper.ShowError("报表输出错误!");
LogAPI.Debug("报表输出错误:" + ex);
}
}
private void BtnCanel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void btnSelectedBaseData_Click(object sender, RoutedEventArgs e)
{
try
{
OpenDataDialog pDialog = new OpenDataDialog();
ISpatialDataObjectFilter pOFilter = new FilterGeoDatabasePersonal();
pDialog.AddFilter(pOFilter, true);
pOFilter = new FilterGeoDatabaseFile();
pDialog.AddFilter(pOFilter, true);
pDialog.AllowMultiSelect = false;
pDialog.Title = "选择基础数据";
pDialog.RestoreLocation = true;
pDialog.StartLocation = pDialog.FinalLocation;
System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog();
if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0)
{
ImportDataType = Path.GetExtension(pDialog.FinalLocation).ToUpper().Replace('.', ' ').TrimStart();
if (string.IsNullOrWhiteSpace(ImportDataType) || (ImportDataType != "GDB" && ImportDataType != "MDB"))
{
MessageHelper.Show("选择的数据路径有误,请根据过滤条件,重新选择数据库!!");
return;
}
s_SelPath = pDialog.FinalLocation;
string fileName = string.Empty;
if (ImportDataType == "MDB" && !File.Exists(s_SelPath))
{
if (!Path.GetFileName(s_SelPath).Equals(".mdb"))
{
MessageHelper.ShowTips("请确保文件存在,并且为mdb文件!");
return;
}
}
else if (ImportDataType == "GDB" && !Directory.Exists(s_SelPath))
{
MessageHelper.ShowTips("请确保GDB文件夹存在!");
return;
}
if (!string.IsNullOrWhiteSpace(s_SelPath))
PathNCM.Text = s_SelPath;
}
}
catch (Exception ex)
{
LogAPI.Debug("选择基础数据库失败:" + ex);
MessageHelper.Show("选择基础数据库失败:" + ex);
}
finally
{
if (s_WsAPI != null)
s_WsAPI.CloseWorkspace();
}
}
/// <summary>
/// 表格内容填充
/// </summary>
/// <param name="sheet">表格模板对象</param>
/// <param name="ViewTableTemp">要填充数据</param>
/// <param name="dicList">权属字典</param>
private void WriteExcel(Worksheet sheet, DataTable ViewTableTemp, List<DataDicTionary> dicList)
{
if (ViewTableTemp == null || ViewTableTemp.Rows.Count == 0 || dicList == null)
return;
DataColumnCollection fields = ViewTableTemp.Columns;
for (int i = 0; i < ViewTableTemp.Rows.Count; i++)
{
for (int j = 0; j < fields.Count; j++)
{
Cell cell = sheet.Cells[i + 6, j + 1];
if (j == 0 && fields[0].ColumnName == "XZQMC")
{
string TempCode = ViewTableTemp.Rows[i][fields[j + 1]].ToString();
DataDicTionary dataDicTionary = dicList.FirstOrDefault(x => x.CODE == (TempCode.Length == 12 ? TempCode.PadRight(19, '0') : TempCode));
if (dataDicTionary != null)
cell.PutValue(dataDicTionary.NAME);
}
else
{
cell.PutValue(ViewTableTemp.Rows[i][fields[j]]);
}
}
}
}
private void JCTJB(double xjldmjkzs, double xjhdmjkzs)
{
IFeatureLayer CZC20X_Layer = null;
try
{
IFeatureClass _CZCFc = m_CZCDYDLayer.FeatureClass;//PrjDB.gdb基础库
CZC20X_Layer = GeoDBAPI.CreateFeatureLayerInmemeory("DLTBGX201", "地类图斑更新201数据", (_CZCFc as IGeoDataset).SpatialReference, _CZCFc.ShapeType, _CZCFc.Fields);
IQueryFilter filter = new QueryFilterClass() { WhereClause = "CZCLX='203' or CZCLX='203A'" };
IFeatureClassAPI fcAPI = new FeatureClassAPI(_CZCFc);
fcAPI.FcToFc(CZC20X_Layer.FeatureClass, null, false);
string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\NMKMJHZDataSetOut";//年末库面积汇总数据准备
if (!Directory.Exists(gdbFolder))
{
Directory.CreateDirectory(gdbFolder);
}
PluginServiceInterface.CommonHelper.DelectDir(gdbFolder);//能删除就删除 删除报错不处理
string gdbFileName = Guid.NewGuid().ToString() + ".gdb";
IWorkspaceFactory pFtWsFct = null;
IWorkspaceName workspaceName = null;
Type t = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
object obj = System.Activator.CreateInstance(t);
pFtWsFct = obj as IWorkspaceFactory;
workspaceName = pFtWsFct.Create(gdbFolder, gdbFileName, null, 0);
string path = Path.Combine(gdbFolder, gdbFileName);
GPParamClass gPParamClass = new GPParamClass();
gPParamClass.Tolerance = "0.0001";
this.UpdateMsg("正在进行基础图层数据处理1........");
IFeatureLayer CK_DLTBBGLayer = null;
gPParamClass.FirstFeatureLayer = m_DLTBLayer;
gPParamClass.SecondFeatureLayer = CZC20X_Layer;
gPParamClass.OutFeatureClassPath = path + "\\" + "DLTB2";
gPParamClass.IsGetOutPutFeature = true;
GeoprocessorHelper.UnionAnalysis(gPParamClass, ref CK_DLTBBGLayer);
gPParamClass.FirstFeatureLayer = CK_DLTBBGLayer;
gPParamClass.OutFeatureClassPath = path + "\\" + "DLTB";
gPParamClass.IsGetOutPutFeature = true;
GeoprocessorHelper.MultipartToSinglePath(gPParamClass, ref CK_DLTBBGLayer);
IFeatureCursor cursor = CK_DLTBBGLayer.FeatureClass.Update(null, true);
IFeature f = null;
int idxCZCSXM = CK_DLTBBGLayer.FeatureClass.FindField("CZCSXM");
int idxDLBM = CK_DLTBBGLayer.FeatureClass.FindField("DLBM");
int idxCZCLX = CK_DLTBBGLayer.FeatureClass.FindField("CZCLX");
int idxDLTBOID = CK_DLTBBGLayer.FeatureClass.FindField("FID_DLTB");
int idxTBMJ = CK_DLTBBGLayer.FeatureClass.FindField("TBMJ");
Dictionary<int, Dictionary<int, double>> group = new Dictionary<int, Dictionary<int, double>>();
Dictionary<int, double> dicKZMJ = new Dictionary<int, double>();
this.UpdateMsg("正在进行基础图层数据处理2........");
//建设用地(再包含09)
string F_20DL = "05H1,0508,0601,0602,0603,0701,0702,08H1,08H2,0809,0810,1001,1002,1003,1004,1005,1007,1008,1009,1109,1201";
while ((f = cursor.NextFeature()) != null)
{
int dltbOID = f.Value[idxDLTBOID].ToInt();
double tbmj = f.Value[idxTBMJ].ToDouble(2);
if (!dicKZMJ.ContainsKey(dltbOID))
dicKZMJ.Add(dltbOID, tbmj);//被切割的控制总面积
double area = f.ShapeCopy.GetEllipseArea();
if (group.ContainsKey(dltbOID))
{
group[dltbOID].Add(f.OID, area);//被切割面积
}
else
{
group.Add(dltbOID, new Dictionary<int, double>());
group[dltbOID].Add(f.OID, area);
}
f.Value[idxCZCSXM] = f.Value[idxCZCLX];
string dlbmjctb = f.Value[idxDLBM].ToTrim();
if (!((!string.IsNullOrWhiteSpace(dlbmjctb) && dlbmjctb.Length == 4 && F_20DL.Contains(dlbmjctb)) || dlbmjctb == "09") && !string.IsNullOrWhiteSpace(f.Value[idxCZCLX].ToTrim()) && "204,205".Contains(f.Value[idxCZCLX].ToTrim()))
f.Value[idxCZCSXM] = DBNull.Value;
cursor.UpdateFeature(f);
}
cursor.Flush();
Dictionary<int, double> mjDic = new Dictionary<int, double>();
this.UpdateMsg("正在进行基础图层数据处理3........");
int TBMJIndex = m_DLTBLayer.FeatureClass.FindField("TBMJ");
foreach (var key in group.Keys)
{
if (key == -1) continue;
if (group[key].Count == 1) continue;
Dictionary<int, double> tempDic = group[key].OrderByDescending(o => o.Value).ToDictionary(k => k.Key, v => v.Value);
IFeature dltbF = m_DLTBLayer.FeatureClass.GetFeature(key);
double kzmj = dltbF.ShapeCopy.GetEllipseArea();
foreach (var subKey in tempDic.Keys)
{
//group[key][subKey] = group[key][subKey] / kzmj * dicKZMJ[key];
mjDic.Add(subKey, Math.Round(group[key][subKey] / kzmj * dicKZMJ[key], 2));
}
double cz = dicKZMJ[key] - group[key].Sum(s => s.Value);
cz = Math.Round(cz, 2);
if (cz != 0)
{
foreach (var subKey in tempDic.Keys)
{
mjDic[subKey] = Math.Round(group[key][subKey] + cz, 2);
break;
}
}
Marshal.ReleaseComObject(dltbF);
}
cursor = CK_DLTBBGLayer.FeatureClass.Update(null, true);
while ((f = cursor.NextFeature()) != null)
{
if (!mjDic.ContainsKey(f.OID)) continue;
f.Value[idxTBMJ] = mjDic[f.OID];
cursor.UpdateFeature(f);
}
cursor.Flush();
Marshal.ReleaseComObject(cursor);
this.UpdateMsg("正在进行报表数据处理........");
string dbPath = gdbFolder + "\\NMKMJHZDB.sqlite";
if (!File.Exists(dbPath))//复制新工程模板作为副本,辅助报表导出
File.Copy(SysAppPath.GetCurrentAppPath() + "工作空间\\模板\\新建变更工程\\BGTJ.sqlite", dbPath);
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
Type ts = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
object obj2 = System.Activator.CreateInstance(ts);//解决强制类型转换
IWorkspaceFactory factoryGdb = obj2 as IWorkspaceFactory;
IWorkspace worckspace = factoryGdb.OpenFromFile(path, 0);
IFeatureWorkspace inWs = worckspace as IFeatureWorkspace;
dbHelper.ExecuteSQL(" drop table DLTB ");
IWorkspaceFactory pOutWorkFactory = new SqlWorkspaceFactoryClass();
IWorkspace pOutWork = pOutWorkFactory.OpenFromFile(dbPath, 0);
TableToTable(inWs, pOutWork, "DLTB");
dbHelper.ExecuteSQL("update dltb set kcxs=0 where kcxs is null");
dbHelper.ExecuteSQL("update dltb set kcmj=round(tbmj*kcxs,2)");
dbHelper.ExecuteSQL("update dltb set tbdlmj=round(tbmj-kcmj,2)");
//第一步:清空当前表数据
string deletesql = " delete from MJHZJCTJB";
dbHelper.ExecuteNonQueryWithException(deletesql, CommandType.Text);
deletesql = " delete from MJHZTJB2";
dbHelper.ExecuteNonQueryWithException(deletesql, CommandType.Text);
DropTable(dbHelper, "MJHZTJB3");
DropTable(dbHelper, "MJHZTJB4");
DropTable(dbHelper, "MJHZJCTJBPCQ");
string[] grouparry = new string[] { "QSXZ", "GDLX", "GDPDJB", "CZCSXM", "TBXHDM", "ZZSXDM", "FRDBS" };
foreach (var item in grouparry)
{
dbHelper.ExecuteNonQueryWithException(string.Format("update dltb set {0}=null where {0}=''", item), CommandType.Text);
}
//处理耕地种植属性为耕种的图斑可不标注问题
SetGDZZSXDMIsGZ(dbHelper);
//第二步:按照座落、权属代码、权属性质、耕地类型、耕地坡度级别、城镇村属性码、图斑细化代码、耕地种植属性、描述说明、飞入地标识、地类编码分类汇总图斑地类面积到基础表2
string mjhztj2 = "insert into MJHZTJB2(ZLDWMC,ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM,TBDLMJ) SELECT ZLDWMC, substr(ZLDWDM,1,12) AS ZLDWDM,substr(QSDWDM,1,12) AS QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM, Sum(TBDLMJ) FROM MJHZTJB3 GROUP BY ZLDWMC,substr(ZLDWDM,1,12),substr(QSDWDM,1,12),QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM";
dbHelper.ExecuteNonQueryWithException(mjhztj2, CommandType.Text);
DataTable mjhzdt = dbHelper.ExecuteDatatable("hztjb", "select * from MJHZJCTJB where 1=2", true);
this.UpdateMsg("正在进行增加平方米汇总统计基础表........");
//增加平方米汇总统计基础表
AddMeterMJPC(dbHelper, false);
List<DLBMTJEntity> dlbmlist;
List<string> ejdllist;
GetDLBMListByDT(mjhzdt, out dlbmlist, out ejdllist, false);
string insertc = GetInsertC1(ejdllist);
//insertc += "D201,D202,D203,D204,D205";
string sumc = Getsumc(ejdllist);
//第二步:按照座落、权属代码、权属性质、耕地类型、耕地坡度级别、城镇村属性码、图斑细化代码、耕地种植属性、描述说明、飞入地标识分类汇总面积到基础表,且面积换算为公顷单位,保留两位小数
string cjmjhzdtsql = "insert into MJHZJCTJB(ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,TBZMJ " + insertc + ") SELECT ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM, round(sum(ifnull((TBDLMJ+0.0)/10000 + 0.0000001,0)),2) AS TBZMJ " + sumc + " FROM MJHZTJB2 GROUP BY ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM";
//当前不进行平方米转公顷
//string cjmjhzdtsql = "insert into MJHZJCTJB(ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,TBZMJ " + insertc + ") SELECT ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM, round(sum(ifnull(TBDLMJ,0)),2) AS TBZMJ " + sumc + " FROM MJHZTJB2 GROUP BY ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM";
dbHelper.ExecuteNonQueryWithException(cjmjhzdtsql, CommandType.Text);
dbHelper.ExecuteNonQueryWithException("CREATE TABLE MJHZJCTJBPCQ as SELECT * FROM MJHZJCTJB", CommandType.Text);
#region 年末面积平差
//第四步:图斑总面积平差运算
if (xjldmjkzs > 0)//陆地面积平差
{
this.UpdateMsg("正在进行陆地面积平差........");
MJPC(xjldmjkzs, dbHelper, "00");
}
if (xjhdmjkzs > 0)//海岛面积平差
{
this.UpdateMsg("正在进行海岛面积平差........");
MJPC(xjhdmjkzs, dbHelper, "01");
}
this.UpdateMsg("正在进行内部地类平差........");
//第五步:内部地类平差
EJDLPCData(dbHelper);
#endregion
dbHelper.DisConnect();
}
catch (Exception ex)
{
LogAPI.Debug("报表数据输出失败:" + ex.Message);
LogAPI.Debug(ex);
throw;
}
}
public bool TableToTable(IFeatureWorkspace pInWork, IWorkspace pOutWork, string tableName, IQueryFilter queryFilter = null)
{
try
{
if (pInWork == null || pOutWork == null || string.IsNullOrEmpty(tableName)) return false;
if (pInWork is IWorkspace2 workspace2)
{
if (!workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, tableName))
{
return false;
}
}
ITable pInTable = pInWork.OpenTable(tableName);
if (pInTable == null) return false;
IDataset pIndataset = (IDataset)pInTable;
IDatasetName pInDatasetName = (IDatasetName)pIndataset.FullName;
IEnumDataset enumDataset = pOutWork.get_Datasets(esriDatasetType.esriDTTable);
IDataset dataset;
enumDataset.Reset();
while ((dataset = enumDataset.Next()) != null)
{
string[] names = dataset.Name.Split('.');
if (string.Equals(names[names.Length - 1], tableName, StringComparison.CurrentCultureIgnoreCase))
{
dataset.Delete();
break;
}
}
IDataset pOutDataset = (IDataset)pOutWork;
IDatasetName pOutDatasetName = new TableNameClass();
pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName;
pOutDatasetName.Name = tableName;
IFieldChecker fieldChecker = new FieldCheckerClass();
IFields targetFeatureClassFields = pInTable.Fields;
IFields sourceFeatureClassFields = pInTable.Fields;
fieldChecker.InputWorkspace = pInWork as IWorkspace;
fieldChecker.ValidateWorkspace = pOutWork;
fieldChecker.Validate(sourceFeatureClassFields, out IEnumFieldError enumFieldError, out targetFeatureClassFields);
IFeatureDataConverter one2another = new FeatureDataConverterClass();
try
{
one2another.ConvertTable(pInDatasetName, queryFilter, pOutDatasetName, targetFeatureClassFields, "", 1000, 0);
}
finally
{
Marshal.ReleaseComObject(one2another);
}
return true;
}
catch (Exception ex)
{
LogAPI.Debug("执行 TableToTable 函数时失败,异常原因: " + ex + " ; ");
throw ex;
}
}
/// <summary>
/// 末级地类平差
/// </summary>
/// <param name="dbHelper"></param>
private void EJDLPCData(IRDBHelper dbHelper, string tableName = "MJHZJCTJB")
{
DataTable updatedt = dbHelper.ExecuteDatatable(tableName, ("select * from " + tableName), true);
if (updatedt == null || updatedt.Rows.Count == 0)
{
return;
throw new Exception("初始基础统计表错误!");
}
List<DLBMTJEntity> dlbmlist;
List<string> ejdllist;
GetDLBMListByDT(updatedt, out dlbmlist, out ejdllist);
ejdllist.Reverse();
updatedt.PrimaryKey = new DataColumn[] { updatedt.Columns["BSM"] };
for (int i = 0; i < updatedt.Rows.Count; i++)
{
if (i % 100 == 0 || i == updatedt.Rows.Count)
this.UpdateMsg(string.Format("正在进行内部地类平差:({0}/{1})", i, updatedt.Rows.Count));
//updatedt.Rows[i].BeginEdit();
//string strZLDWDM = updatedt.Rows[i]["ZLDWDM"].ToString();
//string strZLDWMC = updatedt.Rows[i]["ZLDWMC"].ToString();
//获取每个小类的集合(平方米)
List<EJDLEntityClass> ejdllist1 = new List<EJDLEntityClass>();
int xh = ejdllist.Count;
foreach (var item in ejdllist)
{
string strPZYT = item;
double dbl = updatedt.Rows[i]["D" + item].ToDouble();
xh--;
EJDLEntityClass ejdlitem = new EJDLEntityClass();
ejdlitem.XH = xh;
ejdlitem.EJDLName = item;
ejdlitem.MetersValue = updatedt.Rows[i]["D" + item].ToDecimal(2);
if (ejdlitem.MetersValue <= 0)
{
ejdlitem.MetersValue = 0;
}
ejdlitem.HectareValue = (ejdlitem.MetersValue * 0.0001m).ToDecimal(2);
updatedt.Rows[i]["D" + item] = ejdlitem.HectareValue;
//dbHelper.ExecuteSQL(string.Format("update {0} set D{1}={2} where BSM={3}", tableName, item, ejdlitem.HectareValue, updatedt.Rows[i]["BSM"]));
if (ejdlitem.MetersValue > 0)
{
ejdllist1.Add(ejdlitem);
}
}
//如果存在大于等于10000平方米的,则小于10000平方米的排除
if (ejdllist1.Count(x => x.MetersValue >= 10000) > 0)
{
while (ejdllist1.Count(x => x.MetersValue < 10000) > 0)
{
ejdllist1.Remove(ejdllist1.FirstOrDefault(x => x.MetersValue < 10000));
}
}
else
{
//去除平方米面积为0的
while (ejdllist1.Count(x => x.MetersValue <= 0) > 0)
{
ejdllist1.Remove(ejdllist1.FirstOrDefault(x => x.MetersValue <= 0));
}
}
bool pc = true;
while (pc)
{
pc = false;
decimal h = 0;
Dictionary<string, decimal> tempupdateejdldic = new Dictionary<string, decimal>();
Dictionary<string, decimal> updateejdldic = new Dictionary<string, decimal>();
foreach (var item in ejdllist)
{
decimal tempv = updatedt.Rows[i]["D" + item].ToDecimal(2);
if (tempv < 0)
{
tempv = 0;
updatedt.Rows[i]["D" + item] = tempv;
//dbHelper.ExecuteSQL(string.Format("update {0} set D{1}={2} where BSM={3}", tableName, item, tempv, updatedt.Rows[i]["BSM"]));
}
h = h + tempv;
//如果平方米当中存在,则添加
if (ejdllist1.Count(x => x.EJDLName == item) > 0)
{
tempupdateejdldic.Add(item, tempv);
}
}
var ejdlquery = from t in ejdllist1 orderby t.MetersValue descending, t.XH descending select t;
foreach (var item in ejdlquery)
{
updateejdldic.Add(item.EJDLName, tempupdateejdldic[item.EJDLName]);
}
decimal g = updatedt.Rows[i]["TBZMJ"].ToDecimal(2);
if (updateejdldic.Count == 0)
{
if (g > 0)
{
updatedt.Rows[i]["D" + ejdllist[0]] = g;
if (ejdllist1.Count == 0)
{
break;
}
pc = true;
continue;
}
}
decimal zfvalue = 1;
decimal mjc = 0;
decimal js = (decimal)0.01;//调平基数0.01
if (h > g)
{
zfvalue = -1;
mjc = h - g;
//为了避免负数,则把0的排除
while (updateejdldic.Count(x => x.Value <= 0) > 0)
{
updateejdldic.Remove(updateejdldic.FirstOrDefault(x => x.Value <= 0).Key);
}
if (updateejdldic.Count == 0)
{
if (mjc > 0)
{
updatedt.Rows[i]["D" + ejdllist[0]] = updatedt.Rows[i]["D" + ejdllist[0]].ToDecimal(2) - mjc;
pc = true;
continue;
}
}
}
else
{
mjc = g - h;
}
//如果面积差值大于0,进行平差
if (mjc > 0)
{
int tpsm = (int)(mjc / js);
int cjzsm = updateejdldic.Count;
if (cjzsm == 0)
continue;
int e = tpsm / cjzsm;
int f = tpsm % cjzsm;
if (f > 0)
{
//余数调平面积值
decimal ftpzmj = (e + 1) * js;
for (int x = 0; x < f; x++)
{
updatedt.Rows[i]["D" + updateejdldic.ElementAt(x).Key] = updateejdldic.ElementAt(x).Value + ftpzmj * zfvalue;
}
}
if (e > 0)
{
//商数调平面积值
decimal ftpzmj = e * js;
for (int x = f; x < cjzsm; x++)
{
updatedt.Rows[i]["D" + updateejdldic.ElementAt(x).Key] = updateejdldic.ElementAt(x).Value + ftpzmj * zfvalue;
}
}
pc = true;
continue;
}
}
//填充一级类汇总面积
foreach (var item in dlbmlist)
{
decimal yjdlmj = 0;
if (item.EJDLList != null && item.EJDLList.Count > 0)
{
foreach (var item2 in item.EJDLList)
{
yjdlmj = yjdlmj + updatedt.Rows[i]["D" + item2].ToDecimal(2);
}
updatedt.Rows[i]["D" + item.YJDL] = yjdlmj;
}
}
string strUpSql = string.Format("update {0} set ", tableName);
foreach (var item in dlbmlist)
{
strUpSql += "D" + item.YJDL + "=" + updatedt.Rows[i]["D" + item.YJDL].ToDecimal(2) + ",";
//decimal yjdlmj = 0;
if (item.EJDLList != null && item.EJDLList.Count > 0)
{
foreach (var item2 in item.EJDLList)
{
strUpSql += "D" + item2 + "=" + updatedt.Rows[i]["D" + item2].ToDecimal(2) + ",";
}
}
}
strUpSql = strUpSql.TrimEnd(',');
strUpSql += string.Format(" where bsm={0}", updatedt.Rows[i]["BSM"]);
dbHelper.ExecuteSQL(strUpSql);
}
}
private List<string> dlbm00List = new List<string>() { "0303", "0304", "0306", "0402", "0603", "1105", "1106", "1108" };
/// <summary>
/// 根据统计表列,获取地类编码一级类和二级类集合
/// </summary>
/// <param name="updatedt"></param>
/// <param name="dlbmlist"></param>
/// <param name="ejdllist"></param>
public void GetDLBMListByDT(DataTable updatedt, out List<DLBMTJEntity> dlbmlist, out List<string> ejdllist, bool Is20 = false)
{
dlbmlist = new List<DLBMTJEntity>();
ejdllist = new List<string>();
#region 计算地类编码集合
foreach (DataColumn item in updatedt.Columns)
{
if (item.ColumnName.StartsWith("D20") && Is20) continue;
if (item.ColumnName.IndexOf("D") == 0 && item.ColumnName.Length == 3)
{
DLBMTJEntity dlbmtjitem = new DLBMTJEntity();
dlbmtjitem.YJDL = item.ColumnName.Substring(1);
dlbmtjitem.EJDLList = new List<string>();
foreach (DataColumn item2 in updatedt.Columns)
{
if (dlbmtjitem.YJDL.Equals("00") && dlbm00List.Contains(item2.ColumnName.Substring(1)) && item2.ColumnName.Length > 3)
{
dlbmtjitem.EJDLList.Add(item2.ColumnName.Substring(1));
continue;
}
if (item2.ColumnName.IndexOf(dlbmtjitem.YJDL) == 1 && item2.ColumnName.Length > 3 && !dlbm00List.Contains(item2.ColumnName.Substring(1)))
{
dlbmtjitem.EJDLList.Add(item2.ColumnName.Substring(1));
}
}
dlbmlist.Add(dlbmtjitem);
}
}
foreach (var item in dlbmlist)
{
if (item.EJDLList != null && item.EJDLList.Count > 0)
{
ejdllist.AddRange(item.EJDLList);
}
else
{
ejdllist.Add(item.YJDL);
}
}
#endregion
}
/// <summary>
/// 统计平方米
/// </summary>
/// <param name="dbHelper"></param>
/// <param name="ishz">是否需要自己汇总(任意一个范围的平方米成果数据库,调用此方法就可以出报表)</param>
private void AddMeterMJPC(IRDBHelper dbHelper, bool ishz = true)
{
#region 暂时注释
//if (ishz)
//{
//第一步:清空当前表数据
//string deletesql = " delete from MJHZJCTJB2";
//dbHelper.ExecuteNonQueryWithException(deletesql, CommandType.Text);
//deletesql = " delete from MJHZTJB2";
//dbHelper.ExecuteNonQueryWithException(deletesql, CommandType.Text);
//DropTable(dbHelper, "MJHZTJB3");
//string[] grouparry = new string[] { "QSXZ", "GDLX", "GDPDJB", "CZCSXM", "TBXHDM", "ZZSXDM", "FRDBS" };
//foreach (var item in grouparry)
//{
// dbHelper.ExecuteNonQueryWithException(string.Format("update DLTB set {0}=null where {0}=''", item), CommandType.Text);
//}
////处理耕地种植属性为耕种的图斑可不标注问题
//SetGDZZSXDMIsGZ(dbHelper);
////第二步:按照座落、权属代码、权属性质、耕地类型、耕地坡度级别、城镇村属性码、图斑细化代码、耕地种植属性、描述说明、飞入地标识、地类编码分类汇总图斑地类面积、田坎面积到基础表2
//string mjhztj2 = "insert into MJHZTJB2(ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM,TBDLMJ,KCMJ) SELECT LEFT(ZLDWDM,12) AS ZLDWDM,LEFT(QSDWDM,12) AS QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM, Sum(TBDLMJ) ,Sum(KCMJ) FROM MJHZTJB3 GROUP BY LEFT(ZLDWDM,12),LEFT(QSDWDM,12),QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM";
//dbHelper.ExecuteNonQueryWithException(mjhztj2, CommandType.Text);
//}
#endregion
#region 计算平方米二级类汇总
this.UpdateMsg("正在进行计算平方米二级类汇总........");
DropTable(dbHelper, "MJHZJCTJB2");
DataTable mjhzdt = dbHelper.ExecuteDatatable("hztjb", "select * from MJHZJCTJB where 1=2", true);
GetDLBMListByDT(mjhzdt, out List<DLBMTJEntity> dlbmlist, out List<string> ejdllist);
string insertc = GetInsertC1(ejdllist);
string sumc = Getsumc(ejdllist);
dbHelper.ExecuteNonQueryWithException("CREATE TABLE MJHZJCTJB2 as select * from MJHZJCTJB where 1=2 ", CommandType.Text);
string cjmjhzdtsql2 = "insert into MJHZJCTJB2(ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,TBZMJ " + insertc + ") SELECT ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM, round(Sum(TBDLMJ),2) AS TBZMJ " + sumc + " FROM MJHZTJB2 GROUP BY ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM";
dbHelper.ExecuteNonQueryWithException(cjmjhzdtsql2, CommandType.Text);
//dbHelper.ExecuteNonQueryWithException("UPDATE MJHZJCTJB2 SET D1203=D1203+KCMJ", CommandType.Text);
#endregion
#region 填出二级类到一级类平方米
string updatesetstr = "";
this.UpdateMsg("正在进行填充一级类汇总面积........");
//填充一级类汇总面积
foreach (var item in dlbmlist)
{
if (item.EJDLList != null && item.EJDLList.Count > 0)
{
updatesetstr = updatesetstr + "D" + item.YJDL + "=";
foreach (var item2 in item.EJDLList)
{
updatesetstr = updatesetstr + "D" + item2 + "+";
}
updatesetstr = updatesetstr.TrimEnd('+') + ",";
}
}
dbHelper.ExecuteNonQueryWithException("UPDATE MJHZJCTJB2 SET " + updatesetstr.TrimEnd(','), CommandType.Text);
#endregion
}
/// <summary>
/// 删除表操作
/// </summary>
/// <param name="helper"></param>
/// <param name="tableName"></param>
private void DropTable(IRDBHelper helper, string tableName)
{
try
{
if (helper == null || string.IsNullOrEmpty(tableName))
{
return;
}
string sql = " drop table " + tableName;
int a = helper.ExecuteNonQuery(sql, CommandType.Text);
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
}
/// <summary>
/// 拼接地类编码SQL语句
/// </summary>
/// <param name="ejdllist"></param>
/// <returns></returns>
private string GetInsertC1(List<string> ejdllist)
{
string resultylstr = string.Empty;
#region 计算地类编码集合
//foreach (var item in ejdllist)
//{
resultylstr = ",D" + string.Join(",D", ejdllist);
//resultylstr = resultylstr + string.Format(" ,D{0} ", item);
//}
#endregion
return resultylstr;
}
/// <summary>
/// 获取所有地类编码
/// </summary>
/// <param name="ejdllist"></param>
/// <returns></returns>
private string Getsumc(List<string> ejdllist, bool IsGQ = false, bool IsPZWJSYT = false)
{
string resultylstr = string.Empty;
if (IsGQ)
{
#region 计算地类编码集合
foreach (var item in ejdllist)
{
if (IsPZWJSYT)
{
resultylstr = resultylstr + string.Format(" ,sum(IIF(PZYT='{0}',DCMJ,0)) as D{0}", item);
}
else
{
if (item.ToUpper().StartsWith("20"))
{
resultylstr = resultylstr + string.Format(" ,sum(case when substr(CZCSXM,1,3)='{0}' then round(sum(ifnull((TBDLMJ+0.0)/10000 + 0.0000001,0)),2) ELSE 0 END) as D{0}", item);
continue;
}
resultylstr = resultylstr + string.Format(" ,sum(case when DLBM='{0}' and CZCSXM is null then round(sum(ifnull((TBDLMJ+0.0)/10000 + 0.0000001,0)),2) ELSE 0 END) as D{0}", item);
}
}
#endregion
}
else
{
#region 计算地类编码集合
foreach (var item in ejdllist)
{
if (IsPZWJSYT)
{
resultylstr = resultylstr + string.Format(" ,sum(IIF(PZYT='{0}',DCMJ,0)) as D{0}", item);
}
else
{
if (item.ToUpper().StartsWith("20"))
{
resultylstr = resultylstr + string.Format(" ,sum(case when substr(CZCSXM,1,3)='{0}' then TBDLMJ ELSE 0 END) as D{0}", item);
continue;
}
resultylstr = resultylstr + string.Format(" ,sum(case when DLBM='{0}' then TBDLMJ ELSE 0 END) as D{0}", item);
}
}
#endregion
}
return resultylstr;
}
/// <summary>
/// 面积平差
/// </summary>
/// <param name="xjmjkzs">县级面积控制数(公顷)</param>
/// <param name="dbHelper"></param>
private void MJPC(double xjmjkzs, IRDBHelper dbHelper, string mssm)
{
bool pc = true;
while (pc)
{
pc = false;
double cjzmj = dbHelper.ExecuteDatatable("cjzmj", "SELECT sum(TBZMJ) FROM MJHZJCTJB where mssm='" + mssm + "' ", true).Rows[0][0].ToDouble(2);
//平差正反值,(后续平差是加,还是减)
double zfvalue = 1;
//面积差值
double mjc = 0;
double js = 0.01;//调平基数0.01
if (cjzmj > xjmjkzs)
{
zfvalue = -1;
mjc = cjzmj - xjmjkzs;
}
else if (cjzmj < xjmjkzs)
{
mjc = xjmjkzs - cjzmj;
}
mjc = mjc.ToDouble(2);
//如果面积差值大于0,进行平差
if (mjc > 0)
{
//调平数目
int tpsm = (int)(mjc / js);
//按照座落代码分组,得到村的个数
//此处sql语句必须要排序,以便最大面积村靠前
DataTable cjzsmdt = dbHelper.ExecuteDatatable("cjzsm", "SELECT ZLDWDM,count(*) as C, sum(TBZMJ) FROM MJHZJCTJB where mssm='" + mssm + "' and TBZMJ>0 group by ZLDWDM order by sum(TBZMJ) desc", true);
//var cjzsmdt2 = dbHelper.ActiveConn.Query("SELECT ZLDWDM,count(*) as C, sum(TBZMJ) AS TBZMJ FROM MJHZJCTJB where mssm='" + mssm + "' and TBZMJ>0 group by ZLDWDM order by sum(TBZMJ) desc").ToList();
int cjzsm = cjzsmdt.Rows.Count;//待调平村级总数目
if (cjzsm == 0) continue;
int e = tpsm / cjzsm;//商数
int f = tpsm % cjzsm;//余数
if (f > 0)
{
//余数村调平面积值
double ftpzmj = (e + 1) * js;
/// <param name="dbHelper"></param>
/// <param name="zfvalue">加减调平数</param>
/// <param name="js">基数(0.01)</param>
/// <param name="cjzsmdt">村级汇总数据表数据</param>
/// <param name="cjzsm">总数量</param>
/// <param name="f">起始值</param>
/// <param name="ftpzmj">调平面积</param>
UpdateTBMJ(dbHelper, zfvalue, js, cjzsmdt, f, 0, ftpzmj, mssm);
}
if (e > 0)
{
//商数村调平面积值
double ftpzmj = e * js;
UpdateTBMJ(dbHelper, zfvalue, js, cjzsmdt, cjzsm, f, ftpzmj, mssm);
}
cjzmj = dbHelper.ExecuteDatatable("cjzmj", "SELECT sum(TBZMJ) FROM MJHZJCTJB where mssm='" + mssm + "'", true).Rows[0][0].ToDouble(2);
//再次确认是否调平?
if (cjzmj != xjmjkzs)
{
pc = true;
continue;
}
}
}
}
/// <summary>
/// 根据视图名称获取Excel表名
/// </summary>
/// <param name="ViewTableitem"></param>
/// <returns></returns>
public string GetExcelName(Enum.ViewEntityEnum ViewTableitem)
{
string ExcelName = string.Empty;
switch (ViewTableitem)
{
case Enum.ViewEntityEnum.V_201NBTDLYXZEJFLMJHZB:
ExcelName = "城市内部土地利用现状表.xlsx";
break;
case Enum.ViewEntityEnum.V_202NBTDLYXZEJFLMJHZB:
ExcelName = "建制镇内部土地利用现状表.xlsx";
break;
case Enum.ViewEntityEnum.V_203NBTDLYXZEJFLMJHZB:
ExcelName = "村庄内部土地利用现状表.xlsx";
break;
case Enum.ViewEntityEnum.V_204NBTDLYXZEJFLMJHZB:
ExcelName = "盐田及工矿用地内部土地利用现状表.xlsx";
break;
case Enum.ViewEntityEnum.V_205NBTDLYXZEJFLMJHZB:
ExcelName = "特殊用地内部土地利用现状表.xlsx";
break;
case Enum.ViewEntityEnum.V_BFXHDLMJHZB:
ExcelName = "部分细化地类面积汇总表.xlsx";
break;
case Enum.ViewEntityEnum.V_CZCJGKYDMJHZB:
ExcelName = "城镇村及工矿用地面积汇总表.xlsx";
break;
case Enum.ViewEntityEnum.V_FQYLJTMXHBZMJHZB:
ExcelName = "废弃与垃圾填埋细化标注汇总统计表.xlsx";
break;
case Enum.ViewEntityEnum.V_GCCDHZB:
ExcelName = "灌丛草地汇总情况统计表.xlsx";
break;
case Enum.ViewEntityEnum.V_GDPDFJMJHZB:
ExcelName = "耕地坡度分级面积汇总表.xlsx";
break;
case Enum.ViewEntityEnum.V_GDZZLXMJHZB:
ExcelName = "耕地种植类型统计表.xlsx";
break;
case Enum.ViewEntityEnum.V_GYYDALXMJHZB:
ExcelName = "工业用地按类型汇总统计表.xlsx";
break;
case Enum.ViewEntityEnum.V_KTZDLMJHZB:
ExcelName = "可调整地类面积汇总表.xlsx";
break;
case Enum.ViewEntityEnum.V_LQZZYYDMJHZB:
ExcelName = "林区范围内园地汇总统计表.xlsx";
break;
case Enum.ViewEntityEnum.V_TDLYXZEJFLMJAQSXZHZB:
ExcelName = "土地利用现状二级分类面积按权属性质汇总表.xlsx";
break;
case Enum.ViewEntityEnum.V_TDLYXZEJFLMJHZB:
ExcelName = "土地利用现状分类面积汇总表.xlsx";
break;
case Enum.ViewEntityEnum.V_TDLYXZYJFLMJAQSXZHZB:
ExcelName = "土地利用现状一级分类面积按权属性质汇总表.xlsx";
break;
default:
ExcelName = string.Empty;
break;
}
return ExcelName;
}
/// <param name="dbHelper"></param>
/// <param name="zfvalue">加减调平数</param>
/// <param name="js">基数(0.01)</param>
/// <param name="cjzsmdt">村级汇总数据表数据</param>
/// <param name="cjzsm">总数量</param>
/// <param name="f">起始值</param>
/// <param name="ftpzmj">村内图标调平总面积</param>
private void UpdateTBMJ(IRDBHelper dbHelper, double zfvalue, double js, DataTable cjzsmdt, int cjzsm, int f, double ftpzmj, string mssm)
{
//已知村的调平面积,调平村内图斑面积
//村内的图斑调平面积=村的调平面积除以调平基数,得到调平数目,用调平数目除以图斑数量,得到商 e2,余数 f2,
string updatedbsql = "update MJHZJCTJB set TBZMJ=TBZMJ{2} where bsm in (select bsm from MJHZJCTJB where ZLDWDM='{0}' and mssm='" + mssm + "' and TBZMJ > 0.01 {3} order by TBZMJ desc,bsm desc limit {1})";//前余数个(f2)图斑的调平sql语句
//string updatedbsql2 = "update MJHZJCTJB set TBZMJ=TBZMJ{2} where bsm in (select top {1} bsm from MJHZJCTJB where ZLDWDM='{0}' and mssm='" + mssm + "' and TBZMJ>0 {3} order by TBZMJ,bsm )";//商数个(f2)图斑的调平sql语句
string updatedbsql2 = "update MJHZJCTJB set TBZMJ=TBZMJ{1} where ZLDWDM='{0}' and mssm='" + mssm + "' and TBZMJ > 0.01 {2} ";//商数个(f2)图斑的调平sql语句
for (int i = f; i < cjzsm; i++)
{
int cjzsm2 = Convert.ToInt32(cjzsmdt.Rows[i]["C"]);//单个村的图斑总数目
int tpsm2 = (int)(ftpzmj / js);//调平数目
if (cjzsm2 == 0)
continue;
int e2 = tpsm2 / cjzsm2;
int f2 = tpsm2 % cjzsm2;//得到调平数e、f
string tbmjwhere = string.Empty;
if (f2 > 0)
{
double ftpzmj2 = (e2 + 1) * js;
//double ftpzmj2 = js;
string tpvalue = string.Empty;
if (zfvalue < 0)
{
tpvalue = "-" + ftpzmj2.ToDecimal(2);
tbmjwhere = " and TBZMJ>=" + ftpzmj2;//为了以防万一出现负数
}
else
{
tpvalue = "+" + ftpzmj2.ToDecimal(2);
}
dbHelper.ExecuteNonQueryWithException(string.Format(updatedbsql, cjzsmdt.Rows[i]["ZLDWDM"], f2, tpvalue, tbmjwhere), CommandType.Text);
}
if (e2 > 0)
{
double ftpzmj2 = e2 * js;
string tpvalue = string.Empty;
if (zfvalue < 0)
{
tpvalue = "-" + ftpzmj2.ToDecimal(2);
tbmjwhere = " and TBZMJ>=" + ftpzmj2;//为了以防万一出现负数
}
else
{
tpvalue = "+" + ftpzmj2.ToDecimal(2);
}
dbHelper.ExecuteNonQueryWithException(string.Format(updatedbsql2, cjzsmdt.Rows[i]["ZLDWDM"], tpvalue, tbmjwhere), CommandType.Text);
}
}
}
private void SetGDZZSXDMIsGZ(IRDBHelper dbHelper)
{
/*
* 修改人:高山
* 修改时间:2018.12.6
* 修改原因:参与北京评测的公司都认为,扣除地类编码需要参与分组:地类图斑层中的图版存在扣除面积的,要单独提取出来做分组
*/
string mjhztj4 = @"create table MJHZTJB4 as select ZLDWMC,ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM ,DLBM,TBDLMJ from (
SELECT ZLDWMC,substr(ZLDWDM,1,12) AS ZLDWDM,substr(QSDWDM,1,12) AS QSDWDM,QSXZ,'' as GDLX,'' as GDPDJB,CZCSXM,
'' as TBXHDM,'' as ZZSXDM,FRDBS,MSSM,KCDLBM AS DLBM,KCMJ AS TBDLMJ FROM DLTB WHERE KCDLBM IS NOT NULL
AND KCMJ IS NOT NULL AND KCDLBM <> '' AND KCMJ > 0
UNION ALL
SELECT ZLDWMC,substr(ZLDWDM,1,12) AS ZLDWDM,substr(QSDWDM,1,12) AS QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM, DLBM ,TBDLMJ FROM DLTB
)";
dbHelper.ExecuteNonQueryWithException(mjhztj4, CommandType.Text);
mjhztj4 = @"UPDATE MJHZTJB4 set GDLX='' WHERE GDLX IS NULL";
dbHelper.ExecuteNonQueryWithException(mjhztj4, CommandType.Text);
mjhztj4 = @"UPDATE MJHZTJB4 set GDPDJB='' WHERE GDPDJB IS NULL";
dbHelper.ExecuteNonQueryWithException(mjhztj4, CommandType.Text);
mjhztj4 = @"UPDATE MJHZTJB4 set TBXHDM='' WHERE TBXHDM IS NULL";
dbHelper.ExecuteNonQueryWithException(mjhztj4, CommandType.Text);
mjhztj4 = @"UPDATE MJHZTJB4 set ZZSXDM='' WHERE ZZSXDM IS NULL;";
dbHelper.ExecuteNonQueryWithException(mjhztj4, CommandType.Text);
string mjhztj3 = @"create table MJHZTJB3 as select ZLDWMC,ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM ,DLBM,TBDLMJ from (SELECT ZLDWMC,ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM as DLBM, Sum(TBDLMJ) as TBDLMJ
FROM MJHZTJB4 GROUP BY ZLDWMC,ZLDWDM,QSDWDM,QSXZ,GDLX,GDPDJB,CZCSXM,TBXHDM,ZZSXDM,FRDBS,MSSM,DLBM
)";
dbHelper.ExecuteNonQueryWithException(mjhztj3, CommandType.Text);
DataTable dtmjhztj3 = dbHelper.ExecuteDatatable("dtmjhztj3", " select * from MJHZTJB3 where dlbm like '01%'", true);
if (dtmjhztj3 != null && dtmjhztj3.Rows.Count > 0)
{
for (int i = 0; i < dtmjhztj3.Rows.Count; i++)
{
if (string.IsNullOrWhiteSpace(dtmjhztj3.Rows[i]["ZZSXDM"].ToTrim()))
{
string QSXZ = !string.IsNullOrEmpty(dtmjhztj3.Rows[i]["QSXZ"].ToTrim()) ? " and QSXZ='" + dtmjhztj3.Rows[i]["QSXZ"] + "'" : " and (QSXZ is null or QSXZ='')";
string GDLX = !string.IsNullOrEmpty(dtmjhztj3.Rows[i]["GDLX"].ToTrim()) ? " and GDLX='" + dtmjhztj3.Rows[i]["GDLX"] + "'" : " and (GDLX is null or GDLX='')";
string GDPDJB = !string.IsNullOrEmpty(dtmjhztj3.Rows[i]["GDPDJB"].ToTrim()) ? " and GDPDJB='" + dtmjhztj3.Rows[i]["GDPDJB"] + "'" : " and (GDPDJB is null or GDPDJB='')";
string CZCSXM = !string.IsNullOrEmpty(dtmjhztj3.Rows[i]["CZCSXM"].ToTrim()) ? " and CZCSXM='" + dtmjhztj3.Rows[i]["CZCSXM"] + "'" : " and (CZCSXM is null or CZCSXM='')";
string TBXHDM = !string.IsNullOrEmpty(dtmjhztj3.Rows[i]["TBXHDM"].ToTrim()) ? " and TBXHDM='" + dtmjhztj3.Rows[i]["TBXHDM"] + "'" : " and (TBXHDM is null or TBXHDM='')";
string GDZZSXDM = !string.IsNullOrEmpty(dtmjhztj3.Rows[i]["ZZSXDM"].ToTrim()) ? " and ZZSXDM='" + dtmjhztj3.Rows[i]["ZZSXDM"] + "'" : " and (ZZSXDM is null or ZZSXDM='')";
string FRDBS = !string.IsNullOrEmpty(dtmjhztj3.Rows[i]["FRDBS"].ToTrim()) ? " and FRDBS='" + dtmjhztj3.Rows[i]["FRDBS"] + "'" : " and (FRDBS is null or FRDBS='')";
string dtwhere = string.Format(" DLBM like '01%' and ZLDWDM='{0}' and QSDWDM='{1}' and MSSM='{2}' {3} ", dtmjhztj3.Rows[i]["ZLDWDM"], dtmjhztj3.Rows[i]["QSDWDM"], dtmjhztj3.Rows[i]["MSSM"], QSXZ + GDLX + GDPDJB + CZCSXM + TBXHDM + GDZZSXDM + FRDBS);
dbHelper.ExecuteNonQueryWithException(string.Format("update MJHZTJB3 set ZZSXDM='GZ' where {0}", dtwhere), CommandType.Text);
}
}
}
}
private void RbECTNMK_Click(object sender, RoutedEventArgs e)
{
if (rbNOWNMK.IsChecked == true)
{
SelNMKPath.IsEnabled = false;
}
else
{
SelNMKPath.IsEnabled = true;
}
}
}
}