根据一个实际的需求案例,描述一下:如何在工资条中添加获取累计工资[字段]和月平均工资[字段]
这个需求存在一个前后端分离的微服务EHR项目中,通过两个SQL语句来实现。业务逻辑:前端调用一个接口,返回两个对象。两个SQL语句就写在MyBatis中。
项目技术栈:前端vue.js + 后端Spring Cloud微服务
1、加入给出一张工资表,除了在前端页面显示这个人的工资条之外,还需要显示这个人的累计工资和月平均工资。
具体的需求如下:
1、首先,用户登录账户,点击工资条page,进入工资条界面,顶部有一个日期选择器,用户可以选择【年月】(没有具体到哪一天)。
2、其次,用户选择那个也,累计工资就计算到那个月,【即使现在是12月份,用户选择的是201805,工资条结果显示5月的工资,累计工资和月平均工资的计算也是截止到5月份,选择时间点后边的不考虑。】
3、最后,判断当前日期,如果当前日期是15号或者15号之前,则显示上个月的工资条;15号之后,则显示当月的工资条。
需求具体解析:
ps:想在项目中完成这个需求,需要掌握的知识点比较全面,需要掌握vue.js框架的知识、Spring Cloud框架、Spring框架、微服务的概念、MyBatis、MySQL等知识。这些就需要自己去学习啦~我们今天的侧重点在MySQL这一部分。
1、工资条中,有很多内容,但是存在与数据库中的工资表中,这样的话,把数据拿来显示就行了。这个不需要去分析。
2、主要是截止到选择的月份,进行计算累计工资和月平均工资。累计的拿出来了,月平均的也就好说了。
select
sum(total_theory_wages) AS wages_total , count(total_theory_wages) , sum(total_theory_wages) / count(total_theory_wages) AS wages_month_average from t_wages t where employee_id = 88888888 and (wages_time between 201801 and 201812)
每一行是一个小块,没对代码进行风格优化?。
字段说明:
total_theory_wages 应发工资
wages_month_average 月平均工资
wages_time 年月,例如‘201805’
1、首先,用sum()函数统计累计工资和。
在用count()统计一下次数,注意!这里我没有用截止月份减去起始月份
原因是可能期间有人因为某些原因,没有发工资,取值就会不正确。
这样这个问题就很好的解决了。
2、还有个问题。这里注意一下count(total_theory_wages)为0的情况,如果一个人上个月刚刚入职,还没法工资,虽然在前台看不到工资条数据(对于前台来说,是正确的现象;但是后台是会报错的。)
3、最后,判断当前日期,这个在前端用JavaScript写个if{}else{}代码块控制一下即可。