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); }
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); }
/// <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); }
/// <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); }