using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Business.Core.Utilities
{
///
/// 通配符类
///
public class Wildcard
{
///
/// 所有通配符
///
private static readonly string[] Wildcards = new string[] {
"{}",//当前登录用户id
"{}",//当前登录用户姓名
"{}",//当前登录用户帐号
"{}",//当前登录用户所在部门id
"{}",//当前登录用户所在部门名称
"{}",//当前登录用户所在岗位id
"{}",//当前登录用户所在岗位名称
"{}",//当前登录用户所在工作组id(如果有多个英文逗号,分隔)
"{}",//当前登录用户所在工作组名称(如果有多个中文分号;分隔)
"{}",//当前登录用户所在单位id
"{}",//当前登录用户所在单位id
"{}",//当前用户所在单位名称
"{}",//当前用户所在单位名称
"{}",//当前用户组织关系(示例:研发部 \ 产品开发组)
"{}",//当前用户组织关系,包含根(示例:重庆云思维软件技术有限公司 \ 研发部 \ 产品开发组)
"{}",//用户签章,如果设置有签章图片返回图片,否则返回用户姓名。
"{}",//流程的发起者id
"{}",//流程的发起者姓名
"{}",//流程发起者所在部门id
"{}",//流程发起者所在部门名称
"{}",//流程发起者所在岗位id
"{}",//流程发起者所在岗位名称
"{}",//流程发起者单位id
"{}",//流程发起者单位名称
"{}",//短日期格式yyyy-MM-dd
"{}",//长日期格式yyyy年M月d日
"{}",//短日期时间格式yyyy-MM-dd HH:mm
"{}",//长日期时间格式yyyy年M月d日 H时m分
"{}",//短日期时间格式yyyy-MM-dd HH:mm:ss
"{}",//长日期时间格式yyyy年M月d日 H时m分s秒
"{}",//流程id
"{}",//流程名称
"{}",//步骤id
"{}",//步骤名称
"{}",//任务id
"{}",//任务标题
"{}",//实例id
"{}",//实例分组id
"{}",//生成一个新的long数字id
"{Query<",//Get获取Url中的参数值
"{Form<",//Post获取提交的值
"{Get<",//先Get如果没获取到再Post获取提交的值
"{DataRow<",//object参数传一个DataRow获取其中key列的值
"{DateTime<",//获取自定义格式的当前日期时间值,如{DateTime}
"{Method<",//执行一个方法返回值,方法参数为object参数
"{JArray<",//从JArray中获取key列的值,多个用英文逗号分隔
"{JObject<",//从JObject中获取key的值
"{Json<",//从JObject中获取key的值和JObject功能相同
"{FlowTask<",//从FlowTask实体类字段获取key字段的值
"{User<",//从用户实体中获取key字段的值
};
///
/// 得到通配符的值
///
/// 通配符key
/// 参数对象
///
private static string GetValue(string wildcardKey, params object?[] objs)
{
if ("{}".EqualsIgnoreCase(wildcardKey))
{
//短日期格式yyyy-MM-dd
return DateTime.Now.ToString("yyyy-MM-dd");
}
else if ("{}".EqualsIgnoreCase(wildcardKey))
{
//长日期格式yyyy年M月d日
return DateTime.Now.ToString("yyyy年M月d日");
}
else if ("{}".EqualsIgnoreCase(wildcardKey))
{
//短日期时间格式yyyy-MM-dd HH:mm
return DateTime.Now.ToString("yyyy-MM-dd HH:mm");
}
else if ("{}".EqualsIgnoreCase(wildcardKey))
{
//长日期时间格式yyyy年M月d日 H时m分
return DateTime.Now.ToString("yyyy年M月d日 H时m分");
}
else if ("{}".EqualsIgnoreCase(wildcardKey))
{
//短日期时间格式yyyy-MM-dd HH:mm:ss
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
else if ("{}".EqualsIgnoreCase(wildcardKey))
{
//长日期时间格式yyyy年M月d日 H时m分s秒
return DateTime.Now.ToString("yyyy年M月d日 H时m分s秒");
}
return string.Empty;
}
///
/// 替换通配符
///
/// 包含通配符的字符串
/// 包含通配符值的对象
///
public static string Replace(string? str, params object?[] objs)
{
if (string.IsNullOrWhiteSpace(str))
{
return string.Empty;
}
foreach (string wildcardKey in Wildcards)
{
while (str.ContainsIgnoreCase(wildcardKey))
{
string wildcardKey1 = wildcardKey;
string? value = string.Empty;
//Get获取Url中的参数值
if ("{DateTime<".EqualsIgnoreCase(wildcardKey))
{
string key = str.Substring(str.IndexOfIgnoreCase("{DateTime<") + 10);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!string.IsNullOrWhiteSpace(key1))
{
wildcardKey1 = wildcardKey + key1 + ">}";
value = DateTime.Now.ToString(key1);
}
}
else
{
value = GetValue(wildcardKey, objs);
}
str = str.ReplaceIgnoreCase(wildcardKey1, value);
}
}
return str;
}
}
}