VOL框架 审批最后一步事务处理
VOL框架 审批最后一步事务处理
public override WebResponseContent Audit(object[] keys, int? auditStatus, string auditReason) { Tools tools = new Tools(); int laststep = tools.LastStep((string)keys[0], "ST_LockUnlock"); //status当前审批状态,lastAudit是否最后一个审批节点 AuditWorkFlowExecuting = (ST_LockUnlock lockUnlock, AuditStatus status, bool lastAudit) => { return webResponse.OK(); }; //status当前审批状态,nextUserIds下一个节点审批人的帐号id(可以从sys_user表中查询用户具体信息),lastAudit是否最后一个审批节点 AuditWorkFlowExecuted = (ST_LockUnlock lockUnlock, AuditStatus status, List<int> nextUserIds, bool lastAudit) => { //lastAudit=true时,流程已经结束 if (!lastAudit) { if (laststep == 1 && auditStatus == 1) { //获取表码调整记录及对应的日记录信息 string bql = $@" SELECT MeterID,ReqType,WorkDate FROM ST_LockUnlock WHERE LockUnlockID={keys[0]} "; var data = DBServerProvider.SqlDapper.QueryDynamicFirst(bql, ""); if (data.MeterID == null) { return webResponse.Error("无仪表信息!"); } if (data.ReqType == null) { return webResponse.Error("开关类型为空!"); } if (data.WorkDate == null) { return webResponse.Error("施工日期为空!"); } //更新到仪表信息表 ST_CodeMeter string cql = $@"UPDATE ST_CodeMeter SET ValveState='{data.ReqType}',LockunlockDate='{data.WorkDate}' WHERE MeterID={data.MeterID}"; repository.ExecuteSqlCommand(cql); } } //审批流程回退功能,回到第一个审批人重新审批(重新生成审批流程) //if (status==AuditStatus.审核未通过||status==AuditStatus.驳回) //{ // base.RewriteFlow(order); //} return webResponse.OK(); }; return base.Audit(keys, auditStatus, auditReason); }
/// <summary> /// 剩余审批流程节点数 /// LastStep==1时为最后一步可审批节点,可在此时处理与审批通过有关的其他业务 /// LastStep==0时 该审批已通过 /// </summary> /// <param name="tableid"></param> /// <param name="tablename"></param> /// <returns></returns> public int LastStep(string tableid,string tablename) { //判断当前审批节点是否为最后一个可审批节点 //即当LastStep==1时为最后一步审批,可在此时处理与审批通过有关的其他业务 string aql = $@" SELECT a.total-b.finish-2 AS LastStep FROM ( SELECT count(1) AS total FROM Sys_WorkFlowTableStep WHERE WorkFlowTable_Id= ( SELECT WorkFlowTable_Id FROM Sys_WorkFlowTable WHERE WorkTableKey={tableid} AND WorkTable='{tablename}' ) ) a, ( SELECT count(1) AS finish FROM Sys_WorkFlowTableStep WHERE WorkFlowTable_Id= ( SELECT WorkFlowTable_Id FROM Sys_WorkFlowTable WHERE WorkTableKey={tableid} AND WorkTable='{tablename}' ) AND AuditStatus=1 ) b "; var lp = DBServerProvider.SqlDapper.QueryDynamicFirst(aql, ""); return lp.LastStep;//1为最后一步可审批节点 }