peng
4 小时以前 d7a0b3b0935a582aa24de76b2901f3f4ee97d1a0
兼容postgresql以及处理文件ip问题
5个文件已修改
65 ■■■■ 已修改文件
business/src/main/java/com/ycl/mapper/ProjectProcessMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/ProjectProcessMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
start/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    /**
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);
    }
    /**
     * 流程节点信息
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);
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">
start/src/main/resources/application.yml
@@ -4,6 +4,7 @@
  mapper-locations: classpath*:mapper/**/*.xml
  # 实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.ycl.**.domain
  type-handlers-package: com.ycl.mybatis.typehandler
  configuration:
    shrink-whitespaces-in-sql: true #从SQL中删除多余的空格字符
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler # 通用枚举处理器