• CSV导出


    1.依赖jar包

    <dependency>
    <groupId>net.sourceforge.javacsv</groupId>
    <artifactId>javacsv</artifactId>
    <version>2.0</version>
    </dependency>
    2.导出实现
     public void export(QmsInspectionTaskReqDTO reqDTO, HttpServletRequest request, HttpServletResponse response) {
            QmsAssert.notNull(reqDTO,"参数为空");
            QmsResponseResult< Map<Long,List<ExportTaskResDTO>>> responseResult = taskRpcService.selectList(reqDTO);
            long startTime = System.currentTimeMillis();
            if (responseResult.getCode() == 999) {
                throw new QmsException(999,"导出条数超过限制");
            }
            if (responseResult.getCode() != 200) {
                throw new QmsParamException("查询失败");
            }
            //导出
            String destFileName = "入库质检任务";
            // CSV写对象
            BufferedWriter buffCvsWriter = null;
            CsvWriter csvWriter=null;
            ServletOutputStream  out=null;
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            try{
                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(destFileName,"UTF8") + "-" + DateUtil.getCurrTimestamp() + ".csv");
                  out = response.getOutputStream();
                buffCvsWriter = new BufferedWriter(new OutputStreamWriter(out, "GBK"));
                csvWriter = new CsvWriter(buffCvsWriter, ',');
                // 表头
                String[] headers = { "质检任务ID", "仓库", "质检环节", "采购单号", "采购单行号", "采购类型","下单量","到货量","抽检量","物理单位","计价单位","入库单号","入库单单行号","质检时间","供应商","质检商品","采销一级分类","采销二级分类","采销三级分类","生产日期","保质期(天)","质检员","操作(处理动作)","质检任务状态","质检结果","综合货损%","明细","备注"};
                csvWriter.writeRecord(headers,true);
                // 第一层for循环 按照主表来分类
                Map<Long,List<ExportTaskResDTO>>  resultMap= responseResult.getData();
                for(Map.Entry<Long,List<ExportTaskResDTO>> entry : resultMap.entrySet()){
                    ListIterator iterator=   entry.getValue().listIterator();
                    StringBuilder sb = new StringBuilder("");
                    ExportTaskResDTO one = null;
                    boolean hasDone = false;
                    int count  = 1;
                    while (iterator.hasNext()){
                        ExportTaskResDTO item = null;
                        if (!hasDone) {
                            one = (ExportTaskResDTO) iterator.next();
                            item = one;
                            hasDone = true;
                            /**
                             * 共有数据处理
                             */
                            // 任务ID
                            one.setIdString(one.getId().toString());
                            // 采购单号
                            one.setPurchaseOrderString(one.getPurchaseOrder().toString());
                            // 采购单行号
                            one.setPurchaseOrderItemString(one.getPurchaseOrderItem().toString());
                            // 入库单行号
                            one.setInstockOrderItemString(one.getInstockOrderItem().toString());
    
                            // 质检环节
                            one.setInspectionLinkName(InspectionLinkEnum.getName(one.getInspectionLink()));
                            // 任务状态
                            one.setTaskStatusName(TaskStatusEnum.getName(one.getTaskStatus()));
                            // 质检时间
                            if (one.getInspectionStartTime() != null) {
                                one.setInspectionTime(DateUtil.format(one.getInspectionStartTime(),DateUtil.YYYY_MM_DD));
                            }
                            // 质检结果
                            one.setInspectionResultName(ActResultEnum.getName(one.getInspectionResult()));
                            // 操作
                            one.setDealStatusName(Event.getName(one.getDealStatus()));
                            // 综合货损
                            one.setMultipleDamageValString(one.getMultipleDamageVal().toString()+"%");
                            // 采购类型
                            one.setTypeString(PurchaseTypeEnum.getNameByIndex(one.getType()));
    
                            // TODO: 2019/10/31  暂缺 入库类型,渠道
    
                        }else {
                            item = (ExportTaskResDTO) iterator.next();
                        }
                        /**
                         * 非共有数据 需要抽出到主表
                         */
                        // 生产日期 不一定是第一条数据,所以在下面判断
                        if (item.getArgType().equals(InspectionArgTypeEnum.DATE.getEnumValue()) && item.getInspectionItemsResult() !=null && !item.getInspectionItemsResult().isEmpty()) {
                            one.setProductionDate(DateUtil.format(new Date(Long.parseLong(item.getInspectionItemsResult())*1000),DateUtil.YYYY_MM_DD));
                        }
                        if (!item.getInspectionResult().equals(ActResultEnum.UN_INSPECTION.getEnumValue())){
                            sb.append(item.formatDetail(count));
                        }
                        count++;
                    }
                    one.setDetails(sb.toString());
                    String[] content = {
                            "	"+one.getIdString()+"	",
                            "	"+one.getWarehouseName()+"	",
                            "	"+one.getInspectionLinkName()+"	",
                            "	"+one.getPurchaseOrderString()+"	",
                            "	"+one.getPurchaseOrderItemString()+"	",
                            "	"+one.getTypeString()+"	",
                            "	"+one.getExpectNum()+"	",
                            "	"+one.getProductTotalNum()+"	",
                            "	"+one.getInspectionProductNum()+"	",
                            "	"+one.getPhysicalUnit()+"	",
                            "	"+one.getPriceUnit()+"	",
                            "	"+one.getInstockCode()+"	",
                            "	"+one.getInstockOrderItemString()+"	",
                            "	"+one.getInspectionTime()+"	",
                            "	"+one.getSupplierName()+"	",
                            "	"+one.getSkuName()+"	",
                            "	"+one.getPurchaseC1Name()+"	",
                            "	"+one.getPurchaseC2Name()+"	",
                            "	"+one.getPurchaseC3Name()+"	",
                            "	"+one.getProductionDate()+"	",
                            "	"+one.getShelfLife()+"	",
                            "	"+one.getInspectioner()+"	",
                            "	"+one.getDealStatusName()+"	",
                            "	"+one.getTaskStatusName()+"	",
                            "	"+one.getInspectionResultName()+"	",
                            "	"+one.getMultipleDamageValString()+"	",
                            "	"+one.getDetails()+"	",
                            "	"+one.getMark()+"	",
                    };
                    csvWriter.writeRecord(content,true);
                }
                if(null != csvWriter) {
                    csvWriter.close();
                }
            }catch (Exception  e){
                log.error(e.getMessage(), e);
                try {
                    response.getWriter().write("data exception");
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                return;
            }finally {
                if(null != csvWriter) {
                    csvWriter.close();
                }
                try {
                    if (null != buffCvsWriter) {
                        buffCvsWriter.close();
                    }
                    if (null != out) {
                        out.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            log.info("导出任务-明细处理+流处理花费时间="+(System.currentTimeMillis()-startTime)+"ms");
        }
    

      

  • 相关阅读:
    java_设计模式_观察者模式_Observer Pattern(2016-07-27)
    java_设计模式_策略模式_Strategy pattern(2016-07-15)
    一个简单的路由,用javascript实现
    sublime 编辑器配置和构建检查
    图文列表的图片居中
    不用css3的响应式img(按比例缩小图片)
    做前端的小笔记
    javascript创建跟随鼠标好玩的东西
    几十行代码就搞定俄罗斯方块
    来看看css3中的box-shadow
  • 原文地址:https://www.cnblogs.com/lvgg/p/11982983.html
Copyright © 2020-2023  润新知