C#定时执行某一个功能二(解压并读取xml到postgresql)

来源:互联网 发布:呼叫中心系统源码 编辑:程序博客网 时间:2024/06/03 23:44

继上一篇: C#定时执行某一个功能一(sqlite导出xml并压缩)
下面我要来讲一下:如何对这些xml解压,读取到postgresql数据库中

依旧是两种方案:1、windows服务;2、控制台程序+windows定时计划
方案一:windows服务

1、读取config中的扫描时间间隔
服务在启动时新建 一个timer、timer事件中判断用户的类型,如果是定时执行,就去判断当前事件是否与用户指的时间相同,若相同就执行,否则不执行;
2、寻找符合条件的压缩包,解压;

        try            {                //先找到符合要求的压缩包                string[] strFiles = Directory.GetFiles(SystemSettings.DecompressonRoot, "outnet-orderinfo-*.zip", SearchOption.AllDirectories);                m_log.Info(strFiles.Length);                foreach (string strSF in strFiles)                {                    m_log.Info("准备解压");                    //解压                    string outputDirectory = strSF.Substring(0, strSF.Length - 4);                    SevenZipTool zipTool = new SevenZipTool();                    string message = zipTool.ExtractFile(strSF, outputDirectory);                    if (message.Contains("成功"))                    {                        m_log.Info("解压成功");                        //读取xml                        string[] strXmls = Directory.GetFiles(outputDirectory, "*.xml", SearchOption.AllDirectories);                        m_log.Info("xml全部读到strXmls中");                        bool flag = ToPostgreSql(strXmls);                        if (flag == true)                        {                            DirectoryInfo di = new DirectoryInfo(outputDirectory);                            di.Delete(true);                            m_log.Info("删除解压后文件成功");                            File.Delete(strSF);                            m_log.Info("删除压缩包成功");                        }                    }                }            }            catch (Exception ex)            {                m_log.Error(ex);            }

3、读取xml中数据到datatable中,并插入到postgresql数据库中

public bool ToPostgreSql(string[] strXmls)        {            try            {                List<string> sqllist = new List<string>();                foreach (string strXml in strXmls)                {                    XmlDocument xmlDoc = new XmlDocument();                    string orderid = "";                    string batchid = "";                    long obsize = 0;                    long obfinish = 0;                    DateTime submittime;                    DateTime createtime;                    DateTime synctime;                    DateTime readytime;                    DateTime notifytime;                    string task_status = "";                    string address = "";                    string taskid = "";                    xmlDoc.Load(strXml);                    XmlNode xnorderid = xmlDoc.SelectSingleNode("root/orderid");                    orderid = xnorderid.InnerText;                    XmlNode xnbatchid = xmlDoc.SelectSingleNode("root/batchid");                    batchid = xnbatchid.InnerText;                    taskid = orderid + "_" + batchid;                    XmlNode xnobsize = xmlDoc.SelectSingleNode("root/obsize");                    obsize = Convert.ToInt64(xnobsize.InnerText);                    XmlNode xnobfinish = xmlDoc.SelectSingleNode("root/obfinish");                    obfinish = Convert.ToInt64(xnobfinish.InnerText);                    XmlNode xnsubmittime = xmlDoc.SelectSingleNode("root/submittime");                    submittime = Convert.ToDateTime(xnsubmittime.InnerText);                    XmlNode xncreatetime = xmlDoc.SelectSingleNode("root/createtime");                    createtime = Convert.ToDateTime(xncreatetime.InnerText);                    XmlNode xnsynctime = xmlDoc.SelectSingleNode("root/synctime");                    synctime = Convert.ToDateTime(xnsynctime.InnerText);                    XmlNode xnreadytime = xmlDoc.SelectSingleNode("root/readytime");                    readytime = Convert.ToDateTime(xnreadytime.InnerText);                    XmlNode xnnotifytime = xmlDoc.SelectSingleNode("root/notifytime");                    notifytime = Convert.ToDateTime(xnnotifytime.InnerText);                    XmlNode xntask_status = xmlDoc.SelectSingleNode("root/task_status");                    task_status = xntask_status.InnerText;                    XmlNode xnaddress = xmlDoc.SelectSingleNode("root/address");                    address = xnaddress.InnerText;                    string selectsql = "select taskid from bpds_task_test where taskid='" + taskid + "' ";                    DataTable tmpDt = pgHelper.Query(selectsql);                    string sql = "";                    if (tmpDt.Rows.Count != 0)                    {                        sql = string.Format("update bpds_task_test set orderid='{0}',batchid='{1}', obsize='{2}',obfinish='{3}',submittime='{4}', createtime='{5}', synctime='{6}',readytime='{7}', notifytime='{8}',task_status='{9}', address='{10}'where taskid='{11}'", orderid, batchid,obsize,obfinish,submittime,createtime,synctime,readytime,notifytime,task_status,address,taskid);                    }                    else                    {                        sql = "insert into bpds_task_test (taskid,orderid,batchid,obsize,obfinish,submittime,createtime,synctime,readytime,notifytime,task_status,address) values ('" + taskid + "','" + orderid + "','" + batchid + "','" + obsize + "','" + obfinish + "','" + submittime + "', '" + createtime + "', '" + synctime + "', '" + readytime + "', '" + notifytime + "', '" + task_status + "', '" + address + "') ";                    }                    sqllist.Add(sql);                }                m_log.Info("xml读取完毕,准备写入数据库");                bool flag = pgHelper.ExecuteTransSQL(sqllist);                return flag;            }            catch (Exception ex)            {                m_log.Error(ex);                return false;            }        }

SevenZipTool是一个类:集成7z文件解压、压缩功能。这个类如果需要,请在博客下方留言~

方案二:控制台程序+windows定时计划

控制台程序与上面的相同,都是1、查找压缩包,进行解压;2、读取xml到postgresql中;
windows定时任务:在上一篇博客进行了介绍了。

原创粉丝点击