public static List <UnChekedWordInfo> GetUnChekedWordInfoList(string text)
        {
            List <UnChekedWordInfo> result = new List <UnChekedWordInfo>();

            try
            {
                try
                {
                    if (WordModels.Count == 0 && !string.IsNullOrEmpty(UtilSystemVar.UserToken))
                    {
                        GetAllCheckWordByToken(UtilSystemVar.UserToken);
                    }
                }
                catch (Exception ex)
                { }
                foreach (var item in WordModels)
                {
                    if (text.Contains(item.Name))
                    {
                        var defaultObj = result.FirstOrDefault(x => x.Name == item.Name);
                        if (text.Contains(item.Name) && defaultObj == null)
                        {
                            UnChekedWordInfo unChekedWordInfo = new UnChekedWordInfo();
                            unChekedWordInfo.ID   = item.ID;
                            unChekedWordInfo.Name = item.Name;
                            result.Add(unChekedWordInfo);
                        }
                    }
                }
            }
            catch (Exception ex)
            { }
            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// 获取文本中包含的违禁词集合
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static List <UnChekedWordInfo> GetUnChekedWordInfoList(string text)
        {
            List <UnChekedWordInfo> result = new List <UnChekedWordInfo>();

            try
            {
                CheckWordRequestInfo info = new CheckWordRequestInfo()
                {
                    Text = text
                };
                string json      = JsonConvert.SerializeObject(info);
                string resultStr = PostSend("http://localhost:8888/WPFClientCheckWordService/CheckWord", json);
                CheckWordResponseResult resultInfo = JsonConvert.DeserializeObject <CheckWordResponseResult>(resultStr);
                if (resultInfo != null && resultInfo.Result && resultInfo.UncheckWordModels != null)
                {
                    foreach (var item in resultInfo.UncheckWordModels)
                    {
                        var defaultObj = result.FirstOrDefault(x => x.Name == item.Name);
                        if (text.Contains(item.Name) && defaultObj == null)
                        {
                            UnChekedWordInfo unChekedWordInfo = new UnChekedWordInfo();
                            unChekedWordInfo.ID   = item.ID;
                            unChekedWordInfo.Name = item.Name;
                            foreach (var dbInfo in item.SourceDBs)
                            {
                                foreach (var typeInfo in item.NameTypes)
                                {
                                    UnChekedDetailWordInfo unChekedDetailWordInfo = new UnChekedDetailWordInfo();
                                    unChekedDetailWordInfo.Name                = item.Name;
                                    unChekedDetailWordInfo.SourceDB            = dbInfo.name;
                                    unChekedDetailWordInfo.NameType            = typeInfo.name;
                                    unChekedDetailWordInfo.SourceDBID          = dbInfo.code;
                                    unChekedDetailWordInfo.SourceDBPublishtime = dbInfo.publishtime;
                                    unChekedWordInfo.UnChekedWordDetailInfos.Add(unChekedDetailWordInfo);
                                }
                            }
                            result.Add(unChekedWordInfo);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CheckWordUtil.Log.TextLog.SaveError(ex.Message);
            }
            return(result);
        }
        private void InLineDetailNameBtn_Click(object sender, RoutedEventArgs e)
        {
            var btn = sender as System.Windows.Controls.Button;

            if (btn != null)
            {
                UnChekedWordInfo unChekedWordInfo = btn.Tag as UnChekedWordInfo;
                unChekedWordInfo.IsSelected = !unChekedWordInfo.IsSelected;
                foreach (var item in viewModel.UncheckedWordLists)
                {
                    if (item != unChekedWordInfo)
                    {
                        item.IsSelected = false;
                    }
                }
            }
        }
        private void UnCheckWordGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Grid grid = sender as Grid;

            if (grid != null)
            {
                UnChekedWordInfo unChekedWordInfo = grid.Tag as UnChekedWordInfo;
                unChekedWordInfo.IsSelected = !unChekedWordInfo.IsSelected;
                foreach (var item in viewModel.UncheckedWordLists)
                {
                    if (item != unChekedWordInfo)
                    {
                        item.IsSelected = false;
                    }
                }
            }
        }
        private async void InLineDetailNameBtn_Click(object sender, RoutedEventArgs e)
        {
            var btn = sender as Button;

            if (btn != null)
            {
                UnChekedWordInfo unChekedWordInfo = btn.Tag as UnChekedWordInfo;
                viewModel.SelectedUnChekedWordInfo  = unChekedWordInfo;
                viewModel.IsDetailInfoPopWindowOpen = true;
                if (unChekedWordInfo.UnChekedWordDetailInfos.Count == 0 && !string.IsNullOrEmpty(unChekedWordInfo.ID))
                {
                    List <UnChekedDetailWordInfo> _detailInfos = new List <UnChekedDetailWordInfo>();
                    //查询违禁词描述
                    System.Threading.Tasks.Task taskGetWordDiscribe = new System.Threading.Tasks.Task(() => {
                        APIService serviceApi = new APIService();
                        _detailInfos          = serviceApi.GetWordDiscribeLists(unChekedWordInfo.ID);
                    });
                    taskGetWordDiscribe.Start();
                    await taskGetWordDiscribe;
                    unChekedWordInfo.UnChekedWordDetailInfos = new ObservableCollection <UnChekedDetailWordInfo>(_detailInfos);
                    viewModel.SelectedUnChekedWordInfo       = unChekedWordInfo;
                }
            }
        }
        /// <summary>
        /// 查找文本并高亮显示
        /// </summary>
        private void FindTextAndHightLight()
        {
            listUnCheckWordsImages       = new List <UnChekedWordInfo>();
            listUnCheckWords             = new List <UnChekedWordInfo>();
            rangeCurrentDealingLists     = new ConcurrentBag <Range>();
            HasUnChenckedWordsParagraphs = new ConcurrentBag <UnChekedWordExcelRangeInfo>();
            var workBook  = Globals.ThisAddIn.Application.ActiveWorkbook;
            var workSheet = (Worksheet)workBook.ActiveSheet;
            int MaxRow    = GetMaxRow(workSheet);
            int MaxColumn = GetMaxColumn(workSheet);

            //线程池处理数据
            ThreadPool.SetMaxThreads(500, 500);
            countDealParagraph = MaxRow * MaxColumn;
            for (int i = 1; i <= MaxRow; i++)
            {
                for (int j = 1; j <= MaxColumn; j++)
                {
                    ThreadPool.QueueUserWorkItem(DealSingleParagraph, (Range)(workSheet.Cells[i, j]));
                }
            }
            myEvent.WaitOne();
            foreach (var ItemInfo in HasUnChenckedWordsParagraphs)
            {
                Microsoft.Office.Interop.Excel.Range item = ItemInfo.Range;
                var    listUnChekedWord = ItemInfo.UnChekedWordLists;
                string str = ItemInfo.RangeText;
                foreach (var strFind in listUnChekedWord.ToList())
                {
                    UnChekedWordInfo SelectUnCheckWord = new UnChekedWordInfo()
                    {
                        Name = strFind.Name, UnChekedWordDetailInfos = strFind.UnChekedWordDetailInfos
                    };
                    MatchCollection mc = Regex.Matches(str, strFind.Name, RegexOptions.IgnoreCase);
                    if (mc.Count > 0)
                    {
                        rangeCurrentDealingLists.Add(item);
                        foreach (Match m in mc)
                        {
                            try
                            {
                                SelectUnCheckWord.UnChekedWordInLineDetailInfos.Add(new UnChekedInLineDetailWordInfo()
                                {
                                    InLineText = str, UnCheckWordExcelRange = item
                                });
                                SelectUnCheckWord.ErrorTotalCount++;
                            }
                            catch (Exception ex)
                            { }
                        }
                        var infoExist = listUnCheckWords.AsParallel().FirstOrDefault(x => x.Name == SelectUnCheckWord.Name);
                        if (infoExist == null)
                        {
                            listUnCheckWords.Add(SelectUnCheckWord);
                        }
                        else
                        {
                            foreach (var itemInfo in SelectUnCheckWord.UnChekedWordInLineDetailInfos)
                            {
                                infoExist.UnChekedWordInLineDetailInfos.Add(itemInfo);
                                infoExist.ErrorTotalCount++;
                            }
                        }
                    }
                }
            }
            List <ImagesDetailInfo> ImagesDetailInfos = GetPicsFromExcel();

            foreach (var item in ImagesDetailInfos)
            {
                string hashPic = HashHelper.ComputeSHA1(item.ImgResultPath);
                if (!MyWordAddIn.HostSystemVar.CurrentImgsDictionary.ContainsKey(hashPic))
                {
                    var listResult = AutoExcutePicOCR(item.ImgResultPath, item.UnCheckWordExcelRange);
                    if (listResult != null)
                    {
                        listUnCheckWordsImages.AddRange(listResult.ToList());
                        MyWordAddIn.HostSystemVar.CurrentImgsDictionary.Add(hashPic, listResult.ToList());
                    }
                }
                else
                {
                    listUnCheckWordsImages.AddRange(MyWordAddIn.HostSystemVar.CurrentImgsDictionary[hashPic].ToList());
                }
            }
            foreach (var item in listUnCheckWordsImages.ToList())
            {
                var infoExist = listUnCheckWords.AsParallel().FirstOrDefault(x => x.Name == item.Name);
                if (infoExist == null)
                {
                    UnChekedWordInfo unChekedWordInfoNoExist = new UnChekedWordInfo();
                    unChekedWordInfoNoExist.ID              = item.ID;
                    unChekedWordInfoNoExist.Name            = item.Name;
                    unChekedWordInfoNoExist.ErrorTotalCount = item.ErrorTotalCount;
                    unChekedWordInfoNoExist.UnChekedWordInLineDetailInfos = new ObservableCollection <UnChekedInLineDetailWordInfo>(item.UnChekedWordInLineDetailInfos.ToList());
                    unChekedWordInfoNoExist.UnChekedWordDetailInfos       = new ObservableCollection <UnChekedDetailWordInfo>(item.UnChekedWordDetailInfos.ToList());
                    unChekedWordInfoNoExist.TypeTextFrom = item.TypeTextFrom;
                    unChekedWordInfoNoExist.IsSelected   = item.IsSelected;
                    listUnCheckWords.Add(unChekedWordInfoNoExist);
                }
                else
                {
                    UnChekedWordInfo unChekedWordInfoExist = new UnChekedWordInfo();
                    unChekedWordInfoExist.ID              = infoExist.ID;
                    unChekedWordInfoExist.Name            = infoExist.Name;
                    unChekedWordInfoExist.ErrorTotalCount = infoExist.ErrorTotalCount;
                    unChekedWordInfoExist.UnChekedWordInLineDetailInfos = new ObservableCollection <UnChekedInLineDetailWordInfo>(infoExist.UnChekedWordInLineDetailInfos.ToList());
                    unChekedWordInfoExist.UnChekedWordDetailInfos       = new ObservableCollection <UnChekedDetailWordInfo>(infoExist.UnChekedWordDetailInfos.ToList());
                    unChekedWordInfoExist.TypeTextFrom = infoExist.TypeTextFrom;
                    unChekedWordInfoExist.IsSelected   = infoExist.IsSelected;
                    Dispatcher.Invoke(new System.Action(() =>
                    {
                        foreach (var detail in item.UnChekedWordInLineDetailInfos.ToList())
                        {
                            unChekedWordInfoExist.UnChekedWordInLineDetailInfos.Add(detail);
                            unChekedWordInfoExist.ErrorTotalCount++;
                        }
                        listUnCheckWords.Remove(infoExist);
                        listUnCheckWords.Add(unChekedWordInfoExist);
                    }));
                }
            }
            foreach (var SelectUnCheckWord in listUnCheckWords)
            {
                var itemInfo = viewModel.UncheckedWordLists.AsParallel().FirstOrDefault(x => x.Name == SelectUnCheckWord.Name);
                Dispatcher.Invoke(new System.Action(() =>
                {
                    if (itemInfo == null)
                    {
                        viewModel.UncheckedWordLists.Add(SelectUnCheckWord);
                    }
                    else
                    {
                        itemInfo.UnChekedWordInLineDetailInfos = SelectUnCheckWord.UnChekedWordInLineDetailInfos;
                        itemInfo.ErrorTotalCount = SelectUnCheckWord.ErrorTotalCount;
                    }
                }));
            }
            for (int i = 0; i < viewModel.UncheckedWordLists.Count; i++)
            {
                var itemInfo = listUnCheckWords.AsParallel().FirstOrDefault(x => x.Name == viewModel.UncheckedWordLists[i].Name);
                if (itemInfo == null)
                {
                    Dispatcher.Invoke(new System.Action(() =>
                    {
                        viewModel.UncheckedWordLists.RemoveAt(i);
                    }));
                    i--;
                }
            }
            int countTotal = 0;

            Parallel.ForEach(viewModel.UncheckedWordLists, (item, loopState) =>
            {
                lock (lockObject)
                {
                    countTotal += item.ErrorTotalCount;
                }
            });
            Dispatcher.Invoke(new System.Action(() =>
            {
                viewModel.WarningTotalCount = countTotal;
            }));
        }
        /// <summary>
        /// 查找文本并高亮显示
        /// </summary>
        /// <param name="strFind"></param>
        private void FindTextAndHightLight()
        {
            listUnCheckWords             = new List <UnChekedWordInfo>();
            rangeSelectLists             = new ConcurrentBag <Range>();
            HasUnChenckedWordsParagraphs = new ConcurrentBag <UnChekedWordParagraphInfo>();
            //线程池处理数据
            ThreadPool.SetMaxThreads(500, 500);
            countDealParagraph = Application.ActiveDocument.Paragraphs.Count;
            //检测整个文档
            foreach (Microsoft.Office.Interop.Word.Paragraph paragraph in Application.ActiveDocument.Paragraphs)
            {
                ThreadPool.QueueUserWorkItem(DealSingleParagraph, paragraph);
            }
            myEvent.WaitOne();
            foreach (var ItemInfo in HasUnChenckedWordsParagraphs)
            {
                Microsoft.Office.Interop.Word.Paragraph paragraph = ItemInfo.Paragraph;
                var listUnChekedWord = ItemInfo.UnChekedWordLists;
                foreach (var strFind in listUnChekedWord.ToList())
                {
                    UnChekedWordInfo SelectUnCheckWord = new UnChekedWordInfo()
                    {
                        ID = strFind.ID, Name = strFind.Name, UnChekedWordDetailInfos = strFind.UnChekedWordDetailInfos
                    };
                    MatchCollection mc = Regex.Matches(paragraph.Range.Text, strFind.Name, RegexOptions.IgnoreCase);
                    if (mc.Count > 0)
                    {
                        foreach (Match m in mc)
                        {
                            try
                            {
                                int   startIndex   = paragraph.Range.Start + m.Index;
                                int   endIndex     = paragraph.Range.Start + m.Index + m.Length;
                                Range keywordRange = Application.ActiveDocument.Range(startIndex, endIndex);
                                rangeSelectLists.Add(keywordRange);
                                SelectUnCheckWord.UnChekedWordInLineDetailInfos.Add(new UnChekedInLineDetailWordInfo()
                                {
                                    InLineText = paragraph.Range.Text, UnCheckWordRange = keywordRange
                                });
                                SelectUnCheckWord.ErrorTotalCount++;
                            }
                            catch (Exception ex)
                            { }
                        }
                        var infoExist = listUnCheckWords.AsParallel().FirstOrDefault(x => x.Name == SelectUnCheckWord.Name);
                        if (infoExist == null)
                        {
                            listUnCheckWords.Add(SelectUnCheckWord);
                        }
                        else
                        {
                            foreach (var item in SelectUnCheckWord.UnChekedWordInLineDetailInfos)
                            {
                                infoExist.UnChekedWordInLineDetailInfos.Add(item);
                                infoExist.ErrorTotalCount++;
                            }
                        }
                    }
                }
            }
            APIService service = new APIService();
            bool       isCheckPicInDucument = service.GetIsCheckPicAddIn();

            if (isCheckPicInDucument)
            {
                foreach (var item in listUnCheckWordsImages.ToList())
                {
                    var infoExist = listUnCheckWords.AsParallel().FirstOrDefault(x => x.Name == item.Name);
                    if (infoExist == null)
                    {
                        UnChekedWordInfo unChekedWordInfoNoExist = new UnChekedWordInfo();
                        unChekedWordInfoNoExist.ID               = item.ID;
                        unChekedWordInfoNoExist.Name             = item.Name;
                        unChekedWordInfoNoExist.ErrorTotalCount  = item.ErrorTotalCount;
                        unChekedWordInfoNoExist.Range            = item.Range;
                        unChekedWordInfoNoExist.UnCheckWordRange = item.UnCheckWordRange;
                        unChekedWordInfoNoExist.UnChekedWordInLineDetailInfos = new ObservableCollection <UnChekedInLineDetailWordInfo>(item.UnChekedWordInLineDetailInfos.ToList());
                        unChekedWordInfoNoExist.UnChekedWordDetailInfos       = new ObservableCollection <UnChekedDetailWordInfo>(item.UnChekedWordDetailInfos.ToList());
                        unChekedWordInfoNoExist.TypeTextFrom = item.TypeTextFrom;
                        unChekedWordInfoNoExist.IsSelected   = item.IsSelected;
                        listUnCheckWords.Add(unChekedWordInfoNoExist);
                    }
                    else
                    {
                        UnChekedWordInfo unChekedWordInfoExist = new UnChekedWordInfo();
                        unChekedWordInfoExist.ID               = infoExist.ID;
                        unChekedWordInfoExist.Name             = infoExist.Name;
                        unChekedWordInfoExist.ErrorTotalCount  = infoExist.ErrorTotalCount;
                        unChekedWordInfoExist.Range            = infoExist.Range;
                        unChekedWordInfoExist.UnCheckWordRange = infoExist.UnCheckWordRange;
                        unChekedWordInfoExist.UnChekedWordInLineDetailInfos = new ObservableCollection <UnChekedInLineDetailWordInfo>(infoExist.UnChekedWordInLineDetailInfos.ToList());
                        unChekedWordInfoExist.UnChekedWordDetailInfos       = new ObservableCollection <UnChekedDetailWordInfo>(infoExist.UnChekedWordDetailInfos.ToList());
                        unChekedWordInfoExist.TypeTextFrom = infoExist.TypeTextFrom;
                        unChekedWordInfoExist.IsSelected   = infoExist.IsSelected;
                        Dispatcher.Invoke(new Action(() =>
                        {
                            foreach (var detail in item.UnChekedWordInLineDetailInfos.ToList())
                            {
                                unChekedWordInfoExist.UnChekedWordInLineDetailInfos.Add(detail);
                                unChekedWordInfoExist.ErrorTotalCount++;
                            }
                            listUnCheckWords.Remove(infoExist);
                            listUnCheckWords.Add(unChekedWordInfoExist);
                        }));
                    }
                }
            }
            foreach (var SelectUnCheckWord in listUnCheckWords)
            {
                var itemInfo = viewModel.UncheckedWordLists.AsParallel().FirstOrDefault(x => x.Name == SelectUnCheckWord.Name);
                if (itemInfo == null)
                {
                    Dispatcher.Invoke(new Action(() =>
                    {
                        viewModel.UncheckedWordLists.Add(SelectUnCheckWord);
                    }));
                }
                else
                {
                    Dispatcher.Invoke(new Action(() =>
                    {
                        itemInfo.UnChekedWordInLineDetailInfos = SelectUnCheckWord.UnChekedWordInLineDetailInfos;
                        itemInfo.ErrorTotalCount = SelectUnCheckWord.ErrorTotalCount;
                    }));
                }
            }
            for (int i = 0; i < viewModel.UncheckedWordLists.Count; i++)
            {
                var itemInfo = listUnCheckWords.AsParallel().FirstOrDefault(x => x.Name == viewModel.UncheckedWordLists[i].Name);
                if (itemInfo == null)
                {
                    Dispatcher.Invoke(new Action(() =>
                    {
                        viewModel.UncheckedWordLists.RemoveAt(i);
                    }));
                    i--;
                }
            }
            int countTotal = 0;

            Parallel.ForEach(viewModel.UncheckedWordLists, (item, loopState) =>
            {
                lock (lockObject)
                {
                    countTotal += item.ErrorTotalCount;
                }
            });
            Dispatcher.Invoke(new Action(() =>
            {
                viewModel.WarningTotalCount = countTotal;
            }));
        }
        /// <summary>
        /// 获取文本中包含的违禁词集合
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static List <UnChekedWordInfo> GetUnChekedWordInfoList(string text, string typeInfo = "Word")
        {
            List <UnChekedWordInfo> result = new List <UnChekedWordInfo>();

            try
            {
                bool   isGetAllWord      = true;
                string isGetAllWordsInfo = "";
                if (typeInfo == "Word")
                {
                    isGetAllWordsInfo = string.Format(@"{0}\IsWordGetAllWordsInfo.xml", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\WordAndImgOCR\\LoginInOutInfo\\");
                }
                else
                {
                    isGetAllWordsInfo = string.Format(@"{0}\IsExcelGetAllWordsInfo.xml", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\WordAndImgOCR\\LoginInOutInfo\\");
                }
                var ui = DataParse.ReadFromXmlPath <string>(isGetAllWordsInfo);
                if (ui != null && ui.ToString() != "")
                {
                    try
                    {
                        var isGetAllWords = JsonConvert.DeserializeObject <IsGetAllWordsInfo>(ui.ToString());
                        if (isGetAllWords != null)
                        {
                            isGetAllWord = isGetAllWords.IsGetAllWords;
                        }
                    }
                    catch (Exception ex)
                    { }
                }
                if (isGetAllWord || WordModels.Count == 0)
                {
                    string myWordModelsInfo = string.Format(@"{0}\MyWordModelsInfo.xml", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\WordAndImgOCR\\LoginInOutInfo\\");
                    int    countTime        = 0;
                    while (true)
                    {
                        var uiMyWords = CheckWordUtil.DataParse.ReadFromXmlPath <string>(myWordModelsInfo);
                        if (uiMyWords != null && uiMyWords.ToString() != "")
                        {
                            try
                            {
                                WordModels = JsonConvert.DeserializeObject <List <WordModel> >(uiMyWords.ToString());
                                IsGetAllWordsInfo info = new IsGetAllWordsInfo();
                                info.IsGetAllWords = false;
                                DataParse.WriteToXmlPath(JsonConvert.SerializeObject(info), isGetAllWordsInfo);
                                if (WordModels.Count > 0)
                                {
                                    break;
                                }
                            }
                            catch
                            { }
                        }
                        countTime++;
                        System.Threading.Thread.Sleep(500);
                        if (countTime > 10)
                        {
                            break;
                        }
                    }
                }
                foreach (var item in WordModels)
                {
                    if (text.Contains(item.Name))
                    {
                        var defaultObj = result.FirstOrDefault(x => x.Name == item.Name);
                        if (text.Contains(item.Name) && defaultObj == null)
                        {
                            UnChekedWordInfo unChekedWordInfo = new UnChekedWordInfo();
                            unChekedWordInfo.ID   = item.ID;
                            unChekedWordInfo.Name = item.Name;
                            result.Add(unChekedWordInfo);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CheckWordUtil.Log.TextLog.SaveError(ex.Message);
            }
            return(result);
        }