• springboot 模拟上次文件: MultipartFile + json餐食


    首先来看,接口及参数

    postman模拟上传

    需求:将生成好的,远程excel附件,以及一些常规数据通过接口,传递过去。

    代码部分:

    1.将远程excel附件,转化为MultipartFile

    public class FileToMultipartFileUtils {
    
        /**
         * 远程file文件转MultipartFile
         * @param fileContentType
         * @param filePath
         * @return
         */
        public static MultipartFile getMultipartFile(String fileContentType, String filePath) {
            MultipartFile multipartFile = null;
            try {
                //文件转MultipartFile
                log.info("文件转MultipartFile, fileContentType:{}, filePath:{}",fileContentType, filePath);
    
                URL url = new URL(filePath);
                DataSource dataSource = new URLDataSource(url);
                DataHandler dataHandler = new DataHandler(dataSource);
                DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",
                        MediaType.ALL_VALUE, true, dataHandler.getName());
                IOUtils.copy(dataHandler.getInputStream(), fileItem.getOutputStream());
                multipartFile = new CommonsMultipartFile(fileItem);
            }catch (Exception e){
                e.printStackTrace();
                log.error("文件转MultipartFile失败-err:{}",e.getMessage());
            }
            return multipartFile;
        }
    
    
    
    }
    

      

    2.主程序部分

    @Override
        public void postMailByMealOrder() {
            Calendar rightNow = Calendar.getInstance();
            int hour = rightNow.get(Calendar.HOUR_OF_DAY);
            String startFltDate = null;
            String endFltDate = null;
            String currentDate = ComDateUtils.dateToStr(ComDateUtils.plusHours(new Date(), 24), ComDateUtils.YYYY_MM_DD);
            if(hour <= 6){
                //06:00:处理次日06-14(含)
                startFltDate = currentDate + " 06:00:00";
                endFltDate =  currentDate + " 14:00:00";
            }else if(hour <= 14){
                //14:00:处理次日14-22(含)
                startFltDate = currentDate + " 14:00:00";
                endFltDate =  currentDate + " 22:00:00";
            }else if(hour <= 22){
                //22:00:处理次日22-第三日06(含)
                startFltDate =  currentDate + " 22:00:00";
                String lastDate = ComDateUtils.dateToStr(ComDateUtils.plusDays(new Date(), 2), ComDateUtils.YYYY_MM_DD);
                endFltDate =  lastDate + " 06:00:00";
            }else{
                return;
            }
            doOrderMealSummary(startFltDate, endFltDate);
    
        }
        private void doOrderMealSummary(String startFltDate, String endFltDate){
    
            if(StringUtils.isEmpty(startFltDate) || StringUtils.isEmpty(endFltDate))
                return;
            //参数
            MealSummaryQueryDTO queryDTO = new MealSummaryQueryDTO();
            queryDTO.setFltDateStart(startFltDate);
            queryDTO.setFltDateEnd(endFltDate);
            //数据查询
            List<ExportMealSummaryBO> summaryBOS = orderMealSummaryService.adminExportTask(queryDTO);
            if(summaryBOS==null || summaryBOS.size() < 1){
                log.error("餐食订单汇总表-数据统计 is empty.");
                return;
            }
            List<ExportMealOrderSummaryBO> orderSummaryBOS =  orderMealInfoService.adminExportBySummaryTask(queryDTO);
            //创建excel,并生成远程excel
            ExcelMealSummaryUtil util = new ExcelMealSummaryUtil<>();
            Workbook wb = new SXSSFWorkbook(500);
            util.exportDataToCell(wb, ExportMealSummaryBO.class, summaryBOS,0,"餐食订单汇总表");
            util.exportDataToCell(wb, ExportMealOrderSummaryBO.class,  orderSummaryBOS,1,"餐食订单明细表");
            AjaxResult result =  util.exportExcelToFile(wb, "meal");
            String filePath = riakPubUrl + "/" + (String) result.get("msg");
            //sendMailService(filePath, null);
            //发送邮件
            //String filePath = "http://192.168.203.99:8098/buckets/joy-air/keys/meal_62ebfb4f-d69d-47cd-ac15-c6904aba977b.xlsx";
            sendMailService(filePath, null);
        }
    

      

    上传附件,部分

    private boolean sendMailService(String filePath, List<ExportMealSummaryBO> summaryBOS){
    
            MultipartFile multipartFile = null;
            try{
                multipartFile =  FileToMultipartFileUtils.getMultipartFile("application/pdf",   filePath);
            }catch (Exception e){
                e.printStackTrace();
                log.error("文件转MultipartFile:err:{}", e.getMessage());
                return false;
            }
    
            List<MailMealOrder> mailMealOrders = new ArrayList<>();
            MailMealOrder mailMealOrder = new MailMealOrder();
            mailMealOrder.setFlightNo("JR1111");
            mailMealOrder.setFrom("天津");
            mailMealOrder.setTo("淮安");
            mailMealOrder.setFlightDate("2022-01-22");
            mailMealOrder.setDepartureTime("08:00:00");
    
            List<MealMealInfo> mealMealInfos = new ArrayList<>();
            MealMealInfo mealMealInfo = new MealMealInfo();
            mealMealInfo.setName("香菇滑鸡");
            mealMealInfo.setCount(10);
            mealMealInfos.add(mealMealInfo);
            mailMealOrder.setMealList(mealMealInfos);
            mailMealOrders.add(mailMealOrder);
    
            Map<String, Object> itemParams = new HashMap<>();
            itemParams.put("companyName", "");
            String[] TO_MAILS = {"muyang@variflight.com"};
            itemParams.put("to",  TO_MAILS);
            itemParams.put("cc", TO_MAILS);
            itemParams.put("type", 1);
            itemParams.put("orderList", mailMealOrders);
            String param= JSON.toJSONString(itemParams);
    
            Map<String, String> resultMap = new HashMap<String, String>();
            CloseableHttpClient httpClient = HttpClients.createDefault();
            String result = "";
            try {
                HttpPost httpPost = new HttpPost(mailService + "/variflight/sendMail/summarize");
                MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                //	文件传输http请求头(multipart/form-data)
                builder.addBinaryBody("file", multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA,
                       multipartFile.getOriginalFilename());// 文件流
                //	字节传输http请求头(application/json)
                builder.addTextBody("summarize", param, ContentType.APPLICATION_JSON);//字节流
    
                HttpEntity entity = builder.build();
                httpPost.setEntity(entity);
                HttpResponse response = httpClient.execute(httpPost);
                // 执行提交
                HttpEntity responseEntity = response.getEntity();
                if (responseEntity != null) {
                    // 将响应内容转换为字符串
                    result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                }
                JSONObject jsonObj = JSONObject.parseObject(result);
                if ( jsonObj.getString("code").equals("0") ){
                    return true;
                }else{
                    return false;
                }
            } catch (Exception e) {
                e.printStackTrace();
                log.error("调用发送邮件接口出错: message:{}", e.getMessage());
            }finally {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return false;
        }
    

      

  • 相关阅读:
    分页系统
    ORM-数据处理
    Django的用法
    登录cookie写法
    MySQL数据库的安装创建
    前端弹框编写
    ADB常用指令
    Appium环境配置
    Jmeter中传递cookie值
    Jmeter从文件中读取参数值
  • 原文地址:https://www.cnblogs.com/achengmu/p/15827467.html
Copyright © 2020-2023  润新知