-
报销管理-添加报销单-业务层
(1) 在报销主表和明细表中都有一个字段叫expid,这个字段在数据库中是利用序列获取的,但是在业务层中,我们要控制主表和明细表的expid一致,所以要先获取expid赋值给主表和明细表,那么这个expid的值怎么得到呢?
在dao层通过sql语句
select exp_seq.nextval from dual
获取exp_seq序列的下一个值,将该值赋值给主表和明细表。 -
报销管理-添加报销单-DAO层代码
(1) 在我们的逻辑中,要向主表添加数据,要向明细表添加数据,但是假如在向明细表添加数据的过程中,出现异常了,那么程序就中断了,但是主表的数据被添加进去了,这个问题要怎么解决呢?
将事务处理提到service层,在service层获取链接,关闭事务的自动提交功能,一旦发生异常,就手动回滚,保持事务原子性,保证数据一致。(2) 在我们目前的代码中,当添加明细出现问题的时候,页面还是会跳转到添加成功页面,这个问题怎么解决呢?
将事务处理提到service层,在service层获取链接,关闭事务的自动提交功能,一旦发生异常,就手动回滚,保持事务原子性,保证数据一致。(3) 现在的代码中,会出现另一个问题:主表数据添加成功,明细表数据添加失败,但是这些操作肯定是要么都成功,要么都失败的,那么这个问题怎么解决呢?
将事务处理提到service层,在service层获取链接,关闭事务的自动提交功能,一旦发生异常,就手动回滚,保持事务原子性,保证数据一致。 -
报销管理-使用ThreadLocal实现业务层事务1
(1) 说明ThreadLocal的作用?
在一个线程中存放数据,该数据是该线程的内部数据,其他线程无法访问,将connection对象放入线程中,从线程中获取connection可以保证获取到的connection对象是同一个。 -
报销管理-使用ThreadLocal实现业务层事务2
(1) 如何保证DBUtils工具类中getConnection方法获取到的Connection对象是一个呢?
使用ThreadLocal对象,将connection对象放入其中,ThreadLocal对象保证在当前线程中connection对象是同一个。在ThreadLocal内部有一个map集合,使用线程名作为键,connextion作为值,保证了只有当前线程能获取到connection对象。(2) 在DBUtils中是否要将Connection关闭呢?那要在什么时候关闭?
不需要再DBUtils中关闭connection,在service层,事务提交或回滚后将connection关闭。 -
报销管理-待审报销单
(1) 简述待审报销的思路?
当用户查看待审核报销时,服务器从数据库中的报销单表查找下一个审核人是当前用户时,将该条记录显示到待审核报销界面。(2) 如何查询的是不是下一级审批人是当前登录人的信息?
Sql语句:
select emp.realname,exp.* from expense exp join employee emp on exp.empid=emp.empid where exp.nextauditor=? order by expid desc
将报销单表和员工表链接查询。 -
我要查询的是不是下一级审批人是当前登录人的信息?
(1) 根据业务流程图,请用文字详细描述报销流程。
首先判断审核是否通过,拒绝或打回,则添加审核记录,修改报销单的状态,通过则判断是否是财务,是财务则添加支出信息,修改报销单状态,不是财务则判断报销金额是否大于2500,小于2500则添加审核记录,修改报销单状态,交给财务审核,金额大于2500,则判断当前审核人是否为总裁,是总裁则添加审核记录,修改报销单状态,交给财务审核,不是总裁,则则添加审核记录,修改报销单状态,交给总裁审核。(2) 审核报销单业务涉及到哪些表?
审核记录表、报销单表、支出表、 -
报销管理-审核报销单-控制层代码和业务层思路
(1) 如何在后台sql中进行条件的拼接?
使用if判断参数值是否为空,不为空则添加到sql语句中。 -
报销管理-审核报销单-DAO层和业务层代码实现1
(1) 在填充业务层代码过程中,需要注意哪些事项? -
注意代码的整合,相同的代码整合在一起,优化逻辑。
-
注意逻辑判断。
-
报销管理-审核报销单-DAO层和业务层代码实现2
(1) 完成审核报销单业务层代码。 -
报销管理-理解数据库表和创建实体类
(1) 简述系统中表之间的关系:
一个表对于一个实体类,表中得列,对于类中的属性,表中的一条数据对于一个对象, -
报销管理-审核报销单-代码完善和业务流程图绘制
(1) 在完成审核报销单功能后,你的感悟是什么?
系统中最难的是业务逻辑的处理,往往一个业务涉及对张表,有多个操作步骤,很多条件。
(2) 在程序出错后或跟你预先结果不一致的时候,你的应对策略是什么?
跟踪业务逻辑的实现步骤,一步步检查,必要时可以插入断点,进行bug调试。
-
收支管理-Echarts入门
(1) Echarts插件的作用?
实现数据的图形化显示,将数据显示为柱状图、饼图、折线图等便于人们查看的图形化界面,提高用户的交互质量。(2) 如何使用Echarts插件?
- 引入echarts的js文件。
- 创建一个具有高宽的div作为echarts容器
- 基于容器初始化echarts
- 指定图表的配置项和数据
- 使用配置项和数据显示图表
-
收支管理-使用Echarts柱状图显示收入统计信息-视图层和控制层
(1) 使用Echarts柱状图显示收入统计信息的逻辑概述?- 引入echarts的js文件。
- 创建一个具有高宽的div作为echarts容器
- 使用ajax获取数据,服务器接收到请求在数据库中查找收入信息,使用json格式发送给浏览器。
- 在ajax的回调函数中基于容器初始化echarts,并指定图表的配置项和数据
- 使用配置项和数据显示图表