先把我们小组讨论的奖惩需求公布出来
奖惩管理需求分析
1.管理员能添加奖励、处罚的各种基本信息,并可以查询或修改奖励、处罚的基本信息。
2.普通用户登录能查询奖励、处罚的基本信息。
3.领导提交的奖惩消息发给对应的当事人确认,人事进行审批,结束。
数据库设计
奖惩表
奖惩编号 | Id | int |
奖惩ID | Is_id | int |
员工id | P_id | int |
奖惩时间 | Is_time | date |
奖惩内容 | Is_content | text |
奖惩类型 | Is_type | varchar |
员工表与奖惩表是一对多的关系
消息表 | ||
消息编号 |
| INT |
发送人编号 |
| INT |
接受人编号 |
| INT |
消息内容 |
| VARCHAR(500) |
类型 |
| varchar(50) |
是否阅读 |
| VARCHAR(2) |
收发时间 |
| VARCHAR(2) |
开始我们的表演了,我们小组两个同学开发。一个同学负责录入奖惩信息和消息弹窗的实现,另外一个同学就是我负责奖惩信息的分权限删改查。
数据库表里面的字段合不合理我们没有细致的去研究。到我的条件查看显示列表就出问题了。总是会查出许多重复的字段。我也不知道为什么奖惩表有35调条数据,最后查出来就有一百多条,
<select id="selectAllInstitution" resultType="java.util.HashMap" parameterType="map" >
select Distinct r.id,r.userid ,u.username, u.name,r.type,r.content,r.createtime,m.isread
from rap r,users u,msg m
where r.userid=u.id and m.receiver_id=r.userid and m.message_type=1
<trim>
<if test="name != null">
and u.name like concat(concat('%',#{name}),'%')
</if>
<if test="pageSize != null and pageNum != null">
limit #{pageNum} ,#{pageSize}
</if>
</trim>
</select>
从用户表里面查用户名和姓名,从奖惩表里面查奖惩内容,类型,创建时间这些,消息表里面查看奖惩信息的阅读状态。message_type=1代表奖惩消息。
一个用户对应着多条奖惩信息和多条奖惩消息,三张表的连接关系是where r.userid=u.id and m.receiver_id=r.userid and m.message_type=1,开始我没有注意到表的关系出现了奖惩信息和奖惩表出现了多对多的情况。只知道不断的对数据进行去重。先是加了一个Distinct关键字,然后我点击消息弹窗时,将奖惩信息变为已读后,查询出来的消息就会出现已读和未读两条数据。我将数据库查出来的字段在添加一个消息id,发现重复数据对应的消息Id是不一样的。改为
select Distinct r.id,r.userid ,u.username, u.name,r.type,r.content,r.createtime,m.isread
from rap r,users u,msg m
where r.userid=u.id and m.receiver_id=r.userid and m.message_type=1 group by u.id
以上查出来的数据默认是最新的数据显示在前面,数据的显示的数量就是对的了。但是数据内容就可能不是一一对应的。所以我们在奖惩表里面添加一个字段消息id.