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#

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; }
}