This commit is contained in:
2023-05-31 10:19:05 +08:00
parent 1b65a7a9e5
commit 9c621c75cd
238 changed files with 9905 additions and 4034 deletions

View File

@@ -83,6 +83,29 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
{
output.flowFormInfo = await _flowTaskRepository.GetFlowFromModel(flowTaskParamter.startProperties.formId);
output.flowTaskInfo = flowTaskParamter.flowTaskEntity.Adapt<FlowTaskModel>();
output.flowFormInfo.propertyJson = _runService.GetVisualDevModelDataConfig(output.flowFormInfo.propertyJson, output.flowFormInfo.tableJson, (int)output.flowFormInfo.formType);
if (flowTaskParamter.flowTaskEntity.Suspend == 1)
{
// 判断子流程的父流程是否被挂起
if (!flowTaskParamter.flowTaskEntity.ParentId.Equals("0"))
{
if (!await _flowTaskRepository.AnyFlowTask(x => x.Id == flowTaskParamter.flowTaskEntity.ParentId && x.DeleteMark == null && x.Suspend == 1))
{
output.flowTaskInfo.suspend = false;
output.flowTaskInfo.status = 6;
}
else
{
output.flowTaskInfo.status = 6;
output.flowTaskInfo.suspend = true;
}
}
else
{
output.flowTaskInfo.suspend = false;
output.flowTaskInfo.status = 6;
}
}
output.flowTaskOperatorRecordList = await _flowTaskRepository.GetTaskOperatorRecordModelList(id);
if (flowTaskParamter.flowTaskNodeEntityList.IsNotEmptyOrNull())
{
@@ -139,6 +162,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
{
var startProperties = output.flowTemplateInfo.flowTemplateJson.ToObject<FlowTemplateJsonModel>().properties.ToObject<StartProperties>();
output.flowFormInfo = await _flowTaskRepository.GetFlowFromModel(startProperties.formId);
output.flowFormInfo.propertyJson = _runService.GetVisualDevModelDataConfig(output.flowFormInfo.propertyJson, output.flowFormInfo.tableJson, (int)output.flowFormInfo.formType);
output.formData = await _runService.GetFlowFormDataDetails(output.flowFormInfo.id, id);
output.formOperates = startProperties.formOperates;
output.approversProperties = startProperties.ToObject<ApproversProperties>();
@@ -161,8 +185,8 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
try
{
var flowTaskEntity = new FlowTaskEntity();
flowTaskSubmitModel.isDev = _flowTaskRepository.IsDevFlow(flowTaskSubmitModel.flowId);//是否为功能表单
var flowJsonInfo = _flowTaskRepository.GetFlowTemplateInfo(flowTaskSubmitModel.flowId);
flowTaskSubmitModel.isDev = _flowTaskRepository.IsDevFlow(flowJsonInfo.templateId);//是否为功能表单
flowTaskSubmitModel.flowJsonModel = flowJsonInfo;
await flowTaskOtherUtil.GetFlowTitle(flowTaskSubmitModel);
// 表单数据处理
@@ -178,7 +202,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
flowTaskEntity.FlowUrgent = flowTaskSubmitModel.flowUrgent;
flowTaskEntity.FlowId = flowJsonInfo.id;
flowTaskEntity.FlowCode = flowJsonInfo.enCode;
flowTaskEntity.FlowName = flowJsonInfo.fullName;
flowTaskEntity.FlowName = flowJsonInfo.flowName;
flowTaskEntity.FlowType = flowJsonInfo.type;
flowTaskEntity.FlowCategory = flowJsonInfo.category;
flowTaskEntity.FlowTemplateJson = flowJsonInfo.flowTemplateJson;
@@ -205,6 +229,8 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
if (!(flowTaskSubmitModel.isDev && flowTaskSubmitModel.status == 1 && flowTaskSubmitModel.parentId.Equals("0")))
{
flowTaskEntity = _flowTaskRepository.GetTaskFirstOrDefault(flowTaskSubmitModel.id);
if (flowTaskEntity.Suspend == 1)
throw Oops.Oh(ErrorCode.WF0046);
if (flowTaskEntity.Status == FlowTaskStatusEnum.Handle.ParseToInt() && flowTaskSubmitModel.approvaUpType == 0)
throw Oops.Oh(ErrorCode.WF0031);
flowTaskEntity.FlowUrgent = flowTaskSubmitModel.flowUrgent;
@@ -328,9 +354,6 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
foreach (var item in messageDic.Keys)
{
var userList = messageDic[item].Select(x => x.HandleId).ToList();
// 委托人
//var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowTaskParamter.flowTaskEntity.TemplateId);
//userList = userList.Union(delegateUserIds).ToList();
bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, messageDic[item], 2);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.waitMsgConfig, bodyDic.Keys.ToList(), flowTaskParamter, "MBXTLC001", bodyDic);
// 超时提醒
@@ -345,7 +368,13 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
#endregion
bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, new List<string>() { flowTaskParamter.flowTaskEntity.CreatorUserId }, null, 1);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.endMsgConfig, new List<string>() { flowTaskParamter.flowTaskEntity.CreatorUserId }, flowTaskParamter, "MBXTLC0010", bodyDic);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.endMsgConfig, new List<string>() { flowTaskParamter.flowTaskEntity.CreatorUserId }, flowTaskParamter, "MBXTLC010", bodyDic);
}
//委托发起消息
if (flowTaskSubmitModel.isDelegate)
{
await flowTaskMsgUtil.SendDelegateMsg("发起", flowTaskParamter.flowTaskEntity.CreatorUserId, flowTaskParamter.flowTaskEntity.FlowName);
}
#endregion
@@ -379,7 +408,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
if (flowTaskParamter.flowTaskOperatorEntity.Id.IsNotEmptyOrNull() && FlowTaskNodeTypeEnum.approver.ParseToString().Equals(flowTaskParamter.flowTaskNodeEntity.NodeType))
{
var fEntity = _flowTaskRepository.GetFlowFromEntity(flowTaskParamter.flowTaskNodeEntity.FormId);
await _runService.SaveFlowFormData(fEntity, flowTaskParamter.formData.ToJsonString(), flowTaskParamter.flowTaskEntity.Id, true);
await _runService.SaveFlowFormData(fEntity, flowTaskParamter.formData.ToJsonString(), flowTaskParamter.flowTaskEntity.Id, flowTaskParamter.flowTaskEntity.FlowId, true);
}
}
if (flowTaskParamter.flowTaskEntity.RejectDataId.IsNullOrEmpty())
@@ -416,7 +445,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
if (flowTaskParamter.approversProperties.counterSign == 0 || flowTaskOtherUtil.IsAchievebilProportion(flowTaskParamter, 1))
{
var fEntity = _flowTaskRepository.GetFlowFromEntity(flowTaskParamter.flowTaskNodeEntity.FormId);
await _runService.SaveFlowFormData(fEntity, flowTaskParamter.formData.ToJsonString(), flowTaskParamter.flowTaskEntity.Id, true);
await _runService.SaveFlowFormData(fEntity, flowTaskParamter.formData.ToJsonString(), flowTaskParamter.flowTaskEntity.Id, flowTaskParamter.flowTaskEntity.FlowId, true);
var rejectDataEntity = await _flowTaskRepository.GetRejectDataInfo(flowTaskParamter.flowTaskEntity.RejectDataId);
await _flowTaskRepository.UpdateRejectData(rejectDataEntity);
_db.CommitTran();
@@ -508,6 +537,12 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, new List<string>() { flowTaskParamter.flowTaskEntity.CreatorUserId }, null, 1);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.endMsgConfig, new List<string>() { flowTaskParamter.flowTaskEntity.CreatorUserId }, flowTaskParamter, "MBXTLC010", bodyDic);
}
//委托审批消息
if (flowTaskParamter.flowTaskOperatorEntity.HandleId.IsNotEmptyOrNull() && !_userManager.UserId.Equals(flowTaskParamter.flowTaskOperatorEntity.HandleId))
{
await flowTaskMsgUtil.SendDelegateMsg("审批", flowTaskParamter.flowTaskOperatorEntity.HandleId, flowTaskParamter.flowTaskEntity.FlowName);
}
}
#endregion
@@ -605,10 +640,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
foreach (var item in messageDic.Keys)
{
var userList = messageDic[item].Select(x => x.HandleId).ToList();
//委托人
var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowTaskParamter.flowTaskEntity.TemplateId);
//userList = userList.Union(delegateUserIds).ToList();
//bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, messageDic[item], 2);
bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, messageDic[item], 2);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.waitMsgConfig, bodyDic.Keys.ToList(), flowTaskParamter, "MBXTLC001", bodyDic);
await flowTaskMsgUtil.Alerts(flowTaskParamter.approversProperties.rejectMsgConfig, bodyDic.Keys.ToList(), flowTaskParamter, "MBXTLC003", bodyDic);
// 超时提醒
@@ -617,6 +649,12 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
#endregion
}
//委托审批消息
if (!_userManager.UserId.Equals(flowTaskParamter.flowTaskOperatorEntity.HandleId))
{
await flowTaskMsgUtil.SendDelegateMsg("审批", flowTaskParamter.flowTaskOperatorEntity.HandleId, flowTaskParamter.flowTaskEntity.FlowName);
}
//退回到发起.
if (flowTaskParamter.flowTaskEntity.Status == FlowTaskStatusEnum.Reject.ParseToInt())
{
@@ -660,7 +698,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
if (flowTaskParamter.flowTaskEntity.RejectDataId.IsNotEmptyOrNull()) throw Oops.Oh(ErrorCode.WF0046);
//撤回经办记录
if (flowTaskOperatorRecordEntity.Status == -1)
throw Oops.Oh(ErrorCode.WF0011);
throw Oops.Oh(ErrorCode.WF0051);
//所有经办
var flowTaskOperatorEntityList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskOperatorRecordEntity.TaskId && x.State == "0");
#region
@@ -673,7 +711,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
//撤回节点下一节点已操作
var recallNextOperatorList = flowTaskOperatorEntityList.FindAll(x => flowTaskParamter.flowTaskNodeEntity.NodeNext.Contains(x.NodeCode));
if (recallNextOperatorList.FindAll(x => x.Completion == 1 && x.HandleStatus == 1).Count > 0 || flowTaskParamter.flowTaskNodeEntityList.Any(x => flowTaskParamter.flowTaskNodeEntity.NodeNext.Contains(x.NodeCode) && x.Completion == 1))
throw Oops.Oh(ErrorCode.WF0011);
throw Oops.Oh(ErrorCode.WF0050);
#endregion
#region
@@ -931,6 +969,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
if (flowTaskParamter.flowTaskOperatorEntity == null)
throw Oops.Oh(ErrorCode.COM1005);
flowTaskParamter.flowTaskOperatorEntity.HandleId = flowTaskParamter.freeApproverUserId;
flowTaskParamter.flowTaskOperatorEntity.CreatorTime = DateTime.Now;
var isOk = await _flowTaskRepository.UpdateTaskOperator(flowTaskParamter.flowTaskOperatorEntity);
if (!isOk)
throw Oops.Oh(ErrorCode.WF0007);
@@ -941,9 +980,6 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
_db.CommitTran();
var userList = new List<string>() { flowTaskParamter.freeApproverUserId };
//委托人
//var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowTaskParamter.flowTaskEntity.TemplateId);
//userList = userList.Union(delegateUserIds).ToList();
var bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, new List<FlowTaskOperatorEntity>() { flowTaskParamter.flowTaskOperatorEntity }, 2);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.waitMsgConfig, bodyDic.Keys.ToList(), flowTaskParamter, "MBXTLC001", bodyDic);
// 超时提醒
@@ -981,10 +1017,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
foreach (var item in messageDic.Keys)
{
var userList = messageDic[item].Select(x => x.HandleId).ToList();
//委托人
//var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowTaskParamter.flowTaskEntity.TemplateId);
//userList = userList.Union(delegateUserIds).ToList();
bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, new List<FlowTaskOperatorEntity>() { flowTaskParamter.flowTaskOperatorEntity }, 2);
bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, messageDic[item], 2);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.waitMsgConfig, bodyDic.Keys.ToList(), flowTaskParamter, "MBXTLC001", bodyDic);
}
}
@@ -1027,7 +1060,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
var flowTaskOperator = await _flowTaskRepository.GetTaskOperatorInfo(id);
if (flowTaskOperator.ParentId.IsNotEmptyOrNull() && type == 0) return output;// 加签不弹窗
// 选择分支:初始审批人前加签不算审批 后加签算审批
var flowTaskOperatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskOperator.TaskId && x.TaskNodeId == flowTaskOperator.TaskNodeId && x.State == "0" && (SqlFunc.IsNullOrEmpty(x.ParentId)|| !SqlFunc.IsNullOrEmpty(x.RollbackId)));
var flowTaskOperatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskOperator.TaskId && x.TaskNodeId == flowTaskOperator.TaskNodeId && x.State == "0" && (SqlFunc.IsNullOrEmpty(x.ParentId) || !SqlFunc.IsNullOrEmpty(x.RollbackId)));
var flowTaskNodeEntity = await _flowTaskRepository.GetTaskNodeInfo(flowTaskOperator.TaskNodeId);
flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.State == "0" && x.TaskId == flowTaskOperator.TaskId);
#region
@@ -1054,10 +1087,10 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
return flowTaskUserUtil.GetCandidateItems(nextNodeEntity, flowHandleModel);
}
await flowTaskUserUtil.GetCandidates(output, nextNodeEntityList, flowTaskNodeEntityList);
//return output;
// 弹窗类型 1:条件分支弹窗(包含候选人) 2:候选人弹窗 3:无弹窗
var branchType = output.Count > 0 ? (output.Any(x => x.isBranchFlow) ? 1 : 2) : 3;
if (!isCom && branchType == 1)
// 无弹窗1.条件分支且未达到会签比例2.任务冻结驳回
if ((!isCom && branchType == 1) || await _flowTaskRepository.AnyFlowTask(x => x.Id == flowHandleModel.id && !SqlFunc.IsNullOrEmpty(x.RejectDataId)))
{
branchType = 3;
}
@@ -1070,10 +1103,9 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
/// </summary>
/// <param name="flowId">流程id.</param>
/// <returns></returns>
public async Task<dynamic> NodeSelector(string templateId)
public async Task<dynamic> NodeSelector(string flowId)
{
var flowJsonEntity = _flowTaskRepository.GetFlowTemplateJsonInfo(x => x.TemplateId == templateId && x.EnabledMark == 1 && x.DeleteMark == null);
var flowJsonModel = _flowTaskRepository.GetFlowTemplateInfo(flowJsonEntity.Id);
var flowJsonModel = _flowTaskRepository.GetFlowTemplateInfo(flowId);
flowTemplateUtil.Load(flowJsonModel, null, string.Empty);
var taskNodeList = flowTemplateUtil.flowTaskNodeEntityList;
return taskNodeList.FindAll(x => FlowTaskNodeTypeEnum.approver.ParseToString().Equals(x.NodeType)).Select(x => new { id = x.NodeCode, fullName = x.NodePropertyJson.ToObject<ApproversProperties>().title }).ToList();
@@ -1201,6 +1233,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
public async Task<FlowTaskParamter> Validation(string taskOperatorId, FlowHandleModel flowHandleModel)
{
var flowTaskParamter = await _flowTaskRepository.GetTaskParamterByOperatorId(taskOperatorId, flowHandleModel);
if (flowTaskParamter.flowTaskEntity.Suspend == 1) throw Oops.Oh(ErrorCode.WF0046);
if (flowTaskParamter.flowTaskOperatorEntity.IsNullOrEmpty() || flowTaskParamter.flowTaskOperatorEntity.Completion != 0 || flowTaskParamter.flowTaskOperatorEntity.State == "-1")
throw Oops.Oh(ErrorCode.WF0030);
if (flowTaskParamter.flowTaskEntity.IsNullOrEmpty() || flowTaskParamter.flowTaskEntity.Status != 1 || flowTaskParamter.flowTaskEntity.DeleteMark.IsNotEmptyOrNull())
@@ -1217,7 +1250,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
/// <summary>
/// 变更/复活.
/// </summary>
/// <param name="flowHandleModel">变更/复活参数.</param>
/// <param name="flowTaskParamter">任务参数.</param>
/// <returns></returns>
public async Task<dynamic> Change(FlowTaskParamter flowTaskParamter)
{
@@ -1287,9 +1320,6 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
return flowTaskParamter.errorNodeList;
}
// 清空变更/复活流程候选人数据
//_flowTaskRepository.DeleteFlowCandidates(x => x.TaskId == changeNode.TaskId);
//await _flowTaskRepository.DeleteTaskOperatorRecord(x => x.TaskId == changeNode.TaskId);
await _flowTaskRepository.DeleteTaskOperatorRecord(x => x.TaskId == changeNode.TaskId && changeNodeNextIds.Contains(x.TaskNodeId));
foreach (var item in await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskParamter.flowTaskEntity.Id))
{
@@ -1340,9 +1370,6 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
foreach (var item in messageDic.Keys)
{
var userList = messageDic[item].Select(x => x.HandleId).ToList();
//委托人
//var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowTaskParamter.flowTaskEntity.TemplateId);
//userList = userList.Union(delegateUserIds).ToList();
var bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, new List<FlowTaskOperatorEntity>() { flowTaskParamter.flowTaskOperatorEntity }, 2);
await flowTaskMsgUtil.Alerts(flowTaskParamter.startProperties.waitMsgConfig, bodyDic.Keys.ToList(), flowTaskParamter, "MBXTLC001", bodyDic);
await TimeoutOrRemind(flowTaskParamter, item, messageDic[item]);// 超时提醒
@@ -1384,6 +1411,63 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
return new { list = upNodeCodeList, isLastAppro = true };
}
}
/// <summary>
/// 挂起.
/// </summary>
/// <param name="flowTaskParamter">任务参数.</param>
/// <returns></returns>
public async Task Suspend(FlowTaskParamter flowTaskParamter)
{
flowTaskParamter.flowTaskEntity.Suspend = 1;
await _flowTaskRepository.UpdateTask(flowTaskParamter.flowTaskEntity);
#region
await flowTaskOtherUtil.CreateOperatorRecode(flowTaskParamter, 11);
#endregion
if (!flowTaskParamter.suspend)
{
var childTask = await _flowTaskRepository.GetTaskList(x => flowTaskParamter.flowTaskEntity.Id == x.ParentId && x.DeleteMark == null);
foreach (var item in childTask)
{
var childFlowTaskParamter = await _flowTaskRepository.GetTaskParamterByTaskId(item.Id, null);
childFlowTaskParamter.handleOpinion = flowTaskParamter.handleOpinion;
childFlowTaskParamter.signImg = flowTaskParamter.signImg;
childFlowTaskParamter.suspend = flowTaskParamter.suspend;
childFlowTaskParamter.fileList = flowTaskParamter.fileList;
await this.Suspend(childFlowTaskParamter);
}
}
}
/// <summary>
/// 恢复.
/// </summary>
/// <param name="flowTaskParamter">任务参数.</param>
/// <returns></returns>
public async Task Restore(FlowTaskParamter flowTaskParamter)
{
flowTaskParamter.flowTaskEntity.Suspend = null;
await _flowTaskRepository.UpdateTask(flowTaskParamter.flowTaskEntity);
#region
await flowTaskOtherUtil.CreateOperatorRecode(flowTaskParamter, 12);
#endregion
var childTask = await _flowTaskRepository.GetTaskList(x => flowTaskParamter.flowTaskEntity.Id == x.ParentId && x.DeleteMark == null);
foreach (var item in childTask)
{
if (item.Suspend == 1)
{
var childFlowTaskParamter = await _flowTaskRepository.GetTaskParamterByTaskId(item.Id, null);
childFlowTaskParamter.handleOpinion = flowTaskParamter.handleOpinion;
childFlowTaskParamter.signImg = flowTaskParamter.signImg;
childFlowTaskParamter.fileList = flowTaskParamter.fileList;
await this.Restore(childFlowTaskParamter);
}
}
}
#endregion
#region PrivateMethod
@@ -1599,6 +1683,9 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
isAsync = childTaskPro.isAsync
};
var childTaskEntity = await this.Save(flowTaskSubmitModel);
var flowTaskParamter = new FlowTaskParamter { flowTaskEntity = childTaskEntity };
var bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, new List<string> { item }, null, 1);
await flowTaskMsgUtil.Alerts(childTaskPro.launchMsgConfig, new List<string> { item }, flowTaskParamter, "MBXTLC011", bodyDic);
childTaskId.Add(childTaskEntity.Id);
}
return childTaskId;
@@ -1755,7 +1842,7 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
flowTaskSubmitModel.formData = formDic;
}
var fEntity = _flowTaskRepository.GetFlowFromEntity(formId);
await _runService.SaveFlowFormData(fEntity, flowTaskSubmitModel.formData.ToJsonString(), id, isUpdate);
await _runService.SaveFlowFormData(fEntity, flowTaskSubmitModel.formData.ToJsonString(), id, flowTaskSubmitModel.flowId, isUpdate);
// 功能流程提交
if (flowTaskSubmitModel.isDev && flowTaskSubmitModel.id.IsNotEmptyOrNull() && flowTaskSubmitModel.status == 0)
{
@@ -1868,35 +1955,39 @@ public class FlowTaskManager : IFlowTaskManager, ITransient
/// <returns></returns>
private async Task NotifyEvent(ApproversProperties approPro, FlowTaskParamter flowTaskParamter, string nodeId, int count, bool isTimeOut)
{
var msgEncode = isTimeOut ? "MBXTLC009" : "MBXTLC008";
var msgReMark = isTimeOut ? "超时" : "提醒";
var msgConfig = isTimeOut ? approPro.overTimeMsgConfig : approPro.noticeMsgConfig;
var funcConfig = isTimeOut ? approPro.overTimeFuncConfig : approPro.noticeFuncConfig;
var timeOutConfig = isTimeOut ? approPro.overTimeConfig : approPro.noticeConfig;
// 通知
if (timeOutConfig.overNotice)
var flowTask = await _flowTaskRepository.GetTaskInfo(flowTaskParamter.flowTaskEntity.Id);
if (flowTask.IsNotEmptyOrNull() && flowTask.Suspend != 1)
{
var operatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskParamter.flowTaskEntity.Id && x.TaskNodeId == nodeId && x.Completion == 0 && x.State != "-1");
var userList = operatorList.Select(x => x.HandleId).ToList();
var remark = string.Format("现在时间:{3},节点{0}:第{1}次{2}通知", nodeId, count, msgReMark, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine(remark);
var bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, operatorList, 2, remark);
if (msgConfig.on > 0)
var msgEncode = isTimeOut ? "MBXTLC009" : "MBXTLC008";
var msgReMark = isTimeOut ? "超时" : "提醒";
var msgConfig = isTimeOut ? approPro.overTimeMsgConfig : approPro.noticeMsgConfig;
var funcConfig = isTimeOut ? approPro.overTimeFuncConfig : approPro.noticeFuncConfig;
var timeOutConfig = isTimeOut ? approPro.overTimeConfig : approPro.noticeConfig;
// 通知
if (timeOutConfig.overNotice)
{
await flowTaskMsgUtil.Alerts(msgConfig, userList, flowTaskParamter, msgEncode, bodyDic);
var operatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskParamter.flowTaskEntity.Id && x.TaskNodeId == nodeId && x.Completion == 0 && x.State != "-1");
var userList = operatorList.Select(x => x.HandleId).ToList();
var remark = string.Format("现在时间:{3},节点{0}:第{1}次{2}通知", nodeId, count, msgReMark, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine(remark);
var bodyDic = flowTaskMsgUtil.GetMesBodyText(flowTaskParamter, userList, operatorList, 2, remark);
if (msgConfig.on > 0)
{
await flowTaskMsgUtil.Alerts(msgConfig, userList, flowTaskParamter, msgEncode, bodyDic);
}
}
// 事件
if (funcConfig.on && timeOutConfig.overEvent && timeOutConfig.overEventTime == count)
{
Console.WriteLine(string.Format("开始执行{0}事件,现在时间:{1}", msgReMark, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
await flowTaskMsgUtil.RequestEvents(funcConfig, flowTaskParamter);
}
//自动审批
if (isTimeOut && timeOutConfig.overAutoApproveTime == count && timeOutConfig.overAutoApprove)
{
Console.WriteLine("开始自动审批,现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
await AutoAudit(flowTaskParamter, true);
}
}
// 事件
if (funcConfig.on && timeOutConfig.overEvent && timeOutConfig.overEventTime == count)
{
Console.WriteLine(string.Format("开始执行{0}事件,现在时间:{1}", msgReMark, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
await flowTaskMsgUtil.RequestEvents(funcConfig, flowTaskParamter);
}
//自动审批
if (isTimeOut && timeOutConfig.overAutoApproveTime == count && timeOutConfig.overAutoApprove)
{
Console.WriteLine("开始自动审批,现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
await AutoAudit(flowTaskParamter, true);
}
}

View File

@@ -61,7 +61,9 @@ public class FlowTaskMsgUtil
//默认消息
if (msgConfig.on == 3)
{
await _sendMessageService.SendMessageDefult(enCode, users, flowTaskParamter.flowTaskEntity.FullName, bodyDic);
var crUser =await _usersService.GetUserName(flowTaskParamter.flowTaskEntity.CreatorUserId, false);
var flowName = _flowTaskRepository.GetFlowTemplateJsonInfo(x => x.Id == flowTaskParamter.flowTaskEntity.FlowId).FullName;
await _sendMessageService.SendMessageDefult(enCode, users, crUser, flowName, bodyDic);
}
}
@@ -162,8 +164,7 @@ public class FlowTaskMsgUtil
{
foreach (var item in flowTaskOperatorEntities)
{
var value = new
{
var value = new {
enCode = flowTaskParamter.flowTaskEntity.FlowCode,
flowId = flowTaskParamter.flowTaskEntity.FlowId,
status = type == 1 ? 0 : 1,
@@ -183,8 +184,7 @@ public class FlowTaskMsgUtil
}
else
{
var value = new
{
var value = new {
enCode = flowTaskParamter.flowTaskEntity.FlowCode,
flowId = flowTaskParamter.flowTaskEntity.FlowId,
status = type == 1 ? 0 : 1,
@@ -214,5 +214,16 @@ public class FlowTaskMsgUtil
}
}
/// <summary>
/// 委托消息通知.
/// </summary>
/// <param name="delegateType">委托类型:发起,审批.</param>
/// <param name="ToUserId">通知人员.</param>
/// <param name="flowName">流程名.</param>
/// <returns></returns>
public async Task SendDelegateMsg(string delegateType, string ToUserId, string flowName)
{
await _sendMessageService.SendMessageDelegate(delegateType, ToUserId, flowName);
}
#endregion
}

View File

@@ -340,7 +340,7 @@ public class FlowTaskNodeUtil
// 保存驳回现有数据.
if (flowTaskParamter.approversProperties.rejectType == 2)
{
flowTaskParamter.flowTaskEntity.RejectDataId = await _flowTaskRepository.CreateRejectData(flowTaskParamter.flowTaskEntity.Id, flowTaskParamter.flowTaskEntity.ThisStepId);
flowTaskParamter.flowTaskEntity.RejectDataId = await _flowTaskRepository.CreateRejectData(flowTaskParamter.flowTaskEntity.Id, flowTaskParamter.flowTaskNodeEntity.Id);
}
// 驳回节点下所有节点.
var rejectNodeNextAllList = new List<FlowTaskNodeEntity>();

View File

@@ -88,8 +88,6 @@ public class FlowTaskOtherUtil
var rollBackOprtator = await _flowTaskRepository.GetTaskOperatorInfo(flowTaskParamter.flowTaskOperatorEntity.RollbackId);
if (rollBackOprtator.IsNotEmptyOrNull())
{
//rollBackOprtator.State = "0";
//await _flowTaskRepository.UpdateTaskOperator(rollBackOprtator);
rollBackOprtator.Id = SnowflakeIdHelper.NextId();
rollBackOprtator.State = "0";
rollBackOprtator.Completion = 0;
@@ -98,15 +96,6 @@ public class FlowTaskOtherUtil
rollBackOprtator.HandleTime = null;
await _flowTaskRepository.CreateTaskOperator(rollBackOprtator);
}
//else
//{
// rollBackOprtator.Id = SnowflakeIdHelper.NextId();
// rollBackOprtator.State = "0";
// rollBackOprtator.Completion = 0;
// rollBackOprtator.HandleStatus = 0;
// rollBackOprtator.HandleTime = null;
// await _flowTaskRepository.CreateTaskOperator(rollBackOprtator);
//}
}
flowTaskParamter.flowTaskOperatorEntity.HandleStatus = handleStatus;
flowTaskParamter.flowTaskOperatorEntity.Completion = 1;
@@ -263,7 +252,21 @@ public class FlowTaskOtherUtil
{
FlowTaskOperatorRecordEntity flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity();
flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
flowTaskOperatorRecordEntity.HandleId = handleStatus == 2 ? flowTaskParamter.flowTaskEntity.CreatorUserId : _userManager.UserId;
if (handleStatus == 2)
{
flowTaskOperatorRecordEntity.HandleId = flowTaskParamter.flowTaskEntity.CreatorUserId;
}
else
{
if (flowTaskParamter.flowTaskOperatorEntity.IsNotEmptyOrNull() && flowTaskParamter.flowTaskOperatorEntity.HandleId.IsNotEmptyOrNull())
{
flowTaskOperatorRecordEntity.HandleId = flowTaskParamter.flowTaskOperatorEntity.HandleId;
}
else
{
flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
}
}
flowTaskOperatorRecordEntity.HandleStatus = handleStatus;
flowTaskOperatorRecordEntity.HandleOpinion = flowTaskParamter.handleOpinion;
flowTaskOperatorRecordEntity.SignImg = flowTaskParamter.signImg;
@@ -361,15 +364,11 @@ public class FlowTaskOtherUtil
{
try
{
//modified by PhilPan
if (jobj[timeOutConfig.formField].Type == Newtonsoft.Json.Linq.JTokenType.Integer)
var value=jobj[timeOutConfig.formField].ToString();
if (!DateTime.TryParse(value, out dt))
{
dt = jobj[timeOutConfig.formField].ParseToLong().TimeStampToDateTime();
}
else
{
dt = jobj[timeOutConfig.formField].ToString().ParseToDateTime();
}
}
catch (Exception)
{

View File

@@ -138,7 +138,7 @@ public class FlowTaskUserUtil
try
{
var Token = _userManager.ToKen.IsNotEmptyOrNull() ? _userManager.ToKen : _cacheManager.Get<List<UserOnlineModel>>(CommonConst.CACHEKEYONLINEUSER + _userManager.TenantId).Find(x => x.userId == _userManager.UserId).token;
var data = await approversProperties.getUserUrl.SetHeaders(new { Authorization = Token }).GetAsStringAsync();
var data = await approversProperties.getUserUrl.SetHeaders(new { Authorization = Token }).SetBody(flowTaskParamter.formData).PostAsStringAsync();
var result = data.ToObject<RESTfulResult<object>>();
if (result.IsNotEmptyOrNull())
{
@@ -250,15 +250,13 @@ public class FlowTaskUserUtil
{
startProperties.errorRule = "3";
}
// 创建人
var userId = type == 0 ? _userManager.UserId : flowTaskParamter.flowTaskEntity.CreatorUserId;
var handleIds = await GetFlowUserId(flowTaskParamter, approverPropertiers, nextFlowTaskNodeEntity);
if (handleIds.Count == 0 && isShuntNodeCompletion)
{
switch (startProperties.errorRule)
{
case "1":
handleIds.Add("admin");
handleIds.Add(_userManager.GetAdminUserId());
break;
case "2":
if ((await _usersService.GetUserListByExp(x => startProperties.errorRuleUser.Contains(x.Id) && x.DeleteMark == null && x.EnabledMark == 1)).Any())
@@ -267,7 +265,7 @@ public class FlowTaskUserUtil
}
else
{
handleIds.Add("admin");
handleIds.Add(_userManager.GetAdminUserId());
}
break;
case "3":
@@ -291,7 +289,7 @@ public class FlowTaskUserUtil
&& x.NodePropertyJson.ToObject<ApproversProperties>().assigneeType == 7);
if (falag)
{
handleIds.Add("admin");
handleIds.Add(_userManager.GetAdminUserId());
}
else
{
@@ -370,6 +368,14 @@ public class FlowTaskUserUtil
var userList = await GetUserDefined(flowTaskParamter.approversProperties, 1);
userList = await GetExtraRuleUsers(userList, flowTaskParamter.approversProperties.extraCopyRule, flowTaskParamter.flowTaskOperatorEntity.TaskId);
circulateUserList = circulateUserList.Union(userList).ToList();
if (flowTaskParamter.approversProperties.isInitiatorCopy)
{
circulateUserList.Add(flowTaskParamter.flowTaskEntity.CreatorUserId);
//if (flowTaskParamter.flowTaskEntity.DelegateUser.IsNotEmptyOrNull())
//{
// circulateUserList.Add(flowTaskParamter.flowTaskEntity.DelegateUser);
//}
}
}
foreach (var item in circulateUserList.Distinct())
{
@@ -555,14 +561,14 @@ public class FlowTaskUserUtil
}
else
{
childTaskCrUserList.Add("admin");
childTaskCrUserList.Add(_userManager.GetAdminUserId());
}
break;
case "6":
childTaskCrUserList.Add(flowTaskParamter.flowTaskEntity.CreatorUserId);
break;
default:
childTaskCrUserList.Add("admin");
childTaskCrUserList.Add(_userManager.GetAdminUserId());
break;
}
}

View File

@@ -1,4 +1,5 @@
using System.Text;
using JNPF.Common.Const;
using JNPF.Common.Core.Manager;
using JNPF.Common.Extension;
using JNPF.Common.Models.WorkFlow;
@@ -97,8 +98,11 @@ public class FlowTemplateUtil
}
else
{
string formId = item.propertyJson.formId;
flowTaskNodeEntity.FormId = formId.IsNotEmptyOrNull() ? formId : defaultFormId;
if (!"timer".Equals(item.type))
{
string formId = item.propertyJson.formId;
flowTaskNodeEntity.FormId = formId.IsNotEmptyOrNull() ? formId : defaultFormId;
}
}
flowTaskNodeEntityList.Add(flowTaskNodeEntity);
}
@@ -416,10 +420,10 @@ public class FlowTemplateUtil
if (flowNodeWhereModel.fieldValueType.ParseToInt() == 2)
{
//数组类型控件
var jnpfKeyList = new List<string>() { "cascader", "comSelect", "address", "currOrganize" };
var jnpfKeyList = new List<string>() { JnpfKeyConst.CASCADER, JnpfKeyConst.COMSELECT, JnpfKeyConst.ADDRESS, JnpfKeyConst.CURRORGANIZE };
if (jnpfKeyList.Contains(flowNodeWhereModel.jnpfKey) && flowNodeWhereModel.fieldValue.Count > 0)
{
if (flowNodeWhereModel.jnpfKey.Equals("currOrganize"))
if (flowNodeWhereModel.jnpfKey.Equals(JnpfKeyConst.CURRORGANIZE))
{
value = flowNodeWhereModel.fieldValue[flowNodeWhereModel.fieldValue.Count - 1];
}
@@ -438,7 +442,7 @@ public class FlowTemplateUtil
value = _userManager.UserId;
}
if ("time".Equals(flowNodeWhereModel.jnpfKey))
if (JnpfKeyConst.TIME.Equals(flowNodeWhereModel.jnpfKey))
{
formValue = formValue.Replace(":", string.Empty);
value = value.Replace(":", string.Empty);
@@ -446,7 +450,7 @@ public class FlowTemplateUtil
}
else
{
value = GetConditionValue(flowNodeWhereModel.fieldValueType.ParseToInt(), formData, flowNodeWhereModel.fieldValue, taskId, flowNodeWhereModel.jnpfKey);
value = GetConditionValue(flowNodeWhereModel.fieldValueType.ParseToInt(), formData, flowNodeWhereModel.fieldValue, taskId, flowNodeWhereModel.fieldValueJnpfKey);
}
if (symbol.Equals("=") || symbol.Equals("<>"))
@@ -527,8 +531,8 @@ public class FlowTemplateUtil
if (formData[field].IsNotEmptyOrNull())
{
conditionValue = formData[field].ToString();
SysWidgetFormValue(taskId, jnpfKey, ref conditionValue);
}
SysWidgetFormValue(taskId, jnpfKey, ref conditionValue);
}
}
}
@@ -581,34 +585,34 @@ public class FlowTemplateUtil
var creatorUser = _usersService.GetInfoByUserId(taskEntity.CreatorUserId);
switch (jnpfKey)
{
case "createUser":
case JnpfKeyConst.CREATEUSER:
formValue = taskEntity.CreatorUserId;
break;
case "modifyUser":
case JnpfKeyConst.MODIFYUSER:
if (taskEntity.LastModifyUserId.IsNotEmptyOrNull())
{
formValue = _userManager.UserId;
}
break;
case "currOrganize":
case JnpfKeyConst.CURRORGANIZE:
if (creatorUser.OrganizeId.IsNotEmptyOrNull())
{
formValue = creatorUser.OrganizeId;
}
break;
case "createTime":
case JnpfKeyConst.CREATETIME:
formValue = ((DateTime)taskEntity.CreatorTime).ParseToUnixTime().ToString();
break;
case "modifyTime":
case JnpfKeyConst.MODIFYTIME:
if (taskEntity.LastModifyTime.IsNotEmptyOrNull())
{
formValue = DateTime.Now.ParseToUnixTime().ToString();
}
break;
case "currPosition":
case JnpfKeyConst.CURRPOSITION:
if (creatorUser.PositionId.IsNotEmptyOrNull())
{
formValue = creatorUser.PositionId;
@@ -621,26 +625,26 @@ public class FlowTemplateUtil
{
switch (jnpfKey)
{
case "createUser":
case JnpfKeyConst.CREATEUSER:
formValue = _userManager.UserId;
break;
case "modifyUser":
case JnpfKeyConst.MODIFYUSER:
formValue = " ";
break;
case "currOrganize":
case JnpfKeyConst.CURRORGANIZE:
if (_userManager.User.OrganizeId.IsNotEmptyOrNull())
{
formValue = _userManager.User.OrganizeId;
}
break;
case "createTime":
case JnpfKeyConst.CREATETIME:
formValue = DateTime.Now.ParseToUnixTime().ToString();
break;
case "modifyTime":
case JnpfKeyConst.MODIFYTIME:
formValue = "0";
break;
case "currPosition":
case JnpfKeyConst.CURRPOSITION:
if (_userManager.User.PositionId.IsNotEmptyOrNull())
{
formValue = _userManager.User.PositionId;