Răsfoiți Sursa

动态增加sop表

wangliang 1 an în urmă
părinte
comite
5600933e61

+ 5 - 4
sop-business/src/main/java/com/qmth/sop/business/activiti/listener/ProcessEventListener.java

@@ -233,12 +233,13 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                                         String data = list.get(list.size() - 1);
                                         List<FlowFormWidgetResult> listData = JSONArray.parseArray(data, FlowFormWidgetResult.class);
                                         for (FlowFormWidgetResult f : listData) {
-                                            f.setFormId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormId());
-                                            f.setFormName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + f.getFormName());
+                                            String[] strs = flowTaskResult.getTaskKey().split("_");
+                                            f.setFormId(f.getFormId() + SystemConstant.FLOW_FORM_ID_UNDERLINE + Integer.parseInt(strs[strs.length - 1]));
+                                            f.setFormName(f.getFormName() + SystemConstant.FLOW_FORM_ID_UNDERLINE + Integer.parseInt(strs[strs.length - 1]));
                                             if (!CollectionUtils.isEmpty(f.getTablePropList())) {
                                                 for (FlowTablePropResult t : f.getTablePropList()) {
-                                                    t.setTdId(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdId());
-                                                    t.setTdName(flowTaskResult.getTaskKey() + SystemConstant.FLOW_FORM_ID_SPACE + t.getWidgetId() + SystemConstant.FLOW_FORM_ID_SPACE + t.getTdName());
+                                                    t.setTdId(t.getWidgetId() + SystemConstant.FLOW_FORM_ID_UNDERLINE + Integer.parseInt(strs[strs.length - 1]) + t.getTdId() + SystemConstant.FLOW_FORM_ID_UNDERLINE + Integer.parseInt(strs[strs.length - 1]));
+                                                    t.setTdName(t.getWidgetId() + SystemConstant.FLOW_FORM_ID_UNDERLINE + Integer.parseInt(strs[strs.length - 1]) + t.getTdName() + SystemConstant.FLOW_FORM_ID_UNDERLINE + Integer.parseInt(strs[strs.length - 1]));
                                                 }
                                             }
                                         }

+ 1 - 1
sop-business/src/main/java/com/qmth/sop/business/entity/TDFormWidget.java

@@ -30,7 +30,7 @@ public class TDFormWidget implements Serializable {
     @ApiModelProperty(value = "主键")
     private Long id;
 
-    @ApiModelProperty(value = "编码,TEXT:文本,TEXTAREA:文本域,编码,TEXT:文本,TEXTAREA:文本域,SINGLE_SELECT:单选下拉框,MULTIPLE_SELECT:多选下拉框,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格")
+    @ApiModelProperty(value = "编码,TEXT:文本,NUMBER:数字文本,TEXTAREA:文本域,编码,TEXT:文本,TEXTAREA:文本域,SINGLE_SELECT:单选下拉框,MULTIPLE_SELECT:多选下拉框,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格")
     private WidgetCodeEnum code;
 
     @ApiModelProperty(value = "类型,FORM:表单,TABLE:表格,OTHER:其它")

+ 1 - 1
sop-business/src/main/java/com/qmth/sop/business/entity/TDFormWidgetMetadata.java

@@ -29,7 +29,7 @@ public class TDFormWidgetMetadata implements Serializable {
     @ApiModelProperty(value = "版本号")
     private Integer version;
 
-    @ApiModelProperty(value = "编码,TEXT:文本,TEXTAREA:文本域,编码,TEXT:文本,TEXTAREA:文本域,SINGLE_SELECT:单选下拉框,MULTIPLE_SELECT:多选下拉框,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格")
+    @ApiModelProperty(value = "编码,TEXT:文本,NUMBER:数字文本,TEXTAREA:文本域,编码,TEXT:文本,TEXTAREA:文本域,SINGLE_SELECT:单选下拉框,MULTIPLE_SELECT:多选下拉框,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格")
     private WidgetCodeEnum code;
 
     @ApiModelProperty(value = "字段id")

+ 129 - 0
sop-business/src/main/java/com/qmth/sop/business/exec/MySQLExec.java

@@ -0,0 +1,129 @@
+package com.qmth.sop.business.exec;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.sop.business.entity.TDFormWidgetMetadata;
+import com.qmth.sop.business.service.TDFormWidgetMetadataService;
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
+import com.qmth.sop.common.enums.TFCustomTypeEnum;
+import com.qmth.sop.common.enums.WidgetCodeEnum;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.StringJoiner;
+
+/**
+ * @Description: MySQL数据库执行语句
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/11/14
+ */
+@Component
+public class MySQLExec {
+    private final static Logger log = LoggerFactory.getLogger(MySQLExec.class);
+
+    @Value("${db.host}")
+    String host;
+
+    @Value("${db.port}")
+    String port;
+
+    @Value("${db.name}")
+    String databaseName;
+
+    @Value("${db.username}")
+    String username;
+
+    @Value("${db.password}")
+    String password;
+
+    @Resource
+    TDFormWidgetMetadataService tdFormWidgetMetadataService;
+
+    /**
+     * 执行动态创建sop字段表
+     *
+     * @param fileName
+     * @param type
+     * @throws Exception
+     */
+    public void execCreateSopDynamicTable(String fileName, TFCustomTypeEnum type) throws Exception {
+        Optional.ofNullable(fileName).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("文件名不能为空"));
+        Optional.ofNullable(type).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程类型不能为空"));
+
+        InputStream inputStream = MySQLExec.class.getClassLoader().getResourceAsStream(fileName);
+        Optional.ofNullable(inputStream).orElseThrow(() -> ExceptionResultEnum.ERROR.exception(fileName + "未找到"));
+        File file = SystemConstant.getFileTempVar(".sql");
+        FileUtils.copyInputStreamToFile(inputStream, file);
+
+        ByteArrayOutputStream ou = new ByteArrayOutputStream();
+        IOUtils.copy(new FileInputStream(file), ou);
+        String string = new String(ou.toByteArray(), StandardCharsets.UTF_8);
+        if (Objects.nonNull(string)) {
+            List<TDFormWidgetMetadata> tdFormWidgetMetadataList = tdFormWidgetMetadataService.list(new QueryWrapper<TDFormWidgetMetadata>().lambda().eq(TDFormWidgetMetadata::getType, type));
+            StringJoiner stringJoiner = new StringJoiner(",\r\n");
+            for (TDFormWidgetMetadata t : tdFormWidgetMetadataList) {
+                if (t.getCode() == WidgetCodeEnum.TABLE) {
+                    stringJoiner.add("`" + t.getFieldId() + "`" + " mediumtext CHARACTER SET utf8mb4 COMMENT '" + t.getFieldTitle() + "'");
+                } else if (t.getCode() == WidgetCodeEnum.TEXTAREA) {
+                    stringJoiner.add("`" + t.getFieldId() + "`" + " varchar(500) NOT NULL COMMENT '" + t.getFieldTitle() + "'");
+                } else if (t.getCode() == WidgetCodeEnum.NUMBER) {
+                    stringJoiner.add("`" + t.getFieldId() + "`" + " int DEFAULT NULL COMMENT '" + t.getFieldTitle() + "'");
+                } else {
+                    stringJoiner.add("`" + t.getFieldId() + "`" + " varchar(100) NOT NULL COMMENT '" + t.getFieldTitle() + "'");
+                }
+            }
+            string = string.replaceAll("\\#\\{dynamicTable\\}", "`t_b_sop_dynamic_" + type.getTableName() + "`");
+            string = string.replaceAll("\\#\\{dynamicFields\\}", stringJoiner.toString());
+        }
+        IOUtils.write(string.getBytes(StandardCharsets.UTF_8), new FileOutputStream(file));
+
+        String cmdarray[] = {"mysql -h" + this.host + " -P" + this.port + " -u" + this.username + " -p" + this.password + " " + this.databaseName, "source " + file.getPath()};
+        Runtime runtime = Runtime.getRuntime();
+        Process process = null;
+        try {
+            process = runtime.exec(cmdarray[0]);//cmd之后执行数组的第一个条件进入数据库
+            //执行了第一条命令以后已经登录到mysql了
+            Process finalProcess = process;
+            new Thread(() -> {
+                OutputStream os = finalProcess.getOutputStream();
+                OutputStreamWriter writer = new OutputStreamWriter(os);
+                try {
+                    IOUtils.write(cmdarray[1], writer);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } finally {
+                    try {
+                        if (Objects.nonNull(writer)) {
+                            writer.close();
+                        }
+                        if (Objects.nonNull(os)) {
+                            os.close();
+                        }
+                    } catch (Exception e) {
+                        log.error(SystemConstant.LOG_ERROR, e);
+                    }
+                }
+            }).start();
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        } finally {
+            if (process.waitFor() == 0 && Objects.nonNull(file)) {
+                if (Objects.nonNull(file)) {
+                    file.delete();
+                }
+            }
+        }
+    }
+}

+ 7 - 0
sop-business/src/main/resources/db/dynamic_create_sop_table.sql

@@ -0,0 +1,7 @@
+SET NAMES utf8mb4;
+
+DROP TABLE IF EXISTS #{dynamicTable};
+CREATE TABLE #{dynamicTable} (
+         `type` varchar(20) NOT NULL COMMENT '流程类型,OFFICE_SOP_FLOW:教务处SOP,CLOUD_MARK_SOP_FLOW:研究生SOP,DING_EXCEPTION_FLOW:考勤异常审核流程,PROJECT_EXCHANGE_FLOW:项目计划变更流程,QUALITY_PROBLEM_FLOW:质量问题反馈流程',
+         #{dynamicFields}
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sop动态字段表';

+ 7 - 0
sop-business/src/main/resources/db/log/wangliang_update_log.sql

@@ -945,3 +945,10 @@ CREATE TABLE t_b_sop_info_detail
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sop明细表';
 
 ALTER TABLE t_d_form_widget_metadata DROP COLUMN field_value;
+
+--2023.9.1update
+ALTER TABLE t_d_form_widget CHANGE COLUMN code code VARCHAR(20)
+    COMMENT '编码,TEXT:文本,NUMBER:数字文本,TEXTAREA:文本域,SINGLE_SELECT:单选下拉框,MULTIPLE_SELECT:多选下拉框,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格' NULL;
+
+ALTER TABLE t_d_form_widget_metadata CHANGE COLUMN code code VARCHAR(20)
+    COMMENT '编码,TEXT:文本,NUMBER:数字文本,TEXTAREA:文本域,编码,TEXT:文本,TEXTAREA:文本域,SINGLE_SELECT:单选下拉框,MULTIPLE_SELECT:多选下拉框,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格,RADIO:单选框,CHECKBOX:复选框,DATE:日期,BUTTON:按钮,IMG:图片,VIDEO:视频,AUDIO:音频,FILE:文件,POP_SELECT:弹出选择框,LABEL:标签,TABLE:表格,SIGN:签名,CASCADE_ADDRESS:城市选择控件,OTHER:其它,FORM_GROUP_TITLE:带虚线分割线的标题,ONLE_TITLE:普通标题,独占一行,RADIO_WITH_INPUT:带1个输入框的单选框,DEVICE_IN_TABLE:设备入库表格,DEVICE_OUT_TABLE:设备出库表格' NOT NULL;

+ 2 - 0
sop-common/src/main/java/com/qmth/sop/common/contant/SystemConstant.java

@@ -98,6 +98,7 @@ public class SystemConstant {
     public static final String ERROR_METHOD = "method";
     public static final String LIST_JOIN_SPLIT = ",";
     public static final String JOB_DATA = "jobData";
+    public static final String SOP_DYNAMIC_TABLE_FILE_NAME = "db/dynamic_create_sop_table.sql";
 
     /**
      * 表达式
@@ -235,6 +236,7 @@ public class SystemConstant {
     public static final String ID = "id";
     public static final String FORM_KEY = "formKey";
     public static final String FLOW_FORM_ID_SPACE = "|";
+    public static final String FLOW_FORM_ID_UNDERLINE = "_";
     public static final String FORM_PROPERTIES = "formProperties";
     public static final String FLOW_DEPLOYMENT_ID = "flowDeploymentId";
     public static final String APPROVE = "approve";//流程审核变量

+ 13 - 6
sop-common/src/main/java/com/qmth/sop/common/enums/TFCustomTypeEnum.java

@@ -9,15 +9,15 @@ package com.qmth.sop.common.enums;
  */
 public enum TFCustomTypeEnum {
 
-    OFFICE_SOP_FLOW("教务处SOP", "officeSopFlow", "officeSopFlow.zip","SOP_O"),
+    OFFICE_SOP_FLOW("教务处SOP", "officeSopFlow", "officeSopFlow.zip", "SOP_O", "office"),
 
-    CLOUD_MARK_SOP_FLOW("研究生SOP", "cloudMarkSopFlow", "cloudMarkSopFlow.zip","SOP_C"),
+    CLOUD_MARK_SOP_FLOW("研究生SOP", "cloudMarkSopFlow", "cloudMarkSopFlow.zip", "SOP_C", "cloud_mark"),
 
-    DING_EXCEPTION_FLOW("考勤异常审核流程", "dingExceptionFlow", "dingExceptionFlow.zip","DE"),
+    DING_EXCEPTION_FLOW("考勤异常审核流程", "dingExceptionFlow", "dingExceptionFlow.zip", "DE", null),
 
-    PROJECT_EXCHANGE_FLOW("项目计划变更流程", "projectExchangeFlow", "projectExchangeFlow.zip","PE"),
+    PROJECT_EXCHANGE_FLOW("项目计划变更流程", "projectExchangeFlow", "projectExchangeFlow.zip", "PE", null),
 
-    QUALITY_PROBLEM_FLOW("质量问题反馈流程", "qualityProblemFlow", "qualityProblemFlow.zip","QF");
+    QUALITY_PROBLEM_FLOW("质量问题反馈流程", "qualityProblemFlow", "qualityProblemFlow.zip", "QF", null);
 
     private String title;
 
@@ -27,11 +27,18 @@ public enum TFCustomTypeEnum {
 
     private String mark;
 
-    private TFCustomTypeEnum(String title, String code, String fileName, String mark) {
+    private String tableName;
+
+    private TFCustomTypeEnum(String title, String code, String fileName, String mark, String tableName) {
         this.title = title;
         this.code = code;
         this.fileName = fileName;
         this.mark = mark;
+        this.tableName = tableName;
+    }
+
+    public String getTableName() {
+        return tableName;
     }
 
     public String getTitle() {

+ 2 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/WidgetCodeEnum.java

@@ -11,6 +11,8 @@ public enum WidgetCodeEnum {
 
     TEXT("文本"),
 
+    NUMBER("数字文本"),
+
     TEXTAREA("文本域"),
 
     SINGLE_SELECT("单选下拉框"),

+ 9 - 0
sop-server/src/main/java/com/qmth/sop/server/api/TDFormWidgetController.java

@@ -10,6 +10,7 @@ import com.qmth.sop.business.bean.result.FormWidgetResult;
 import com.qmth.sop.business.cache.CommonCacheService;
 import com.qmth.sop.business.entity.TDFormWidget;
 import com.qmth.sop.business.entity.TDTableProp;
+import com.qmth.sop.business.exec.MySQLExec;
 import com.qmth.sop.business.service.TDFormWidgetService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.TFCustomTypeEnum;
@@ -43,6 +44,9 @@ public class TDFormWidgetController {
     @Resource
     TDFormWidgetService tdFormWidgetService;
 
+    @Resource
+    MySQLExec mySQLExec;
+
     @ApiOperation(value = "控件查询列表")
     @ApiResponses({@ApiResponse(code = 200, message = "控件查询列表信息", response = FormWidgetResult.class)})
     @RequestMapping(value = "/list", method = RequestMethod.POST)
@@ -55,6 +59,11 @@ public class TDFormWidgetController {
     @RequestMapping(value = "/flow/select", method = RequestMethod.POST)
     public Result flowSelect(@ApiParam(value = "流程类型", required = true) @RequestParam TFCustomTypeEnum flowType,
                              @ApiParam(value = "表单步骤") @RequestParam(required = false) Integer formSetup) {
+        try {
+            mySQLExec.execCreateSopDynamicTable(SystemConstant.SOP_DYNAMIC_TABLE_FILE_NAME, TFCustomTypeEnum.OFFICE_SOP_FLOW);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         QueryWrapper<TDFormWidget> tdFormWidgetQueryWrapper = new QueryWrapper<>();
         tdFormWidgetQueryWrapper.lambda().eq(TDFormWidget::getFlowType, flowType).eq(TDFormWidget::getType, WidgetTypeEnum.FORM);
         if (Objects.nonNull(formSetup)) {

BIN
sop-server/src/main/resources/officeSopFlow.zip


+ 1 - 1
sop-server/src/main/resources/office_sop_device_out.form

@@ -1 +1 @@
-[{"id":"55","code":"LABEL","type":"FORM","formId":"device_in_out_label","formName":"device_in_out_label","title":"设备入库","inputType":"STRING","required":false,"readable":true,"writable":false,"visable":true,"value":"出库","name":"标签","span":6},{"id":"56","code":"DATE","type":"FORM","formId":"device_out_time","formName":"device_out_time","title":"设备出库时间","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"format":"yyyy-MM-dd","name":"日期","span":6},{"id":"57","code":"DEVICE_OUT_TABLE","type":"FORM","formId":"device_out_table","formName":"device_out_table","title":"设备出库表格","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"设备库表格","span":12}]
+[{"id":"85","code":"ONLE_TITLE","type":"FORM","formId":"device_in_out_label","formName":"device_in_out_label","title":"设备入库","inputType":"STRING","required":false,"readable":true,"writable":false,"visable":true,"name":"普通标题,独占一行","span":6},{"id":"86","code":"DATE","type":"FORM","formId":"device_in_time","formName":"device_in_time","title":"设备入库时间","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"format":"yyyy-MM-dd","name":"日期","span":6},{"id":"87","code":"DEVICE_IN_TABLE","type":"FORM","formId":"device_in_table","formName":"device_in_table","title":"设备入库表格","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"设备库表格","span":12}]

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
sop-server/src/main/resources/office_sop_first.form


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
sop-server/src/main/resources/office_sop_information.form


+ 1 - 1
sop-server/src/main/resources/office_sop_inside_approve.form

@@ -1 +1 @@
-[{"id":"51","code":"FORM_GROUP_TITLE","type":"FORM","formId":"inside_title","formName":"inside_title","title":"项目内审(请于24小时内完成内审","inputType":"STRING","required":false,"readable":true,"writable":false,"visable":true,"name":"带虚线分割线的标题","span":12},{"id":"52","code":"RADIO","type":"FORM","formId":"approve_radio","formName":"approve_radio","title":"我对以上项目关键信息已审核,确认内容无误:","inputType":"STRING","required":true,"readable":false,"writable":true,"visable":true,"name":"单选框","span":9,"options":"[{\"value\":\"1\",\"label\":\"同意\"},{\"value\":\"0\",\"label\":\"不同意\"}]"},{"id":"53","code":"SIGN","type":"FORM","formId":"sign","formName":"sign","title":"添加签名","inputType":"STRING","required":true,"readable":false,"writable":true,"visable":true,"name":"签名","span":3},{"id":"54","code":"TEXTAREA","type":"FORM","formId":"approve_ramark","formName":"approve_ramark","title":"审批意见","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"文本域","span":9}]
+[{"id":"51","code":"FORM_GROUP_TITLE","type":"FORM","formId":"inside_title","formName":"inside_title","title":"项目内审(请于24小时内完成内审","inputType":"STRING","required":false,"readable":true,"writable":false,"visable":true,"name":"带虚线分割线的标题","span":12},{"id":"52","code":"RADIO","type":"FORM","formId":"approve_radio","formName":"approve_radio","title":"我对以上项目关键信息已审核,确认内容无误:","inputType":"STRING","required":true,"readable":false,"writable":true,"visable":true,"name":"单选框","span":12,"options":"[{\"value\":\"1\",\"label\":\"同意\"},{\"value\":\"0\",\"label\":\"不同意\"}]"},{"id":"53","code":"SIGN","type":"FORM","formId":"sign","formName":"sign","title":"添加签名","inputType":"STRING","required":true,"readable":false,"writable":true,"visable":true,"name":"签名","span":6},{"id":"54","code":"TEXTAREA","type":"FORM","formId":"approve_ramark","formName":"approve_ramark","title":"审批意见","inputType":"STRING","required":false,"readable":false,"writable":true,"visable":true,"name":"文本域","span":12}]

BIN
sop-server/src/main/resources/qualityProblemFlow.zip


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff