Beispiel #1
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;
            }
        }
Beispiel #2
0
        /// <summary>
        /// 单审
        /// </summary>
        /// <returns></returns>
        private bool SingleAduit(BaseDealAduitModel model, CorpAduitOrderEntity corpAduitOrderEntity,
                                 CorpAduitOrderFlowEntity corpAduitOrderFlowEntity, ref List <int> nextFlowCidList)
        {
            if (corpAduitOrderFlowEntity == null)
            {
                throw new Exception("当前审批单流程异常");
            }
            if (corpAduitOrderFlowEntity.FlowCid != model.DealCid)
            {
                throw new Exception("无权操作");
            }

            corpAduitOrderFlowEntity.DealResult = (model.IsAgree
                ? (int)AduitDealResultEnum.F
                : (int)AduitDealResultEnum.C);

            #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,
                AduitReason  = model.AduitReason
            };
            log.AduitType = (log.Source == "O" ? (int)AduitTypeEnum.T : (int)AduitTypeEnum.N);
            _corpAduitOrderLogDal.Insert <CorpAduitOrderLogEntity>(log);
            #endregion

            //审批不通过
            if (corpAduitOrderFlowEntity.DealResult == (int)AduitDealResultEnum.C)
            {
                corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.J;
            }
            else
            {
                if (corpAduitOrderEntity.FinalFlow == corpAduitOrderEntity.CurrentFlow)
                {
                    corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.F;//设置完成
                }
                else
                {
                    /*******当前环节+1*****/
                    corpAduitOrderEntity.CurrentFlow = corpAduitOrderEntity.CurrentFlow + 1;
                    #region 判断下一环节是否汇审

                    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.P;
                    }
                    else if (corpAduitOrderFlowEntities.Count > 1)//下一环节多个处理人,认为是汇审
                    {
                        corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.P1;
                    }
                    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" });

            return(true);
        }
Beispiel #3
0
        /// <summary>
        /// 汇审
        /// </summary>
        /// <returns></returns>
        private bool TogetherAduit(BaseDealAduitModel model, CorpAduitOrderEntity corpAduitOrderEntity,
                                   List <CorpAduitOrderFlowEntity> corpAduitOrderFlowEntities, ref List <int> nextFlowCidList)
        {
            if (corpAduitOrderFlowEntities == null || corpAduitOrderFlowEntities.Count == 0)
            {
                throw new Exception("当前审批单流程异常");
            }
            List <int> flowCidList = new List <int>();

            corpAduitOrderFlowEntities.ForEach(n => { flowCidList.Add(n.FlowCid); });
            if (!flowCidList.Contains(model.DealCid))
            {
                throw new Exception("无权操作");
            }

            //根据审批人获取当前审批环节
            CorpAduitOrderFlowEntity corpAduitOrderFlowEntity =
                corpAduitOrderFlowEntities.Find(n => n.FlowCid == model.DealCid && n.AduitOrderId == model.AduitOrderId);

            if (corpAduitOrderFlowEntity.DealResult.HasValue)
            {
                throw new Exception("您已经审批过了");
            }

            var isDealFlow =
                corpAduitOrderFlowEntities.Find(n => !n.DealResult.HasValue && n.FlowCid != model.DealCid); //获取当前环节没有处理的

            corpAduitOrderFlowEntity.DealResult = (model.IsAgree
               ? (int)AduitDealResultEnum.F
               : (int)AduitDealResultEnum.C);

            #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,
                AduitReason  = model.AduitReason
            };
            log.AduitType = (log.Source == "O" ? (int)AduitTypeEnum.T : (int)AduitTypeEnum.N);
            _corpAduitOrderLogDal.Insert <CorpAduitOrderLogEntity>(log);
            #endregion

            //审批不通过,则取消审批单
            if (corpAduitOrderFlowEntity.DealResult == (int)AduitDealResultEnum.C)
            {
                corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.J;
            }
            else
            {
                if (isDealFlow != null)
                {
                    //有存在除开自己的没处理人
                    CorpAduitConfigEntity corpAduitConfigEntity =
                        _corpAduitConfigDal.Find <CorpAduitConfigEntity>(corpAduitOrderEntity.AduitConfigId);
                    if (corpAduitConfigEntity.TogetherAduitType == 0)  //判断是否需要全部审批
                    {
                        //设置汇审中
                        corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.P2;
                    }
                    else
                    {
                        if (corpAduitOrderEntity.FinalFlow == corpAduitOrderEntity.CurrentFlow)
                        {
                            corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.F;//设置完成
                        }
                        else
                        {
                            /*******当前环节+1*****/
                            corpAduitOrderEntity.CurrentFlow = corpAduitOrderEntity.CurrentFlow + 1;
                            #region 判断下一环节是否汇审
                            List <CorpAduitOrderFlowEntity> nextFlowList =
                                _corpAduitOrderFlowDal.Query <CorpAduitOrderFlowEntity>(
                                    n => n.Flow == corpAduitOrderEntity.CurrentFlow && n.AduitOrderId == model.AduitOrderId, true).ToList();

                            if (nextFlowList.Count == 1)//下一环节只有一个处理人
                            {
                                corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.P;
                            }
                            else if (nextFlowList.Count > 1)//下一环节多个处理人,认为是汇审
                            {
                                corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.P1;
                            }
                            else
                            {
                                throw new Exception("送审阶段异常");
                            }
                            nextFlowCidList = corpAduitOrderFlowEntities.Select(n => n.FlowCid).ToList();
                            #endregion
                        }
                    }
                }
                else
                {
                    //只有当前审批人没有处理的情况
                    if (corpAduitOrderEntity.FinalFlow == corpAduitOrderEntity.CurrentFlow)
                    {
                        corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.F;//设置完成
                    }
                    else
                    {
                        /*******当前环节+1*****/
                        corpAduitOrderEntity.CurrentFlow = corpAduitOrderEntity.CurrentFlow + 1;
                        #region 判断下一环节是否汇审
                        List <CorpAduitOrderFlowEntity> nextFlowList =
                            _corpAduitOrderFlowDal.Query <CorpAduitOrderFlowEntity>(
                                n => n.Flow == corpAduitOrderEntity.CurrentFlow && n.AduitOrderId == model.AduitOrderId, true).ToList();

                        if (nextFlowList.Count == 1)//下一环节只有一个处理人
                        {
                            corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.P;
                        }
                        else if (nextFlowList.Count > 1)//下一环节多个处理人,认为是汇审
                        {
                            corpAduitOrderEntity.Status = (int)CorpAduitOrderStatusEnum.P1;
                        }
                        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" });
            return(true);
        }
Beispiel #4
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);
        }