using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using PMS.EntityModels.WorkFlow; using QWPlatform.IService; using PMS.BusinessModels.Problem; using System.Data; using PMS.BusinessModels.MobileProblem; using QWPlatform.SystemLibrary.LogManager; using QWPlatform.SystemLibrary; using PMS.BusinessModels.Account; using PMS.Plugins.Common; namespace PMS.DBService.WorkFlow { /// /// 创 建 人:王海洋 /// 创建日期:2019-01-25 /// 功能描述:问题工作流服务 /// public class WorkFlowService : DataServiceBase { protected override void DBFctory(string conName) { base.DBFctory(conName); } /// /// 列表查询(根据目录ID查询) /// /// 目录ID /// 返回该目录下有效的工作流列表 public List SelectList(int categoryID) { var model = new WorkFlowModel() { CategoryID = categoryID, Active = 1 }; model.SetDataFactory(this.DataFactoryObject); return model.SelectList(); } /// /// 根据流程ID获取模型 /// /// ID /// public WorkFlowModel GetModelById(int workflowid) { var model = new WorkFlowModel() { ID = workflowid }; model.SetDataFactory(this.DataFactoryObject); var r = model.Select(); if (r) { //返回查询结果的model return model; } return null; } /// /// 根据工作流返回上一工作流的ID /// /// ID /// public int? GetPreviousID(int workflowid) { var model = GetModelById(workflowid); if (model != null) {//获取到model return model.PreviousID; } return null; } #region 登记新问题 /// /// 根据工作流ID获取下一工作流的ID /// /// 分类目录ID /// 人员性质,1:本部人员,2:渠道人员,3: 操作员,4:医院管理员,5:卫计委管理员 /// 问题性质,1:Bug,2:咨询,3:需求,4:优化 /// 返回处理流程的ID public int? GetNewRequirementWorkFlowID(int categoryID, int personProperty, int problemProperty) { var sql = @"select t.ID from 问题工作流程 t , 问题流程环节 b where t.环节id = b.Id and t.目录ID =:categoryID and t.环节ID =5 ";//环节ID:5 为研发处理 var result = this.SqlBuilder .SqlText(sql) .Parameters("categoryID", categoryID) .Select(); if (result == 0) { Logger.Instance.Error("调用GetNewRequirementWorkFlowID方法,获取进入流程ID为0!"); } return result; } /// /// 登录一个新的Bug问题,返回新的流程ID /// /// 目录分类ID /// 人员性质 /// 返回登记bug跳到下一个流程ID public int? GetNewBugProblemWorkFlowID(int categoryID, int personProperty) { int? workflowid; ///如果登记的人员是客户 if (personProperty == 3) { //获取目标流程ID var sql = @"select 目标ID from 问题工作流程 where 目录ID=:categoryID and 环节ID=0 "; workflowid = this.SqlBuilder .SqlText(sql) .Parameters("categoryID", categoryID) .Select(); } ///如果是其他管理员 else { //获取目标流程ID var sql = @"select t.id from 问题工作流程 t , 问题流程环节 b where t.环节id >= b.Id and t.目录ID=:categoryID and b.人员性质=:personProperty and rownum=1 order by t.序号 asc "; workflowid = this.SqlBuilder .SqlText(sql) .Parameters("categoryID", categoryID) .Parameters("personProperty", personProperty) .Select(); } if (workflowid == 0) { Logger.Instance.Error("调用GetNewBugProblemWorkFlowID方法,获取进入流程ID为0!"); } return workflowid; } #endregion #region 提交获取下个流程ID /// /// 获取正常流程的下一个ID /// /// 人员性质 /// 问题ID /// 返回下个流程ID,如果人员性质不匹配,则返回为0 public int GetSubmitNextWorkFlowID(int personProperty, string problemId) { var sql = @"select w.目标id from 问题记录 t,问题工作流程 w, 问题流程环节 b where t.流程id = w.Id and w.环节id =b.Id and t.id = :ID and b.人员性质=:人员性质"; var workflowid = this.SqlBuilder .SqlText(sql) .Parameters("ID", problemId) .Parameters("人员性质", personProperty) .Select(); if (workflowid == 0) { Logger.Instance.Error("调用GetSubmitNextWorkFlowID方法,获取进入流程ID为0!"); } return workflowid; } /// /// 跳转流程处理方式,即通过当前问题没有找到匹配的下一个流程ID,即根据人员性质与目录ID,获取当前人员处理的下一个流程ID /// 直接根据当前人员的性质进行判断下一步流转到哪里,例如,当前是卫计委管理员,则直接流程到项目处理,如果当前是项目处理 /// 向上提交直接流转到技术支持,如果是项目支持人员,直接流转到研发,跟问题当前处于哪个环节无关。 /// /// 目录ID /// 人员性质 /// public int GetSubmitSkipNextWorkFlowID(int personProperty, string problemId) { ///获取目录Id var categoryId = this.SelectBuilder.From("问题记录 a,问题工作流程 b").Columns("b.目录ID").Where("a.流程ID=b.ID").Where("a.ID", problemId).Select(); var sql = @"select t.目标id from 问题工作流程 t,问题流程环节 b where t.环节id >= b.Id and t.目录ID = :目录ID and b.人员性质= :人员性质 order by t.序号 asc "; var workflowid = this.SqlBuilder .SqlText(sql) .Parameters("目录ID", categoryId) .Parameters("人员性质", personProperty) .Select(); if (workflowid == 0) { Logger.Instance.Error("调用GetSubmitSkipNextWorkFlowID方法,获取进入流程ID为0!"); } return workflowid; } #endregion #region 回退问题 /// /// 获取回退的流程ID /// /// /// /// public int GetBackWorkFlowID(string problemId) { var sql = @"select t.来源流程ID from 问题记录过程 t, 问题记录 r where t.问题id = r.Id and r.id = :问题ID and t.当前流程id = r.流程id and t.当前流程id > t.来源流程ID order by t.记录时间 desc "; var workflowid = this.SqlBuilder .SqlText(sql) .Parameters("问题ID", problemId) .Select(); if (workflowid == 0) { Logger.Instance.Error("调用GetBackWorkFlowID方法,获取进入流程ID为0!"); } return workflowid; } #endregion #region 问题操作相关 /// /// 获取非提交回退类处理操作的一进入流程Id /// /// /// /// public int? GetDealWorkId(string problemId, int personProperty, string JobCode) { ///获取目录Id var categoryId = this.SelectBuilder.Columns("b.目录ID").From("问题记录 a,问题工作流程 b").Where("a.流程ID=b.ID").Where("a.ID", problemId).Select(); var sql = @"select t.id from 问题工作流程 t , 问题流程环节 b where t.环节id >= b.Id and t.目录ID=:categoryID and b.人员性质=:personProperty "; var SqlBuilder = this.SqlBuilder; SqlBuilder.Parameters("categoryID", categoryId) .Parameters("personProperty", personProperty); if (personProperty == 1) { sql += @" and Exists (select column_value from table(Select f_Split_String(x.职务代码1, ',') from 问题流程环节 x where id = b.Id) where Column_Value =:Job) "; SqlBuilder.Parameters("Job", Convert.ToInt32(JobCode)); } sql += " order by t.序号 asc "; var workflowid = SqlBuilder .SqlText(sql) .Select(); if (workflowid == 0) { Logger.Instance.Warn("调用GetDealWorkId方法,获取进入流程ID为0!"); } return workflowid; } /// /// 问题受理 /// /// /// public int ProblemAccept(ProblemDealModel Model) { //判断进入流程ID是否为0 if (Model.NextWorkId == 0) { Logger.Instance.Error("调用ProblemAccept方法传入的进入流程ID为0,请检查获取进入流程ID方法"); return 0; } return this.ProcedureBuilder .Procedure("B_问题处理.P_问题受理") .Paramter("问题ID_In", Model.ProblemId) .Paramter("进入流程ID_In", Model.NextWorkId) .Paramter("操作人_In", Model.DealPeronName) .Paramter("操作人ID_In", Model.DealPeronId) .Paramter("操作时间_In", this.DataBaseBuilder.GetDateTime) .Paramter("耗时_In", PassTime(Model.ProblemId)) .Execute(); } /// /// 问题回退 /// /// public int ProblemRollBack(ProblemDealModel Model, out string ProcessId) { //判断进入流程ID是否为0 if (Model.NextWorkId == 0) { Logger.Instance.Error("调用ProblemRollBack方法传入的进入流程ID为0,请检查获取进入流程ID方法"); ProcessId = ""; return 0; } var Pro = this.ProcedureBuilder .Procedure("B_问题处理.P_问题回退") .Paramter("问题ID_In", Model.ProblemId) .Paramter("进入流程ID_In", Model.NextWorkId) .Paramter("操作描述_In", Model.Describe) .Paramter("操作人ID_In", Model.DealPeronId) .Paramter("操作时间_In", this.DataBaseBuilder.GetDateTime) .Paramter("耗时_In", PassTime(Model.ProblemId)) .ParamterOut("过程ID_Out", DbType.String, 36); var result = Pro.Execute(); ProcessId = Pro.ParameterValue("过程ID_Out"); try { if (!string.IsNullOrEmpty(Model.ProblemTypeID)) { UpdateBuilder.Update("问题记录").Where("ID", Model.ProblemId).Column("技术支持分类ID", Model.ProblemTypeID).Execute(); } } catch (Exception ex) { Logger.Instance.Error("[加分类ID是为了服务部方便统计咨询回退问题]问题回退分类出现异常:" + ex); } return result; } /// /// 问题终止 /// /// /// public int ProblemBreak(ProblemDealModel Model, out string ProcessId) { var Pro = this.ProcedureBuilder .Procedure("B_问题处理.P_问题终止") .Paramter("问题ID_In", Model.ProblemId) .Paramter("操作描述_In", Model.Describe) .Paramter("操作人ID_In", Model.DealPeronId) .Paramter("操作时间_In", this.DataBaseBuilder.GetDateTime) .Paramter("耗时_In", PassTime(Model.ProblemId)) .ParamterOut("过程ID_Out", DbType.String, 36); var result = Pro.Execute(); ProcessId = Pro.ParameterValue("过程ID_Out"); if (!string.IsNullOrEmpty(Model.ProblemTypeID)) { if (SqlBuilder.SqlText("select 性质 from 人员信息 where id=:ID").Parameters("ID", Model.DealPeronId).Select().Rows[0]["性质"].ToInt32() == 1) { UpdateBuilder.Update("问题记录").Where("ID", Model.ProblemId).Column("技术支持分类ID", Model.ProblemTypeID).Execute(); } else { UpdateBuilder.Update("问题记录").Where("ID", Model.ProblemId).Column("分类ID", Model.ProblemTypeID).Execute(); } } return result; } /// /// 问题指派 /// /// /// public int ProblemAssgin(ProblemDealModel Model, out string ProcessId) { //判断进入流程ID是否为0 if (Model.NextWorkId == 0) { Logger.Instance.Error("调用ProblemAssgin方法传入的进入流程ID为0,请检查获取进入流程ID方法"); ProcessId = ""; return 0; } try { var Pro = this.ProcedureBuilder .Procedure("B_问题处理.P_问题指派") .Paramter("问题ID_In", Model.ProblemId) .Paramter("进入流程ID_In", Model.NextWorkId) .Paramter("操作描述_In", Model.Describe) .Paramter("操作人ID_In", Model.DealPeronId) .Paramter("操作时间_In", this.DataBaseBuilder.GetDateTime) .Paramter("指派人_In", Model.AssignPersonName) .Paramter("指派人ID_In", Model.AssignPersonId) .Paramter("耗时_In", PassTime(Model.ProblemId)) .ParamterOut("过程ID_Out", DbType.String, 36); var result = Pro.Execute(); ProcessId = Pro.ParameterValue("过程ID_Out"); return result; } catch (Exception ex) { Logger.Instance.Error("调用问题指派存储过程失败", ex); ProcessId = ""; return 0; } } /// /// 问题处理 /// /// /// public int ProblemDeal(ProblemDealModel Model, out string ProcessId) { //判断进入流程ID是否为0 if (Model.NextWorkId == 0) { Logger.Instance.Error("调用ProblemDeal方法传入的进入流程ID为0,请检查获取进入流程ID方法"); ProcessId = ""; return 0; } var Pro = this.ProcedureBuilder .Procedure("B_问题处理.P_问题处理") .Paramter("问题ID_In", Model.ProblemId) .Paramter("进入流程ID_In", Model.NextWorkId) .Paramter("操作描述_In", Model.Describe) .Paramter("操作人_In", Model.DealPeronName) .Paramter("操作人ID_In", Model.DealPeronId) .Paramter("操作时间_In", this.DataBaseBuilder.GetDateTime) .Paramter("耗时_In", PassTime(Model.ProblemId)) .ParamterOut("过程ID_Out", DbType.String, 36); var result = Pro.Execute(); ProcessId = Pro.ParameterValue("过程ID_Out"); return result; } /// /// 问题完成 /// /// /// public int ProblemSolution(ProblemDealModel model, out string ProcessId, UserInfo user) { //判断进入流程ID是否为0 if (model.NextWorkId == 0) { Logger.Instance.Error("调用ProblemSolution方法传入的进入流程ID为0,请检查获取进入流程ID方法"); ProcessId = ""; return 0; } var Pro = this.ProcedureBuilder.Procedure("B_完成处理提交.P_问题完成") .Paramter("问题ID_In", model.ProblemId) .Paramter("操作人_In", model.DealPeronName) .Paramter("操作人ID_In", model.DealPeronId) .Paramter("进入流程ID_In", model.NextWorkId) .Paramter("耗时_In", PassTime(model.ProblemId)) .Paramter("解决方案_In", model.Describe) .Paramter("解决版本_In", model.Version) .Paramter("描述_In", model.Describe) .Paramter("操作时间_In", this.DataBaseBuilder.GetDateTime) .ParamterOut("过程ID_Out", DbType.String, 36); var result = Pro.Execute(); var CSCLR = ""; if (!model.TestPeronId.IsNullOrEmpty())//获取测试人员 { CSCLR = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.TestPeronId).Select().Rows[0]["姓名"].ToString(); } //更新测试处理人有 this.UpdateBuilder.Update("问题记录").Column("测试处理人ID", model.TestPeronId).Column("测试处理人", CSCLR).Column("解决版本ID", model.VersionID).Where("ID", model.ProblemId).Execute(); //若处理人未研发人员则变更研发处理人为当前登录人 foreach (var item in user.Roles) { if (item.ToInt32() == 7 || item.ToInt32() == 9 || item.ToInt32() == 10 || item.ToInt32() == 317 ) { UpdateBuilder.Update("问题记录").Column("研发处理人ID", model.DealPeronId).Column("研发处理人", model.DealPeronName).Where("id",model.ProblemId).Execute(); break; } } ProcessId = Pro.ParameterValue("过程ID_Out"); //如果选择了问题分类,则更新分类 if (!string.IsNullOrEmpty(model.ProblemTypeID)) { if (SqlBuilder.SqlText("select 性质 from 人员信息 where id=:ID").Parameters("ID", model.DealPeronId).Select().Rows[0]["性质"].ToInt32() == 1) { UpdateBuilder.Update("问题记录").Where("ID", model.ProblemId).Column("技术支持分类ID", model.ProblemTypeID).Execute(); } else { UpdateBuilder.Update("问题记录").Where("ID", model.ProblemId).Column("分类ID", model.ProblemTypeID).Execute(); } } var dt = this.SelectBuilder.Columns("a.产品ID").From("问题记录 a").Where("a.ID", model.ProblemId).Select(); var ProductId = ""; if (dt.Rows.Count>0) { ProductId = dt.Rows[0].GetValueByName("产品ID"); } //加入到版本计划中 this.DeleteBulider.Delete("产品问题版本").Where("问题ID", model.ProblemId).Execute(); this.InsertBuilder.Insert("产品问题版本").Column("ID", Guid.NewGuid().ToString()) .Column("问题ID", model.ProblemId).Column("版本ID", model.VersionID).Column("产品ID", ProductId).Execute(); return result; } /// /// 撤销完成/终止 /// /// /// /// public bool UndoProblem(string ProblemId, string PersonId) { this.DeleteBulider.Delete("产品问题版本").Where("问题ID", ProblemId).Execute(); using (var tran = this.DBTransaction.BeginTrans()) { try { var t = this.UpdateBuilder .Column("是否终止", 0) .Column("是否解决", 0) .Column("终止说明", DBNull.Value) .Column("终止日期", DBNull.Value) .Column("解决方案", DBNull.Value) .Column("是否验证", 0) .Column("验证人ID", DBNull.Value) .Update("问题记录") .Where("ID", ProblemId) .Execute(tran); var dt = this.SqlBuilder.SqlText("Select * from (Select 当前流程ID,记录时间 from 问题记录过程 where 问题ID=:id order by 记录时间 desc) where rownum=1") .Parameters("id", ProblemId).Select(); var ProcessId = dt.Rows[0].GetValueByName("当前流程ID"); //计算耗时 var ProcessTime = dt.Rows[0].GetValueByName("记录时间"); DateTime CurrentTime = this.DataBaseBuilder.GetDateTime; TimeSpan time = CurrentTime - ProcessTime; var PassTime = time.TotalMinutes / 60; //添加过程 var inserProcess = this.InsertBuilder .Column("ID", Guid.NewGuid().ToString()) .Column("问题ID", ProblemId) .Column("记录人ID", PersonId) .Column("记录时间", CurrentTime) .Column("当前流程ID", ProcessId) .Column("状态", 10) .Column("来源流程ID", ProcessId) .Column("耗时", PassTime) .Insert("问题记录过程") .Execute(tran); tran.CommitTrans(); return (t > 0 && inserProcess > 0); } catch (Exception ex) { tran.Rollback(); Logger.Instance.Error("撤销完成/终止失败", ex); return false; } } } /// /// 问题提交 /// /// /// public bool ProblemSubmit(ProblemDealModel model) { //判断进入流程ID是否为0 if (model.NextWorkId == 0) { Logger.Instance.Error("调用ProblemSubmit方法传入的进入流程ID为0,请检查获取进入流程ID方法"); return false; } using (var tran = this.DBTransaction.BeginTrans()) { try { var t = this.ProcedureBuilder.Procedure("B_完成处理提交.P_问题提交") .Paramter("问题ID_In", model.ProblemId) .Paramter("操作人ID_In", model.DealPeronId) .Paramter("耗时_In", PassTime(model.ProblemId)) .Paramter("进入流程ID", model.NextWorkId) .Paramter("操作描述_In", !string.IsNullOrEmpty(model.Describe) ? model.Describe : "向上提交") .Paramter("操作时间_In", this.DataBaseBuilder.GetDateTime) .Paramter("被指派人ID", model.SubID) .Paramter("被指派人", model.SubName) .Execute(tran); var s = 1; ///如果有向上提交人 if (!string.IsNullOrEmpty(model.SubID) && !string.IsNullOrEmpty(model.SubName)) { s = this.UpdateBuilder.Column("是否受理", 1) .Column("受理人", model.SubName) .Column("受理人ID", model.SubID) .Column("指派人", model.SubName) .Column("指派人ID", model.SubID) .Column("指派时间", this.DataBaseBuilder.GetDateTime) .Column("受理时间", this.DataBaseBuilder.GetDateTime) .Where("ID", model.ProblemId) .Update("问题记录") .Execute(tran); } tran.CommitTrans(); //如果选择了问题分类,则更新分类 if (!string.IsNullOrEmpty(model.ProblemTypeID)) { if (SqlBuilder.SqlText("select 性质 from 人员信息 where id=:ID").Parameters("ID", model.DealPeronId).Select().Rows[0]["性质"].ToInt32() == 1) { UpdateBuilder.Update("问题记录").Where("ID", model.ProblemId).Column("技术支持分类ID", model.ProblemTypeID).Execute(); } else { UpdateBuilder.Update("问题记录").Where("ID", model.ProblemId).Column("分类ID", model.ProblemTypeID).Execute(); } } return (t == -1 && s > 0); } catch (Exception ex) { Logger.Instance.Error("调用问题提交ProblemSubmit发生错误", ex); tran.Rollback(); return false; } } } /// /// 计算耗时 /// /// /// public Double PassTime(string ProblemID) { DateTime datime = SelectBuilder.From("问题记录过程").Columns("记录时间").Where("问题ID", ProblemID).OrderBy("记录时间 Desc").Select(); DateTime CurrentTime = this.DataBaseBuilder.GetDateTime; TimeSpan time = CurrentTime - datime; return time.TotalMinutes / 60; } public int SaveProcessFile(ProcessFileModel Model) { try { ///获取问题ID var ProblemId = this.SelectBuilder.From("问题记录过程").Where("ID", Model.ProcessId).Columns("问题ID").Select(); return this.InsertBuilder.Insert("产品问题附件").Column("ID", Guid.NewGuid().ToString()) .Column("问题ID", ProblemId) .Column("过程ID", Model.ProcessId) .Column("类型", Model.Type) .Column("附件ID", Model.FileId) .Column("添加时间", this.DataBaseBuilder.GetDateTime) .Column("添加人", Model.Name) .Execute(); } catch (Exception ex) { Logger.Instance.Error("保存产品问题附件表失败", ex); return 0; } } #endregion /// /// 验证问题 /// /// /// public bool AcceptancProblem(ProblemProcessModel model) { try { var r = false; if (model.Verification) {//验证通过 r = CompleteAcceptanc(model); } else { //验证不通过 r = UndoAcceptanc(model); } return r; } catch (Exception ex) { Logger.Instance.Error("问题验证失败,原因:" + ex); return false; } } /// /// 更新版本号 /// /// /// public bool UpdateVersion(VersionManageModel model) { try { var r = false; r =this.UpdateBuilder.Update("问题记录").Where("id", model.问题id).Column("解决版本ID", model.版本ID).Column("解决版本", model.解决版本).Column("解决版本状态", model.解决版本状态) .Column("紧急补丁时间", model.紧急补丁时间).Execute() > 0; try { if(model.是否加入==1) { var dt = this.SqlBuilder.SqlText("select * from 产品问题版本 t where 问题ID=:问题id") .Parameters("问题id", model.问题id).Select(); if(dt.Rows.Count>0)//已经加入,进行更新 { this.DeleteBulider.Delete("产品问题版本").Where("问题ID", model.问题id).Execute(); } this.InsertBuilder.Insert("产品问题版本").Column("ID", Guid.NewGuid().ToString()) .Column("问题ID", model.问题id).Column("版本ID", model.版本ID).Column("是否紧急", model.是否紧急) .Column("产品ID", model.产品ID).Column("说明", model.说明).Column("操作人", model.操作人) .Column("紧急补丁时间", model.紧急补丁时间).Execute(); } else { this.DeleteBulider.Delete("产品问题版本").Where("问题ID", model.问题id).Execute(); } } catch (Exception ex) { Logger.Instance.Error("加入日常补丁失败,原因:" + ex); } return r; } catch (Exception ex) { Logger.Instance.Error("更新问题记录版本号失败,原因:" + ex); return false; } } /// /// 完成验证 /// /// /// public bool CompleteAcceptanc(ProblemProcessModel model) { using (var tran = this.DBTransaction.BeginTrans()) { try { var dt = this.SqlBuilder.SqlText("Select * from (Select 当前流程ID,记录时间 from 问题记录过程 where 问题ID=:id order by 记录时间 desc) where rownum=1") .Parameters("id", model.ProblemID).Select(); var ProcessId = dt.Rows[0].GetValueByName("当前流程ID"); //计算耗时 var ProcessTime = dt.Rows[0].GetValueByName("记录时间"); DateTime CurrentTime = this.DataBaseBuilder.GetDateTime; TimeSpan time = CurrentTime - ProcessTime; var PassTime = time.TotalMinutes / 60; //更新问题记录 var ProblemRecord = this.UpdateBuilder; ProblemRecord.Where("ID", model.ProblemID).Update("问题记录") .Column("是否验证", 1) .Column("验证人ID", model.CurrentUserID); //如果填写了问题分类 if (!string.IsNullOrEmpty(model.ProblemTypeID)) { ProblemRecord.Column("分类ID", model.ProblemTypeID); } var tran1 = ProblemRecord.Execute(); //更新问题记录过程 var tran2 = this.InsertBuilder.Insert("问题记录过程") .Column("ID", Guid.NewGuid().ToString()) .Column("问题ID", model.ProblemID) .Column("记录人ID", model.CurrentUserID) .Column("记录时间", this.DataBaseBuilder.GetDateTime) .Column("当前流程ID", ProcessId) .Column("来源流程ID", ProcessId) .Column("状态", 11) .Column("描述", model.ProcessRemark) .Column("耗时", PassTime) .Column("结束时间", this.DataBaseBuilder.GetDateTime) .Execute(); tran.CommitTrans(); return (tran1 > 0 && tran2 > 0); } catch (Exception ex) { Logger.Instance.Error("调用问题完成验证CompleteAcceptanc失败,原因:" + ex); tran.Rollback(); return false; } } } /// /// 问题验证不通过,回退完成状态 /// /// /// /// public bool UndoAcceptanc(ProblemProcessModel model) { using (var tran = this.DBTransaction.BeginTrans()) { try { var t = this.UpdateBuilder .Column("是否终止", 0) .Column("是否解决", 0) .Column("终止说明", DBNull.Value) .Column("终止日期", DBNull.Value) .Column("解决方案", DBNull.Value) .Column("是否验证", 0) .Column("验证人ID", DBNull.Value) .Update("问题记录") .Where("ID", model.ProblemID) .Execute(tran); var dt = this.SqlBuilder.SqlText("Select * from (Select 当前流程ID,记录时间 from 问题记录过程 where 问题ID=:id order by 记录时间 desc) where rownum=1") .Parameters("id", model.ProblemID).Select(); var ProcessId = dt.Rows[0].GetValueByName("当前流程ID"); //计算耗时 var ProcessTime = dt.Rows[0].GetValueByName("记录时间"); DateTime CurrentTime = this.DataBaseBuilder.GetDateTime; TimeSpan time = CurrentTime - ProcessTime; var PassTime = time.TotalMinutes / 60; //添加过程 var inserProcess = this.InsertBuilder .Column("ID", Guid.NewGuid().ToString()) .Column("问题ID", model.ProblemID) .Column("记录人ID", model.CurrentUserID) .Column("记录时间", CurrentTime) .Column("当前流程ID", ProcessId) .Column("状态", 10) .Column("来源流程ID", ProcessId) .Column("耗时", PassTime) .Column("描述", model.ProcessRemark) .Column("结束时间", CurrentTime) .Insert("问题记录过程") .Execute(tran); tran.CommitTrans(); return (t > 0 && inserProcess > 0); } catch (Exception ex) { tran.Rollback(); Logger.Instance.Error("撤销完成/终止失败", ex); return false; } } } } }