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