public FreeFlowNodeData Update(FreeFlowNodeData model)
        {
            var entity = DB.FreeFlowNodeDatas.FirstOrDefault(e => e.ID == model.ID);

            entity.Content    = model.Content;
            entity.UpdateTime = DateTime.Now;
            DB.SaveChanges();
            return(entity);
        }
 public void Save(FreeFlowNodeData model)
 {
     if (model.ID == 0)
     {
         Add(model);
     }
     else
     {
         Update(model);
     }
 }
        public bool Add(FreeFlowNodeData model)
        {
            var user = Core.UserManager.GetModel(model.UserId);

            model.Signature = user.RealName;
            var entity = DB.FreeFlowNodeDatas.FirstOrDefault(e => e.FreeFlowDataId == model.FreeFlowDataId && e.UserId == model.UserId && e.ParentId == model.ParentId);

            if (entity == null)
            {
                DB.FreeFlowNodeDatas.Add(model);
                DB.SaveChanges();
                return(true);
            }
            return(false);
        }
        private void SubmitFreeFlowNodeData(FreeFlowNodeData model, FormInfo info, int userId, bool isCc = false)
        {
            //传阅流程不需要发给自己
            if (userId == Identity.ID)
            {
                return;
            }

            var added = Core.FreeFlowNodeDataManager.Add(new FreeFlowNodeData
            {
                FreeFlowDataId = model.FreeFlowDataId,
                ParentId       = model.ID,
                UserId         = userId,
                IsCc           = isCc
            });

            if (added)
            {
                Core.UserFormInfoManager.Save(new UserFormInfo
                {
                    InfoId     = info.ID,
                    UserId     = userId,
                    FlowStatus = FlowStatus.Doing,
                });

                var feed = new Feed
                {
                    FromUserId = Identity.ID,
                    ToUserId   = userId,
                    Action     = UserAction.Submit,
                    InfoId     = info.ID,
                    Title      = info.Title,
                    Type       = FeedType.FreeFlow,
                };
                Core.FeedManager.Save(feed);
                Core.MessageManager.Add(feed);
            }
        }
        public object Submit([FromBody] FreeFlowNodeData model, int flowNodeDataId, int infoId, string toUserIds = null, string ccUserIds = null)
        {
            if (model == null)
            {
                throw new Exception("缺少参数model");
            }
            if (infoId == 0)
            {
                throw new Exception("缺少参数infoId");
            }

            var flowNodeData = Core.FlowNodeDataManager.GetModel(flowNodeDataId);

            if (flowNodeData.FreeFlowData == null)
            {
                flowNodeData.FreeFlowData = new FreeFlowData {
                    ID = flowNodeData.ID
                };
                Core.FreeFlowDataManager.Save(flowNodeData.FreeFlowData);
            }
            model.FreeFlowDataId = flowNodeData.FreeFlowData.ID;
            model.UserId         = Identity.ID;
            model.UpdateTime     = DateTime.Now;
            Core.FreeFlowNodeDataManager.Save(model);
            var info = Core.FormInfoManager.GetModel(infoId);

            //已阅则放到已读箱
            Core.UserFormInfoManager.Save(new UserFormInfo
            {
                UserId     = Identity.ID,
                InfoId     = infoId,
                FlowStatus = FlowStatus.Done
            });
            var targetUserIds   = toUserIds.ToIntArray();
            var ccTargetUserIds = ccUserIds.ToIntArray();

            //如果没有选择发送人,则代表此流程结束
            if ((targetUserIds == null || targetUserIds.Length == 0) &&
                (ccTargetUserIds == null || ccTargetUserIds.Length == 0))
            {
                Core.FreeFlowDataManager.TryComplete(model.FreeFlowDataId, Identity.ID);
                return(model);
            }

            //如果有选择发送人,则标记为没结束
            flowNodeData.FreeFlowData.Completed = false;
            if (targetUserIds != null)
            {
                foreach (var userId in targetUserIds)
                {
                    SubmitFreeFlowNodeData(model, info, userId);
                }
            }

            if (ccTargetUserIds != null)
            {
                foreach (var userId in ccTargetUserIds)
                {
                    if (targetUserIds != null && targetUserIds.Contains(userId))
                    {
                        continue;
                    }
                    SubmitFreeFlowNodeData(model, info, userId, true);
                }
            }
            return(model);
        }
Beispiel #6
0
        public object Model(int id)
        {
            var model = Core.FormInfoManager.GetModel(id);

            if (model == null)
            {
                return(BadRequest("参数错误"));
            }

            var canView = Core.FormInfoManager.CanView(model, CurrentUser);

            if (!canView)
            {
                return(BadRequest("您没有权限查看该文档"));
            }

            var canSubmitFlow       = true;
            var canEdit             = true;
            var canCancel           = false;
            var canSubmitFreeFlow   = false;
            var canCompleteFreeFlow = false;
            var canComplete         = false;
            var canBack             = false;

            FlowNodeData     lastNodeData     = null;
            FreeFlowNodeData freeFlowNodeData = null;

            if (model.FlowDataId > 0)
            {
                var flowData            = model.FlowData ?? Core.FlowDataManager.Get(model.FlowDataId);
                var currentFlowNodeData = flowData.GetUserLastNodeData(Identity.ID);
                canSubmitFlow = Core.FlowDataManager.CanSubmit(model.FlowData, currentFlowNodeData);
                canEdit       = canSubmitFlow;
                canCancel     = Core.FlowDataManager.CanCancel(flowData, currentFlowNodeData);

                lastNodeData = model.FlowData.GetLastNodeData();

                canComplete = Core.FlowDataManager.CanComplete(flowData.Flow, lastNodeData);

                canEdit = lastNodeData.UserId == Identity.ID && !lastNodeData.Result.HasValue;
                //当前步骤如果是流程的第一步,则不能退
                canBack = Core.FlowDataManager.CanBack(flowData);

                //如果该步骤开启了自由流程
                freeFlowNodeData = lastNodeData.GetLastFreeNodeData(Identity.ID);


                canSubmitFreeFlow = Core.FreeFlowDataManager.CanSubmit(flowData, Identity.ID);

                var user = Core.UserManager.GetModel(Identity.ID);
                canCompleteFreeFlow = Core.FreeFlowDataManager.CanComplete(flowData, user);
            }

            var userformInfo = Core.UserFormInfoManager.GetModel(model.ID, Identity.ID);

            return(new
            {
                model,
                canView,
                canEdit,
                canSubmit = canSubmitFlow || canSubmitFreeFlow,
                canSubmitFlow,
                canSubmitFreeFlow,
                canCompleteFreeFlow,
                canCancel,
                canComplete,
                canBack,
                status = userformInfo == null ? FlowStatus.Done : userformInfo.FlowStatus,
                flowNodeData = lastNodeData,
                freeFlowNodeData
            });
        }