| business/src/main/java/com/ycl/mapper/ProjectProcessMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| business/src/main/resources/mapper/ProjectProcessMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| start/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | 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 # 通用枚举处理器