コード例 #1
0
ファイル: AdminApply.cs プロジェクト: binCodeCW/IOT
        /// <summary>
        /// 撤销申请单
        /// </summary>
        /// <param name="userInfo">用户、部门、公司对象</param>
        /// <param name="applyId">申请单ID</param>
        /// <param name="whyCancel">撤销理由</param>
        public void CancelApply(LoginUserInfo userInfo, string applyId, string whyCancel)
        {
            ApplyInfo applyInfo = BLLFactory <Apply> .Instance.FindByID(applyId);

            if (applyInfo != null)
            {
                applyInfo.Status    = ApplyStatus.已撤消;
                applyInfo.ProcType  = (int)ProcType.无处理;
                applyInfo.ProcUser  = "";
                applyInfo.WhyCancel = whyCancel;
                BLLFactory <Apply> .Instance.Update(applyInfo, applyId);   //更新申请单状态

                BLLFactory <ApplyUser> .Instance.DeleteByApplyId(applyId); //删除当前审批人

                #region 撤销的时候,对所有的流程步骤,重置相关的状态
                var flowListAll = BLLFactory <ApplyFlow> .Instance.GetAllByApplyId(applyId);

                foreach (ApplyFlowInfo flowInfo in flowListAll)
                {
                    BLLFactory <ApplyFlow> .Instance.ResetFlowInfo(flowInfo);//更新状态到初始
                }
                #endregion

                #region 记录系统和流程操作日志
                var content = "用户撤消了该申请单。";
                BLLFactory <ApplyLog> .Instance.AddApplyLog(applyId, userInfo.ID.ToInt32(), content);

                //记录到流程日志
                var flowName    = "用户撤消";
                var flowLogInfo = new ApplyFlowlogInfo(applyId, flowName, userInfo.ID.ToInt32(), whyCancel, applyInfo.ProcType);
                BLLFactory <ApplyFlowlog> .Instance.Insert(flowLogInfo);

                #endregion
            }
        }
コード例 #2
0
ファイル: AdminApply.cs プロジェクト: binCodeCW/IOT
        /// <summary>
        /// 重新创建申请单流程
        /// </summary>
        /// <param name="userInfo">用户、部门、公司对象</param>
        /// <param name="applyId">申请单ID</param>
        /// <param name="applyTitle">申请单标题</param>
        /// <param name="selprocuser">流程处理人</param>
        /// <param name="remark">备注信息</param>
        public void ReCreateApplyFlow(LoginUserInfo userInfo, string applyId, string applyTitle, string selprocuser, string remark)
        {
            string message = "";

            ApplyInfo applyInfo = BLLFactory <Apply> .Instance.FindByID(applyId);

            if (applyInfo != null)
            {
                //更新流程的标题
                applyInfo.Status = ApplyStatus.处理中;//重新设置为处理中
                applyInfo.Title  = applyTitle;
                applyInfo.Remark = remark;
                BLLFactory <Apply> .Instance.Update(applyInfo, applyId);

                //删除原来所有的流程步骤
                BLLFactory <ApplyFlow> .Instance.DeleteAllFlow(applyId);

                #region 添加新的流程,并保存

                //获取当前用户相关联的流程,有些给过滤掉了
                List <FormFlowInfo> flowList = GetRelatedFlows(userInfo, applyInfo.FormId, applyId);
                int orderNum = 0;
                foreach (FormFlowInfo flowInfo in flowList)
                {
                    orderNum++;

                    #region 申请单流程数据
                    ApplyFlowInfo appFlowInfo = new ApplyFlowInfo(flowInfo);
                    appFlowInfo.ApplyId = applyId;
                    appFlowInfo.OrderNo = orderNum;
                    #endregion

                    //如果是第一个流程,那么采用传过来的流程处理人
                    if (orderNum == 1 && !string.IsNullOrEmpty(selprocuser))
                    {
                        appFlowInfo.ProcUser = selprocuser;
                    }

                    BLLFactory <ApplyFlow> .Instance.Insert(appFlowInfo);
                }
                #endregion

                #region 保存申请单日志

                var content = string.Format("创建了该申请单的处理流程,共有{0}个流程环节。", flowList.Count);
                BLLFactory <BLL.ApplyLog> .Instance.AddApplyLog(applyId, userInfo.ID.ToInt32(), content);

                //记录到流程日志
                var flowName = "重新提交表单";
                ApplyFlowlogInfo flowLogInfo = new ApplyFlowlogInfo(applyId, flowName, userInfo.ID.ToInt32(), "");
                BLLFactory <ApplyFlowlog> .Instance.Insert(flowLogInfo);

                #endregion

                //添加流程处理人
                message  = "您已经更新了该申请单。";
                message += CreateCurrentFlow(userInfo, applyId);
            }
        }
コード例 #3
0
ファイル: AdminApply.cs プロジェクト: binCodeCW/IOT
        /// <summary>
        /// 在当前流程步骤中添加审批记录
        /// </summary>
        /// <param name="userInfo">用户、部门、公司对象</param>
        /// <param name="applyId">申请单ID</param>
        /// <param name="opinion">处理意见</param>
        private void AddCurrentFlowLog(LoginUserInfo userInfo, string applyId, string opinion)
        {
            var flowInfo = BLLFactory <ApplyFlow> .Instance.GetFirstUnHandledFlow(applyId);

            if (flowInfo != null)
            {
                //记录用户处理意见
                var logInfo = new ApplyFlowlogInfo(applyId, flowInfo.FlowName, userInfo.ID.ToInt32(), opinion);
                BLLFactory <ApplyFlowlog> .Instance.Insert(logInfo);
            }
        }
コード例 #4
0
ファイル: AdminApply.cs プロジェクト: binCodeCW/IOT
        /// <summary>
        /// 根据登录用户、表单ID,对已经存在的申请单,重置流程相关的数据。(记录操作日志)
        /// 用户可以指定跳回到那个流程点,如果流程ID(atflowId)为空,则跳回到第一个流程点上,并初始化相关数据。
        /// </summary>
        /// <param name="userInfo">用户、部门、公司对象</param>
        /// <param name="applyId">申请单ID</param>
        /// <param name="opinion">处理意见</param>
        /// <param name="atflowId">恢复到的流程ID,如果为空,则表示到第一个流程,否则为具体的流程ID</param>
        public void ResetApply(LoginUserInfo userInfo, string applyId, string opinion, string atflowId = "")
        {
            if (string.IsNullOrEmpty(atflowId))
            {
                //跳回到第一个的时候就实行拒绝操作
                string condition     = string.Format("apply_id='{0}' ", applyId);
                var    firstFlowInfo = BLLFactory <ApplyFlow> .Instance.FindFirst(condition);

                if (firstFlowInfo != null)
                {
                    RefuseApply(userInfo, applyId, firstFlowInfo.ProcUser, opinion, firstFlowInfo.ProcUser);
                }
            }
            else
            {
                #region 找出要跳到的流程点下所有的流程并初始化

                //对指定的流程步骤,重置相关的状态
                var flowInfo = BLLFactory <ApplyFlow> .Instance.FindByID(atflowId);

                if (flowInfo != null)
                {
                    BLLFactory <ApplyFlow> .Instance.ResetFlowInfo(flowInfo);//更新状态到初始
                }
                #endregion

                #region 流程后续处理
                var appflowInfo = BLLFactory <ApplyFlow> .Instance.GetFirstUnHandledFlow(applyId);

                if (appflowInfo != null)
                {
                    //删除当前审批人,重置申请表的初始化状态,并增加当前审批人和记录日志
                    InitApplyUserAndLog(userInfo, applyId, appflowInfo);

                    //记录到流程日志
                    var flowName = string.Format("重置流程,跳转到\"{0}\"", appflowInfo.FlowName);
                    ApplyFlowlogInfo flowLogInfo = new ApplyFlowlogInfo(applyId, flowName, userInfo.ID.ToInt32());
                    BLLFactory <ApplyFlowlog> .Instance.Insert(flowLogInfo);
                }
                #endregion
            }
        }
コード例 #5
0
ファイル: AdminApply.cs プロジェクト: binCodeCW/IOT
        /// <summary>
        /// 处理当前的流程Approve/Refuse。
        /// </summary>
        /// <param name="userInfo">用户、部门、公司对象</param>
        /// <param name="applyId">申请单ID</param>
        /// <param name="msgsendto">发送消息给谁</param>
        /// <param name="opinion">处理意见</param>
        /// <param name="is_proc">当前流程是否通过,1为通过,2为拒绝</param>
        /// <param name="selprocuser">流程处理人</param>
        private void ProcessApplyFlow(LoginUserInfo userInfo, string applyId, string msgsendto, string opinion, int is_proc, string selprocuser)
        {
            ApplyInfo applyInfo = BLLFactory <Apply> .Instance.FindByID(applyId);

            ApplyFlowInfo flowInfo = BLLFactory <ApplyFlow> .Instance.GetFirstUnHandledFlow(applyId);

            if (applyInfo != null && flowInfo != null)
            {
                #region 计算处理用时

                string last_time = applyInfo.ProcTime;
                if (string.IsNullOrEmpty(last_time))
                {
                    last_time = applyInfo.Edittime.ToString("yyyy-MM-dd HH:mm:ss");
                }
                long deltatime = (long)DateTime.Now.Subtract(Convert.ToDateTime(last_time)).TotalSeconds;

                #endregion

                int is_auth = BLLFactory <ApplyUser> .Instance.GetCountByApplyIdAndUserId(applyId, userInfo.ID.ToInt32()) > 0 ? 0 : 1;

                if (applyInfo.ProcType == (int)ProcType.会签)
                {
                    #region 会签处理
                    //更新会签记录
                    BLLFactory <ApplySign> .Instance.UpdateSignInfo(applyId, flowInfo.ID, userInfo.ID.ToInt32(), opinion, is_proc);

                    //判断是否完成会签
                    var signFinished = BLLFactory <ApplySign> .Instance.IsSignFinished(flowInfo.ID);

                    if (signFinished)
                    {
                        //判断是否全部通过会签
                        var signPassed = BLLFactory <ApplySign> .Instance.IsSignPassed(flowInfo.ID);

                        //如果全部会签流程处理完毕
                        var signMessage = signPassed ? "会签通过" : "会签不通过";
                        flowInfo.ProcTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                        //在发起人未审批前,会签不完成
                        //flowInfo.IsProc = signPassed ? (int)ApplyStatus.已完成 : (int)ApplyStatus.已退回;
                        flowInfo.MsgSendTo = msgsendto;
                        flowInfo.Deltatime = Convert.ToInt32(deltatime);
                        flowInfo.Opinion   = signMessage;
                        BLLFactory <ApplyFlow> .Instance.Update(flowInfo, flowInfo.ID);

                        //更新流程状态(审批状态,未处理,让发起人审批是否提交)
                        applyInfo.Status   = ApplyStatus.处理中;
                        applyInfo.ProcType = (int)ProcType.审批;
                        BLLFactory <Apply> .Instance.Update(applyInfo, applyId);

                        var applyUserInfo = new ApplyUserInfo(applyId, applyInfo.ProcUser.ToInt32());
                        BLLFactory <ApplyUser> .Instance.Insert(applyUserInfo);

                        //保存申请单日志(系统流程日志)
                        var content = string.Format("该申请在流程环节[{0}][{1}]。", flowInfo.FlowName, signMessage);
                        BLLFactory <ApplyLog> .Instance.AddApplyLog(applyId, userInfo.ID.ToInt32(), content);
                    }
                    #endregion
                }
                //else if(applyInfo.ProcType == (int)ProcType.阅办)
                //{
                //    //阅办处理
                //}
                else
                {
                    #region 更新流程及处理单信息
                    flowInfo.ProcUid   = userInfo.ID.ToInt32();
                    flowInfo.ProcTime  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    flowInfo.IsProc    = is_proc;
                    flowInfo.MsgSendTo = msgsendto;
                    flowInfo.Deltatime = Convert.ToInt32(deltatime);
                    flowInfo.Opinion   = opinion;
                    BLLFactory <ApplyFlow> .Instance.Update(flowInfo, flowInfo.ID);

                    #endregion

                    if (is_proc == (int)ApplyIsProc.拒绝)
                    {
                        #region 拒绝流程

                        //更新流程状态
                        applyInfo.Status   = ApplyStatus.已退回;
                        applyInfo.ProcType = 0;
                        applyInfo.ProcUser = "";
                        BLLFactory <Apply> .Instance.Update(applyInfo, applyId);

                        //拒绝流程后,删除申请单的所有流程用户
                        BLLFactory <ApplyUser> .Instance.DeleteByApplyId(applyId);

                        //保存申请单日志(系统流程日志)
                        string   content  = string.Format("申请单({0})已经被退回", applyInfo.Title);
                        FormInfo formInfo = BLLFactory <Form> .Instance.FindByID(applyInfo.FormId);

                        if (formInfo != null)
                        {
                            content = string.Format("用户ID为 {0},于 {1} 创建的 {2}({3}) 已经被退回。",
                                                    applyInfo.Editor, applyInfo.Edittime, formInfo.FormName, applyInfo.Title);
                        }

                        BLLFactory <ApplyLog> .Instance.AddApplyLog(applyId, userInfo.ID.ToInt32(), content);

                        //"您已经退回了该申请。";
                        #endregion
                    }
                    else
                    {
                        #region 批准流程后续处理
                        //该申请单的下一处理流程
                        ApplyFlowInfo nextFlowInfo = BLLFactory <ApplyFlow> .Instance.GetNextUnHandledFlow(applyId, flowInfo.ID);

                        if (nextFlowInfo != null)
                        {
                            selprocuser = selprocuser.Trim();
                            if (!string.IsNullOrEmpty(selprocuser) && selprocuser != nextFlowInfo.ProcUser)
                            {
                                nextFlowInfo.ProcUser = selprocuser;
                                BLLFactory <ApplyFlow> .Instance.Update(nextFlowInfo, nextFlowInfo.ID);
                            }
                        }

                        //保存申请单日志(系统流程日志)
                        var content = string.Format("在流程环节[{0}]用户批准了申请。", flowInfo.FlowName);
                        BLLFactory <ApplyLog> .Instance.AddApplyLog(applyId, userInfo.ID.ToInt32(), content);

                        #endregion
                    }

                    //更新处理单最后处理时间
                    applyInfo.ProcTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    BLLFactory <Apply> .Instance.Update(applyInfo, applyId);
                }

                #region 记录到流程日志

                var flowLogInfo = new ApplyFlowlogInfo(applyId, flowInfo.FlowName, userInfo.ID.ToInt32(), opinion, applyInfo.ProcType);
                flowLogInfo.FlowId  = flowInfo.ID;
                flowLogInfo.OrderNo = flowInfo.OrderNo;
                BLLFactory <ApplyFlowlog> .Instance.Insert(flowLogInfo);

                #endregion
            }
        }