//
// Copyright (c) 2019 openauth.net.cn. All rights reserved.
//
// www.cnblogs.com/yubaolee
// 2019-03-05
// 流程中的连线
using System.Collections.Generic;
using System.Linq;
using Infrastructure;
using Infrastructure.Extensions;
using Newtonsoft.Json.Linq;
namespace OpenAuth.App.Flow
{
///
/// 流程连线
///
public class FlowLine
{
public string id { get; set; }
public string label { get; set; }
public string type { get; set; }
public string from { get; set; }
public string to { get; set; }
public string name { get; set; }
public bool dash { get; set; }
/// 分支条件
public List Compares { get; set; }
public bool Compare(JObject frmDataJson)
{
bool result = true;
foreach (var compare in Compares)
{
bool isDecimal = decimal.TryParse(compare.Value, out decimal value);
var fieldVal = frmDataJson.GetValue(compare.FieldName.ToLower()).ToString();
if (isDecimal) //如果是数字或小数
{
decimal frmvalue = 0;
if (fieldVal.Contains("["))//表单中的数据包含[],为数组,一般是checkbox的值
{
var tempvals = JsonHelper.Instance.Deserialize>(fieldVal);
frmvalue = tempvals.Max();
}
else
{
frmvalue = decimal.Parse(fieldVal); //表单中填写的值
}
switch (compare.Operation)
{
case DataCompare.Equal:
result &= compare.Value == fieldVal;
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.NotEqual:
result &= frmvalue != value;
break;
}
}
else //如果只是字符串,只判断相等
{
if (fieldVal.Contains("["))//表单中的数据包含[],为数组,一般是checkbox的值
{
var tempvals = JsonHelper.Instance.Deserialize>(fieldVal);
result &= tempvals.Contains(compare.Value);
}
else
{
switch (compare.Operation)
{
case DataCompare.Equal:
result &= compare.Value == fieldVal;
break;
case DataCompare.Larger:
result &= string.Compare(compare.Value, fieldVal, false) > 0;
break;
case DataCompare.Less:
result &= string.Compare(compare.Value, fieldVal, false) < 0;
break;
case DataCompare.LargerEqual:
result &= string.Compare(compare.Value, fieldVal, false) >= 0;
break;
case DataCompare.LessEqual:
result &= string.Compare(compare.Value, fieldVal, false) <= 0;
break;
case DataCompare.NotEqual:
result &= compare.Value != fieldVal;
break;
}
}
}
}
return result;
}
}
///
/// 分支条件
///
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 string Operation { get; set; }
/// form种的字段名称
public string FieldName { get; set; }
/// 字段类型:"form":为表单中的字段,后期扩展系统表等.
public string FieldType { get; set; }
/// 比较的值
public string Value { get; set; }
}
}