From 83942be780d0560baa75c15e1124cc2bc997510b Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期二, 20 十月 2026 15:07:40 +0800
Subject: [PATCH] 捐献器官移植新增,修改,删除新新数据同步捐献器官费用表明细

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java |  221 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 204 insertions(+), 17 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index c4ac6c3..e6364fc 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -1,27 +1,43 @@
 package com.ruoyi.web.controller.common;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.ChineseUtils;
+import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.framework.config.ServerConfig;
+import com.ruoyi.web.controller.tool.HttpUtils;
+import io.swagger.annotations.ApiOperation;
 import org.apache.catalina.connector.Connector;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.coyote.AbstractProtocol;
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.management.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.lang.management.ManagementFactory;
+import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
 
 /**
  * 閫氱敤璇锋眰澶勭悊
@@ -35,6 +51,8 @@
     @Autowired
     private ServerConfig serverConfig;
 
+    @Value("${appcode}")
+    private String  appcode;
 
     /**
      * 閫氱敤涓嬭浇璇锋眰
@@ -68,17 +86,41 @@
      */
     @PostMapping("/common/upload")
     public AjaxResult uploadFile(MultipartFile file) throws Exception {
-        int tomcatPort = getTomcatPort();
+
         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);
-
-            //鍥犱负serverConfig.getUrl()鎷垮埌鐨勭鍙e彿锛屼笉鏄痶omcat鐨勭鍙e彿锛岃繖閲岄渶瑕佽浆涓�涓�
             String url1 = serverConfig.getUrl();
-            url1 = url1.substring(0, url1.lastIndexOf(":")) + ":" + tomcatPort;
-            log.info("url1鐨勫��:{}  ,port鐨勫��:{}", url1, tomcatPort);
+            log.info("url1鐨勫�紀ld :{}", url1);
+            if (url1.contains("8032")) {
+                //杩欓噷鐨�8032涓嶆槸tomcat鐨勶紝鎵�浠ヨ杞垚tomcat鐨�
+                url1 = url1.replace("8032", "8032/prod-api");
+            }
+            log.info("url1鐨勫�糿ew :{}", url1);
             String url = url1 + fileName;
             AjaxResult ajax = AjaxResult.success();
             ajax.put("fileName", fileName);
@@ -89,16 +131,141 @@
         }
     }
 
-    private static int getTomcatPort() {
-        int port = 0;
-        Tomcat tomcat = new Tomcat();
-        Connector connector = tomcat.getConnector();
-        if (connector != null) {
-            AbstractProtocol protocol = (AbstractProtocol) connector.getProtocolHandler();
-            port = protocol.getPort();
+    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涓殑鏍煎紡(涓棿鏄嫳鏂囩┖鏍�)涓篈uthorization: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鐨刡ody
+            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 "{}";
         }
-        return port;
     }
+
+    /**
+     * 閫氱敤涓婁紶璇锋眰
+     */
+    @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鐨勫�紀ld :{}", 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鐨勫�糿ew :{}", 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
+//        int count = 0;
+//        ;//杩欎釜鍙橀噺璁板綍姣忎釜UTF-8瀛楃鐨勫瓧鑺傛暟锛岃嚦灏�1瀛楄妭
+//        for (int j = ; j < bits.length; ) {
+//            //寰幆姣忎竴琛屾暟缁勬暟鎹�-浠庡ご鍘昏--鍏堣杩欎釜瀛楃鏄嚑涓瓧鑺傜粍鎴愮殑
+//            // 鐒跺悗鎸塽tf-8鐨勭紪鐮佹牸寮忕粍鍚堝瓧绗︿覆锛岃浆鎹负瀛楃鍗冲彲
+//            if (bits[j] == 1) {
+//                count++;
+//                index++;
+//            } else {
+//                index++;//杩欎竴浣嶆槸1鍚庨潰璺熺殑閭d竴涓猳
+//                //涓嶄负1锛屽垯璇存槑宸茬粡瑙f瀽瀹屽瓧鑺傛暟锛宑ount閲岄潰瀛樼殑濡傛灉鏄疈琛ㄧず鏄崟瀛楄妭鏁版嵁
+//                //濡傛灉涓嶆槸o鍒欒〃绀烘槸澶氬瓧鑺傛暟鎹�
+//                String str = "";
+//            }
+//        }
+//    }
+//
+//}
 
     /**
      * 鏈湴璧勬簮閫氱敤涓嬭浇
@@ -122,4 +289,24 @@
             log.error("涓嬭浇鏂囦欢澶辫触", e);
         }
     }
-}
+
+
+    public int getTomcatPort() {
+        MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
+        try {
+            QueryExp protocol = Query.match(Query.attr("protocol"), Query.value("HTTP/1.1"));
+            ObjectName name = new ObjectName("*:type=Connector,*");
+            Set<ObjectName> objectNames = beanServer.queryNames(name, protocol);
+            for (ObjectName objectName : objectNames) {
+                String catalina = objectName.getDomain();
+                if ("Catalina".equals(catalina)) {
+                    return Integer.parseInt(objectName.getKeyProperty("port"));
+                }
+            }
+        } catch (MalformedObjectNameException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.3