2018/5/28~2018/6/1 周记

本周来泉州出差,所做的任务是在27上布一个定时器,定时每天早上六点下载微信支付宝的对账单,并将数据以Json的格式传到72上。

创建一个WindowsService,在上面写一个定时器。具体代码如下:

 public partial class MyService : ServiceBase
    {
        public static string i;
        public MyService()
        {
            InitializeComponent();
        }

        System.Timers.Timer timer1;
        int iHour = 11;
        int iMinute =48;
        int iSecond = 00;

        protected override void OnStart(string[] args)
        {
            timer1 = new System.Timers.Timer();
            timer1.Interval = 1000;   //设计计时器间隔执行时间
            timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
            timer1.Enabled = true;
            //D:\WebSites\定时器

            if (!EventLog.SourceExists("OnStart222"))
            {
                EventLog.CreateEventSource("OnStart222", "jason");
            }
            EventLog.WriteEntry("OnStart222", "开始任务了");
        }

        protected override void OnStop()
        {
            this.timer1.Enabled = false;
            EventLog.WriteEntry("OnStop", "任务结束");
        }
        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            int intHour = e.SignalTime.Hour;
            int intMinute = e.SignalTime.Minute;
            int intSecond = e.SignalTime.Second;
            // write(intHour + ":" + intMinute + ":" + intSecond);
            StatementOfAccount ss = new StatementOfAccount();
            if (intHour == iHour && intMinute == iMinute&&intSecond==iSecond)
            {
                // write(intHour + ":" + intMinute + ":" + intSecond + "            每天00:00:00!\n\r");

                ss.WechatAccount();
                 i= ss.AlipayAccount();
                ss.ReadExcel(i);
            }
        }

在设定的时间触发定时器,在应用程序中执行定期事件。在早上11:48:00时执行ss.WechatAccount();  i= ss.AlipayAccount();ss.ReadExcel(i);这三个方法。

从支付宝下载对账单,是通过阿里给的一条URL去请求数据,底层代码阿里已经封装好了,我们只是调用阿里的底层代码就行,返回的地址通过下载文件的方法可以下载对账单的压缩包到自己指定的文件夹里面。因为要返回Json格式的数据给72代码里面,所以要把压缩包里面Excel文件的数据一条一条读取出来,因此要解压文件并读取文件的内容。这时候问题就出来了,偶尔会报错,提示Excel的文件正在被另一个进程占用,正常情况下打断点一步一步查,但是断点一步一步走却发现不了问题,数据也能出来,而程序运行却会报错。因为提示的错误是Excel文件被另一个进程占用,导致在读取Excel文件时候报错,所以我猜测应该是Excel在解压过程中就被读取,所以才会报那个进程被占用的错误。但是有时候运行的时候又不会报错。原因是下载的压缩文件里面有两个Excel文件,如果刚好读取的文件与正在解压的文件是同一个文件时,就会报进程被占用的错误。因此报进程被占用的概率是50%,解决的方法就是将解压文件和读取文件从同一个方法里面分离出来,写成两个方法,这样可以保证在解压完成后才会读取文件的内容。

我之前一直以为,只有执行完上一行的代码后才能执行下一行的代码,但是通过这次报错后发现,并不是上一行代码执行完才执行下一行的代码,也可能是同时执行,其实也可能是执行一行的代码所需要的事件太短到可以忽略的程度,所以才会出现这次遇到的这样的问题,上一行代码文件刚在解压,下一行代码文件就被读取。

取到Json,通过给定的URL地址,就可以把账单数据传到72去插库了。

其实从阿里和微信那边取到的数据插到库里面的时候,相对对账来说只是拿到数据而已,最重要的是将拿到的数据和本地数据库里面的数据进行对比,找到两边数据有异常的,即数据不一致(本地有,微信支付宝账单上没有或者微信支付宝账单有,本地没有)。完成这样的对比有两个方向,要么把本地数据写成Excel文件,和微信支付宝的数据通过Excel文件功能进行两个Excel文件的对比,或者把微信支付宝账单数据放到数据库,通过两个表进行对比。

写文件流(将数据写到一个txt文件里面):

 FileStream fileStream = File.Open(@"D:\WebSites\定时器\AliPay.txt", FileMode.Append);//初始化文件流
                byte[] array = Encoding.Default.GetBytes(postData);//给字节数组赋值
                fileStream.Write(array, 0, array.Length);//将字节数组写入文件流
                fileStream.Close();//关闭流
                fileStream.Dispose();

注:文件必须是已经存在的,否则会报错!

原文地址:https://www.cnblogs.com/cc1120/p/9120855.html

时间: 2024-08-30 13:23:49

2018/5/28~2018/6/1 周记的相关文章

Burn Down Chart(2018.5.28~2018.6.3)

任务安排 PM:曾子轩 前端: (2018.5.28 18:00前完成补充) 后端: 1.数据库组(艾寅中.陈志锴): 1)处理上一次代码无法访问表部分列的Bug. 2)改用云端数据库,熟悉事务处理概念,并要具体实现事务处理. 3)熟悉视图(View)的概念,将目前访问的数据都改为视图访问. 2.服务器组(邹卫其): 1)创建云端数据库. 2)编写通过IDEA链接云端数据库的使用文档. 3)阅读Taotao例程前四章内容,了解工程结构,并在组会中进行汇报. 3.事务逻辑组(曾子轩): 1)编写G

2018.11.28 Android踩坑(读写文件)

在学到使用Android Device Monitor 查看文件的时候,发现Android Device Monitor在Android Studio里面找不到了,网上查了原来是被官方弃用了,现在通过命令行的方式启动 1.打开Project Structure找到sdk安装路径 2.找到这个路径打开里面tools文件夹下面的monitor.bat双击运行即可打开Android Device Monitor 虽然说找到了Android Device Monitor,但是打开报了个Could not

Mirco Code News [/2018/06/28]

蜜蜂有0的概念 http://www.iflscience.com/plants-and-animals/bees-are-the-first-insects-found-to-understand-the-concept-of-zero/ 麻省理工的科学家发现,蜜蜂??经过训练,可以识别出零0??这个概念.做法如下:首先,给蜜蜂两个白板,各自画上个数不同的形状,例如涂黑的圆圈.其次,给圆圈少的白板添加甜食奖励,给圆圈多的白板添加难闻的气味,通过反复训练,让蜜蜂??能识别个数少和多,蜜蜂能区分得

2018.2.28 10周1次课

十周第一次课(2月28日) 11.10/11.11/11.12 安装PHP5 11.13 安装PHP7 11.10/11.11/11.12 安装PHP5 关于PHP版本,目前大多企业都会使用5.4及更高版本,甚至越来越多的企业使用PHP7版本.7和5两个版本还是有很大差异的,据说7版本有很大的性能提升,但7版本还是太新了,很多企业的网站不一定能兼容.新事物取代旧事物是必然趋势,所以在后续的学习和工作中,建议你要与时俱进,敢于尝试.在本实验中,使用的PHP版本为5.6,PHP的官方下载地址为 :

Mysql_笔记2018.1.28

1.Mysql代码规范 1.关键字.函数名称大写 2.数据库名称.表名称.字段名称等全部小写 3.必须以分号;结尾 (或 \g) 2.记录mysql日志 开始记录 mysql> \T 日志地址 日志文本名.txt 结束记录 mysql> \t 3.创建数据库 //简单创建 CREATE DATABASE test1; //创建test1数据库 //详细创建:查验无重名后再新建数据库,并指定编码格式 create database if not exists maizi4 charcter se

2018.1.28进度更新

经过了几天的努力,目前美工部分主要完成了以下事项: 1.登录主页.注册界面.用户注册协议界面的更改完善,主要是文字内容的完善,背景图片更改,字体,一些布局和样式细节的调整: 2.团队界面.个人界面.个人信息界面的配色.细节调整: 3.用photoshop进行了网站ico图标的简单设计. 仍存在的问题: 1.团队及个人界面仍旧显得有些单调,在考虑如何进一步改进,插入图片有些不合适,在考虑其他方法,不过如果采取简洁风格倒也勉强合适,由于我对UI设计太缺乏经验,所以偏向于尽量做的简单大方: 2.弹窗不

2018.4.28 基于java的聊天系统(带完善)

Java聊天系统 1.Socket类 Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号. Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号. Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程地址上的指定远程端口. S

[2018.04.28] C with Pointer

gcc -c x1.c x2.c 只编译不连接 gcc x1.c x2.c -o output_filename 编译后连接成可执行文件 gcc x1.o x2.o -o output_filename 连接成可执行文件 1.例如,源文件 tmp.c,单独编译compile并连接link gcc tmp.c -o tmp.exe,这样中间生成的目标文件在链接过后删除. 好像不能写成gcc -c tmp.c -o tmp.exe 因为-c 是只编译不链接.2.比如多个文件 B.c A.c A.h,

2018/5/7~2018/5/11 周记

人生第一次外出出差,遇到今年目前为止最大的暴雨,全身湿漉漉的来到了泉州,心情是真的很糟糕.医院一直是我忌讳很深的地方,只是没想到自己有一天会在这个地方上班. 周一早上赶车加上吃午饭的时间,来到医院已经是下午三点左右了.其实这次出差只是辅助同事的工作而已,听说这个项目已经做了大半年,很重要,而且需要一个人帮忙测试,而且我也需要到医院实地去看预约系统的一个操作流程.所以这次来泉州出差抱着前来参观和感受出差的态度,并没有很大压力什么的.来泉州第一天晚上就加班,而且还是通宵加班,但是其实我一整个晚上就只