我的Java开发生涯记(6) - Go语言中文社区

我的Java开发生涯记(6)


2019.6.24著

告诉大家一个好消息 ,今天朕终于要开始些功能了,哈哈哈!!!!虽然只是简单的查询,但是也是一次挑战,干巴爹哦嘞。

做一个报表,要求如下

1.显示会员基本信息

这个最简单啦,在后端写跳转页面的入口,把数据查出来存入request,在页面使用${“key的值”}取出来即可展示,最终效果如下:

 

2.折线图展示

折线图是我最后一个做的,因为比较难,前台代码也看不懂,不过做完之后发现其实也就那样,照着套就好了,看看大佬是怎么封装对象的 ,我跟着一样封装,然后吧前台代码复制粘贴,就实现功能了 ,不过在这期间也出现过bug,我把int类型的数据用String传到前端了,结果前端调试有数据,但是页面显示就是不出数据。下次要吸取教训。

 

3.饼状图展示

这个比较简单,页面上就一个div,然后坐在jq里面传入固定的json就可以了,具体后端代码如下:

/**
  * 向页面发送饼状图json数据
  * @param request
  * @return
  */
@ResponseBody
@RequestMapping(value = {"/loadContentStat"}, method = {RequestMethod.GET})
public String loadContentStat(HttpServletRequest request) {
     //C端用户总数
     RetDTO customerType0 = customerWebApi.getCustomerType(CustomerDTO.CUSTOMER_CUSTOMERTYPE_ORDINARY);
     int customerCCount = JSON.parseObject(customerType0.getRetData(), Integer.class);

     //非C端用户总数
     int noCustomerCCount = JSON.parseObject(customerWebApi.getCustomerType(CustomerDTO.CUSTOMER_CUSTOMERTYPE_ENTERPRISE).getRetData(), Integer.class)
             + JSON.parseObject(customerWebApi.getCustomerType(CustomerDTO.CUSTOMER_CUSTOMERTYPE_STAFF).getRetData(), Integer.class)
             + JSON.parseObject(customerWebApi.getCustomerType(CustomerDTO.CUSTOMER_CUSTOMERTYPE_SERVICE).getRetData(), Integer.class)
             + JSON.parseObject(customerWebApi.getCustomerType(CustomerDTO.CUSTOMER_CUSTOMERTYPE_ENGINEER).getRetData(), Integer.class)
             + JSON.parseObject(customerWebApi.getCustomerType(CustomerDTO.CUSTOMER_CUSTOMERTYPE_WHOLESALER).getRetData(), Integer.class);

     Map<String, Object> returnMap = new HashMap<String, Object>();
     List<Map<String, Object>> listData = new ArrayList<Map<String, Object>>();
     List<String> categoryNameList = new ArrayList<String>();
     categoryNameList.add("C端用户总数");
     categoryNameList.add("非C端用户总数");

     List<Integer> cList = new ArrayList();
     cList.add(customerCCount);
     cList.add(noCustomerCCount);

     for (int i = 0; i < cList.size(); i++) {
         Map<String, Object> paramMap = new HashMap<String, Object>();
         paramMap.put("name",categoryNameList.get(i));
         paramMap.put("value",cList.get(i));
         listData.add(paramMap);
     }

     returnMap.put("listData", listData);
     returnMap.put("categoryNameList", categoryNameList);

   return JSON.toJSONString(returnMap, SerializerFeature.WriteMapNullValue);
}

具体实现效果如下:

 

4.导出报表(包括会员表,订单表,地址表等)

这个的话就有点复杂了,查询代码特多 ,我就不一一写查询代码了,都用方法代替,具体逻辑展示如下:

/**
 * 报表导出
 * 根据条件导出数据
 *
 * @param response
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value = {"/exportsByCondition"}, method = {RequestMethod.GET}, produces = {"text/html;charset=UTF-8"})
public String exportsByCondition(HttpServletResponse response, HttpServletRequest request) {
    //获取开始时间
    String startDate = request.getParameter("startDate");
    //获取结束时间
    String endDate = request.getParameter("endDate");
    //1.获取EXCEL表头
    String[] headers = {"登陆账号", "会员昵称", "会员类型", "手机号码", "邮箱", "注册时间", "最后登陆时间", "支付总金额", "支付次数", "加入分销员日期", "默认收货人", "默认收货手机号", "默认收货地址", "分公司编码", "分公司名称", "办事处编码", "办事处名称"};
    //2.获取导出需要的数据
    List<Map<String, String>> dataset = new ArrayList<Map<String, String>>();

    RetDTO loginLogData = this.loginLogData(startDate, endDate);
    List<CustomerLoginLogDTO> dataList = JSON.parseArray(loginLogData.getRetData(), CustomerLoginLogDTO.class);
    System.out.println("------------------查询时间内的登陆数:"+dataList.size()+"-------------------");
    //去重复
    Set set = new HashSet();

    //组装查询条件
    for (CustomerLoginLogDTO customerLoginLogDTO : dataList) {
        //使用set去重判断
        if (set.add(customerLoginLogDTO.getCustomerUuid())) {
            //组装查询条件
            Map<String, String> map = new HashMap<String, String>();

            String customerUuid = customerLoginLogDTO.getCustomerUuid();
            //根据会员id查询customer表
            RetDTO customerRetDTO = customerWebApi.getByUuid(customerUuid);
            CustomerDTO customerDTO = null;
            if (RetDTO.SUCCESS.equals(customerRetDTO.getRetStatus()) && StringUtils.isNotEmpty(customerRetDTO.getRetData())) {
                customerDTO = JSON.parseObject(customerRetDTO.getRetData(), CustomerDTO.class);
                if (customerDTO != null) {
                    map.put("key0", customerDTO.getCustomerNo());//登陆账号customerNo
                    map.put("key1", customerDTO.getCustomerName());//会员昵称customerName
                    map.put("key2", customerDTO.getCustomerType());//会员类型customerType
                    map.put("key3", customerDTO.getMobile());//手机号码mobile
                    map.put("key4", customerDTO.getEmail());//邮箱email
                    map.put("key5", customerDTO.getCreateTime());//注册时间createTime
                    map.put("key6", customerDTO.getLastLoginTime());//最后登陆时间lastLoginTime
                } else {
                    map.put("key0", "");//登陆账号customerNo
                    map.put("key1", "");//会员昵称customerName
                    map.put("key2", "");//会员类型customerType
                    map.put("key3", "");//手机号码mobile
                    map.put("key4", "");//邮箱email
                    map.put("key5", "");//注册时间createTime
                    map.put("key6", "");//最后登陆时间lastLoginTime
                }
            }

            //根据会员id查询order_main表
            RetDTO orderMainListDto = this.getOrderMainByTimeData(startDate, endDate, customerUuid);
            List<OrderMainDTO> orderMainList = JSON.parseArray(orderMainListDto.getRetData(), OrderMainDTO.class);
            if (orderMainList != null && orderMainList.size() > 0) {
                double payTotalMoney = 0.00;
                int payNumber = 0;
                for (OrderMainDTO orderMainDTO : orderMainList) {
                    payTotalMoney += orderMainDTO.getPayPrice();
                    payNumber++;
                    map.put("key7", payTotalMoney + "");//支付总金额payTotalMoney
                    map.put("key8", payNumber + "");//支付次数payNumber
                }
            } else {
                map.put("key7", "");//支付总金额payTotalMoney
                map.put("key8", "");//支付次数payNumber
            }

            if (customerDTO != null) {
                map.put("key9", customerDTO.getExtendApplyTime());//joinDistributorTime加入分销员日期
            } else {
                map.put("key9", "");//joinDistributorTime加入分销员日期
            }

            //根据会员id查询customer_address表
            RetDTO customerAddressRetDTO = customerAddressWebApi.getDefaultDeliveryAddress(customerUuid);
            CustomerAddressDTO customerAddressDTO = JSON.parseObject(customerAddressRetDTO.getRetData(), CustomerAddressDTO.class);
            if (customerAddressDTO != null) {
                map.put("key10", customerAddressDTO.getConsignee());//默认收货人consignee
                map.put("key11", customerAddressDTO.getTelephone());//默认手机号telephone
                map.put("key12", customerAddressDTO.getAddress());//默认收货地址address
            } else {
                map.put("key10", "");//默认收货人consignee
                map.put("key11", "");//默认手机号telephone
                map.put("key12", "");//默认收货地址address
            }

            //根据分公司编码和办事处编码查询
            if (customerDTO != null) {
                if (CustomerDTO.CUSTOMER_CUSTOMERTYPE_SERVICE.equals(customerDTO.getCustomerType()) || CustomerDTO.CUSTOMER_CUSTOMERTYPE_ENGINEER.equals(customerDTO.getCustomerType())) {
                    RetDTO companyDto = partCompany4OthersApi.getByCode(customerDTO.getCompanyCode());
                    PartCompanyDTO company = JSON.parseObject(companyDto.getRetData(), PartCompanyDTO.class);
                    if (company != null && company != null) {
                        map.put("key13", company.getCompanyCode());//分公司编码companyNo,编码在会员表就有
                        map.put("key14", company.getCompanyName());//分公司名称companyName
                    } else {
                        map.put("key13", "");//分公司编码companyNo,编码在会员表就有
                        map.put("key14", "");//分公司名称companyName
                    }
                    RetDTO orgDto = organization4OthersApi.getbyCode(customerDTO.getAgencyCode());
                    OrganizationDTO org = JSON.parseObject(orgDto.getRetData(), OrganizationDTO.class);
                    if (org != null) {
                        map.put("key15", org.getOfficeCode());//办事处编码orgNo,编码在会员表就有
                        map.put("key16", org.getOrgName());//办事处名称orgName
                    } else {
                        map.put("key15", "");//办事处编码orgNo,编码在会员表就有
                        map.put("key16", "");//办事处名称orgName
                    }
                } else {
                    map.put("key13", "");//分公司编码companyNo,编码在会员表就有
                    map.put("key14", "");//分公司名称companyName
                    map.put("key15", "");//办事处编码orgNo,编码在会员表就有
                    map.put("key16", "");//办事处名称orgName
                }
            } else {
                map.put("key13", "");//分公司编码companyNo,编码在会员表就有
                map.put("key14", "");//分公司名称companyName
                map.put("key15", "");//办事处编码orgNo,编码在会员表就有
                map.put("key16", "");//办事处名称orgName
            }
            dataset.add(map);//根据时间查询出来的数据
        }
    }

    if (dataset != null && dataset.size() > 0) {
        ExcelUtil.exportsDataByMap(dataset, response, "会员信息表", headers);
    }
    System.out.println("------------------导出报表会员信息条数:" + dataset.size() + "-----------------------------");
    //3.导出数据
    return "true";
}

表格到处就有点烦了,数据一多,就出问题 ,当我设置只要一千条的时候,他就很快。目前还不知道是什么原因,如果哪位大佬能看出来,希望能交流交流。

 

 

经验之谈:

1.在写代码时,一定要记得修改过后及时编译。如果在方法外写了代码,这是必须重启项目才能生效

2.list集合的去重方式

//方法一:使用java8新特性stream进行List去重 
List newList = list.stream().distinct().collect(Collectors.toList()); 

//方法二:双重for循环去重 
for (int i = 0; i < list.size(); i++) { 
    for (int j = 0; j < list.size(); j++) { 
        if(i!=j&&list.get(i)==list.get(j)) { 
            list.remove(list.get(j)); 
        } 
    } 
} 

//方法三:set集合判断去重,不打乱顺序 
Set set1 = new HashSet(); 
List newList1 = new ArrayList(); 
for (Integer integer : list) { 
    if(set1.add(integer)) { 
        newList1.add(integer); 
    } 
} 

//方法四:遍历后判断赋给另一个list集合 
List newList2 = new ArrayList(); 
for (Integer integer : list) { 
    if(!newList2.contains(integer)){ 
        newList2.add(integer); 
    } 
} 

//方法五:set和list转换去重 
Set set2 = new HashSet(); 
List newList3 = new ArrayList(); 
set2.addAll(list); 
newList3.addAll(set2); 

 

 

总结:站在巨人的肩膀就能决定你初始的高度有多高,抄别人的代码不是丑事,最重要的是你做完了之后要会理解别人是怎么做的,然后吸收总结,把它变成自己的知识,这样你就成长了。整整一个星期才把这四个功能做完,第一次做是有点菜,代码写得也不漂亮,相信下次写我肯定能做好。

落款人:熊熊。2019.7.1

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43908950/article/details/93542184
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 14:38:05
  • 阅读 ( 492 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢