public CorpAduitConfigModel GetCorpAduitConfigById(int configId)
        {
            CorpAduitConfigEntity corpAduitConfigEntity = _corpAduitConfigDal.Find <CorpAduitConfigEntity>(configId);
            List <CorpAduitConfigDetailEntity> corpAduitConfigDetailEntities =
                _corpAduitConfigDetailDal.Query <CorpAduitConfigDetailEntity>(
                    n => n.ConfigId == corpAduitConfigEntity.ConfigId, true).OrderBy(n => n.AduitLevel)
                .ToList();

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

            corpAduitConfigDetailEntities.ForEach(n =>
            {
                cidList.Add(n.AduitCid);
            });

            List <CustomerInfoEntity> customerInfoEntities =
                _customerDal.Query <CustomerInfoEntity>(n => cidList.Contains(n.Cid), true).ToList();

            CorpAduitConfigModel corpAduitConfigModel =
                Mapper.Map <CorpAduitConfigEntity, CorpAduitConfigModel>(corpAduitConfigEntity);

            corpAduitConfigModel.DetailList =
                Mapper.Map <List <CorpAduitConfigDetailEntity>, List <CorpAduitConfigDetailModel> >(
                    corpAduitConfigDetailEntities);

            foreach (var corpAduitConfigDetailModel in corpAduitConfigModel.DetailList)
            {
                var customer = customerInfoEntities.Find(n => n.Cid == corpAduitConfigDetailModel.AduitCid);
                corpAduitConfigDetailModel.AduitName     = customer?.RealName;
                corpAduitConfigDetailModel.IsCheckPerson = (customer?.IsCheckPerson == "T");
            }

            return(corpAduitConfigModel);
        }
示例#2
0
        public bool EditCorpAduitConfig(CorpAduitConfigModel model)
        {
            if (model.DetailList != null && model.DetailList.Count > 0)
            {
                List <int> orderTypeList = new List <int>
                {
                    (int)OrderSourceTypeEnum.Flt,
                    (int)OrderSourceTypeEnum.FltModApply,
                    (int)OrderSourceTypeEnum.FltRetApply,
                    (int)OrderSourceTypeEnum.Tra
                };
                foreach (var i in orderTypeList)
                {
                    var tList = model.DetailList.FindAll(n => n.OrderType == i);
                    if (tList != null && tList.Count > 0)
                    {
                        Check(tList);
                    }
                }
            }

            CorpAduitConfigEntity corpAduitConfigEntity = Mapper.Map <CorpAduitConfigModel, CorpAduitConfigEntity>(model);

            _corpAduitConfigDal.Update(corpAduitConfigEntity,
                                       new string[] { "AduitName", "IsNeedAduit", "IsDel", "TogetherAduitType" });

            //清空关联关系
            List <CorpAduitConfigDetailEntity> corpAduitConfigDetailEntities =
                _corpAduitConfigDetailDal.Query <CorpAduitConfigDetailEntity>(
                    n => n.ConfigId == corpAduitConfigEntity.ConfigId, true).ToList();

            foreach (var corpAduitConfigDetailEntity in corpAduitConfigDetailEntities)
            {
                _corpAduitConfigDetailDal.Delete <CorpAduitConfigDetailEntity>(corpAduitConfigDetailEntity.Id);
            }

            List <CorpAduitConfigDetailEntity> requestCorpAduitConfigDetailEntities = Mapper
                                                                                      .Map <List <CorpAduitConfigDetailModel>, List <CorpAduitConfigDetailEntity> >(
                model.DetailList);

            foreach (var requestCorpAduitConfigDetailEntity in requestCorpAduitConfigDetailEntities)
            {
                if ((requestCorpAduitConfigDetailEntity.PolicyTypeAduit ?? 0) == 0)
                {
                    throw new Exception("请设置差旅政策审批使用范围");
                }
                requestCorpAduitConfigDetailEntity.ConfigId = corpAduitConfigEntity.ConfigId;
                _corpAduitConfigDetailDal.Insert(requestCorpAduitConfigDetailEntity);
            }

            return(true);
        }
        public bool AddCorpAduitConfig(CorpAduitConfigModel model)
        {
            if (model.DetailList != null && model.DetailList.Count > 0)
            {
                List <int> orderTypeList = new List <int>
                {
                    (int)OrderSourceTypeEnum.Flt,
                    (int)OrderSourceTypeEnum.FltModApply,
                    (int)OrderSourceTypeEnum.FltRetApply,
                    (int)OrderSourceTypeEnum.Tra
                };
                foreach (var i in orderTypeList)
                {
                    var tList = model.DetailList.FindAll(n => n.OrderType == i);
                    if (tList != null && tList.Count > 0)
                    {
                        Check(tList);
                    }
                }
            }


            CorpAduitConfigEntity corpAduitConfigEntity = Mapper.Map <CorpAduitConfigModel, CorpAduitConfigEntity>(model);

            corpAduitConfigEntity.CreateTime = DateTime.Now;
            List <CorpAduitConfigDetailEntity> corpAduitConfigDetailEntities = Mapper
                                                                               .Map <List <CorpAduitConfigDetailModel>, List <CorpAduitConfigDetailEntity> >(
                model.DetailList);

            corpAduitConfigEntity = _corpAduitConfigDal.Insert(corpAduitConfigEntity);

            if (corpAduitConfigDetailEntities != null && corpAduitConfigDetailEntities.Count > 0)
            {
                foreach (var cporCorpAduitConfigDetailEntity in corpAduitConfigDetailEntities)
                {
                    if ((cporCorpAduitConfigDetailEntity.PolicyTypeAduit ?? 0) == 0)
                    {
                        throw new Exception("请设置差旅政策审批使用范围");
                    }

                    cporCorpAduitConfigDetailEntity.ConfigId = corpAduitConfigEntity.ConfigId;
                    _corpAduitConfigDetailDal.Insert(cporCorpAduitConfigDetailEntity);
                }
            }


            return(true);
        }
示例#4
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);
        }
示例#5
0
        /// <summary>
        /// 提交审批
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public int SubmitAduit(SubmitAduitModel model)
        {
            CorpAduitConfigEntity corpAduitConfigEntity =
                _corpAduitConfigDal.Find <CorpAduitConfigEntity>(model.AduitConfigId);

            if (corpAduitConfigEntity.IsNeedAduit == 0)
            {
                return(0);
            }

            #region 判断待审批订单是否存在没有处理的审批流程

            List <int> orderidList = new List <int>();
            model.OrderInfoList.ForEach(n => { orderidList.Add(n.OrderId); });
            List <CorpAduitOrderDetailEntity> checkList =
                (from n in base.Context.Set <CorpAduitOrderDetailEntity>()
                 join o in base.Context.Set <CorpAduitOrderEntity>() on n.AduitOrderId equals o.AduitOrderId
                 where o.Status != 6 && o.Status != 7 &&
                 orderidList.Contains(n.OrderId)
                 select n).ToList();
            if (checkList != null && checkList.Count > 0)
            {
                return(0);
            }

            #endregion

            #region 生成审批单

            #region 获取审批规则环节

            List <CorpAduitConfigDetailEntity> corpAduitConfigDetailEntities =
                _corpAduitConfigDetailDal.Query <CorpAduitConfigDetailEntity>(
                    n => n.ConfigId == model.AduitConfigId && n.OrderType == (int)model.OrderType,
                    true).OrderBy(n => n.AduitLevel).ToList();
            if (corpAduitConfigDetailEntities == null || corpAduitConfigDetailEntities.Count == 0)
            {
                return(0);
            }

            List <CorpAduitConfigDetailEntity> aduitConfigDetailList = new List <CorpAduitConfigDetailEntity>();

            //判断当前是不是存在审批环节
            foreach (var corpAduitConfigDetailEntity in corpAduitConfigDetailEntities)
            {
                if (model.IsViolatePolicy) //当前订单违背差旅政策
                {
                    if ((corpAduitConfigDetailEntity.PolicyTypeAduit & (int)PolicyTypeAduitEnum.V) ==
                        (int)PolicyTypeAduitEnum.V)
                    {
                        aduitConfigDetailList.Add(corpAduitConfigDetailEntity);
                    }
                }
                else //当前订单符合差旅政策
                {
                    if ((corpAduitConfigDetailEntity.PolicyTypeAduit & (int)PolicyTypeAduitEnum.A) ==
                        (int)PolicyTypeAduitEnum.A)
                    {
                        aduitConfigDetailList.Add(corpAduitConfigDetailEntity);
                    }
                }
            }

            if (aduitConfigDetailList.Count == 0)
            {
                return(0);
            }


            #endregion

            #region 新增审批单

            //int finalFlow = aduitConfigDetailList[aduitConfigDetailList.Count - 1].AduitLevel;

            CorpAduitOrderEntity corpAduitOrderEntity = new CorpAduitOrderEntity()
            {
                AduitConfigId = model.AduitConfigId,
                Status        = (int)CorpAduitOrderStatusEnum.N,
                CurrentFlow   = -1,
                FinalFlow     = 0,
                CreateTime    = DateTime.Now
            };
            corpAduitOrderEntity = _corpAduitOrderDal.Insert <CorpAduitOrderEntity>(corpAduitOrderEntity);

            #endregion

            #region 新增审批单与订单的关系

            foreach (var detail in model.OrderInfoList)
            {
                _corpAduitOrderDetailDal.Insert <CorpAduitOrderDetailEntity>(new CorpAduitOrderDetailEntity()
                {
                    OrderId      = detail.OrderId,
                    OrderType    = (int)detail.OrderType,
                    AduitOrderId = corpAduitOrderEntity.AduitOrderId
                });
            }

            #endregion

            #region 新增审批环节

            //1.创建审批环节
            _corpAduitOrderFlowDal.Insert <CorpAduitOrderFlowEntity>(new CorpAduitOrderFlowEntity()
            {
                AduitOrderId = corpAduitOrderEntity.AduitOrderId,
                Flow         = -1,
                FlowCid      = model.SubmitCid,
                DealResult   = (int)AduitDealResultEnum.S
            });
            //2.送审环节
            _corpAduitOrderFlowDal.Insert <CorpAduitOrderFlowEntity>(new CorpAduitOrderFlowEntity()
            {
                AduitOrderId = corpAduitOrderEntity.AduitOrderId,
                Flow         = 0,
                FlowCid      = model.SubmitCid
            });

            /***
             * 3.审批人审批环节
             * 重新对审批人环节进行了排序
             * **/
            int nLevel   = 1;
            int?nowLevel = null;
            foreach (var aduitConfigDetail in aduitConfigDetailList)
            {
                if (nowLevel.HasValue)
                {
                    if (nowLevel.Value != aduitConfigDetail.AduitLevel)
                    {
                        nLevel++;
                        nowLevel = aduitConfigDetail.AduitLevel;
                    }
                }
                else
                {
                    nowLevel = aduitConfigDetail.AduitLevel;
                }

                _corpAduitOrderFlowDal.Insert <CorpAduitOrderFlowEntity>(new CorpAduitOrderFlowEntity()
                {
                    AduitOrderId = corpAduitOrderEntity.AduitOrderId,
                    Flow         = nLevel,
                    FlowCid      = aduitConfigDetail.AduitCid
                });
            }

            #endregion

            corpAduitOrderEntity.FinalFlow = nLevel;
            _corpAduitOrderDal.Update <CorpAduitOrderEntity>(corpAduitOrderEntity, new string[] { "FinalFlow" });

            #region 新增送审日志

            CorpAduitOrderLogEntity log = new CorpAduitOrderLogEntity()
            {
                LogTime      = DateTime.Now,
                Source       = model.DealSource,
                AduitOrderId = corpAduitOrderEntity.AduitOrderId,
                DealCid      = model.SubmitCid,
                DealOid      = model.SubmitOid,
                DealResult   = (int)AduitDealResultEnum.S,
                AduitFlow    = corpAduitOrderEntity.CurrentFlow
            };
            log.AduitType = (log.Source == "O" ? (int)AduitTypeEnum.T : (int)AduitTypeEnum.N);
            _corpAduitOrderLogDal.Insert <CorpAduitOrderLogEntity>(log);

            #endregion

            #endregion

            return(corpAduitOrderEntity.AduitOrderId);
        }
        public bool Submit(SubmitCorpAduitOrderModel submitModel)
        {
            /**
             * 送审分为以下情况
             * 1 审批规则为无需审批
             * 2 审批规则为符合差旅政策情况
             * 3 审批规则为违背差旅政策
             * 4 没有审批规则
             * */
            BaseSubmitAduiBll submitAduiBll = null;

            if (submitModel.AduitConfigId.HasValue)
            {
                #region 存在审批规则
                CorpAduitConfigEntity aduitConfigEntity =
                    _corpAduitConfigDal.Find <CorpAduitConfigEntity>(submitModel.AduitConfigId.Value);
                if (aduitConfigEntity == null)
                {
                    throw new Exception("未找到对应的审批规则");
                }

                if (aduitConfigEntity.IsNeedAduit == 0)
                {
                    //1.当前审批规则为无需审批
                    submitAduiBll = new NoNeedSubmitAduitBll(submitModel);
                }
                else
                {
                    #region 当前审批规则为需要审批
                    if (!submitModel.PolicyId.HasValue)
                    {
                        throw new Exception("当前送审条件需要差旅政策Id");
                    }

                    if (!submitModel.IsViolatePolicy.HasValue)
                    {
                        throw new Exception("缺少是否违反差旅政策判断");
                    }

                    submitAduiBll = new NeedSubmitAduitBll(submitModel);
                    #endregion
                }
                #endregion
            }
            else
            {
                //4.没有审批规则情况
                submitAduiBll = new NoRuleSubmitAduitBll(submitModel);
            }

            ISubmitAduitVisitor submitAduitVisitor = new SubmitAduitVisitor(_corpAduitBll);
            bool flag = submitAduiBll.DoSubmit(submitAduitVisitor);

            #region 推送app消息

            if (submitAduitVisitor.SubmitResult != null && submitAduitVisitor.SubmitResult.IsSuccessed &&
                !submitAduitVisitor.SubmitResult.IsFinished && submitAduitVisitor.SubmitResult.NextFlowCidList != null &&
                submitAduitVisitor.SubmitResult.NextFlowCidList.Count > 0)
            {
                IsSendAduit = true;
                foreach (var cid in submitAduitVisitor.SubmitResult.NextFlowCidList)
                {
                    _addSendAppMessageBll.AddAppMessage(new SendAppMessageModel()
                    {
                        Cid       = cid,
                        OrderId   = submitAduitVisitor.SubmitResult.AduitOrderId,
                        OrderType = OrderSourceTypeEnum.AduitOrder,
                        SendType  = SendAppMessageTypeEnum.WaitAuditNotice
                    });
                }
            }
            else
            {
                //新增提醒出票邮件推送
                //AddNeSendMessage(submitModel);
            }

            #endregion

            return(flag);
        }