📄 clsshujuguanli.cs
字号:
//===========================================================================
// Smarclient FPMS Demo Project a sample project for SmartClient technology.
// Smarclient FPMS Demo is designed and implemented bases Microsoft Application Block tech.
// Author: SFPMS Team, Date 2004-11
// Vision 2.0.0.0,support xuqiu fenglei
// Revison History XCY 2004-11-17
//=============================================================================
using System;
using System.Collections;
using System.Data;
using System.Configuration;
using System.Windows.Forms;
using Microsoft.ApplicationBlocks.SmartClient.Offline;
using JSW.Tool;
using JSW.FPMS.Tool;
namespace JSW.FPMS.Xiang.ShuJu
{
/// <summary>
/// clsShuJuGuanLi:数据管理类,管理数据载入,数据存放和数据同步等。
/// 并且提供对FPMS系统数据的访问接口。
/// MVC中的Model
/// </summary>
public class clsShuJuGuanLi
{
#region 成员变量区域
//乡数据
private Hashtable xiangShuJu = null;
//MOAB引用
private OfflineBlockBuilder lixianKongZhi = null;
//需求数据是否变化
private bool xuqiuShiFouBianHua = false;
//数据文件路径
private string shujuWenJianLuJing = "shuju.xml";
private string peizhiWenJianLuJing = "peizhi.xml";
//系统数据
private string[] xitongShuJuZu ={"CaiJiShiJian","TiChuRen","YuFuBianMa",
"XuQiuLeiBie","DaFuRen","DaFuShiJian",
"XinXiDianBianHao","XuQiuManYiDu"};
#endregion
#region 私有方法区域
/// <summary>
/// 数据集合之间的比较大小
/// </summary>
/// <param name="ShuJu1"></param>
/// <param name="ShuJu2"></param>
/// <returns>true是相同,false是不同</returns>
private bool ShuJuJiHeBiJiao(DataSet ShuJu1,DataSet ShuJu2)
{
if(ShuJu1.Tables.Count == ShuJu2.Tables.Count && ShuJu1.Tables.Count == 0 )
{
return true;
}
//忽略的具体的值判断,都默认为不同的。
return false;
}
#endregion
#region 公有方法区域
/// <summary>
/// 构造器
/// </summary>
public clsShuJuGuanLi()
{
//初始化
xiangShuJu = new Hashtable();
//MOAB实例
lixianKongZhi = OfflineBlockBuilder.Instance;
//2004-11-22 He
this.shujuWenJianLuJing = ConfigurationSettings.AppSettings[clsChangLiang.WENJIAN_LUJING] + "\\" + shujuWenJianLuJing;
this.peizhiWenJianLuJing = ConfigurationSettings.AppSettings[clsChangLiang.WENJIAN_LUJING] + "\\" + peizhiWenJianLuJing;
}
/// <summary>
/// 把数据载入到内存中
/// </summary>
public void ZaiRuShuJu()
{
try
{
//从数据文件中载入数据,并且分割为基本数据和需求数据
DataSet shuJu = new DataSet();
shuJu.ReadXml(shujuWenJianLuJing);
DataSet jibenShuJu =new DataSet();
DataSet xuqiuShuJu =new DataSet();
for(int Loop=0;Loop<shuJu.Tables.Count;Loop++)
{
DataTable shujuBiao = shuJu.Tables[Loop];
if(shujuBiao.TableName.Equals("XuQiu"))//如果是需求数据
{
xuqiuShuJu.Merge(shujuBiao);
}
else //如果是基本数据
{
jibenShuJu.Merge(shujuBiao);
}
}
xiangShuJu.Add(clsChangLiang.SHUJU_JIBENSHUJU,jibenShuJu);
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU,xuqiuShuJu);
//2.0.0.0
ArrayList shuju = this.QuFengXuQiuShuJu(xuqiuShuJu);
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU_WEIDAFU,shuju[0]);
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU_YIDAFU,shuju[1]);
}
catch(Exception e)
{
if( e.GetType() == typeof(System.IO.DirectoryNotFoundException))
{
clsRiZhiChuLi.JiLuRiZhi("数据路径错误,不能找到数据文件的路径:"+e.Message);
}
//如果出现异常,意味着基础数据环境可能发生了问题,初始化数据环境
xiangShuJu.Add(clsChangLiang.SHUJU_JIBENSHUJU,new DataSet());
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU,new DataSet());
//2.0.0.0
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU_WEIDAFU,new DataSet());
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU_YIDAFU,new DataSet());
}
try
{
//从配置文件中载入配置信息
DataSet peizhiXinXi = new DataSet();
peizhiXinXi.ReadXml(peizhiWenJianLuJing);
xiangShuJu.Add(clsChangLiang.SHUJU_PEIZHIXINXI,peizhiXinXi);
}
catch(Exception e)
{
if( e.GetType() == typeof(System.IO.DirectoryNotFoundException))
{}
//如果出现异常,意味着基础数据环境可能发生了问题,初始化数据环境
xiangShuJu.Add(clsChangLiang.SHUJU_PEIZHIXINXI,new DataSet());
}
}
/// <summary>
/// 重新发送数据 初始化时将XML文件为提交的数据重新提交
/// zhangwj 11-22
/// </summary>
public System.Data.DataSet ChongXinFaSong()
{
//数据合法性判断
if(this.HuoDeShuJu(clsChangLiang.SHUJU_PEIZHIXINXI).Tables.Count <1 ||
this.HuoDeShuJu(clsChangLiang.SHUJU_XUQIU).Tables.Count<1 )
{
return new DataSet();
}
//构造发送数据集
System.Data.DataSet dsxinFaSong = ChuangJianShuJuJi() ;
System.Collections.Hashtable table = new Hashtable() ;
string lieMing ="" ;
for (int i=0;i<dsxinFaSong.Tables["ShuJu"].Columns.Count;i++)
table.Add(dsxinFaSong.Tables["ShuJu"].Columns[i].ColumnName,"") ;
//将未提交数据导入到发送数据集中
DataSet shuJu = this.HuoDeShuJu(clsChangLiang.SHUJU_XUQIU);
for (int i=0;i<shuJu.Tables["XuQiu"].Rows.Count;i++)
{
if (shuJu.Tables["XuQiu"].Rows[i]["Bianhao"].ToString().Trim()=="-1")
{
System.Data.DataRow xinHang = dsxinFaSong.Tables["ShuJu"].NewRow() ;
for (int j=0;j<shuJu.Tables["XuQiu"].Columns.Count;j++)
{
lieMing = shuJu.Tables["XuQiu"].Columns[j].ColumnName;
if (table.ContainsKey(lieMing))
{
xinHang[lieMing] = shuJu.Tables["XuQiu"].Rows[i][lieMing].ToString() ;
}
}
dsxinFaSong.Tables["ShuJu"].Rows.Add(xinHang) ;
}
}
return dsxinFaSong ;
}
/// <summary>
///数据存入到本地文件中
/// </summary>
public void CunRuShuJu()
{
try
{
//检查文件路径是否存在,如果没有生成新的文件路径,2004-11-22
if(!System.IO.Directory.Exists(ConfigurationSettings.AppSettings[clsChangLiang.WENJIAN_LUJING]))
{
System.IO.Directory.CreateDirectory(ConfigurationSettings.AppSettings[clsChangLiang.WENJIAN_LUJING]);
}
//存入配置信息数据到peizhi.xml
HuoDeShuJu(clsChangLiang.SHUJU_PEIZHIXINXI).WriteXml(this.peizhiWenJianLuJing);
//存入所有数据信息到shuju.xml
DataSet jibenShuJu = HuoDeShuJu(clsChangLiang.SHUJU_JIBENSHUJU);
DataSet xuqiuShuJu = HuoDeShuJu(clsChangLiang.SHUJU_XUQIU);
DataSet zongShuJu = new DataSet();
//2004-11-22 He
zongShuJu.Merge(xuqiuShuJu);
zongShuJu.Merge(jibenShuJu);
zongShuJu.WriteXml(this.shujuWenJianLuJing);
}
catch(Exception e)
{
if( e.GetType() == typeof(System.IO.DirectoryNotFoundException) ||
e.GetType() == typeof(System.IO.FileNotFoundException) )
{
clsRiZhiChuLi.JiLuRiZhi("数据路径错误"+e.Message);
}
}
}
/// <summary>
/// 更新数据
/// </summary>
/// <param name="ShuJuJian">数据键值</param>
/// <param name="ShuJu">需要更新的数据</param>
public void ShuJuGengXin(string ShuJuJian)
{
//从本地缓存的参考数据中获得最近的县数据
DataSet xianShuJu = lixianKongZhi.ReferenceDataCache.Retrieve(ShuJuJian) as DataSet;
if(xianShuJu == null)
{
return;
}
bool bianHua = false;
lock(this)
{
//如果最新的参考数据不等同于已有的数据,则保存最新的数据。
if(!ShuJuJiHeBiJiao(xianShuJu,HuoDeShuJu(ShuJuJian)))
{
xiangShuJu.Remove(ShuJuJian);
xiangShuJu.Add(ShuJuJian,xianShuJu);
//clsRiZhiChuLi.JiLuRiZhi("数据"+ShuJuJian+"发生了更新");
//zhangwj 11-22 每次更新存入文件
CunRuShuJu();
bianHua = true;
//分割需求,2.0.0.0
if(ShuJuJian.Equals(clsChangLiang.SHUJU_XUQIU) )
{
ArrayList shuju = this.QuFengXuQiuShuJu(xianShuJu);
xiangShuJu.Remove(clsChangLiang.SHUJU_XUQIU_WEIDAFU);
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU_WEIDAFU,shuju[0]);
xiangShuJu.Remove(clsChangLiang.SHUJU_XUQIU_YIDAFU);
xiangShuJu.Add(clsChangLiang.SHUJU_XUQIU_YIDAFU,shuju[1]);
}
}
//处理需求变化队列
if(bianHua && ShuJuJian.Equals(clsChangLiang.SHUJU_XUQIU))
{
xuqiuShiFouBianHua = true;//变化
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -