Ejemplo n.º 1
0
 private bool Submit(SubmitCorpAduitOrderModel submit)
 {
     if (submit.AduitConfigId.HasValue)
     {
         //提交审批单
         int aduitOrderId = _corpAduitBll.SubmitAduit(new SubmitAduitModel()
         {
             OrderInfoList   = submit.OrderInfoList,
             AduitConfigId   = submit.AduitConfigId.Value,
             DealSource      = submit.Source,
             SubmitCid       = submit.SubmitCid,
             SubmitOid       = submit.SubmitOid,
             IsViolatePolicy = submit.IsViolatePolicy ?? false,
             OrderType       = submit.OrderType
         });
         if (aduitOrderId > 0)
         {
             //送审
             SubmitResult = _corpAduitBll.DeliveAduit(new DeliveAduitModel
             {
                 DealCid      = submit.SubmitCid,
                 DealOid      = submit.SubmitOid,
                 AduitOrderId = aduitOrderId,
                 DealSource   = submit.Source
             });
         }
         return(true);
     }
     return(false);
 }
Ejemplo n.º 2
0
        public DoAduitOrderResultModel DoAduitOrder(DoAduitOrderModel doAduit)
        {
            BaseDealAduitModel query = new BaseDealAduitModel()
            {
                DealCid      = doAduit.DealCid,
                AduitOrderId = doAduit.AduitOrderId,
                DealOid      = doAduit.DealOid,
                IsAgree      = doAduit.IsAgree,
                DealSource   = doAduit.DealSource,
                AduitReason  = doAduit.AduitReason,
                CurrentFlow  = doAduit.CurrentFlow
            };

            try
            {
                BaseDealAduitResultModel reuslt = _corpAduitBll.DoAduit(query);

                #region 推送app消息
                if (reuslt.IsFinished)
                {
                    _addSendAppMessageBll.AddAppMessage(new SendAppMessageModel()
                    {
                        Cid       = reuslt.CreateAduitOrderCid,
                        OrderId   = reuslt.AduitOrderId,
                        OrderType = OrderSourceTypeEnum.AduitOrder,
                        SendType  = SendAppMessageTypeEnum.AuditResultNotice
                    });
                }
                else
                {
                    foreach (var cid in reuslt.NextFlowCidList)
                    {
                        _addSendAppMessageBll.AddAppMessage(new SendAppMessageModel()
                        {
                            Cid       = cid,
                            OrderId   = reuslt.AduitOrderId,
                            OrderType = OrderSourceTypeEnum.AduitOrder,
                            SendType  = SendAppMessageTypeEnum.WaitAuditNotice
                        });
                    }
                }
                #endregion

                return(new DoAduitOrderResultModel()
                {
                    IsSuccessed = reuslt.IsSuccessed,
                    DetailList = reuslt.DetailList,
                    CreateAduitOrderCid = reuslt.CreateAduitOrderCid,
                    IsFinished = reuslt.IsFinished
                });
            }
            catch (MojoryException ex)//捕捉到取消订单异常
            {
                if (ex.Code == MojoryApiResponseCode.AduitCancelOrder)
                {
                    //推送APP消息
                    _addSendAppMessageBll.AddAppMessage(new SendAppMessageModel()
                    {
                        Cid       = ex.OtherId,
                        OrderId   = query.AduitOrderId,
                        OrderType = OrderSourceTypeEnum.AduitOrder,
                        SendType  = SendAppMessageTypeEnum.AuditOrderDeleteNotice
                    });
                }
                throw;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 审批
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public BaseDealAduitResultModel DoAduit(BaseDealAduitModel model)
        {
            CorpAduitOrderEntity corpAduitOrderEntity = _corpAduitOrderDal.Find <CorpAduitOrderEntity>(model.AduitOrderId);
            List <int>           statusList           = new List <int>()
            {
                (int)CorpAduitOrderStatusEnum.W,
                (int)CorpAduitOrderStatusEnum.P,
                (int)CorpAduitOrderStatusEnum.W1,
                (int)CorpAduitOrderStatusEnum.P1,
                (int)CorpAduitOrderStatusEnum.P2
            };

            if (corpAduitOrderEntity.Status == (int)CorpAduitOrderStatusEnum.J)
            {
                throw new Exception("当前审批已被拒绝");
            }

            if (!statusList.Contains(corpAduitOrderEntity.Status))
            {
                throw new Exception("当前审批单状态异常");
            }

            if (corpAduitOrderEntity.CurrentFlow != model.CurrentFlow)
            {
                throw new Exception("当前审批环节异常");
            }


            //获取当前环节信息
            List <CorpAduitOrderFlowEntity> flowList =
                _corpAduitOrderFlowDal.Query <CorpAduitOrderFlowEntity>(n => n.AduitOrderId == model.AduitOrderId)
                .ToList();

            //判断当前审批单订单是否已经被取消
            if (!CheckOrderIsCancel(corpAduitOrderEntity))
            {
                throw new MojoryException(MojoryApiResponseCode.AduitCancelOrder, "审批单中的订单已经被取消,系统自动设置审批单过期",
                                          flowList.Find(n => n.Flow == -1).FlowCid);
            }

            List <CorpAduitOrderFlowEntity> corpAduitOrderFlowEntities =
                flowList.FindAll(n => n.Flow == corpAduitOrderEntity.CurrentFlow);

            List <int> nextFlowCidList = new List <int>();

            if (corpAduitOrderFlowEntities.Count == 1)
            {
                SingleAduit(model, corpAduitOrderEntity, corpAduitOrderFlowEntities[0], ref nextFlowCidList);
            }
            else if (corpAduitOrderFlowEntities.Count > 1)
            {
                TogetherAduit(model, corpAduitOrderEntity, corpAduitOrderFlowEntities, ref nextFlowCidList);
            }

            List <CorpAduitOrderDetailEntity> corpAduitOrderDetailEntities =
                _corpAduitOrderDetailDal.Query <CorpAduitOrderDetailEntity>(n => n.AduitOrderId == model.AduitOrderId,
                                                                            true).ToList();

            BaseDealAduitResultModel resultModel = new BaseDealAduitResultModel()
            {
                AduitOrderId        = model.AduitOrderId,
                IsSuccessed         = true,
                DetailList          = new List <BaseDealAduitResultDetailModel>(),
                CreateAduitOrderCid = flowList.Find(n => n.Flow == -1).FlowCid,
                IsFinished          =
                    (corpAduitOrderEntity.Status == (int)CorpAduitOrderStatusEnum.F ||
                     corpAduitOrderEntity.Status == (int)CorpAduitOrderStatusEnum.J),
                NextFlowCidList  = nextFlowCidList,
                AduitOrderStatus = corpAduitOrderEntity.Status.ValueToEnum <CorpAduitOrderStatusEnum>()
            };

            corpAduitOrderDetailEntities.ForEach(n =>
            {
                resultModel.DetailList.Add(new BaseDealAduitResultDetailModel()
                {
                    OrderId         = n.OrderId,
                    OrderSourceType = n.OrderType.ValueToEnum <OrderSourceTypeEnum>()
                });
            });

            return(resultModel);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 送审
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public BaseDealAduitResultModel DeliveAduit(DeliveAduitModel model)
        {
            //获取审批单信息
            CorpAduitOrderEntity corpAduitOrderEntity = _corpAduitOrderDal.Find <CorpAduitOrderEntity>(model.AduitOrderId);

            if (corpAduitOrderEntity.Status != (int)CorpAduitOrderStatusEnum.N)
            {
                throw new Exception("当前审批单状态异常");
            }
            corpAduitOrderEntity.CurrentFlow = corpAduitOrderEntity.CurrentFlow + 1;//设置下一级

            CorpAduitOrderFlowEntity corpAduitOrderFlowEntity =
                _corpAduitOrderFlowDal.Query <CorpAduitOrderFlowEntity>(
                    n => n.Flow == corpAduitOrderEntity.CurrentFlow && n.AduitOrderId == model.AduitOrderId)
                .FirstOrDefault();

            if (corpAduitOrderFlowEntity == null)
            {
                throw new Exception("当前审批单流程异常");
            }
            if (corpAduitOrderFlowEntity.FlowCid != model.DealCid)
            {
                throw new Exception("无权操作");
            }

            corpAduitOrderFlowEntity.DealResult = (int)AduitDealResultEnum.W; //设置送审

            #region 记日志
            CorpAduitOrderLogEntity log = new CorpAduitOrderLogEntity()
            {
                LogTime      = DateTime.Now,
                Source       = model.DealSource,
                AduitOrderId = corpAduitOrderEntity.AduitOrderId,
                DealOid      = model.DealOid,
                DealCid      = model.DealCid,
                DealResult   = (int)corpAduitOrderFlowEntity.DealResult,
                AduitFlow    = corpAduitOrderEntity.CurrentFlow
            };
            log.AduitType = (log.Source == "O" ? (int)AduitTypeEnum.T : (int)AduitTypeEnum.N);
            _corpAduitOrderLogDal.Insert <CorpAduitOrderLogEntity>(log);
            #endregion

            List <int> nextFlowCidList = new List <int>();
            //判断当前状态是否等于最终状态,如果相同则设置终结状态
            if (corpAduitOrderEntity.FinalFlow == corpAduitOrderEntity.CurrentFlow)
            {
                corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.F; //设置完成
            }
            else
            {
                #region 判断下一环节是否汇审
                corpAduitOrderEntity.CurrentFlow = corpAduitOrderEntity.CurrentFlow + 1;//设置下一级

                List <CorpAduitOrderFlowEntity> corpAduitOrderFlowEntities =
                    _corpAduitOrderFlowDal.Query <CorpAduitOrderFlowEntity>(
                        n => n.Flow == corpAduitOrderEntity.CurrentFlow && n.AduitOrderId == model.AduitOrderId, true)
                    .ToList();

                if (corpAduitOrderFlowEntities.Count == 1)//下一环节只有一个处理人
                {
                    corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.W;
                }
                else if (corpAduitOrderFlowEntities.Count > 1)//下一环节多个处理人,认为是汇审
                {
                    corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.W1;
                }
                else
                {
                    throw new Exception("送审阶段异常");
                }

                nextFlowCidList = corpAduitOrderFlowEntities.Select(n => n.FlowCid).ToList();
                #endregion
            }

            //保存审批单修改
            _corpAduitOrderDal.Update <CorpAduitOrderEntity>(corpAduitOrderEntity, new string[] { "Status", "CurrentFlow" });

            //设置环节结果
            _corpAduitOrderFlowDal.Update <CorpAduitOrderFlowEntity>(corpAduitOrderFlowEntity,
                                                                     new string[] { "DealResult" });

            BaseDealAduitResultModel resultModel = new BaseDealAduitResultModel()
            {
                AduitOrderId        = model.AduitOrderId,
                IsSuccessed         = true,
                CreateAduitOrderCid = model.DealCid,
                IsFinished          = false,
                NextFlowCidList     = nextFlowCidList
            };

            return(resultModel);
        }