Wildcard.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using Newtonsoft.Json.Linq;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Business.Core.Utilities
  8. {
  9. /// <summary>
  10. /// 通配符类
  11. /// </summary>
  12. public class Wildcard
  13. {
  14. /// <summary>
  15. /// 所有通配符
  16. /// </summary>
  17. private static readonly string[] Wildcards = new string[] {
  18. "{<UserId>}",//当前登录用户id
  19. "{<UserName>}",//当前登录用户姓名
  20. "{<UserAccount>}",//当前登录用户帐号
  21. "{<UserDeptId>}",//当前登录用户所在部门id
  22. "{<UserDeptName>}",//当前登录用户所在部门名称
  23. "{<UserStationId>}",//当前登录用户所在岗位id
  24. "{<UserStationName>}",//当前登录用户所在岗位名称
  25. "{<UserWorkGroupId>}",//当前登录用户所在工作组id(如果有多个英文逗号,分隔)
  26. "{<UserWorkGroupName>}",//当前登录用户所在工作组名称(如果有多个中文分号;分隔)
  27. "{<UserUnitId>}",//当前登录用户所在单位id
  28. "{<UserCompanyId>}",//当前登录用户所在单位id
  29. "{<UserUnitName>}",//当前用户所在单位名称
  30. "{<UserCompanyName>}",//当前用户所在单位名称
  31. "{<UserOrganize>}",//当前用户组织关系(示例:研发部 \ 产品开发组)
  32. "{<UserOrganizeRoot>}",//当前用户组织关系,包含根(示例:重庆云思维软件技术有限公司 \ 研发部 \ 产品开发组)
  33. "{<UserSign>}",//用户签章,如果设置有签章图片返回图片,否则返回用户姓名。
  34. "{<InitiatorId>}",//流程的发起者id
  35. "{<InitiatorName>}",//流程的发起者姓名
  36. "{<InitiatorDeptId>}",//流程发起者所在部门id
  37. "{<InitiatorDeptName>}",//流程发起者所在部门名称
  38. "{<InitiatorStationId>}",//流程发起者所在岗位id
  39. "{<InitiatorStationName>}",//流程发起者所在岗位名称
  40. "{<InitiatorUnitId>}",//流程发起者单位id
  41. "{<InitiatorUnitName>}",//流程发起者单位名称
  42. "{<ShortDate>}",//短日期格式yyyy-MM-dd
  43. "{<LongDate>}",//长日期格式yyyy年M月d日
  44. "{<ShortDateTime>}",//短日期时间格式yyyy-MM-dd HH:mm
  45. "{<LongDateTime>}",//长日期时间格式yyyy年M月d日 H时m分
  46. "{<ShortDateTimeSecond>}",//短日期时间格式yyyy-MM-dd HH:mm:ss
  47. "{<LongDateTimeSecond>}",//长日期时间格式yyyy年M月d日 H时m分s秒
  48. "{<FlowId>}",//流程id
  49. "{<FlowName>}",//流程名称
  50. "{<StepId>}",//步骤id
  51. "{<StepName>}",//步骤名称
  52. "{<TaskId>}",//任务id
  53. "{<TaskTitle>}",//任务标题
  54. "{<InstanceId>}",//实例id
  55. "{<GroupId>}",//实例分组id
  56. "{<LongId>}",//生成一个新的long数字id
  57. "{Query<",//Get获取Url中的参数值
  58. "{Form<",//Post获取提交的值
  59. "{Get<",//先Get如果没获取到再Post获取提交的值
  60. "{DataRow<",//object参数传一个DataRow获取其中key列的值
  61. "{DateTime<",//获取自定义格式的当前日期时间值,如{DateTime<yyyy-MM-dd HH:mm>}
  62. "{Method<",//执行一个方法返回值,方法参数为object参数
  63. "{JArray<",//从JArray中获取key列的值,多个用英文逗号分隔
  64. "{JObject<",//从JObject中获取key的值
  65. "{Json<",//从JObject中获取key的值和JObject功能相同
  66. "{FlowTask<",//从FlowTask实体类字段获取key字段的值
  67. "{User<",//从用户实体中获取key字段的值
  68. };
  69. /// <summary>
  70. /// 得到通配符的值
  71. /// </summary>
  72. /// <param name="wildcardKey">通配符key</param>
  73. /// <param name="obj">参数对象</param>
  74. /// <returns></returns>
  75. private static string GetValue(string wildcardKey, params object?[] objs)
  76. {
  77. if ("{<ShortDate>}".EqualsIgnoreCase(wildcardKey))
  78. {
  79. //短日期格式yyyy-MM-dd
  80. return DateTime.Now.ToString("yyyy-MM-dd");
  81. }
  82. else if ("{<LongDate>}".EqualsIgnoreCase(wildcardKey))
  83. {
  84. //长日期格式yyyy年M月d日
  85. return DateTime.Now.ToString("yyyy年M月d日");
  86. }
  87. else if ("{<ShortDateTime>}".EqualsIgnoreCase(wildcardKey))
  88. {
  89. //短日期时间格式yyyy-MM-dd HH:mm
  90. return DateTime.Now.ToString("yyyy-MM-dd HH:mm");
  91. }
  92. else if ("{<LongDateTime>}".EqualsIgnoreCase(wildcardKey))
  93. {
  94. //长日期时间格式yyyy年M月d日 H时m分
  95. return DateTime.Now.ToString("yyyy年M月d日 H时m分");
  96. }
  97. else if ("{<ShortDateTimeSecond>}".EqualsIgnoreCase(wildcardKey))
  98. {
  99. //短日期时间格式yyyy-MM-dd HH:mm:ss
  100. return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  101. }
  102. else if ("{<LongDateTimeSecond>}".EqualsIgnoreCase(wildcardKey))
  103. {
  104. //长日期时间格式yyyy年M月d日 H时m分s秒
  105. return DateTime.Now.ToString("yyyy年M月d日 H时m分s秒");
  106. }
  107. return string.Empty;
  108. }
  109. /// <summary>
  110. /// 替换通配符
  111. /// </summary>
  112. /// <param name="str">包含通配符的字符串</param>
  113. /// <param name="obj">包含通配符值的对象</param>
  114. /// <returns></returns>
  115. public static string Replace(string? str, params object?[] objs)
  116. {
  117. if (string.IsNullOrWhiteSpace(str))
  118. {
  119. return string.Empty;
  120. }
  121. foreach (string wildcardKey in Wildcards)
  122. {
  123. while (str.ContainsIgnoreCase(wildcardKey))
  124. {
  125. string wildcardKey1 = wildcardKey;
  126. string? value = string.Empty;
  127. //Get获取Url中的参数值
  128. if ("{DateTime<".EqualsIgnoreCase(wildcardKey))
  129. {
  130. string key = str.Substring(str.IndexOfIgnoreCase("{DateTime<") + 10);
  131. string key1 = key.Substring(0, key.IndexOf(">}"));
  132. if (!string.IsNullOrWhiteSpace(key1))
  133. {
  134. wildcardKey1 = wildcardKey + key1 + ">}";
  135. value = DateTime.Now.ToString(key1);
  136. }
  137. }
  138. else
  139. {
  140. value = GetValue(wildcardKey, objs);
  141. }
  142. str = str.ReplaceIgnoreCase(wildcardKey1, value);
  143. }
  144. }
  145. return str;
  146. }
  147. }
  148. }