将数据库中同一用户的各类分数相加
应用场景:一个月内,每隔两周的周三会进行自评价,现需要做一个月报表,统计自评价截止上月累计评价分、本月评价分_未提交、本月评价分_未评价、本月评价分_优秀、本月评价分_小计、截止本月累计评价分,且编制时可自动带出。
解决方案:
1、通过sql获取每个月的自评价提交日,统计月份作为参数,返回当月评价日期字符串,以“,”连接
Dao 文件:public String findZpjDate(Date month);
xml文件:
<select id="findZpjDate" resultType="String">
select wm_concat(to_char(send_date, 'yyyy-mm-dd'))
from sys_date
where send_flag = 1
and to_char(send_date, 'yyyy-mm') = to_char(#{countTime}, 'yyyy-mm')
and del_flag = 0
order by send_date
</select>
2、将每个评价日期传入,得到当期评价分
dao:public List<WeekScoreZpjDet> findWeekScoreZpjDetList(String preMonth,String month);
xml:
<select id="findWeekScoreZpjDetList" resultType="weekScoreZpjDet">
SELECT uu.id AS "user.id",
uu.name AS "user.name",
case
when uu.gender = '2' then
'女'
else
'男'
end as "gender",
uu.pno as "pno",
oo.id as "office.id",
oo.name as "office.name",
uu.work as "work",
nvl(det.all_score, 0) as "preScore",
nvl2(a.id, 0, -5) as "curScoreWtj",
nvl(wpj.cur_score_wpj, 0) as "curScoreWpj",
case
when nvl(a.is_good, 0) = 1 then
10
else
0
end as "curScoreYx",
nvl2(a.id, 0, -5) + nvl(wpj.cur_score_wpj, 0) + (case when nvl(a.is_good, 0) = 1 then 10 else 0 end) as "curScoreXj",
nvl(det.all_score, 0) + nvl2(a.id, 0, -5) +
nvl(wpj.cur_score_wpj, 0) + (case when nvl(a.is_good, 0) = 1 then 10 else 0 end) as "allScore"
FROM sys_user UU
LEFT JOIN SYS_OFFICE OO
ON OO.ID = UU.OFFICE_ID
LEFT JOIN week_rep_mgr a
ON UU.ID = a.USER_ID
AND a.del_flag = '0'
AND a.status > 0
AND to_char(a.format_date, 'yyyy-mm-dd') = #{param2}
LEFT JOIN (SELECT all_score, user_id
FROM week_score_zpj_det
WHERE del_flag = 0
AND parent_id = (SELECT id
FROM week_score_zpj t
WHERE to_char(t.count_time, 'yyyy-mm-dd') = #{param1}
AND del_flag = 0
AND rownum = 1)) det
ON det.user_id = uu.id
LEFT JOIN (SELECT u.id, -5 * count(u.id) as cur_score_wpj
FROM sys_user u
LEFT JOIN week_rep_mgr t
ON ',' || t.dis_ids || ',' LIKE '%,' || u.id || ',%'
WHERE u.del_flag = 0
AND u.id != 1
AND u.user_type = '公司员工'
AND (u.login_flag = 1 and u.work != '总经理')
AND t.del_flag = '0'
AND t.status > 0
AND to_char(t.format_date, 'yyyy-mm-dd') = #{param2}
GROUP BY u.id) wpj
ON wpj.id = uu.id
WHERE uu.del_flag = 0
AND uu.id != 1
AND uu.user_type = '公司员工'
AND ((uu.login_flag = 1 and uu.work != '总经理') or
(uu.login_flag = 0 and
uu.leave_date > = to_date(#{param2}, 'yyyy-mm-dd')))
AND uu.rsdate < = to_date(#{param2}, 'yyyy-mm-dd')
ORDER BY nvl(wpj.cur_score_wpj, 0) + (case when nvl(a.is_good, 0) = 1 then 10 else 0 end),uu.work
</select>
service:
/**
* 获取自评价子表列表
* @param weekScoreZpj
* @return
*/
public List<WeekScoreZpjDet> findWeekScoreZpjDetList(WeekScoreZpj weekScoreZpj){
String zpjDate = dao.findZpjDate(weekScoreZpj.getCountTime());
if(StringUtils.isBlank(zpjDate)){
return null;
}
String preMonth = DateUtils.formatDate(DateUtils.addMonth(weekScoreZpj.getCountTime(), -1), "yyyy-MM-dd");
String[] sendDate = zpjDate.split(",");
List<WeekScoreZpjDet> detList = dao.findWeekScoreZpjDetList(preMonth, sendDate[0]);
for (int i = 1; i < sendDate.length; i++) {
addAllList(detList, dao.findWeekScoreZpjDetList(preMonth, sendDate[i]));
}
return detList;
}
3、添加方法,将每个评价日期获得的列表与第一个自评价日期获取的列表相比,同一个用户将评价分相加
private void addAllList(List<WeekScoreZpjDet> srcList, List<WeekScoreZpjDet> detList) {
for (WeekScoreZpjDet det : detList) {
boolean flag = false;
for (int i = 0; i < srcList.size(); i++) {
WeekScoreZpjDet wzd = srcList.get(i);
if (wzd.getUser().equals(det.getUser())) {
wzd.setCurScoreWtj(wzd.getCurScoreWtj()+det.getCurScoreWtj());
wzd.setCurScoreWpj(wzd.getCurScoreWpj()+det.getCurScoreWpj());
wzd.setCurScoreYx(wzd.getCurScoreYx()+det.getCurScoreYx());
wzd.setCurScoreXj(wzd.getCurScoreXj()+det.getCurScoreXj());
wzd.setAllScore(wzd.getPreScore()+wzd.getCurScoreXj());
flag = true;
break;
}
}
if (!flag) {
srcList.add(det);
}
}
}
将数据库中同一用户的各类分数相加相关推荐
- 查看MYSQL数据库中所有用户及拥有权限
查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM m ...
- 获取mysql所有用户权限_查看MYSQL数据库中所有用户及拥有权限
查看MYSQL数据库中所有用户 mysql>SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM my ...
- win7 oracle数据库删除用户名,图文帮你win7系统删除Oracle数据库中的用户的具体方法...
许多win7系统用户在工作中经常会遇到对win7系统删除Oracle数据库中的用户进行操作的情况,比如近日有用户到本站反映说win7系统删除Oracle数据库中的用户的情况,但是却不知道要怎么操作wi ...
- Oracle数据库中scott用户不存在的解决方法
Oracle数据库中scott用户不存在的解决方法 参考文章: (1)Oracle数据库中scott用户不存在的解决方法 (2)https://www.cnblogs.com/hjweifans/p/ ...
- mysql s授权所有用户_查看MYSQL数据库中所有用户及拥有权限
查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM m ...
- md5加密数据表中的密码php,JSP_使用MD5加密数据库中的用户密码(一),我们知道,现在网络上一般的 - phpStudy...
使用MD5加密数据库中的用户密码(一) 我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件.账号.密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特殊栏目 ...
- Sql Server数据库中的用户及权限配置,保障数据库安全
最近有个朋友的网站被攻击,漏洞是比较过时的SQL注入,在帮修复的过程中,发现数据库用的是超级管理员用户sa,提高数据安全性和服务器安全性的措施之一便是降低web应用数据库用户的权限,回顾了一下Sql ...
- 使用MD5加密数据库中的用户密码介绍
使用MD5加密数据库中的用户密码介绍 ●前言 我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件.账号.密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特 ...
- SQL SERVER数据库中GUEST用户
SQL SERVER数据库中GUEST用户 问题 谁邀请这些客人(guest)到我的数据库中?你可知道在你的SQL SERVER数据库中还存在guest用户?你可知道SQL SERVER 需要gues ...
最新文章
- Nature封面:IBM团队发布“AI辩论家”最新研究进展、Insitro创AI制药领域单笔融资金额记录 | AI日报...
- ExpandableListView getChildView 不执行,不显示子列表
- PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to fi
- cordova开发插件,并在android studio中开发、调试
- 成长为一名Java架构师需要掌握的技术有哪些呢?
- actionscript 3 mysql driver_在ActionScript 3 MySql Driver连接MYSQL数据库经验分享
- 简单扫一下官文 - 11G Release2 新特性
- C语言异常处理之 setjmp()和longjmp()
- mysql数据库连接数瓶颈_MySQL数据库性能优化之硬件瓶颈分析
- 数据科学包4-pandas核心数据结构
- 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
- 防止重复提交表单的两种方法
- 十大排序算法总结与实现
- EXCEL绘制均值极差控制图
- 台式计算机键盘快捷键怎么设置,电脑快捷键设置修改 电脑键盘快捷键怎么更改...
- Ubuntu 查询IP地址,设置静态IP、网关
- 达梦数据库大小写这个参数敏感怎样设置
- 人人的互联网时代——读娱乐致死和未来是湿的
- 2-4 第18次课 高项之沟通管理与干系人管理
- R语言批量提取excel当中的数据