Exemple #1
0
        /// <summary>
        /// 该方法用于查找标准正文是否存在
        /// </summary>
        /// <param name="sentence">MD5加密后的正文编码</param>
        /// <returns></returns>
        public Task IsExistAsync(ZhengwenInfo myinfo)
        {
            return(Task.Run(() =>
            {
                int num = 0;
                //mysqliter.Open();
                string str_sql = $"select * from qianhai.{Setting._zhengwenchachongbiao} where 编号='{myinfo._bianhao}'";
                using (MySqlConnection mysql = new MySqlConnection(mysql_constr))
                {
                    using (MySqlCommand mycmd = new MySqlCommand(str_sql, mysql))
                    {
                        mysql.Open();

                        var reader = mycmd.ExecuteReader();
                        if (reader.HasRows)
                        {
                            myinfo._exist = true;
                            _chongfushu++;
                        }
                        reader.Close();
                        mysql.Close();
                    }
                }
                list_zhenweng.Add(myinfo);
            }));
        }
        /// <summary>
        /// 查询数据到datatable
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public List <ZhengwenInfo> GetDataFromTable(string str_sql)
        {
            List <ZhengwenInfo> list = new List <ZhengwenInfo>();

            try
            {
                mysql.ChangeDatabase("qianhai");
                MySqlCommand mycmd    = new MySqlCommand(str_sql, mysql);
                var          myreader = mycmd.ExecuteReader();
                while (myreader.Read())
                {
                    ZhengwenInfo zwinfo = new ZhengwenInfo()
                    {
                        _xuhao           = myreader.GetString(0),
                        _bianhao         = myreader.GetString(1),
                        _laiyuan         = myreader.GetString(2),
                        _zhuanzailiang   = myreader.GetString(3),
                        _zhengwenneirong = myreader.GetString(4),
                        _shijian         = myreader.GetString(5),
                        _riqi            = myreader.GetString(6),
                    };


                    list.Add(zwinfo);
                }
                myreader.Close();
            }
            catch { }
            return(list);
        }
        /// <summary>
        /// 根据页数获得当页数据
        /// </summary>
        /// <param name="yeshu"></param>
        /// <param name="offset"></param>
        /// <param name="tablename"></param>
        /// <returns></returns>
        public List <ZhengwenInfo> GetDTByPage(string yeshu, int offset, string tablename)
        {
            List <ZhengwenInfo> list = new List <ZhengwenInfo>();

            if (tablename.Equals("tablesetting") || tablename.Equals("zhengwensetting"))
            {
                return(list);
            }
            //分解出当前页和总页数
            int page    = 0;
            int pagenum = 0;

            page    = Convert.ToInt32(yeshu.Split(new char[] { '/' })[0]);
            pagenum = Convert.ToInt32(yeshu.Split(new char[] { '/' })[1]);
            string          str_sql = $"select * from {tablename} order by 时间 desc limit {(page - 1) * offset},{offset}";
            MySqlConnection mysql   = new MySqlConnection(mysql_constr);

            mysql.Open();
            mysql.ChangeDatabase("qianhai");
            MySqlCommand mycmd    = new MySqlCommand(str_sql, mysql);
            var          myreader = mycmd.ExecuteReader();

            try
            {
                while (myreader.Read())
                {
                    ZhengwenInfo zwinfo = new ZhengwenInfo()
                    {
                        _xuhao           = myreader.GetString(0),
                        _bianhao         = myreader.GetString(1),
                        _laiyuan         = myreader.GetString(2),
                        _zhuanzailiang   = myreader.GetString(3),
                        _zhengwenneirong = myreader.GetString(4),
                        _shijian         = myreader.GetString(5),
                        _riqi            = myreader.GetString(6),
                    };
                    list.Add(zwinfo);
                }
            }
            catch { }
            myreader.Close();
            mycmd.Dispose();
            mycmd.Clone();
            mysql.Dispose();
            //CommonMethod.AddXuhao(mydt);
            return(list);
        }
        /// <summary>
        /// 模糊查询
        /// </summary>
        /// <param name="list_fields">字段集合</param>
        /// <param name="str">搜索词</param>
        /// <param name="shtname">数据表名</param>
        /// <returns></returns>
        public List <ZhengwenInfo> MohuChaxun(List <string> list_fields, string str, string shtname)
        {
            List <ZhengwenInfo> list       = new List <ZhengwenInfo>();
            List <string>       list_where = new List <string>();

            foreach (var item in list_fields)
            {
                list_where.Add($"{item} like '%{str}%'");
            }
            string    sql_where = string.Join(" or ", list_where);
            DataTable mydt      = new DataTable();

            //获得该表下数据datatable
            string str_sql = $"select * from {shtname} where ({sql_where}) order by riqi desc limit 100";

            if (str.Trim().Equals(string.Empty))
            {
                str_sql = $"select * from {shtname} order by riqi desc limit 100";
            }
            var myreader = _mycon.CreateCommand(str_sql).ExecuteReader();

            do
            {
                try
                {
                    while (myreader.Read())
                    {
                        ZhengwenInfo zwinfo = new ZhengwenInfo()
                        {
                            _xuhao           = myreader.GetString(0),
                            _bianhao         = myreader.GetString(1),
                            _laiyuan         = myreader.GetString(2),
                            _zhuanzailiang   = myreader.GetString(3),
                            _zhengwenneirong = myreader.GetString(4),
                            _shijian         = myreader.GetString(5),
                            _riqi            = myreader.GetString(6),
                        };
                        list.Add(zwinfo);
                    }
                }
                catch { }
            } while (myreader.NextResult());


            return(list);
        }
Exemple #5
0
        /// <summary>
        /// 点击开始按钮时触发的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public async void PictureBox2_Click(object sender, EventArgs e)
        {
            _stop = false;
            _mycontroller.list_zhenweng.Clear();//清空查询文章集合
            List <ZhengwenInfo> list_result = new List <ZhengwenInfo>();
            string      mysql_constr        = $"Server={Properties.Settings.Default._ip};Database=qianhai;Uid=root;Pwd=111111;AllowUserVariables=false;";
            List <Task> list_task           = new List <Task>();

            //判断状态,如果是暂停或者空白那么开始,并且执行查重
            if (_statue.Equals(string.Empty) || _statue.Equals("已暂停"))
            {
                _statue         = "正在查询";
                lbl_statue.Text = _statue; UpdateText(lbl_time, "已用时:00:00:00");
                timer1.Start();

                /*开始查重*/
                //1、整体查重,查到所有文件的重复和不重复情况
                //获得path下的所有文件
                DirectoryInfo   di         = new DirectoryInfo(_filename);
                List <FileInfo> list_files = di.GetFiles().ToList();
                //开始循环所有的文档,实例化一个对应的类
                ZhengwenInfo zhengweninfo = null;

                await Task.Run(() =>
                {
                    for (int i = 0; i < list_files.Count; i++)
                    {
                        //先判断是否人工暂停
                        if (_stop)
                        {
                            //停止计时器
                            timer1.Stop();
                            //改变运行状态属性
                            _statue = "已暂停";
                            //赋值运行状态lbl
                            lbl_statue.BeginInvoke(new Action(() =>
                            {
                                lbl_statue.Text = _statue;
                            }));



                            break;
                        }
                        zhengweninfo = new ZhengwenInfo();

                        //文档有可能报错,保存在错误信息中
                        try
                        {
                            //1、对每一个文档新建一个线程

                            //将线程放入集合
                            lbl_jindu.BeginInvoke(new Action(() =>
                            {
                                lbl_jindu.Text = $"进度:{i + 1}/{list_files.Count}";
                            }));
                            string filename    = list_files[i].FullName;
                            string laiyuan     = list_files[i].Name;
                            string laiyuanbyte = _mycontroller.String2Byte(laiyuan);
                            string zhengwen    = _mycontroller.GetZhengwen(filename); //获得正文文本
                            string md5         = _mycontroller.GenerateMD5(zhengwen); //正文转换成二进制
                                                                                      //string zhengwenbyte = _mycontroller.String2Byte(zhengwen);//正文转二进制
                            zhengweninfo._laiyuan = laiyuanbyte;
                            //_zhengwenneirong = zhengwenbyte,
                            //_zhengwenneirong = zhengwen,
                            zhengweninfo._bianhao = md5;
                        }
                        catch (Exception ex)
                        {
                            zhengweninfo._ex    = ex;
                            zhengweninfo._error = true;
                        }
                        Task mytask = _mycontroller.IsExistAsync(zhengweninfo);
                        lbl_chongfulv.BeginInvoke(new Action(
                                                      () => {
                            lbl_chongfulv.Text = "重复:" + _mycontroller._chachonglv.ToString();
                        }
                                                      ));
                        list_task.Add(mytask);
                    }
                });

                await Task.WhenAll(list_task.ToArray());

                //2、根据是否入库和累计热度情况,对每一个文件进行操作,拼接sql的方式
                //如果是入库,那么对所有不重复的文章进行拼接sql并执行,重复的不用管
                //如果是累计热度,那么对所有重复的文档进行update更新装载量,不重复的文档不要
                lbl_statue.BeginInvoke(new  Action(() => {
                    lbl_statue.Text = "正在更新数据";
                }));
                lbl_chongfulv.BeginInvoke(new Action(() => {
                    lbl_chongfulv.Text = "重复:" + _mycontroller._chongfushu.ToString();
                }));
                if (Setting._zhengwenruku)
                {
                    //如果不存在,就拼接字符串
                    string        str_sql     = $"insert into {Setting._zhengwenrukubiao} (编号,来源,转载量,时间) values ";
                    List <string> list_values = new List <string>();
                    for (int i = 0; i < _mycontroller.list_zhenweng.Count; i++)
                    {
                        zhengweninfo = _mycontroller.list_zhenweng[i];
                        if (!zhengweninfo._exist && !zhengweninfo._error)//如果不存在 并且  没有报错,那么入库
                        {
                            list_values.Add($"('{zhengweninfo._bianhao}','{zhengweninfo._laiyuan}',1,'{DateTime.Now.ToShortDateString()}')");
                        }
                        if (list_values.Count >= 1000)//如果大于500就保存一次
                        {
                            await Task.Run(() =>
                            {
                                using (MySqlConnection mysql = new MySqlConnection(mysql_constr))
                                {
                                    mysql.Open();
                                    MySqlTransaction transaction = mysql.BeginTransaction();//开启事务
                                    using (MySqlCommand mycmd = new MySqlCommand())
                                    {
                                        mycmd.Connection     = mysql;
                                        mycmd.CommandText    = str_sql + string.Join(",", list_values);
                                        mycmd.Transaction    = transaction;
                                        mycmd.CommandTimeout = 9999999;
                                        mycmd.ExecuteNonQuery();
                                        transaction.Commit();
                                        mysql.Close();
                                    }
                                }
                                list_values.Clear();
                            });
                        }
                    }
                    if (list_values.Count != 0)
                    {
                        using (MySqlConnection mysql = new MySqlConnection(mysql_constr))
                        {
                            mysql.Open();
                            MySqlTransaction transaction = mysql.BeginTransaction();//开启事务
                            using (MySqlCommand mycmd = new MySqlCommand())
                            {
                                mycmd.Connection  = mysql;
                                mycmd.CommandText = str_sql + string.Join(",", list_values);
                                mycmd.Transaction = transaction;

                                mycmd.ExecuteNonQuery();
                                transaction.Commit();
                                mysql.Close();
                            }
                        }
                    }
                }
                if (Setting._leijiredu)
                {
                }
                //生成查重报告
                lbl_statue.BeginInvoke(new Action(() => {
                    lbl_statue.Text = "报告生成中";
                }));

                /*
                 *
                 * 此处生成查重报告
                 *
                 */


                _statue = "已暂停";
                lbl_statue.BeginInvoke(new Action(() =>
                {
                    lbl_statue.Text = "已暂停";
                }));
                timer1.Stop();
            }
            //如果是正在查询,那么要不做任何反应
            else
            {
                return;
                //_statue = "已暂停";
                //lbl_statue.Text = _statue;
                //StopResearch();
            }
        }