/// <summary>
        /// 提交初加工内容
        /// </summary>
        /// <param name="caseInitialUpdateDto"></param>
        /// <returns></returns>
        public virtual async Task UpdateInitial(CaseInitialUpdateDto caseInitialUpdateDto)
        {
            var caseInitialManager = Resolve <CaseInitialManager>();

            CaseInitial caseInitial = null;

            if (caseInitialUpdateDto.Id > 0)
            {
                //先删除对应初加工的分类绑定和标签绑定
                await Resolve <IRepository <CaseNode, int> >().DeleteAsync(o => o.RelType == "初加工" && o.CaseInitialId == caseInitialUpdateDto.Id);
                await Resolve <IRepository <CaseLabel, int> >().DeleteAsync(o => o.RelType == "初加工" && o.CaseInitialId == caseInitialUpdateDto.Id);

                caseInitial = await caseInitialManager.GetAll().Include(o => o.CaseNodes)
                              .Include(o => o.CaseLabels)
                              .Where(o => o.Id == caseInitialUpdateDto.Id).SingleOrDefaultAsync();

                if (caseInitial == null)
                {
                    throw new UserFriendlyException("不存在对应加工信息");
                }
                //数据设置
                caseInitial.Title         = caseInitialUpdateDto.Title;
                caseInitial.SubjectId     = caseInitialUpdateDto.SubjectId;
                caseInitial.Introduction  = caseInitialUpdateDto.Introduction;
                caseInitial.Law           = caseInitialUpdateDto.Law;
                caseInitial.LawyerOpinion = caseInitialUpdateDto.LawyerOpinion;
                caseInitial.Experience    = caseInitialUpdateDto.Experience;
                caseInitial.Remarks       = caseInitialUpdateDto.Remarks;
                caseInitial.JudgeInfo     = caseInitialUpdateDto.JudgeInfo;
                //树节点和标签
                foreach (var caseNodeDto in caseInitialUpdateDto.CaseNodes)
                {
                    var caseNode = caseNodeDto.MapTo <CaseNode>();
                    caseNode.RelType = "初加工";
                    caseInitial.CaseNodes.Add(caseNode);
                }
                foreach (var caseLabelDto in caseInitialUpdateDto.CaseLabels)
                {
                    var caseLabel = caseLabelDto.MapTo <CaseLabel>();
                    caseLabel.RelType = "初加工";
                    caseInitial.CaseLabels.Add(caseLabel);
                }
            }
            var caseSource = await Manager.GetByIdAsync(caseInitial.CaseSourceId);

            //设置案源为加工中状态
            caseSource.CaseSourceStatus = CaseSourceStatus.加工中;
            caseInitial.CaseStatus      = CaseStatus.加工中;
            await CurrentUnitOfWork.SaveChangesAsync();
        }
        /// <summary>
        /// 发布初加工
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual async Task PublishInitial(CaseInitialUpdateDto caseInitialUpdateDto)
        {
            await UpdateInitial(caseInitialUpdateDto);

            var caseInitial = await Resolve <CaseInitialManager>().GetAll().Include(o => o.CaseSource)
                              .Where(o => o.Id == caseInitialUpdateDto.Id).SingleAsync();

            if (caseInitial.PublishDate == null)
            {
                caseInitial.PublishDate = DateTime.Now;
            }
            //caseInitial.PublishDate = DateTime.Now;

            caseInitial.CaseStatus = CaseStatus.展示中;
            caseInitial.CaseSource.CaseSourceStatus = CaseSourceStatus.已加工;
        }
        /// <summary>
        /// 加工信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual async Task <object> GetCaseProcessInfo(int id)
        {
            var caseInitialManager = Resolve <CaseInitialManager>();
            var caseSource         = await Manager.GetAll()
                                     .Include(o => o.AnYou)
                                     .Include(o => o.City)
                                     .Include(o => o.Court1)
                                     .Include(o => o.Court2)
                                     .Where(o => o.Id == id)
                                     .SingleOrDefaultAsync();

            //if (caseSource.OwerId != AbpSession.UserId)
            //{
            //    throw new UserFriendlyException("无权查看此判例加工信息");
            //}

            var caseInitial = await caseInitialManager.GetAll()
                              .Include(o => o.CaseNodes)
                              .Include(o => o.CaseLabels)
                              .Include(o => o.CaseFines)
                              .Include(o => o.CaseCards)
                              .Where(o => o.CaseSourceId == id /*&& o.CreatorUserId == caseSource.OwerId*/)
                              .FirstOrDefaultAsync();

            #region 初加工数据
            CaseInitialUpdateDto caseInitialUpdateDto = new CaseInitialUpdateDto();
            if (caseInitial == null)
            {
                //如果没有初加工,直接产生初加工记录
                caseInitial = new CaseInitial()
                {
                    CaseSourceId = id,
                    CaseStatus   = CaseStatus.加工中
                };
                await caseInitialManager.InsertAndGetIdAsync(caseInitial);
            }
            caseInitial.MapTo(caseInitialUpdateDto);
            #endregion

            #region 精加工数据
            CaseFineUpdateDto caseFineUpdateDto = new CaseFineUpdateDto()
            {
                CaseInitialId = caseInitial.Id
            };
            caseFineUpdateDto.CaseFines = caseInitial.CaseFines.MapTo <List <CaseFineDto> >();
            #endregion

            #region 案例卡数据
            CaseCardUpdateDto caseCardUpdateDto = new CaseCardUpdateDto()
            {
                CaseInitialId = caseInitial.Id
            };
            caseCardUpdateDto.CaseCards = caseInitial.CaseCards.MapTo <List <CaseCardDto> >();
            #endregion

            return(new
            {
                Source = new
                {
                    caseSource.SourceSN,
                    caseSource.AnYouId,
                    AnYou = caseSource.AnYou?.DisplayName,
                    caseSource.CityId,
                    City = caseSource.City?.DisplayName,
                    caseSource.Court1Id,
                    Court1 = caseSource.Court1?.DisplayName,
                    caseSource.Court2Id,
                    Court2 = caseSource.Court2?.DisplayName,
                    caseSource.LawyerFirms,
                    TrialPeople = caseSource.TrialPeople.Select(o => new { o.Name, TrialRole = o.TrialRole.ToString() }),
                    caseSource.SourceFile,
                    caseSource.ValidDate
                },
                caseInitialUpdateDto,
                caseFineUpdateDto,
                caseCardUpdateDto
            });
        }