Example #1
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 int Copy(int copyFromOrderId, int newOrderId)
        {
            CorpAduitOrderDetailEntity copyAduitOrderDetailEntity =
                _corpAduitOrderDetailDal.Query <CorpAduitOrderDetailEntity>(
                    n => n.OrderId == copyFromOrderId, true).FirstOrDefault();

            if (copyAduitOrderDetailEntity != null)
            {
                #region 获取原始审批单
                CorpAduitOrderEntity copyCorpAduitOrderEntity =
                    _corpAduitOrderDal.Find <CorpAduitOrderEntity>(copyAduitOrderDetailEntity.AduitOrderId);

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

                List <CorpAduitOrderFlowEntity> copyCorpAduitOrderFlowEntities =
                    _corpAduitOrderFlowDal.Query <CorpAduitOrderFlowEntity>(
                        n => n.AduitOrderId == copyCorpAduitOrderEntity.AduitOrderId, true).ToList();

                List <CorpAduitOrderLogEntity> copyCorpAduitOrderLogEntities =
                    _corpAduitOrderLogDal.Query <CorpAduitOrderLogEntity>(
                        n => n.AduitOrderId == copyCorpAduitOrderEntity.AduitOrderId, true).ToList();
                #endregion

                #region  制原始审批单
                CorpAduitOrderEntity corpAduitOrderEntity =
                    Mapper.Map <CorpAduitOrderEntity, CorpAduitOrderEntity>(copyCorpAduitOrderEntity);
                corpAduitOrderEntity = _corpAduitOrderDal.Insert(corpAduitOrderEntity);

                List <CorpAduitOrderDetailEntity> corpAduitOrderDetailEntities =
                    Mapper.Map <List <CorpAduitOrderDetailEntity>, List <CorpAduitOrderDetailEntity> >(
                        copyCorpAduitOrderDetailEntities);
                foreach (var corpAduitOrderDetailEntity in corpAduitOrderDetailEntities)
                {
                    corpAduitOrderDetailEntity.AduitOrderId = corpAduitOrderEntity.AduitOrderId;
                    corpAduitOrderDetailEntity.OrderId      = newOrderId;
                    _corpAduitOrderDetailDal.Insert(corpAduitOrderDetailEntity);
                }

                List <CorpAduitOrderFlowEntity> corpAduitOrderFlowEntities =
                    Mapper.Map <List <CorpAduitOrderFlowEntity>, List <CorpAduitOrderFlowEntity> >(
                        copyCorpAduitOrderFlowEntities);
                foreach (var corpAduitOrderFlowEntity in corpAduitOrderFlowEntities)
                {
                    corpAduitOrderFlowEntity.AduitOrderId = corpAduitOrderEntity.AduitOrderId;
                    _corpAduitOrderFlowDal.Insert(corpAduitOrderFlowEntity);
                }

                List <CorpAduitOrderLogEntity> corpAduitOrderLogEntities =
                    Mapper.Map <List <CorpAduitOrderLogEntity>, List <CorpAduitOrderLogEntity> >(
                        copyCorpAduitOrderLogEntities);
                foreach (var corpAduitOrderLogEntity in corpAduitOrderLogEntities)
                {
                    corpAduitOrderLogEntity.AduitOrderId = corpAduitOrderEntity.AduitOrderId;
                    _corpAduitOrderLogDal.Insert(corpAduitOrderLogEntity);
                }
                #endregion

                return(corpAduitOrderEntity.AduitOrderId);
            }

            return(0);
        }