From d7a0b3b0935a582aa24de76b2901f3f4ee97d1a0 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 17 四月 2026 16:18:47 +0800
Subject: [PATCH] 兼容postgresql以及处理文件ip问题

---
 business/src/main/resources/mapper/ProjectProcessMapper.xml                |    2 
 business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java |   13 +++++-
 business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java       |   46 ++++++++++++++++++++---
 start/src/main/resources/application.yml                                   |    1 
 business/src/main/java/com/ycl/mapper/ProjectProcessMapper.java            |    3 +
 5 files changed, 55 insertions(+), 10 deletions(-)

diff --git a/business/src/main/java/com/ycl/mapper/ProjectProcessMapper.java b/business/src/main/java/com/ycl/mapper/ProjectProcessMapper.java
index 14bf19d..9b8ff2c 100644
--- a/business/src/main/java/com/ycl/mapper/ProjectProcessMapper.java
+++ b/business/src/main/java/com/ycl/mapper/ProjectProcessMapper.java
@@ -10,6 +10,7 @@
 import com.ycl.domain.vo.ProjectProcessVO;
 import com.ycl.domain.form.ProjectProcessForm;
 import com.ycl.domain.query.ProjectProcessQuery;
+import java.io.InputStream;
 import java.util.List;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -82,7 +83,7 @@
      * @param name_
      * @param objectToBytes
      */
-    void insertByteArray(@Param("id_") String bytearray_id_, @Param("rev_") int rev_, @Param("name_") String name_, @Param("bytes_") Object objectToBytes);
+    void insertByteArray(@Param("id_") String bytearray_id_, @Param("rev_") int rev_, @Param("name_") String name_, @Param("bytes_") InputStream objectToBytes);
 
 
     /**
diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index 11abb1c..e552ab1 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -288,11 +288,11 @@
                     // 鍏跺畠绫诲瀷鐨勮〃鍗曟暟鎹細濡傚浘鐗囥�佹枃浠跺崟鐙瓨琛ㄧ殑銆傚巻鍙层�佽繍琛屼腑鐨勬祦绋嬮渶鍚勫瓨涓�浠�
                     v.setVAR_TYPE_("serializable");
                     v.setBYTEARRAY_ID_(new StrongUuidGenerator().getNextId());
-                    projectProcessMapper.insertByteArray(v.getBYTEARRAY_ID_(), 1, "hist.var-" + key, newV.get(key));
+                    projectProcessMapper.insertByteArray(v.getBYTEARRAY_ID_(), 1, "hist.var-" + key, objectToInputStream(newV.get(key)));
 
                     run.setVAR_TYPE_("serializable");
                     run.setBYTEARRAY_ID_(new StrongUuidGenerator().getNextId());
-                    projectProcessMapper.insertByteArray(run.getBYTEARRAY_ID_(), 1, "var-" + key, newV.get(key));
+                    projectProcessMapper.insertByteArray(run.getBYTEARRAY_ID_(), 1, "var-" + key, objectToInputStream(newV.get(key)));
                 }
 
                 projectProcessMapper.insertHisFlowableVar(v);
@@ -324,6 +324,12 @@
             oos.flush();
             return bos.toByteArray(); // 杩斿洖瀛楄妭鏁扮粍
         }
+    }
+
+    // 灏嗗璞¤浆鎹负 InputStream锛岄�傞厤 BLOB 鍐欏叆
+    public static InputStream objectToInputStream(Object obj) throws IOException {
+        byte[] bytes = objectToBytes(obj);
+        return Objects.isNull(bytes) ? null : new ByteArrayInputStream(bytes);
     }
 
     /**
@@ -1848,13 +1854,10 @@
                         if (disableInput) {
                             options.put("disabled", true);
                         }
-                        // 澶勭悊鏂囦欢涓婁紶ip闂
-                        if ("file-upload".equals(oldField.get("type"))) {
-                            options.put("uploadURL", String.format("http://%s:10076/common/upload", this.targetIp));
-                        }
                     }
 
                     formJson.put(ProcessConstants.WIDGET_LIST, oldFields);
+                    normalizeUploadUrl(formJson);
                     newP.put(ProcessConstants.TASK_FORM_KEY, formJson);
                     newP.remove(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY);
                     // 澶勭悊宸茬粡涓婁紶鐨勬枃浠剁殑ip鍦板潃
@@ -1885,11 +1888,42 @@
                     formDetailVO.setFormJsonObj(newP);
                 }
 
+            } else {
+                // 褰撳墠鑺傜偣涓�鑸娇鐢ㄦā鏉垮垵濮嬪寲鏁版嵁锛岀粺涓�鍦ㄨ繖閲屾敼鍐欎笂浼犲湴鍧�锛岄伩鍏嶆棫IP娈嬬暀
+                Map<String, Object> formObj = formDetailVO.getFormJsonObj();
+                if (Objects.nonNull(formObj) && Objects.nonNull(formObj.get(ProcessConstants.TASK_FORM_KEY))) {
+                    JSONObject formJson = JSONObject.parseObject(JSON.toJSONString(formObj.get(ProcessConstants.TASK_FORM_KEY)));
+                    normalizeUploadUrl(formJson);
+                    formObj.put(ProcessConstants.TASK_FORM_KEY, formJson);
+                    formDetailVO.setFormJsonObj(formObj);
+                }
             }
         }
         return beforeNodes;
     }
 
+    private void normalizeUploadUrl(JSONObject formJson) {
+        if (Objects.isNull(formJson)) {
+            return;
+        }
+        List<JSONObject> fields = JSON.parseObject(JSON.toJSONString(formJson.get(ProcessConstants.WIDGET_LIST)), new TypeReference<List<JSONObject>>() {
+        });
+        if (CollectionUtils.isEmpty(fields)) {
+            return;
+        }
+        for (JSONObject field : fields) {
+            if (!"file-upload".equals(field.get("type"))) {
+                continue;
+            }
+            JSONObject options = field.getJSONObject("options");
+            if (Objects.isNull(options)) {
+                continue;
+            }
+            options.put("uploadURL", String.format("http://%s:10076/common/upload", this.targetIp));
+        }
+        formJson.put(ProcessConstants.WIDGET_LIST, fields);
+    }
+
 
     /**
      * 娴佺▼鑺傜偣淇℃伅
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
index 4ac381a..97a1282 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -63,6 +63,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -3024,11 +3025,19 @@
                 // 鍏跺畠绫诲瀷鐨勮〃鍗曟暟鎹細濡傚浘鐗囥�佹枃浠跺崟鐙瓨琛ㄧ殑銆傚巻鍙层�佽繍琛屼腑鐨勬祦绋嬮渶鍚勫瓨涓�浠�
                 v.setVAR_TYPE_("serializable");
                 v.setBYTEARRAY_ID_(new StrongUuidGenerator().getNextId());
-                projectProcessMapper.insertByteArray(v.getBYTEARRAY_ID_(), 1, "hist.var-" + key, newV.get(key));
+                try {
+                    projectProcessMapper.insertByteArray(v.getBYTEARRAY_ID_(), 1, "hist.var-" + key, FlowTaskServiceImpl.objectToInputStream(newV.get(key)));
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
 
                 run.setVAR_TYPE_("serializable");
                 run.setBYTEARRAY_ID_(new StrongUuidGenerator().getNextId());
-                projectProcessMapper.insertByteArray(run.getBYTEARRAY_ID_(), 1, "var-" + key, newV.get(key));
+                try {
+                    projectProcessMapper.insertByteArray(run.getBYTEARRAY_ID_(), 1, "var-" + key, FlowTaskServiceImpl.objectToInputStream(newV.get(key)));
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
             }
 
             projectProcessMapper.insertHisFlowableVar(v);
diff --git a/business/src/main/resources/mapper/ProjectProcessMapper.xml b/business/src/main/resources/mapper/ProjectProcessMapper.xml
index a7079b8..a52a609 100644
--- a/business/src/main/resources/mapper/ProjectProcessMapper.xml
+++ b/business/src/main/resources/mapper/ProjectProcessMapper.xml
@@ -214,7 +214,7 @@
     </insert>
 
     <insert id="insertByteArray">
-        insert into act_ge_bytearray(ID_, REV_, NAME_, BYTES_) values (#{id_}, #{rev_}, #{name_}, #{bytes_, jdbcType=BLOB})
+        insert into act_ge_bytearray(ID_, REV_, NAME_, BYTES_) values (#{id_}, #{rev_}, #{name_}, #{bytes_, javaType=java.io.InputStream, jdbcType=BLOB})
     </insert>
 
     <delete id="deleteByteArray" parameterType="string">
diff --git a/start/src/main/resources/application.yml b/start/src/main/resources/application.yml
index b8b0188..38029d3 100644
--- a/start/src/main/resources/application.yml
+++ b/start/src/main/resources/application.yml
@@ -4,6 +4,7 @@
   mapper-locations: classpath*:mapper/**/*.xml
   # 瀹炰綋鎵弿锛屽涓猵ackage鐢ㄩ�楀彿鎴栬�呭垎鍙峰垎闅�
   typeAliasesPackage: com.ycl.**.domain
+  type-handlers-package: com.ycl.mybatis.typehandler
   configuration:
     shrink-whitespaces-in-sql: true #浠嶴QL涓垹闄ゅ浣欑殑绌烘牸瀛楃
     default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler # 閫氱敤鏋氫妇澶勭悊鍣�

--
Gitblit v1.8.0