义务劳动系统相关


前言

        我最开始想做这个系统的时候是2014年上半年,但是那时候只是想想,首先没什么技术,也没什么资源,并且那时候对我来说关系不大。直到2015年下半年,我负责信息学院的学生资助上的事务,便想着如何安排整个学院的义务劳动,开始做了一个报名功能。那时候,刚开始学写asp.net MVC网页,便做了个能输入学号和生日进行报名,使用的是学校内网,就是http://10.24.32.xx做服务器地址,当然,这样手机连接4G网络是访问不了的,需要报名的时候,才开服务器,要么使用校园网络上网报名,要么使用电脑开热点使用手机连WIFI报名。大概也就是2015年下半年用了一次,2016年上半年用了一次。

        我是2016年暑假开始接触PHP语言的。是由于有个电子商务女生要我帮忙做个PHP网页,实现增删改查功能,从此,我便开始以PHP为主要的开发语言。当时,在逛网的时候发现有个叫“百家云”的虚拟主机服务商(现在已改名为“硅云”),试着PHP代码上传到虚拟主机,那时候才知道域名是怎么解析的。后来,9月份在QQ群里有人卖PHP教程,10块钱便宜把视频卖给了我,我便开始学习PHP、ThinkPHP3.2.3、Linux以及一些数据库知识。觉得PHP还是比asp.net好学也好用,搭建起网站也快得多。

        2016年11月开始,便是用系统来提供报名及登记学生所做义务劳动,但是由于功能不全,网页访问效果也不太好,所以只是部分人在用。我便是从2017年5月开始写的现在这个版本,那时候我刚毕业答辩完,忙着工作的同时,也抽些周末的时间在做,大概到10月份,就正式投入使用了。有一次是有好几十个人的报名名额,访问量过大,直接是导致所有人访问都响应服务器繁忙,当然,硅云3的服务器是肯定抵挡不住的,应对个人访问还行。2018年3月,开始使用阿里云学生机ECS服务器,当时记录2分钟内50个人报名是没问题的,后来也有过超过1人/秒的记录。2018年9月,开始修改成多学院模式,2018年11月公管学院加入使用,2019年4月数统学院加入使用。

        现在,日志已经由MongoDB保存,由Redis做数据缓存。已基本满足现在的使用需求。有这个系统,第一主要是因为有这个需求,第二也是学院老师和同学的支持,当然最主要的还是我。

技术总览:

Git/Composer/postgresql/Websocket/vue.js

功能


版本更新:

更新日期版本
2018-06-124.0.0A1
2018-09-104.0.0B1
2018-09-254.0.0
2018-10-124.0.1
2018-10-284.0.2
2018-11-094.0.3
2018-11-154.1.0
2018-12-034.1.1
2018-12-204.1.2
2019-01-094.2.0
2019-03-014.2.1
2019-04-014.2.2
2019-05-054.2.3
2019-06-014.2.4
2019-07-054.2.5

部署说明

其他功能

Swoole-Websocket聊天功能使用方法

文件服务器

{
    "state": 1,
    "msg": "上传成功",
    "data": {
        "name": "214757780300360.crt",
        "type": "application/x-x509-ca-cert",
        "tmp_name": "/tmp/phpHYM1uU",
        "error": 0,
        "size": 3737,
        "src": "/uploads/texxt/20190515/036acc9d4e5c3acd41b30689521894d4.crt",
        "ext": "crt",
        "saveName": "036acc9d4e5c3acd41b30689521894d4.crt"
    }
}

开发参考

请参阅 ThinkPHP5 核心框架包

作者:linzening、联系:linzening@qq.com

数据库刷新表统计

ANALYZE TABLE `b_volunteer`,`b_userinfo`,`b_store`,`b_release`,`b_shipwall`;

PHP代码

//管理员列表
public function showlist(){
    $this->assign("info",ExtAdmin::adminlist());
    $this->assign("isadmin",session("admin.role")>=8?"yes":'no');
    return $this->fetch();
}