zoukankan      html  css  js  c++  java
  • 项目笔记:统计页面功能实现

      页面跳转:

    //正版化统计列表
    public String listUI() {
        List<Software> softwares = softwareService.queryAll();//注意我要获取的是software表的数据
        List<Software> softwareList = new ArrayList<Software>();
        if(softwares != null){
            for(Software gsnm : softwares){
                Software gm = new Software();
                gm.setSoftName(gsnm.getSoftName());
                gm.setSoftId(gsnm.getSoftId());
                softwareList.add(gm);//获取software表的数据存储到softwareList中,然后传给前台
            }
        }
        getRequest().setAttribute("softwareList", softwareList);
        return "listUI";
    }

      前台页面如此获取:

    <select id="querys_softName" name="genuineManagementStatic.softName" style="208px;">
    <s:if test="#request.softwareList != null">
    <s:iterator  value="#request.softwareList">
        <option softId='<s:property value="#request.softId" />' value='<s:property value="#request.softName" />'><s:property value="#request.softName" /></option>
    </s:iterator>
    </s:if>
    </select>

      后台逻辑处理:

    public void list() {
        try {
            HQLBuilderUtil hql = new HQLBuilderUtil(Software.class);//注意要是获取到Software的page数据,此处需是Software.class
            if(software!=null && software.getSoftId()!=null && !"".equals(software.getSoftId())){
                Integer softId = software.getSoftId();
                hql.addWhereClause(" this.softId=? ", softId);
            }
            Integer pcCount = pcInfoService.queryAll().size();//PC总数
            GridData<Software> reportlogs = softwareService.getPageView(hql, getPageNum(), getPageSize());//获取到Software的page数据
            List<Software> list = reportlogs.getRows();
            for (int i = 0; i < list.size(); i++) {
                //取安装数
                Integer installCount = genuineManagementStaticService.queryInstallNum(list.get(i).getSoftId());
                NumberFormat numberFormat = NumberFormat.getInstance();
                // 设置精确到小数点后2位
                numberFormat.setMaximumFractionDigits(2);
                String result = numberFormat.format((float) installCount / (float) pcCount * 100) + "%";
                list.get(i).setInstallNum(installCount);
                list.get(i).setInstallPersent(result);
                //取正版数
                Integer genuine = 1;
                Integer genuineCount = genuineManagementStaticService.queryGenuineNum(genuine, list.get(i).getSoftId());
                Integer softCount = genuineManagementStaticService.querySoftNum(list.get(i).getSoftId());
                NumberFormat numberFormatGenuine = NumberFormat.getInstance();
                // 设置精确到小数点后2位
                numberFormat.setMaximumFractionDigits(2);
                String genuineResult = numberFormatGenuine.format((float) genuineCount / (float) softCount * 100) + "%";
                list.get(i).setGenuineNum(genuineCount);
                list.get(i).setGenuinePersent(genuineResult);
                //取最新版本
                GenuineManagementStatic gms = genuineManagementStaticService.queryNewVersion(list.get(i).getSoftId());
                list.get(i).setVersion(gms.getVersion());
            }
            print(ActionUtil.jsonObj(reportlogs));
        } catch (Exception e) {
            e.printStackTrace();
            GridData<Software> soft = new GridData<Software>();
            soft.setRows(null);
            soft.setTotal(0);
            print(ActionUtil.jsonObj(soft));
        }
    }

      我们再看一下几个dao层的查询方法:

    @Override
        public Integer queryInstallNum(Integer softId) {
            return Integer.parseInt(getSession().createSQLQuery(" select count(1) from vrv_paw_genuineManagementStatic a,vrv_paw_pcinfo b where a.pcInfoId=b.id and softId=:softId")
                    .setParameter("softId", softId)
                    .list().get(0).toString());
        };
    @Override
        public Integer queryGenuineNum(Integer matchResult, Integer softId) {
            return Integer.parseInt(getSession().createSQLQuery(" select count(1) from vrv_paw_genuineManagementStatic where matchResult=:matchResult and softId=:softId ")
                    .setParameter("matchResult", matchResult)
                    .setParameter("softId", softId)
                    .list().get(0).toString());
        }
    @Override
        public Integer querySoftNum(Integer softId) {
            return Integer.parseInt(getSession().createSQLQuery(" select count(1) from vrv_paw_genuineManagementStatic where softId=:softId ")
                    .setParameter("softId", softId)
                    .list().get(0).toString());
        }
    //获取softId为某个的软件的总数
    @SuppressWarnings("unchecked")
        @Override
        public GenuineManagementStatic queryNewVersion(Integer softId) {
            List<GenuineManagementStatic> list = getSession().createQuery(" from " + this.clazz.getName() + " this WHERE this.softId=:softId  order by version desc LIMIT 0,1")
                    .setParameter("softId", softId)
                    .list();
            if (list.size() > 0) {
                return list.get(0);
            }
            return null;
        }

      上面这个方法,就需要查看下此篇博客深入学习下:unexpected token: * 和 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 解决办法

       正版数(需要涉及子查询)和最新版本查询修改(最新版本要类型转换cast(version as integer)

    //新的正版数逻辑
        @Override
        public Integer queryGenuineNumNew(Integer matchResult, Integer genuine, Integer softId) {
            return Integer.parseInt(getSession().createSQLQuery(" select count(distinct softId,version,pcInfoId) from vrv_paw_genuineManagementStatic "
                    + "where (softId,version,pcInfoId) not in(select softId,version,pcInfoId from vrv_paw_genuineManagementStatic where matchResult=:matchResult and softId=:softId)"
                    + "and matchResult=:genuine "
                    + "and softId=:softId ")
                    .setParameter("matchResult", matchResult)
                    .setParameter("genuine", genuine)
                    .setParameter("softId", softId)
                    .list().get(0).toString());
        }
    @Override
        public GenuineManagementStatic queryNewVersion(Integer softId) {
            List<GenuineManagementStatic> list = getSession().createQuery(" from " + this.clazz.getName() + " this WHERE this.softId=:softId  order by cast(version as integer) desc LIMIT 0,1")
                    .setParameter("softId", softId)
                    .list();
            if (list.size() > 0) {
                return list.get(0);
            }
            return null;
        }

      关于正版数新逻辑查询,请查看这篇文章,说明的比较清楚:从项目上一个子查询扩展学习开来:mysql的查询、子查询及连接查询

  • 相关阅读:
    【转】Oracle 建立索引及SQL优化
    SQL Server Express LocalDB 存入中文产生乱码问题
    安装(c)npm及搭建Vue项目详解
    【转】VSCode 调试 Node.js 介绍
    【转】C#根据用户信息,生成token和cookie的方法
    远程连接 Docker 的 MySQL 服务
    mysql服务器和服务器启动程序
    一台物理机上运行多个mysql实例(Running Multiple MySQL Instances on One Machine)
    mysql5.7主从切换(master/slave switchover)
    选项文件(Option Files)/配置文件(Configuration Files)的使用
  • 原文地址:https://www.cnblogs.com/goloving/p/7553906.html
Copyright © 2011-2022 走看看