应用场景:一个月内,每隔两周的周三会进行自评价,现需要做一个月报表,统计自评价截止上月累计评价分、本月评价分_未提交、本月评价分_未评价、本月评价分_优秀、本月评价分_小计、截止本月累计评价分,且编制时可自动带出。

解决方案:

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 &gt; = to_date(#{param2}, 'yyyy-mm-dd')))
       AND uu.rsdate &lt; = 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);
            }
        }
    }

将数据库中同一用户的各类分数相加相关推荐

  1. 查看MYSQL数据库中所有用户及拥有权限

    查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM m ...

  2. 获取mysql所有用户权限_查看MYSQL数据库中所有用户及拥有权限

    查看MYSQL数据库中所有用户 mysql>SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM my ...

  3. win7 oracle数据库删除用户名,图文帮你win7系统删除Oracle数据库中的用户的具体方法...

    许多win7系统用户在工作中经常会遇到对win7系统删除Oracle数据库中的用户进行操作的情况,比如近日有用户到本站反映说win7系统删除Oracle数据库中的用户的情况,但是却不知道要怎么操作wi ...

  4. Oracle数据库中scott用户不存在的解决方法

    Oracle数据库中scott用户不存在的解决方法 参考文章: (1)Oracle数据库中scott用户不存在的解决方法 (2)https://www.cnblogs.com/hjweifans/p/ ...

  5. mysql s授权所有用户_查看MYSQL数据库中所有用户及拥有权限

    查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM m ...

  6. md5加密数据表中的密码php,JSP_使用MD5加密数据库中的用户密码(一),我们知道,现在网络上一般的 - phpStudy...

    使用MD5加密数据库中的用户密码(一) 我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件.账号.密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特殊栏目 ...

  7. Sql Server数据库中的用户及权限配置,保障数据库安全

    最近有个朋友的网站被攻击,漏洞是比较过时的SQL注入,在帮修复的过程中,发现数据库用的是超级管理员用户sa,提高数据安全性和服务器安全性的措施之一便是降低web应用数据库用户的权限,回顾了一下Sql ...

  8. 使用MD5加密数据库中的用户密码介绍

    使用MD5加密数据库中的用户密码介绍 ●前言 我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件.账号.密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特 ...

  9. SQL SERVER数据库中GUEST用户

    SQL SERVER数据库中GUEST用户 问题 谁邀请这些客人(guest)到我的数据库中?你可知道在你的SQL SERVER数据库中还存在guest用户?你可知道SQL SERVER 需要gues ...

最新文章

  1. Nature封面:IBM团队发布“AI辩论家”最新研究进展、Insitro创AI制药领域单笔融资金额记录 | AI日报...
  2. ExpandableListView getChildView 不执行,不显示子列表
  3. PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to fi
  4. cordova开发插件,并在android studio中开发、调试
  5. 成长为一名Java架构师需要掌握的技术有哪些呢?
  6. actionscript 3 mysql driver_在ActionScript 3 MySql Driver连接MYSQL数据库经验分享
  7. 简单扫一下官文 - 11G Release2 新特性
  8. C语言异常处理之 setjmp()和longjmp()
  9. mysql数据库连接数瓶颈_MySQL数据库性能优化之硬件瓶颈分析
  10. 数据科学包4-pandas核心数据结构
  11. 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
  12. 防止重复提交表单的两种方法
  13. 十大排序算法总结与实现
  14. EXCEL绘制均值极差控制图
  15. 台式计算机键盘快捷键怎么设置,电脑快捷键设置修改 电脑键盘快捷键怎么更改...
  16. Ubuntu 查询IP地址,设置静态IP、网关
  17. 达梦数据库大小写这个参数敏感怎样设置
  18. 人人的互联网时代——读娱乐致死和未来是湿的
  19. 2-4 第18次课 高项之沟通管理与干系人管理
  20. R语言批量提取excel当中的数据

热门文章

  1. Hadoop-1-大数据概述
  2. csr867x入门之按键配置(九)
  3. 深圳两青年在伊拉克炮火中淘金400万
  4. 微信小程序和微信小游戏的区别体现在哪?
  5. JavaMailSenderImpl 使用465端口配置
  6. SkeyeVSS实现RTSP、Onvif监控摄像头网页无插件化直播监控解决方案
  7. 《魔兽世界插件》教程—21点扑克游戏 Blackjack
  8. LCR TC1 测试仪
  9. 与第三方接口调用时白名单功能
  10. web课程设计网页规划与设计(HTML+CSS+JavaScript仿悦世界游戏官网 6个页面)