Ejemplo n.º 1
0
        public IActionResult Map(CreateFromMapModel args)
        {
            if (!args.SourceEntityId.HasValue || args.SourceEntityId.Value.Equals(Guid.Empty))
            {
                if (args.SourceEntityName.IsNotEmpty())
                {
                    var entityMeta = _entityFinder.FindByName(args.SourceEntityName);
                    args.SourceEntityId = entityMeta.EntityId;
                }
            }
            if (!args.TargetEntityId.HasValue || args.TargetEntityId.Value.Equals(Guid.Empty))
            {
                if (args.TargetEntityName.IsNotEmpty())
                {
                    var entityMeta = _entityFinder.FindByName(args.TargetEntityName);
                    args.TargetEntityId = entityMeta.EntityId;
                }
            }
            if (!args.SourceEntityId.HasValue || !args.TargetEntityId.HasValue || args.SourceRecordId.Equals(Guid.Empty))
            {
                return(NotSpecifiedRecord());
            }
            var newId = _dataMapper.Create(args.SourceEntityId.Value, args.TargetEntityId.Value, args.SourceRecordId);

            return(CreateSuccess(new { entityid = args.TargetEntityId, id = newId }));
        }
Ejemplo n.º 2
0
        public IActionResult ForwardAndAppend(Guid entityid, Guid referencedrecordid, Guid workflowid, Guid stageid, Guid?instanceId, string relationshipname)
        {
            if (entityid.Equals(Guid.Empty) || referencedrecordid.Equals(Guid.Empty) || workflowid.Equals(Guid.Empty) || stageid.Equals(Guid.Empty))
            {
                return(JError(T["parameter_error"]));
            }
            var entityMeta = _entityFinder.FindById(entityid);

            if (entityMeta == null)
            {
                return(NotFound());
            }
            var flowInfo = _workFlowFinder.Find(n => n.WorkFlowId == workflowid);

            if (flowInfo == null)
            {
                return(NotFound());
            }
            var stages = _processStageService.Query(n => n
                                                    .Where(f => f.WorkFlowId == flowInfo.WorkFlowId)
                                                    .Sort(s => s.SortAscending(f => f.StageOrder)));

            var currentStage = stages.Find(n => n.ProcessStageId == stageid);
            var prevStage    = stages.Find(n => n.StageOrder == currentStage.StageOrder - 1);

            if (currentStage.EntityId.Equals(prevStage.EntityId))
            {
                return(JError(T["parameter_error"]));
            }
            BusinessProcessFlowInstance bpfInstance = null;

            if (instanceId.HasValue && !instanceId.Value.Equals(Guid.Empty))
            {
                bpfInstance = _businessProcessFlowInstanceService.Find(n => n.BusinessProcessFlowInstanceId == instanceId && n.WorkFlowId == workflowid);
                if (bpfInstance == null)
                {
                    return(NotFound());
                }
            }
            if (bpfInstance == null)
            {
                instanceId  = Guid.NewGuid();
                bpfInstance = new BusinessProcessFlowInstance();
                bpfInstance.BusinessProcessFlowInstanceId = instanceId.Value;
                bpfInstance.WorkFlowId      = workflowid;
                bpfInstance.ProcessStageId  = stages.First().ProcessStageId;
                bpfInstance.Entity1Id       = referencedrecordid;
                bpfInstance.ProcessEntityId = entityid;
                _businessProcessFlowInstanceService.Create(bpfInstance);
            }
            //是否存在单据转换规则
            var entityMap = _entityMapFinder.Find(prevStage.EntityId, entityid);

            if (entityMap == null)
            {
                return(JOk(new
                {
                    EntityId = entityid
                    ,
                    StageId = stageid
                    ,
                    BusinessFlowId = workflowid
                    ,
                    BusinessFlowInstanceId = instanceId.Value
                    ,
                    RelationShipName = relationshipname
                    ,
                    ReferencedRecordId = referencedrecordid
                }));
            }
            var recordid = _dataMapper.Create(prevStage.EntityId, currentStage.EntityId, referencedrecordid);

            _businessProcessFlowInstanceUpdater.UpdateForward(workflowid, instanceId.Value, stageid, recordid);
            //更新当前记录的业务阶段
            var updData = new Entity(entityMeta.Name);

            updData.SetIdValue(recordid);
            updData.SetAttributeValue("stageid", stageid);
            _dataUpdater.Update(updData);

            return(JOk(new
            {
                EntityId = entityid
                ,
                RecordId = recordid
                ,
                BusinessFlowId = workflowid
                ,
                BusinessFlowInstanceId = instanceId.Value
            }));
        }