123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using GxPress.Common.Exceptions;
- using GxPress.Common.Tools;
- using GxPress.Entity.WorkProcess;
- using GxPress.Entity.WorkProcessDto;
- namespace GxPress.Service.Implement
- {
- public partial class ProcessService
- {
-
-
-
-
-
- public async Task<Process> AddAsync(ProcessDto request)
- {
- request.IconUrl = StringUtils.RemoveDomain(request.IconUrl);
-
- var group = await _processGroupRepository.GetAsync(request.GroupId);
- if (group == null) throw new BusinessException("流程分组不存在");
- var process = _mapper.Map<Entity.WorkProcess.Process>(request);
- process.IsDisabled = false;
- process.Id = await _processRepository.InsertAsync(process);
-
- foreach (var limit in request.RequestLimits)
- {
- await _processRequestLimitRepository.InsertAsync(new ProcessRequestLimit
- {
- ProcessId = process.Id,
- DepartmentId = limit.DepartmentId,
- RoleId = limit.RoleId,
- UserId = limit.UserId
- });
- }
- var fieldDict = new Dictionary<int, int>();
-
- if (request.FormFields != null)
- {
- foreach (var field in request.FormFields)
- {
-
- var fieldId = await _processFieldRepository.InsertAsync(new ProcessField
- {
- ProcessId = process.Id,
- Label = field.Label,
- Placeholder = field.Placeholder,
- Required = field.Required,
- Sort = field.Sort,
- Type = field.Type,
- Unit = field.Unit,
- Options = StringUtils.ObjectCollectionToString(field.Options)
- });
-
- fieldDict.Add(field.Id, fieldId);
- }
- }
-
- if (request.ProcessNodes != null)
- {
- foreach (var node in request.ProcessNodes)
- {
- await AddNodeAsync(node, 0, process.Id, fieldDict);
- }
- }
- return process;
- }
-
-
-
-
-
-
-
-
- private async Task AddNodeAsync(ProcessNodeDto node, int parentId, int processId, Dictionary<int, int> fieldDict)
- {
-
- var readOnlyFields = new List<int>();
- if (node.ReadOnlyFields != null)
- {
- foreach (var readOnlyField in node.ReadOnlyFields)
- {
- if (fieldDict.ContainsKey(readOnlyField))
- {
- readOnlyFields.Add(fieldDict[readOnlyField]);
- }
- }
- }
- var hiddenFields = new List<int>();
- if (node.HiddenFields != null)
- {
- foreach (var hiddenField in node.HiddenFields)
- {
- if (fieldDict.ContainsKey(hiddenField))
- {
- hiddenFields.Add(fieldDict[hiddenField]);
- }
- }
- }
- var nodeId = await _processNodeRepository.InsertAsync(new Entity.WorkProcess.ProcessNode
- {
- Name = node.Name,
- ParentId = parentId,
- ProcessId = processId,
- Type = node.Type,
- ReadOnlyFields = string.Join(',', readOnlyFields),
- HiddenFields = string.Join(',', hiddenFields),
- AllowMeeting = node.AllowMeeting,
- ApprovalType = node.ApprovalType,
- DefaultApprovalUserId = node.DefaultApprovalUserId,
- CaseLevel = node.CaseLevel
- });
-
- foreach (var cc in node.CarbonCopies)
- {
- await _ruleCarbonCopyRepository.InsertAsync(new RuleCarbonCopy
- {
- NodeId = nodeId,
- UserId = cc.UserId,
- RoleId = cc.RoleId,
- DepartmentId = cc.DepartmentId
- });
- }
-
-
- if (node.ApproverChecks != null)
- {
- foreach (var approverChecks in node.ApproverChecks)
- {
- await _ruleApproverCheckRepository.InsertAsync(new RuleApproverCheck
- {
- NodeId = nodeId,
- UserId = approverChecks.UserId,
- RoleId = approverChecks.RoleId,
- DepartmentId = approverChecks.DepartmentId
- });
- }
- }
- if (node.Conditions != null)
- {
- foreach (var condition in node.Conditions)
- {
- if (!fieldDict.ContainsKey(condition.FieldId)) continue;
- await _ruleConditionRepository.InsertAsync(new RuleCondition
- {
- NodeId = nodeId,
- FieldId = fieldDict[condition.FieldId],
- Operator = condition.Operator,
- StringValue = condition.StringValue,
- StringValues = StringUtils.ObjectCollectionToString(condition.StringValues),
- IntValue = condition.IntValue,
- Sort = condition.Sort
- });
- }
- }
-
- if (node.Children.Any())
- {
- foreach (var child in node.Children)
- {
- await AddNodeAsync(child, nodeId, processId, fieldDict);
- }
- }
- }
- }
- }
|