init commit

This commit is contained in:
路 范
2022-03-30 17:54:33 +08:00
parent df01841625
commit 904bdd16cd
500 changed files with 217251 additions and 0 deletions

View File

@@ -0,0 +1,541 @@
using System;
using System.Collections.Generic;
using System.Text;
using Ewide.Core;
using RoadFlow.Data;
using RoadFlow.Utility;
namespace RoadFlow.Business
{
/// <summary>
/// 通配符类
/// </summary>
public class Wildcard
{
private static readonly string[] wildcardList = new string[] {
"{<UserId>}",
"{<UserName>}",
"{<UserAccount>}",
"{<UserDeptId>}",
"{<UserDeptName>}",
"{<UserStationId>}",
"{<UserStationName>}",
"{<UserWorkGroupId>}",
"{<UserWorkGroupName>}",
"{<UserDeptLeaderId>}",
"{<UserDeptLeaderName>}",
"{<UserCharegLeaderId>}",
"{<UserCharegLeaderName>}",
"{<UserUnitId>}",
"{<UserUnitName>}",
"{<InitiatorId>}",
"{<InitiatorName>}",
"{<InitiatorDeptId>}",
"{<InitiatorDeptName>}",
"{<InitiatorStationId>}",
"{<InitiatorStationName>}",
"{<InitiatorRoleId>}",
"{<InitiatorRoleName>}",
"{<InitiatorUnitId>}",
"{<InitiatorUnitName>}",
"{<InitiatorLeaderId>}",
"{<InitiatorLeaderName>}",
"{<InitiatorCharegId>}",
"{<InitiatorCharegName>}",
"{<ShortDate>}",
"{<LongDate>}",
"{<ShortDateTime>}",
"{<LongDateTime>}",
"{<ShortDateTimeSecond>}",
"{<LongDateTimeSecond>}",
"{<FlowId>}",
"{<FlowName>}",
"{<StepId>}",
"{<StepName>}",
"{<TaskId>}",
"{<InstanceId>}",
"{<GroupId>}",
"{<PrevInstanceId>}",
"{<PrevFlowTitle>}",
"{<Guid>}",
"{<EmptyGuid>}",
"{Query<",
"{Form<",
"{DataRow<",
"{Date<",
"{Method<",
"{SQL<",
"{JArray<",
"{JObject<"
};
public static string GetWildcardValue(string wildcard, SysUser userModel, object obj)
{
IUserManager userManager = Furion.App.GetService<IUserManager>();
UserDummy user = new UserDummy();
var httpContext = Tools.HttpContext;
Microsoft.AspNetCore.Http.HttpRequest request = httpContext?.Request;
switch (wildcard.ToLower())
{
case "{<userid>}"://当前用户ID
userModel = userModel ?? userManager.User;
return userModel == null ? "" : userModel.Id.ToUpper();
case "{<username>}"://当前用户姓名
userModel = userModel ?? userManager.User;
return userModel == null ? "" : userModel.Name;
case "{<useraccount>}"://当前帐号
userModel = userModel ?? userManager.User;
return userModel == null ? "" : userModel.Account;
case "{<userdeptid>}"://当前用户部门ID
userModel = userModel ?? userManager.User;
if (userModel == null)
{
return "";
}
var dept = user.GetDept(userModel.Id);
return dept == null ? "" : dept.Id.ToUpper();
case "{<userdeptname>}"://当前用户部门名称
userModel = userModel ?? userManager.User;
if (userModel == null)
{
return "";
}
var dept1 = user.GetDept(userModel.Id);
return dept1 == null ? "" : dept1.Name;
case "{<userstationid>}"://当前用户岗位ID
userModel = userModel ?? userManager.User;
if (userModel == null)
{
return "";
}
var station = user.GetStation(userModel.Id);
return station == null ? "" : station.Id.ToUpper();
case "{<userstationname>}"://当前用户岗位名称
userModel = userModel ?? userManager.User;
if (userModel == null)
{
return "";
}
var station1 = user.GetStation(userModel.Id);
return station1 == null ? "" : station1.Name;
case "{<userworkgroupid>}"://当前用户工作组ID
userModel = userModel ?? userManager.User;
return userModel == null ? "" : user.GetWorkGroupsId(userModel.Id);
case "{<userworkgroupname>}"://当前用户工作组名称
userModel = userModel ?? userManager.User;
return userModel == null ? "" : user.GetWorkGroupsName(userModel.Id);
case "{<userdeptleaderid>}"://当前用户部门领导ID
userModel = userModel ?? userManager.User;
return userModel == null ? "" : user.GetLeader(userModel.Id.ToString());
case "{<userdeptleadername>}"://当前用户部门领导姓名
userModel = userModel ?? userManager.User;
return userModel == null ? "" : user.GetNames(user.GetLeader(userModel.Id));
case "{<usercharegleaderid>}"://当前用户分管领导ID
userModel = userModel ?? userManager.User;
return userModel == null ? "" : user.GetLeader(userModel.Id);
case "{<usercharegleadername>}"://当前用户分管领导姓名
userModel = userModel ?? userManager.User;
return userModel == null ? "" : user.GetNames(user.GetLeader(userModel.Id));
case "{<userunitid>}"://当前用户单位ID
userModel = userModel ?? userManager.User;
if (userModel == null)
{
return "";
}
var unit = user.GetUnit(userModel.Id);
return unit == null ? "" : unit.Id.ToUpper();
case "{<userunitname>}"://当前用户单位名称
userModel = userModel ?? userManager.User;
if (userModel == null)
{
return "";
}
var unit1 = user.GetUnit(userModel.Id.ToString());
return unit1 == null ? "" : unit1.Name;
case "{<initiatorid>}"://发起者ID
userModel = userModel ?? userManager.User;
var firstId = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
return firstId.IsNullOrWhiteSpace() && userModel != null ? userModel.Id.ToString() : firstId.ToString();
case "{<initiatorname>}"://发起者姓名
userModel = userModel ?? userManager.User;
var firstId1 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
return firstId1.IsNullOrWhiteSpace() && userModel != null ? userModel.Name : user.GetName(firstId1);
case "{<initiatordeptid>}"://发起者部门ID
userModel = userModel ?? userManager.User;
var firstId2 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
if (firstId2.IsNullOrWhiteSpace() && null != userModel)
{
firstId2 = userModel.Id;
}
var dept2 = user.GetDept(firstId2.ToString());
return null == dept2 ? "" : dept2.Id.ToString();
case "{<initiatordeptname>}"://发起者部门名称
userModel = userModel ?? userManager.User;
var firstId3 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
if (firstId3.IsNullOrWhiteSpace() && null != userModel)
{
firstId3 = userModel.Id;
}
var dept3 = user.GetDept(firstId3.ToString());
return dept3 == null ? "" : dept3.Name;
case "{<initiatorstationid>}"://发起者岗位ID
userModel = userModel ?? userManager.User;
var firstId4 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
if (firstId4.IsNullOrWhiteSpace() && null != userModel)
{
firstId4 = userModel.Id;
}
var station4 = user.GetStation(firstId4.ToString());
return station4 == null ? "" : station4.Id.ToString();
case "{<initiatorstationname>}"://发起者岗位名称
var firstId5 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId5.IsNullOrWhiteSpace() && null != userModel)
{
firstId5 = userModel.Id;
}
var station5 = user.GetStation(firstId5.ToString());
return station5 == null ? "" : station5.Name;
case "{<initiatorworkgroupid>}"://发起者角色组ID
var firstId6 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId6.IsNullOrWhiteSpace() && null != userModel)
{
firstId6 = userModel.Id;
}
return user.GetWorkGroupsId(firstId6);
case "{<initiatorworkgroupname>}"://发起者角色组名称
var firstId7 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId7.IsNullOrWhiteSpace() && null != userModel)
{
firstId7 = userModel.Id;
}
return user.GetWorkGroupsName(firstId7);
case "{<initiatorunitid>}"://发起者单位ID
var firstId8 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId8.IsNullOrWhiteSpace() && null != userModel)
{
firstId8 = userModel.Id;
}
var unit8 = user.GetUnit(firstId8.ToString());
return unit8 == null ? "" : unit8.Id.ToString();
case "{<initiatorunitname>}"://发起者单位名称
var firstId9 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId9.IsNullOrWhiteSpace() && null != userModel)
{
firstId9 = userModel.Id;
}
var unit9 = user.GetUnit(firstId9.ToString());
return unit9 == null ? "" : unit9.Name;
case "{<initiatorleaderid>}"://发起者部门领导ID
var firstId10 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId10.IsNullOrWhiteSpace() && null != userModel)
{
firstId10 = userModel.Id;
}
return user.GetLeader(firstId10.ToString());
case "{<initiatorleadername>}"://发起者部门领导姓名
var firstId11 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId11.IsNullOrWhiteSpace() && null != userModel)
{
firstId11 = userModel.Id;
}
return user.GetNames(user.GetLeader(firstId11));
case "{<initiatorcharegid>}"://发起者分管领导ID
var firstId12 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId12.IsNullOrWhiteSpace() && null != userModel)
{
firstId12 = userModel.Id;
}
return user.GetLeader(firstId12.ToString());
case "{<initiatorcharegname>}"://发起者分管领导姓名
var firstId13 = new FlowTask().GetFirstSenderId(request.Querys("groupid"));
userModel = userModel ?? userManager.User;
if (firstId13.IsNullOrWhiteSpace() && null != userModel)
{
firstId13 = userModel.Id;
}
return user.GetNames(user.GetLeader(firstId13.ToString()));
case "{<shortdate>}"://短日期格式(yyyy-MM-dd)
return DateExtensions.Now.ToString("yyyy-MM-dd");
case "{<longdate>}"://长日期格式(yyyy年MM月dd日)
return DateExtensions.Now.ToString("yyyy年MM月dd日");
case "{<shortdatetime>}"://短日期时间(yyyy-MM-dd HH:mm)
return DateExtensions.Now.ToString("yyyy-MM-dd HH:mm");
case "{<longdatetime>}"://长日期格式(yyyy年MM月dd日 HH时mm分)
return DateExtensions.Now.ToString("yyyy年MM月dd日 HH时mm分");
case "{<shortdatetimesecond>}"://短日期时间(yyyy-MM-dd HH:mm:ss)
return DateExtensions.Now.ToString("yyyy-MM-dd HH:mm:ss");
case "{<longdatetimesecond>}"://长日期格式(yyyy年MM月dd日 HH时mm分ss秒)
return DateExtensions.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒");
case "{<flowid>}"://流程ID
return request.Querys("flowid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "flowid") : request.Querys("flowid");
case "{<flowname>}"://流程名称
string flowId = request.Querys("flowid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "flowid") : request.Querys("flowid");
return !flowId.IsGuid() ? "" : new Flow().GetOneById(flowId).Name;
case "{<stepid>}"://流程步骤ID
return request.Querys("stepid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "stepid") : request.Querys("stepid");
case "{<stepname>}"://流程步骤名称
string flowId1 = request.Querys("flowid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "flowid") : request.Querys("flowid");
string stepId = request.Querys("stepid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "stepid") : request.Querys("stepid");
return flowId1.IsGuid() ? new Flow().GetStepName(flowId1, stepId.ToGuid()) : string.Empty;
case "{<taskid>}"://任务ID
return request.Querys("taskid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "taskid") : request.Querys("taskid");
case "{<instanceid>}"://实例ID
string instanceId = request.Querys("instanceid");
if (instanceId.IsNullOrWhiteSpace())
{
instanceId = GetValueFromObj(obj, "instanceid");
}
if (instanceId.IsNullOrWhiteSpace())
{
instanceId = request.Forms("form_instanceid");
}
if (instanceId.IsNullOrWhiteSpace())
{
instanceId = request.Querys("instanceid1");
}
return instanceId;
case "{<groupid>}"://组ID
return request.Querys("groupid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "groupid") : request.Querys("groupid");
case "{<previnstanceid>}"://前一步实例ID
return new FlowTask().GetPrevInstanceID(request.Querys("taskid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "taskid") : request.Querys("taskid"));
case "{<prevflowtitle>}"://前一步流程任务标题
return new FlowTask().GetPrevTitle(request.Querys("taskid").IsNullOrWhiteSpace() ? GetValueFromObj(obj, "taskid") : request.Querys("taskid"));
case "{<guid>}"://随机生成UUID
return GuidExtensions.NewGuid().ToString();
case "{<emptyguid>}"://空UUID
return Guid.Empty.ToString();
}
return "";
}
/// <summary>
/// 从对象中获取值
/// </summary>
/// <param name="obj"></param>
/// <param name="idName"></param>
/// <returns></returns>
private static string GetValueFromObj(object obj, string idName)
{
if (obj == null || idName.IsNullOrWhiteSpace())
{
return string.Empty;
}
if (obj is Model.FlowRunModel.Execute executeModel)
{
switch (idName.ToLower())
{
case "flowid":
return executeModel.FlowId.ToString();
case "stepid":
return executeModel.StepId.ToString();
case "taskid":
return executeModel.TaskId.ToString();
case "instanceid":
return executeModel.InstanceId.ToString();
case "groupid":
return executeModel.GroupId.ToString();
}
}
else if (obj is Model.rf_flowtask taskModel)
{
switch (idName.ToLower())
{
case "flowid":
return taskModel.FlowId.ToString();
case "stepid":
return taskModel.StepId.ToString();
case "taskid":
return taskModel.Id.ToString();
case "instanceid":
return taskModel.InstanceId.ToString();
case "groupid":
return taskModel.GroupId.ToString();
}
}
return string.Empty;
}
/// <summary>
/// 过滤通配符
/// </summary>
/// <param name="str"></param>
/// <param name="currentUser">当前登录用户实体</param>
/// <param name="obj">对象</param>
/// <returns></returns>
public static string Filter(string str, SysUser user = null, object obj = null)
{
if (str.IsNullOrWhiteSpace())
{
return "";
}
var httpContent = Tools.HttpContext;
Microsoft.AspNetCore.Http.HttpRequest request = httpContent?.Request;
foreach (string wildcard in wildcardList)
{
while (str.ContainsIgnoreCase(wildcard))
{
string value = string.Empty;
string wildcard1 = wildcard;
if ("{Query<".EqualsIgnoreCase(wildcard))
{
string key = str.Substring(str.IndexOf("{Query<") + 7);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
value = request.Querys(key1).FilterSelectSql();//2021-3-8增加了.FilterSelectSql()过滤危险SQL。
}
}
else if ("{Form<".EqualsIgnoreCase(wildcard))
{
string key = str.Substring(str.IndexOf("{Form<") + 6);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
value = request.Forms(key1).FilterSelectSql();//2021-3-8增加了.FilterSelectSql()过滤危险SQL。
}
}
else if ("{DataRow<".EqualsIgnoreCase(wildcard))
{
string key = str.Substring(str.IndexOf("{DataRow<") + 9);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
var dr = (System.Data.DataRow)obj;
try
{
value = dr[key1].ToString().FilterSelectSql();//2021-3-8增加了.FilterSelectSql()过滤危险SQL。
}
catch
{
value = "";
}
}
}
else if ("{Method<".EqualsIgnoreCase(wildcard))
{
//执行一个方法替换通配符 object为方法参数
string key = str.Substring(str.IndexOf("{Method<") + 8);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
var (o, err) = obj == null ? Tools.ExecuteMethod(key1) : Tools.ExecuteMethod(key1, obj);
value = null == o ? "" : o.ToString().FilterSelectSql();//2021-3-8增加了.FilterSelectSql()过滤危险SQL。
}
}
else if ("{SQL<".EqualsIgnoreCase(wildcard))
{
//执行一个SQL替换通配符
string key = str.Substring(str.IndexOf("{SQL<") + 5);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
value = new DbConnection().GetFieldValue(key1).FilterSelectSql();//2021-3-8增加了.FilterSelectSql()过滤危险SQL。
}
}
else if ("{Date<".EqualsIgnoreCase(wildcard))
{
//取当前日期替换指定格式
string key = str.Substring(str.IndexOf("{Date<") + 6);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
value = DateExtensions.Now.ToString(key1);
}
}
else if ("{Object<".EqualsIgnoreCase(wildcard))
{
//将对象转换为字符串替换
string key = str.Substring(str.IndexOf("{Object<") + 8);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
value = obj == null ? "" : obj.ToString();
}
}
else if ("{JArray<".EqualsIgnoreCase(wildcard))
{
//取json数组值
string key = str.Substring(str.IndexOf("{JArray<") + 8);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
Newtonsoft.Json.Linq.JArray jArray = (Newtonsoft.Json.Linq.JArray)obj;
if (null != jArray)
{
foreach (Newtonsoft.Json.Linq.JObject jObject in jArray)
{
if (jObject.ContainsKey(key1))
{
value = jObject.Value<string>(key1);
break;
}
}
if (value.IsNullOrEmpty())
{
//这里循环找是取表单数据形式的JSON [{"name":"","value":""}] 这里取表单字段对应的值
foreach (Newtonsoft.Json.Linq.JObject jObject in jArray)
{
if (jObject.ContainsKey("name") && jObject.Value<string>("name").Equals(key1))
{
value = jObject.Value<string>("value");
break;
}
}
}
}
else
{
value = "";
}
}
}
else if ("{JObject<".EqualsIgnoreCase(wildcard))
{
//取json对象值
string key = str.Substring(str.IndexOf("{JObject<") + 9);
string key1 = key.Substring(0, key.IndexOf(">}"));
if (!key1.IsNullOrWhiteSpace())
{
wildcard1 = wildcard + key1 + ">}";
Newtonsoft.Json.Linq.JObject jObject = (Newtonsoft.Json.Linq.JObject)obj;
if (null != jObject && jObject.ContainsKey(key1))
{
value = jObject.Value<string>(key1);
}
else
{
value = "";
}
}
}
else
{
value = GetWildcardValue(wildcard, user, obj);
}
str = str.ReplaceIgnoreCase(wildcard1, value);
}
}
return str;
}
}
}