You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
303 lines
11 KiB
C#
303 lines
11 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace Magic.FlowCenter.Entity;
|
|
|
|
/// <summary>
|
|
/// 流程连线
|
|
/// </summary>
|
|
public class FlowLine
|
|
{
|
|
/// <summary>
|
|
/// 线Id
|
|
/// </summary>
|
|
public string id { get; set; }
|
|
/// <summary>
|
|
/// 显示
|
|
/// </summary>
|
|
public string label { get; set; }
|
|
/// <summary>
|
|
/// 类型
|
|
/// </summary>
|
|
public string type { get; set; }
|
|
/// <summary>
|
|
/// 源头节点
|
|
/// </summary>
|
|
public string sourceId { get; set; }
|
|
/// <summary>
|
|
/// 目标节点
|
|
/// </summary>
|
|
public string targetId { get; set; }
|
|
/// <summary>
|
|
/// 名称
|
|
/// </summary>
|
|
public string name { get; set; }
|
|
/// <summary>
|
|
/// 连接样式
|
|
/// </summary>
|
|
public LineStyle cls { get; set; }
|
|
|
|
/// <summary> 分支条件 </summary>
|
|
public List<DataCompare> Compares { get; set; }
|
|
/// <summary>
|
|
/// 连线比较
|
|
/// </summary>
|
|
/// <param name="frmDataJson"></param>
|
|
/// <returns></returns>
|
|
public bool Compare(JObject frmDataJson)
|
|
{
|
|
bool result = true;
|
|
foreach (var compare in Compares)
|
|
{
|
|
compare.FieldName = compare.FieldName.ToLower();
|
|
compare.Value = compare.Value.ToLower();
|
|
decimal value=0; //参考值
|
|
decimal frmvalue=0; //表单中填写的值
|
|
if (compare.Operation!= DataCompare.Equal&& compare.Operation != DataCompare.NotEqual)
|
|
{
|
|
value = decimal.Parse(compare.Value);
|
|
frmvalue = decimal.Parse(frmDataJson.GetValue(compare.FieldName.ToLower()).ToString()); //表单中填写的值
|
|
}
|
|
bool res = false;
|
|
if (compare.Condition=="and")
|
|
{
|
|
switch (compare.Operation)
|
|
{
|
|
case DataCompare.Equal:
|
|
result &= compare.Value == frmDataJson.GetValue(compare.FieldName).ToString();
|
|
break;
|
|
case DataCompare.NotEqual:
|
|
result &= compare.Value != frmDataJson.GetValue(compare.FieldName).ToString();
|
|
break;
|
|
case DataCompare.Larger:
|
|
result &= frmvalue > value;
|
|
break;
|
|
case DataCompare.Less:
|
|
result &= frmvalue < value;
|
|
break;
|
|
case DataCompare.LargerEqual:
|
|
result &= frmvalue <= value;
|
|
break;
|
|
case DataCompare.LessEqual:
|
|
result &= frmvalue <= value;
|
|
break;
|
|
case DataCompare.In:
|
|
if (compare.FieldName == "申请人" || compare.FieldName == "所属部门")
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
foreach (var item in frmDataJson.GetValue(compare.FieldName).ToString().Split(','))
|
|
{
|
|
if (arr.Contains(item))
|
|
{
|
|
res = true;
|
|
break;
|
|
}
|
|
}
|
|
result &= res;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
if (arr.Contains(frmvalue.ToString()))
|
|
{
|
|
res = true;
|
|
break;
|
|
}
|
|
result &= res;
|
|
break;
|
|
}
|
|
case DataCompare.NotIn:
|
|
if (compare.FieldName == "申请人" || compare.FieldName == "所属部门")
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
foreach (var item in frmDataJson.GetValue(compare.FieldName).ToString().Split(','))
|
|
{
|
|
if (arr.Contains(item))
|
|
{
|
|
res = false;
|
|
break;
|
|
}
|
|
}
|
|
result &= res;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
if (arr.Contains(frmvalue.ToString()))
|
|
{
|
|
res = false;
|
|
break;
|
|
}
|
|
result &= res;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (compare.Operation)
|
|
{
|
|
case DataCompare.Equal:
|
|
if (compare.FieldName == "申请人" || compare.FieldName == "所属部门")
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
foreach (var item in frmDataJson.GetValue(compare.FieldName).ToString().Split(','))
|
|
{
|
|
if (arr.Contains(item))
|
|
{
|
|
res = true;
|
|
break;
|
|
}
|
|
}
|
|
result |= res;
|
|
break;
|
|
}
|
|
result |= compare.Value == frmDataJson.GetValue(compare.FieldName).ToString();
|
|
break;
|
|
case DataCompare.NotEqual:
|
|
if (compare.FieldName == "申请人" || compare.FieldName == "所属部门")
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
foreach (var item in frmDataJson.GetValue(compare.FieldName).ToString().Split(','))
|
|
{
|
|
if (arr.Contains(item))
|
|
{
|
|
res = false;
|
|
break;
|
|
}
|
|
}
|
|
result |= res;
|
|
break;
|
|
}
|
|
result |= compare.Value != frmDataJson.GetValue(compare.FieldName).ToString();
|
|
break;
|
|
case DataCompare.Larger:
|
|
result |= frmvalue > value;
|
|
break;
|
|
case DataCompare.Less:
|
|
result |= frmvalue < value;
|
|
break;
|
|
case DataCompare.LargerEqual:
|
|
result |= frmvalue <= value;
|
|
break;
|
|
case DataCompare.LessEqual:
|
|
result |= frmvalue <= value;
|
|
break;
|
|
case DataCompare.In:
|
|
if (compare.FieldName == "申请人" || compare.FieldName == "所属部门")
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
foreach (var item in frmDataJson.GetValue(compare.FieldName).ToString().Split(','))
|
|
{
|
|
if (arr.Contains(item))
|
|
{
|
|
res = true;
|
|
break;
|
|
}
|
|
}
|
|
result |= res;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
if (arr.Contains(frmvalue.ToString()))
|
|
{
|
|
res = true;
|
|
}
|
|
result |= res;
|
|
break;
|
|
}
|
|
case DataCompare.NotIn:
|
|
if (compare.FieldName == "申请人" || compare.FieldName == "所属部门")
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
foreach (var item in frmDataJson.GetValue(compare.FieldName).ToString().Split(','))
|
|
{
|
|
if (arr.Contains(item))
|
|
{
|
|
res = false;
|
|
break;
|
|
}
|
|
}
|
|
result |= res;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
var arr = compare.Value.Split(',');
|
|
if (arr.Contains(frmvalue.ToString()))
|
|
{
|
|
res = false;
|
|
}
|
|
result |= res;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 分支条件
|
|
/// </summary>
|
|
public class DataCompare
|
|
{
|
|
public const string Larger = ">";
|
|
public const string Less = "<";
|
|
public const string LargerEqual = ">=";
|
|
public const string LessEqual = "<=";
|
|
public const string NotEqual = "!=";
|
|
public const string Equal = "=";
|
|
public const string In = "in";
|
|
public const string NotIn = "not in";
|
|
|
|
/// <summary>操作类型比如大于/等于/小于</summary>
|
|
public string Operation { get; set; }
|
|
|
|
/// <summary> form种的字段名称 </summary>
|
|
public string FieldName { get; set; }
|
|
|
|
/// <summary> 字段类型:"form":为表单中的字段,后期扩展系统表等. </summary>
|
|
public string FieldType { get; set; }
|
|
|
|
/// <summary>实际的值</summary>
|
|
public string Value { get; set; }
|
|
/// <summary>
|
|
/// 实际值的显示值
|
|
/// </summary>
|
|
public string ValueName { get; set; }
|
|
/// <summary>
|
|
/// 显示值
|
|
/// </summary>
|
|
public string Name { get; set; }
|
|
/// <summary>
|
|
/// 条件关系
|
|
/// </summary>
|
|
public string Condition { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 连接样式
|
|
/// </summary>
|
|
public class LineStyle
|
|
{
|
|
/// <summary>
|
|
/// 连接类型
|
|
/// </summary>
|
|
public string linkType { get; set; }
|
|
/// <summary>
|
|
/// 连接颜色
|
|
/// </summary>
|
|
public string linkColor { get; set; }
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int linkThickness { get; set; }
|
|
}
|