public class SystemSetingBLL
{
private ArrayList result = new ArrayList();
private long source = 0;
/// <summary>
/// 属性:获取数据源
/// </summary>
public long Source
{
get
{
return this.source;
}
set
{
this.source = value;
}
}
/// <summary>
/// 返回公约数集--全为素数
/// </summary>
public ArrayList Result
{
get
{
result.Clear();
if (source <= 0)
return null;
else
{
SplitStatus(this.source);
return this.result;
}
}
}
/// <summary>
/// 根据数据源求出所有的素数集合
/// </summary>
/// <param name="statusValue"></param>
private void SplitStatus(long statusValue)
{
bool tempStatus = false;
long temp = (long)Math.Sqrt(statusValue);
for (int i = 2; i <= temp; i++)
{
if (statusValue % i == 0)
{
tempStatus = true;
result.Add(i);
statusValue = statusValue / i;
SplitStatus(statusValue);
break;
}
}
if (!tempStatus)
result.Add(statusValue);
}
/// <summary>
/// 将两种状态复合成一个纯净的新状态
/// </summary>
/// <param name="statusSource">原状态</param>
/// <param name="statusTarget">新状态</param>
/// <returns>复合后的新状态</returns>
public long CompoundStatus(long statusSource, long statusTarget)
{
//求出'冲突'关系类型编号
int relationTypeID = RelationTypes.GetRelationTypeIDByRelationName("冲突");
//如果无此编号,返回0表示有错误
if (relationTypeID == 0)
return 0;
//求出statusTarget的所有约数(素数级)
this.Source = statusTarget;
ArrayList targetPrimeList = this.Result;
//如果数据源为0则返回0,报错
if(targetPrimeList == null)
return 0;
//遍历该素数集合,进行业务处理
foreach (object temp in targetPrimeList)
{
long tempPrime = (long)temp;
//过滤到statusSource中与目标约数集合有包含关系的约数
if (statusSource % tempPrime == 0)
statusSource = statusSource / tempPrime;
//寻找该素数的所有冲突状态值
DataSet dsClash = new DataSet();
Relations.FillAllRelationShipByItemID(dsClash, "Clash", tempPrime, relationTypeID);
//如果没有冲突状态,忽略;
if (dsClash == null)
continue;
//如果有冲突状态,则将该值从statusSource中过滤掉。
else
{
foreach (DataRow dr in dsClash.Tables["Clash"].Rows)
{
long temp1 = Convert.ToInt64(dr["result"]);
if (statusSource % temp1 == 0)
statusSource = statusSource / temp1;
}
}
}
//将纯净的statusSource与目标状态复合,并返回新状态
return statusSource * statusTarget;
}









