sinake
3 天以前 e0bbd21f56757c35dc067eaa8bc67057b65fead4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -51,8 +51,6 @@
    @Autowired
    private ServerConfig serverConfig;
    @Value("${appcode}")
    private String  appcode;
    /**
     * 通用下载请求
@@ -131,120 +129,6 @@
        }
    }
    public String aliOCR(String base64) {
        String host = "https://mixedmulti.market.alicloudapi.com";
        String path = "/ocrservice/mixedMultiInvoice";
        String method = "POST";
        Map<String, String> headers = new HashMap<String, String>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求,定义相对应的Content-Type
        headers.put("Content-Type", "application/json; charset=UTF-8");
        Map<String, String> querys = new HashMap<String, String>();
        String bodys = "{\"img\":\""+base64+"\"}";
        try {
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            System.out.println(response.toString());
            //获取response的body
            String content=EntityUtils.toString(response.getEntity());
            JSONObject jsonContent=JSONObject.parseObject(content);
            JSONArray subMsgs=jsonContent.getJSONArray("subMsgs");
            List<Map<String,Object>> lists=new ArrayList<>();
            for(Object row: subMsgs){
                Map<String,Object> tempList=new HashMap<>();
                JSONObject rowObject=(JSONObject)row;
                tempList.put("发票分类",rowObject.getString("type"));
                JSONObject result=((JSONObject)rowObject.get("result")).getJSONObject("data");
                for(Map.Entry<String, Object> entry : result.entrySet()){
                    tempList.put(entry.getKey(),entry.getValue());
                }
                if(rowObject.getString("type").equals("银行承兑汇票")){
                    BigDecimal totalAmount= ChineseUtils.chineseToNumber(result.getString("票据金额大写"));
                    tempList.put("发票金额",totalAmount);
                }
                if(rowObject.getString("type").equals("火车票")){
                    tempList.put("发票金额",result.getString("票价"));
                }
                lists.add(tempList);
            }
            System.out.println(content);
            return JSON.toJSONString(lists);
        } catch (Exception e) {
            e.printStackTrace();
            return "{}";
        }
    }
    /**
     * 通用上传请求
     */
    @ApiOperation("testOCR")
    @PostMapping("/common/testOCR")
    public AjaxResult testOCR(@RequestBody String fileName) throws Exception {
        Path filePath= Paths.get(fileName);
        String base64= Base64.getEncoder().encodeToString( Files.readAllBytes(filePath));
        AjaxResult ajax = AjaxResult.success();
        ajax.put("OCRList", aliOCR(base64));
        return ajax;
    }
    /**
     * 通用上传请求
     */
    @PostMapping("/common/uploadOCR")
    public AjaxResult uploadOCR(MultipartFile file) throws Exception {
        try {
            // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();
            //判断文件是否存在
            String filename = file.getOriginalFilename().trim();
            String felinamePath = FileUploadUtils.extractFilename(file);
//            String pathFileName = FileUploadUtils.getPathFileName(filePath, s);
            for (int i=1;i<500;i++) {
                File file1 = new File(filePath + "/" + felinamePath);
                boolean exists = file1.exists();
                if (exists) {
                    int index = filename.lastIndexOf(".");
                    String startStr = filename.substring(0, index);
                    String endStr = filename.substring(index, filename.length());
                    String newFilename = startStr + "-" + i + endStr; // your new filename
                    felinamePath = DateUtils.datePath() + "/" + newFilename;
                    String contentType = file.getContentType();
                    byte[] bytes = file.getBytes();
                    file = new MockMultipartFile(newFilename, newFilename, contentType, bytes);
                }else{
                    break;
                }
            }
            // 上传并返回新文件名称
            String fileName = FileUploadUtils.upload(filePath, file);
            String url1 = serverConfig.getUrl();
            log.info("url1的值old :{}", url1);
            if (url1.contains("8032")) {
                //这里的8032不是tomcat的,所以要转成tomcat的
                url1 = url1.replace("8032", "8032/prod-api");
            }
            String base64= Base64.getEncoder().encodeToString(file.getBytes());
            log.info("url1的值new :{}", url1);
            String url = url1 + fileName;
            AjaxResult ajax = AjaxResult.success();
            ajax.put("fileName", fileName);
            ajax.put("url", url);
            ajax.put("OCRList", aliOCR(base64));
            return ajax;
        } catch (Exception e) {
            return AjaxResult.error(e.getMessage());
        }
    }
//    private static void parseUTF(int[] bits) {
//        int index = 0;//这个指针指向每一行循环时列下标的位置,下一行开始时重新置位0