예제 #1
0
        ///<summary>
        ///修改:
        ///</summary>
        /// <param name="model">要修改的model</param>
        /// <returns>受影响的行数</returns>
        public Result <int> UpdateQuestion(Epm_Question model)
        {
            Result <int> result = new Result <int>();

            try
            {
                throw new Exception("该功能不实现!");
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "UpdateQuestion");
            }
            return(result);
        }
예제 #2
0
        public static QuestionModel QuestionToView(Epm_Question model)
        {
            QuestionModel view = new QuestionModel();

            if (model != null)
            {
                view.id             = model.Id;
                view.name           = model.Title;
                view.submitUserId   = model.SubmitUserId;
                view.submitTime     = model.SubmitTime;
                view.type           = model.BusinessTypeNo ?? "";
                view.businessChild  = "";
                view.state          = model.State ?? 0;
                view.createUserId   = model.SubmitUserId ?? 0;
                view.submitUserName = model.SubmitUserName ?? "";
                view.workContent    = model.Description ?? "";
                view.businessId     = model.BusinessId ?? 0;
                view.state          = model.State ?? 0;
            }
            return(view);
        }
예제 #3
0
        /// <summary>
        /// 获取热门问题
        /// </summary>
        /// <returns></returns>
        public Result <QuestionModel> GetHotQuestion()
        {
            Result <QuestionModel> result = new Result <QuestionModel>();

            try
            {
                // 去除未删除且未关闭的问题,在这些问题中找热门问题
                var questionIds = context.Epm_Question.Where(p => p.IsDelete == false && p.State == 1).Select(p => p.Id).ToList();

                long questionId  = 0;
                int  answerCount = 0;
                if (questionIds.Any())
                {
                    var tempQuestion = context.Epm_QuestionTrack
                                       .Where(p => p.IsDelete == false && questionIds.Contains(p.QuestionId.Value))
                                       .GroupBy(p => p.QuestionId).Select(
                        p => new
                    {
                        questionId    = p.Key,
                        questionCount = p.Count()
                    }).OrderByDescending(p => p.questionCount).FirstOrDefault();
                    if (tempQuestion != null)
                    {
                        questionId  = tempQuestion.questionId ?? 0;
                        answerCount = tempQuestion.questionCount;
                    }
                }

                Epm_Question question = null;

                if (questionId == 0)
                {
                    question = context.Epm_Question.Where(p => p.IsDelete == false && p.State == 1).OrderByDescending(p => p.SubmitTime).FirstOrDefault();
                    if (question != null)
                    {
                        answerCount = context.Epm_QuestionTrack.Count(p => p.QuestionId == question.Id);
                    }
                }
                else
                {
                    question = context.Epm_Question.FirstOrDefault(p => p.Id == questionId);
                }

                if (question != null)
                {
                    QuestionModel view = QuestionModel.QuestionToView(question);
                    view.answerCount = answerCount;

                    result.Data = view;
                    result.Flag = EResultFlag.Success;
                }
                else
                {
                    result.Data = null;
                    result.Flag = EResultFlag.Failure;
                }
            }
            catch (Exception ex)
            {
                result.Data      = null;
                result.Exception = new ExceptionEx(ex, "GetHotQuestion");
                result.Flag      = EResultFlag.Failure;
            }
            finally
            {
            }
            return(result);
        }
예제 #4
0
        /// <summary>
        /// 回复问题
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Result <bool> ReplyQuestion(Epm_QuestionTrack model)
        {
            Result <bool> result = new Result <bool>();

            try
            {
                Epm_Question question = DataOperateBusiness <Epm_Question> .Get().GetModel(model.QuestionId ?? 0);

                if (question == null)
                {
                    throw new Exception("问题不存在或已被删除!");
                }
                if (model.State == 2)
                {
                    throw new Exception("该问题已关闭,无法在进行回复操作!");
                }

                model = SetCurrentUser(model);

                DataOperateBusiness <Epm_QuestionTrack> .Get().Add(model);

                result.Data = true;
                result.Flag = EResultFlag.Success;

                WriteLog(BusinessType.Question.GetText(), SystemRight.Add.GetText(), "回复问题: " + model.Id);


                #region 处理待办
                var tempApp = DataOperateBusiness <Epm_Approver> .Get().GetList(t => t.BusinessId == question.Id && t.IsApprover == false).FirstOrDefault();

                if (tempApp != null)
                {
                    ComplateApprover(tempApp.Id);

                    #region 生成待办
                    List <Epm_Approver> list = new List <Epm_Approver>();
                    Epm_Approver        app  = new Epm_Approver();
                    app.ApproverId       = CurrentUserID.ToLongReq();
                    app.ApproverName     = CurrentUserName;
                    app.Title            = question.CreateUserName + "发起的问题沟通,已有回复";
                    app.Content          = question.CreateUserName + "发起的问题沟通,已有回复";
                    app.SendUserId       = CurrentUserID.ToLongReq();
                    app.SendUserName     = CurrentUserName;
                    app.SendTime         = DateTime.Now;
                    app.LinkURL          = string.Empty;
                    app.BusinessTypeNo   = BusinessType.Question.ToString();
                    app.Action           = SystemRight.Reply.ToString();
                    app.BusinessTypeName = BusinessType.Question.GetText();
                    app.BusinessState    = (int)(EnumState.Normal);
                    app.BusinessId       = question.Id;
                    app.ProjectId        = question.ProjectId;
                    app.ProjectName      = question.ProjectName;
                    list.Add(app);
                    AddApproverBatch(list);
                    WriteLog(BusinessType.Question.GetText(), SystemRight.Add.GetText(), "提交问题生成待办: " + question.Id);
                    #endregion
                }
                #endregion

                #region 消息
                var waitSend = GetWaitSendMessageList(question.ProjectId.Value);
                foreach (var send in waitSend)
                {
                    Epm_Massage modelMsg = new Epm_Massage();
                    modelMsg.ReadTime     = null;
                    modelMsg.RecId        = send.Key;
                    modelMsg.RecName      = send.Value;
                    modelMsg.RecTime      = DateTime.Now;
                    modelMsg.SendId       = CurrentUserID.ToLongReq();
                    modelMsg.SendName     = CurrentUserName;
                    modelMsg.SendTime     = DateTime.Now;
                    modelMsg.Title        = question.CreateUserName + "发起了问题沟通," + CurrentUserName + "有回复";
                    modelMsg.Content      = question.CreateUserName + "发起了问题沟通," + CurrentUserName + "有回复";
                    modelMsg.Type         = 2;
                    modelMsg.IsRead       = false;
                    modelMsg.BussinessId  = model.Id;
                    modelMsg.BussinesType = BusinessType.Question.ToString();
                    modelMsg.ProjectId    = question.ProjectId.Value;
                    modelMsg.ProjectName  = question.ProjectName;
                    modelMsg = base.SetCurrentUser(modelMsg);
                    modelMsg = base.SetCreateUser(modelMsg);
                    DataOperateBusiness <Epm_Massage> .Get().Add(modelMsg);
                }
                #endregion
            }
            catch (Exception ex)
            {
                result.Flag      = EResultFlag.Failure;
                result.Data      = false;
                result.Exception = new ExceptionEx(ex, "QuestionClose");
            }
            return(result);
        }
예제 #5
0
        ///<summary>
        ///添加:
        ///</summary>
        /// <param name="model">要添加的model</param>
        /// <returns>受影响的行数</returns>
        public Result <int> AddQuestion(QuestionView model)
        {
            Result <int> result = new Result <int>();

            try
            {
                List <int> statelist = new List <int>()
                {
                    (int)ApprovalState.WaitAppr, (int)ApprovalState.ApprSuccess
                };
                try
                {
                    var completion = DataOperateBusiness <Epm_CompletionAcceptance> .Get().GetList(t => t.ProjectId == model.ProjectId && statelist.Contains(t.State.Value)).FirstOrDefault();

                    if (completion != null)
                    {
                        throw new Exception("沟通项目已发起完工验收,不可操作!");
                    }
                    if (model == null)
                    {
                        throw new Exception("请填写问题相关内容!");
                    }
                    if (model.ProjectId <= 0)
                    {
                        throw new Exception("请选择问题项目名称!");
                    }
                }
                catch (Exception ex)
                {
                    WriteLog(BusinessType.Question.GetText(), SystemRight.Add.GetText(), "字符串截取位置1: " + model.ProjectId);
                }
                model.BusinessTypeNo = GetString(model.BusinessTypeNo);

                var BusinessTypeName = ((BusinessType)Enum.Parse(typeof(BusinessType), model.BusinessTypeNo)).GetText();

                Epm_Question question = new Epm_Question()
                {
                    ProjectId         = model.ProjectId,
                    ProjectName       = model.ProjectName,
                    Title             = model.Title,
                    Description       = model.Description,
                    Proposal          = model.Proposal,
                    IsAccident        = model.IsAccident,
                    BusinessTypeNo    = model.BusinessTypeNo,
                    BusinessTypeName  = BusinessTypeName,
                    BusinessId        = model.BusinessId,
                    SubmitUserId      = CurrentUserID.ToLongReq(),
                    SubmitUserName    = CurrentUserName,
                    SubmitCompanyId   = CurrentCompanyID.ToLongReq(),
                    SubmitCompanyName = CurrentCompanyName,
                    SubmitTime        = DateTime.Now,
                    RecCompanyId      = model.RecCompanyId,
                    RecCompanyName    = model.RecCompanyName,
                    RecUserId         = model.RecUserId,
                    RecUserName       = model.RecUserName,
                    State             = 1,
                    CrtCompanyId      = CurrentCompanyID.ToLongReq(),
                    CrtCompanyName    = CurrentCompanyName,
                    CreateTime        = DateTime.Now,
                    IsDelete          = false,
                    ProblemTypeName   = model.ProblemTypeName,
                    ProblemTypeNo     = model.ProblemTypeNo
                };
                question = SetCurrentUser(question);

                if (question == null)
                {
                    throw new Exception("问题沟通!");
                }
                #region 问题关联模型

                if (model.QuestionBims != null && model.QuestionBims.Any())
                {
                    model.QuestionBims.ForEach(p =>
                    {
                        p.Sort            = p.Sort ?? 0;
                        p.State           = p.State ?? 0;
                        p.CrtCompanyId    = question.CrtCompanyId;
                        p.CrtCompanyName  = question.CrtCompanyName;
                        p.CreateTime      = DateTime.Now;
                        p.CreateUserId    = question.CreateUserId;
                        p.CreateUserName  = question.CreateUserName;
                        p.OperateUserId   = question.OperateUserId;
                        p.OperateUserName = question.OperateUserName;
                        p.OperateTime     = DateTime.Now;
                        p.IsDelete        = false;
                    });
                }


                #endregion

                #region 问题协助人员

                if (model.QuestionUsers != null && model.QuestionUsers.Any())
                {
                    model.QuestionUsers.ForEach(p =>
                    {
                        p.State           = p.State ?? 0;
                        p.CrtCompanyId    = question.CrtCompanyId;
                        p.CrtCompanyName  = question.CrtCompanyName;
                        p.CreateTime      = DateTime.Now;
                        p.CreateUserId    = question.CreateUserId;
                        p.CreateUserName  = question.CreateUserName;
                        p.OperateUserId   = question.OperateUserId;
                        p.OperateUserName = question.OperateUserName;
                        p.OperateTime     = DateTime.Now;
                        p.IsDelete        = false;
                    });
                }

                #endregion
                try
                {
                    int rows = DataOperateBusiness <Epm_Question> .Get().Add(question);

                    if (model.QuestionBims != null && model.QuestionBims.Any())
                    {
                        try
                        {
                            model.QuestionBims.ForEach(p => { p.QuestionId = question.Id; p.BIMId = p.ComponentId.Split('_')[0].ToLongReq(); });

                            DataOperateBusiness <Epm_QuestionBIM> .Get().AddRange(model.QuestionBims);
                        }
                        catch (Exception ex)
                        {
                            WriteLog(BusinessType.Question.GetText(), SystemRight.Add.GetText(), "字符串截取位置2: " + model.QuestionBims[0].ComponentId.Split('_')[0].ToLongReq());
                        }
                    }
                    if (model.QuestionUsers != null && model.QuestionUsers.Any())
                    {
                        model.QuestionUsers.ForEach(p => p.QuestionId = question.Id);
                        DataOperateBusiness <Epm_QuestionUser> .Get().AddRange(model.QuestionUsers);
                    }

                    //transaction.Commit();

                    if (model.Attachs.Any())
                    {
                        AddFilesByTable(question, model.Attachs);
                    }

                    result.Data = rows;
                    result.Flag = EResultFlag.Success;
                    WriteLog(BusinessType.Question.GetText(), SystemRight.Add.GetText(), "新增: " + model.Id);


                    // TODO:需要处理替换消息模板以及消息类型
                    #region 生成待办
                    List <Epm_Approver> list = new List <Epm_Approver>();
                    Epm_Approver        app  = new Epm_Approver();
                    try
                    {
                        var recCompany = DataOperateBusiness <Epm_ProjectCompany> .Get().GetList(t => t.ProjectId == model.ProjectId && t.CompanyId == question.RecCompanyId).FirstOrDefault();

                        var project = DataOperateBusiness <Epm_Project> .Get().GetModel(model.ProjectId.Value);

                        if (recCompany == null)
                        {
                            if (project != null)
                            {
                                app.ApproverId   = project.ContactUserId;
                                app.ApproverName = project.ContactUserName;
                            }
                        }
                        else
                        {
                            if (recCompany != null && recCompany.LinkManId.HasValue)
                            {
                                app.ApproverId   = recCompany.LinkManId;
                                app.ApproverName = recCompany.LinkMan;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        WriteLog(BusinessType.Question.GetText(), SystemRight.Add.GetText(), "字符串截取位置3: " + model.ProjectId);
                    }

                    app.Title            = CurrentUserName + "对" + app.ApproverName + "发起了问题沟通";
                    app.Content          = CurrentUserName + "对" + app.ApproverName + "发起了问题沟通";
                    app.SendUserId       = CurrentUserID.ToLongReq();
                    app.SendUserName     = CurrentUserName;
                    app.SendTime         = DateTime.Now;
                    app.LinkURL          = string.Empty;
                    app.BusinessTypeNo   = BusinessType.Question.ToString();
                    app.Action           = SystemRight.Add.ToString();
                    app.BusinessTypeName = BusinessType.Question.GetText();
                    app.BusinessState    = (int)(EnumState.Normal);
                    app.BusinessId       = question.Id;
                    app.ProjectId        = question.ProjectId;
                    app.ProjectName      = question.ProjectName;
                    list.Add(app);
                    AddApproverBatch(list);
                    WriteLog(BusinessType.Question.GetText(), SystemRight.Add.GetText(), "提交问题生成待办: " + question.Id);
                    #endregion

                    #region 消息
                    var waitSend = GetWaitSendMessageList(model.ProjectId.Value);
                    foreach (var send in waitSend)
                    {
                        Epm_Massage modelMsg = new Epm_Massage();
                        modelMsg.ReadTime     = null;
                        modelMsg.RecId        = send.Key;
                        modelMsg.RecName      = send.Value;
                        modelMsg.RecTime      = DateTime.Now;
                        modelMsg.SendId       = CurrentUserID.ToLongReq();
                        modelMsg.SendName     = CurrentUserName;
                        modelMsg.SendTime     = DateTime.Now;
                        modelMsg.Title        = CurrentUserName + "对" + app.ApproverName + "发起了问题沟通";
                        modelMsg.Content      = CurrentUserName + "对" + app.ApproverName + "发起了问题沟通";
                        modelMsg.Type         = 2;
                        modelMsg.IsRead       = false;
                        modelMsg.BussinessId  = question.Id;
                        modelMsg.BussinesType = BusinessType.Question.ToString();
                        modelMsg.ProjectId    = model.ProjectId.Value;
                        modelMsg.ProjectName  = model.ProjectName;
                        modelMsg = base.SetCurrentUser(modelMsg);
                        modelMsg = base.SetCreateUser(modelMsg);
                        DataOperateBusiness <Epm_Massage> .Get().Add(modelMsg);
                    }
                    #endregion
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                }
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "AddQuestion");
            }
            return(result);
        }