言成言成啊 | Kit Chen's Blog

开源住房公积金系统

发布于2020-06-29 16:20:13,更新于2022-12-17 20:18:13,标签:open web jsp  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

手速太快,用idea的时候,经常会弹出全局搜索,很烦。

代码地址

ctrl+shift+a打开搜索框输入registry,点击进入之后,将ide.suppress.double.click.handler打上对号,表示禁用,close即可。

说点题外话,跑步的时候,配周杰伦的《稻香》;写代码的时候,配罗志祥的《精舞门》,简直燃得不要不要的,踩点到极致。

最近,也在回顾《极限挑战》,在节目中,罗志祥经常照顾张艺兴,还是很暖的。虽然罗志祥私生活确实不咋地,但是说实话,他这首精舞门真的很燃。我还是很欣赏他对音乐的态度的。

今年的课一直是上的网课,可能老师家里也有很多琐事,所以教学质量贼差,哪怕是听了课,还是没学到东西,讲知识点5分钟,找bug10分钟,而且这bug还是学生找出来的,可笑不?

远不如在校期间的质量。我也就混混得了。

一、进度记录

1.1 27号进度

登录功能

  • 账号密码报错提示
  • 验证码报错提示

1.2 28号进度

今天上午家里升级宽带,由50M网线升级成了100M光纤,一年360。交了13个月的,收了400,应该10块钱是安装费了。50M的时候,封顶能跑个2m/s,现在能跑个4m/s,用的铁通宽带,是真的有点垃圾。

说说今天进度。

  1. 登录功能:
    • 顶号处理(通过ServletContext设置username为键,sessionid为值,登录时,会自动更新,判断当前的username的sessionid是否与获取的一致。若一致,登录成功;否则,登录失败)
  2. 修改管理员密码功能:
    • 修改结果提示

通过jsp获取当前页面,来决定哪个标签是active

总览页面

单位页面

1.3 29号进度

完成功能:

  1. 优化登录验证码
  2. 单位开户页面:
    • 类型输入框采用下拉菜单
    • 部分输入限制,采用js正则表达式,注册按键松开事件,用正则替换掉不符要求的内容
  3. 单位开户

1.4 30号没进度

今天基本上没啥进度。

上午上课,特么的,一上课就头疼,老师给我的感觉就是她自己都不会。我就纳闷了,现在的老师,是连备课的习惯都没有了吗?

讲着讲着就卡壳了,我认为好的老师,至少带着学生完整的过一遍例子吧?她直接拿上节课的例子接着写,你知道那是啥样式吗?

讲注解,所有的结果都运行在一个jsp页面上,密密麻麻的,服了。

下午,整了整seo,我不知道为啥我这个这么难收录,26号提交的百度和谷歌,结果一个也没有收录,头疼。顺便又优化了一下网页的关键字跟描述。

喂鸡喂鸭喂鹅,洗澡、洗衣服,打了一个小时游戏,看了一个小时极限挑战,已经晚上9点了。

说实话,现在只要一上课我就很头疼,我自学,都能学得比老师讲得都明白。

什么狗屁半吊子老师,讲啥讲不明白,写三行代码,找错误找10分钟,mmp的。你哪怕是课下备课,都不至于这样。

我呢,也就是为了不挂科而已,不然,谁特么听这些人的破课?

以后当个老师混日子也不错,一边混日子领工资,一边还能做自己感兴趣的事,啧啧…

这是后人整合鲁迅的文章,改写的诗。“从你开始学习并改变身边的人”,从我开始改变这些混日子的老师?怎么改变,除非你给我个炮弹,我把这些混日子的老师都给轰了,杀鸡儆猴。

现在上课有两种人,极好的学生,是不会听的,有的直接逃课;极差的学生,也是不会听的,也逃课。教师为了让自己的课不沦落到没人听的地步,点名,在的就给你成绩。这是不是违背了教学的初衷?

一个好的老师,不应该强迫学生必须听你的课。你可以期中考试、期末考试,通过考试来决定学生成绩如何;而不是通过别人是否上你的课来给成绩。至于学生如何获取知识,你不需要管,因为你未必是个好老师,学生需要的是好老师。教学的初衷是为了让学生掌握更扎实的知识,有更强的能力,如果你不能给他们这些,请不要束缚他们选择老师的权利。如果说,职场是优胜劣汰,那么教师这个铁饭碗,好多人拿着不应得的薪水,有着普通人很努力也达不到的生活水准,这是不是太不公平了?

我的专业课老师,群里发上课了,结果我进去,尼玛的显示下课状态。他自己随机开课,也就是我想做个按时出勤的好学生得一直刷新才行。老子8点就到了,结果还要一直刷新等尼玛的到点上课?直接脚本处理。定时8点30进入课堂,自动监测签到。管尼玛的迟不迟到,反正也不听,布置的作业我都没做。

我之前的数学老师,提前快1个小时,就把课堂打开,让学生进去,这是好老师。

1.5 6号没进度

七月一号到五号,在准备英语跟数学的期末考试,所以没有进度。

从今天开始,全心全意好好整。

此处应该画一道分割线。

考完试了,也不着急去做实训,把我这小博客又优化了一下,添加了本地搜索内容加载动画。

之后,又整了个每天定时刷步数能量的脚本,这样,一天就过去咯!

1.6 7号进度

完成功能:

  1. 个人开户:添加用户,需要更新单位表下的人数、单位月缴总额和个人月缴总额的数据。有两个思路
    • 代码完成
    • MySQL触发器

我采用的MySQL触发器,学习地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
create trigger insert_trigger after insert on tb003 for EACH row
begin
update tb002 as a join (select unitaccnum,sum(basenumber) sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.basenumber=b.sum;
update tb002 as a join (select unitaccnum,sum(unitmonpaysum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.unitpaysum=b.sum;
update tb002 as a join (select unitaccnum,sum(permonpaysum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.perpaysum=b.sum;
update tb002 as a join (select unitaccnum,count(accnum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.persnum=b.sum;
end

create trigger update_trigger after UPDATE on tb003 for EACH row
begin
update tb002 as a join (select unitaccnum,sum(basenumber) sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.basenumber=b.sum;
update tb002 as a join (select unitaccnum,sum(unitmonpaysum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.unitpaysum=b.sum;
update tb002 as a join (select unitaccnum,sum(permonpaysum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.perpaysum=b.sum;
update tb002 as a join (select unitaccnum,count(accnum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.persnum=b.sum;
end

create trigger delete_trigger after DELETE on tb003 for EACH row
begin
update tb002 as a join (select unitaccnum,sum(basenumber) sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.basenumber=b.sum;
update tb002 as a join (select unitaccnum,sum(unitmonpaysum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.unitpaysum=b.sum;
update tb002 as a join (select unitaccnum,sum(permonpaysum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.perpaysum=b.sum;
update tb002 as a join (select unitaccnum,count(accnum) as sum from tb003 where peraccstate=0 GROUP BY unitaccnum) as b on a.unitaccnum=b.unitaccnum set a.persnum=b.sum;
end

1.7 8号进度

完成功能:

  1. 单位修改
  2. 个人修改
    • 反显数据
    • 多表连接查询

多表连接查询的时候,我直接懵了。

需求是查个人数据的时候,需要将单位的数据一并反显出来。

我一开始是想查询两次,封装成Javabean,存储session。但是太麻烦了,就百度了一下,数据库采用多表连接查询,对应javaBean文件连接方式

2021年2月11用mybatis时,也碰到了类似的综合查询,实现方式,就是通过参考上文中的,建一个包装类。Mybatis综合查询

1.8 9号进度

完成功能:

  1. 单位查询
  2. 个人查询
  3. 单位销户
    • 若总人数>0,则不可销户
  4. 个人销户

销户:并没有将数据删除,而是将状态码修改为销户,在查询修改的时候,只查询状态为正常的数据

在全部内容查询的时候,需要将数据查出来。

感受:触发器真好用!

查询需要用到分页,思路就是,创建一个Page对象,里面存储当前页码,总页码,总条数,行数,以及存储bean对象的list集合

1
2
3
4
5
6
7
8
9
public class Page<T> {
private int totalCount;
private int totalPage;
private int currentPage;
private int rows;//每页显示记录数
private List<T> list;//每页的数据

...getter and setter...
}

在jsp页面实现分页显示,类似于这样

在jsp页面显示中,需要用到一个begin和end值,来求出其中的应该显示的条数。我在servlet中设置了这两个值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//分页的开始跟结束
int visibility = 4;//设置分页中间显示的个数,4就表示中间有5个
int totalPage = personByPage.getTotalPage();
int current = personByPage.getCurrentPage();
current = current > totalPage ? totalPage : current;
current = current < 1 ? 1 : current;
int begin = current - visibility / 2;
int end = current + visibility / 2;
/**
* 如果页数多于visibility,则按visibility正常显示
* 如果页数少用visibility,则按实际情况展示
*/
if (totalPage > visibility) {
begin = begin < 1 ? 1 : begin;
end = begin + visibility;
end = end > totalPage ? totalPage : end;
begin = end - visibility;
} else {
begin = begin < 1 ? 1 : begin;
end = end > totalPage ? totalPage : end;
}

然后,在jsp页面中,通过jstl来控制生成页数

1
2
3
4
5
6
7
<ul class="pagination pagination-sm pull-right mt-3">
<li><a href="findPersonByPage?currentPage=1">首页</a></li>
<c:forEach begin="${requestScope.begin}" end="${requestScope.end}" step="1" var="i">
<li${requestScope.personByPage.currentPage==i?" class=\"active\"":""}><a href="findPersonByPage?currentPage=${i}">${i}</a></li>
</c:forEach>
<li><a href="findPersonByPage?currentPage=${requestScope.personByPage.totalPage}">尾页</a></li>
</ul>

本来还有几个功能,我看得很懵逼,问问老师,老师说不用实现了,那我就不客气了,下班,哈哈

写完这些的时候,一看时间

在使用过程中,还碰到了ssl的问题,解决方案在这

二、maven版简记

时隔多年,最近自己在写项目时,对session与token的异同,突然就有点不太理解了,就把该项目跑一下。

用idea将该项目修改为maven项目,分支为maven

1.) 使用idea打开项目

2.) 配置启动项。add configuration-+号-Tomcat Server-Local,点击Fix按钮,选择war exploed模式。Tomcat部署时war和warexploded区别以及如何实现热部署-爱码网

3.) 配置context-path为/

4.) 创建数据库并初始化初始库、初始化数据,启动项目

发布:2020-06-29 16:20:13
修改:2022-12-17 20:18:13
链接:https://meethigher.top/blog/2020/house-fund/
标签:open web jsp 
付款码 打赏 分享
若无法评论请科学上网
Shift+Ctrl+1 可控制工具栏