/// <summary> /// 送签单据 /// </summary> /// <param name="session"></param> /// <param name="order"></param> public static void ApproveThis(ISession session, IApprovable order) { log.DebugFormat("submit order {0} for approve", order.OrderNumber); OrderTypeDef typeDef = OrderTypeDef.Retrieve(session, order.OrderTypeCode); log.DebugFormat("OrderTypeDef {0} retrieved", order.OrderTypeCode); //不需要签核 if (!typeDef.NeedApprove) { log.DebugFormat("order type {0} don't need approval", order.OrderTypeCode); order.ApproveResult = ApproveStatus.Approve; order.Update(session, "ApproveResult"); order.OnApprove(session); session.PostCommit += order.PostApprove; return; } //检查该单据是否已经有未完成的签核项,避免重复生成 int count = session.CreateEntityQuery <OrderApproveItem>() .Where(Exp.Eq("OrderTypeCode", order.OrderTypeCode) & Exp.Eq("OrderNumber", order.OrderNumber) & Exp.Eq("Status", ApproveStatus.UnApprove)) .Count(); if (count > 0) { log.DebugFormat("order {0} has {1} unfinished approve items, maybe it's already in approving state", order.OrderNumber, count); throw new Exception(typeDef.TypeText + order.OrderNumber + "已经在签核中"); } IList <OrderApproveDef> appDefines = session.CreateEntityQuery <OrderApproveDef>() .Where(Exp.Eq("OrderTypeCode", order.OrderTypeCode)) .OrderBy("StepIndex") .List <OrderApproveDef>(); if (appDefines == null || appDefines.Count <= 0) { log.DebugFormat("no OrderApproveDef exists for order type {0}", order.OrderTypeCode); throw new Exception(string.Format("Approve defines error for order type {0}", order.OrderTypeCode)); } else { log.DebugFormat("{0} OrderApproveDef retrieved", appDefines.Count); } //生成签核项 OrderApproveItem appItem = new OrderApproveItem(); appItem.OrderTypeCode = order.OrderTypeCode; appItem.OrderNumber = order.OrderNumber; appItem.Status = ApproveStatus.UnApprove; appItem.ApproveTime = new DateTime(1900, 1, 1); appItem.SubmitUser = Magic.Security.SecuritySession.CurrentUser.UserId; appItem.SubmitTime = DateTime.Now; appItem.CreateUser = order.CreateUser; appItem.CreateTime = order.CreateTime; appItem.Create(session); log.DebugFormat("OrderApproveItem {0} created", appItem.ApproveID); for (int i = 0; i < appDefines.Count; i++) { OrderApproveResult appResult = new OrderApproveResult(); appResult.ApproveID = appItem.ApproveID; appResult.StepIndex = appDefines[i].StepIndex; appResult.ApproveUser = appDefines[i].UserID; appResult.HasFinished = false; if (i == 0) { appResult.ActiveItem = true; } else { appResult.ActiveItem = false; } appResult.ApproveResult = false; appResult.ApproveTime = new DateTime(1900, 1, 1); appResult.ApproveNote = " "; appResult.Create(session); log.DebugFormat("OrderApproveResult {0} created", appResult.ApproveResultID); } }