From 9db1a719dae6731ce38de145c38fdbd7d49f6af0 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期二, 18 二月 2025 13:30:21 +0800
Subject: [PATCH] 添加全局时间处理和oa流程接口

---
 ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableRecord.java     |   69 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestInfo.java                   |  254 +++++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequest.java                  |  154 +++
 inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportController.java          |  163 +++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableRecord.java            |   62 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpPost.java               |   50 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestSoap.java                   |   99 ++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/package-info.java                            |    2 
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableField.java             |  368 +++++++
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/LocalDateTimeSerializerConfig.java |   36 
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java                              |   31 
 ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequestResponse.java          |   62 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProcess.java                               |   67 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflow.java                 |  143 +++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpGet.java                |   50 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/ApplicationContextHolder.java             |   52 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAResult.java                                |   29 
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowTable.java                         |   90 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/ObjectFactory.java                           |  149 +++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflowResponse.java         |  114 ++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableField.java      |   69 +
 /dev/null                                                                                   |   51 -
 ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflowResponse.java                     |  114 ++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequest.java                       |  161 +++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowTable.java                  |   69 +
 ruoyi-common/src/main/java/com/ruoyi/common/oa/OAService.java                               |  152 +++
 ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflow.java                             |  143 +++
 27 files changed, 2,752 insertions(+), 51 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportController.java
new file mode 100644
index 0000000..8ea68ab
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportController.java
@@ -0,0 +1,163 @@
+package com.ruoyi.inspect.controller;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.ReportPageDto;
+import com.ruoyi.inspect.service.InsReportService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Scanner;
+
+@RestController
+@RequestMapping("/insReport")
+@Api(tags = "妫�楠屾姤鍛�")
+public class InsReportController {
+
+    @Resource
+    private InsReportService insReportService;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @ApiOperation(value = "鏌ヨ妫�楠屾姤鍛婃暟鎹�")
+    @GetMapping("/pageInsReport")
+    public Result pageInsReport(Page page, ReportPageDto reportPageDto){
+        return Result.success(insReportService.pageInsReport(page, reportPageDto));
+    }
+
+    @ApiOperation(value = "鎶ュ憡涓婁紶")
+    @PostMapping("/inReport")
+    public Result inReport(MultipartFile file, Integer id) {
+        String urlString;
+        String pathName;
+        try {
+            String path = wordUrl;
+            File realpath = new File(path);
+            if (!realpath.exists()) {
+                realpath.mkdirs();
+            }
+            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
+            urlString = realpath + "/" + pathName;
+            file.transferTo(new File(urlString));
+            return Result.success(insReportService.inReport("/word/" + pathName, id));
+        } catch (Exception e) {
+            throw new ErrorException("鏂囦欢涓婁紶澶辫触");
+        }
+    }
+
+    @ApiOperation(value = "鎶ュ憡杩樺師")
+    @PostMapping("/upReportUrl")
+    public Result upReportUrl(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        return Result.success(insReportService.upReportUrl(id));
+    }
+
+    @ApiOperation(value = "鎶ュ憡鍦ㄧ嚎缂栧埗")
+    @GetMapping("/upReportFile")
+    public Result upReportFile() {
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鎻愪氦")
+    @PostMapping("/writeReport")
+    public Result writeReport(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        Integer userId = (Integer) param.get("userId");
+        return Result.success(insReportService.writeReport(id, userId, null));
+    }
+
+    /**
+     * @param userId 闇�瑕佺殑鎵瑰噯浜�
+     * @return
+     */
+
+    @ApiOperation(value = "瀹℃牳")
+    @PostMapping("/examineReport")
+    public Result examineReport(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        Integer isExamine = (Integer) param.get("isExamine");
+        String examineTell = (String) param.get("examineTell");
+        Integer userId = (Integer) param.get("userId");
+        return Result.success(insReportService.examineReport(id, isExamine, examineTell, userId));
+    }
+
+    @ApiOperation(value = "鎵瑰噯")
+    @PostMapping("/ratifyReport")
+    public Result ratifyReport(@RequestBody Map<String, Object> param) {
+        Integer id = (Integer) param.get("id");
+        Integer isRatify = (Integer) param.get("isRatify");
+        String ratifyTell = (String) param.get("ratifyTell");
+        return Result.success(insReportService.ratifyReport(id, isRatify, ratifyTell));
+    }
+
+    @RequestMapping("/onlyOffice/save")
+    public void saveFile(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
+        PrintWriter writer = null;
+        try {
+            writer = response.getWriter();
+            // 鑾峰彇浼犺緭鐨刯son鏁版嵁
+            Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
+            String body = scanner.hasNext() ? scanner.next() : "";
+            JSONObject jsonObject = JSONObject.parseObject(body);
+
+            if (jsonObject.containsKey("url")) {
+                String jsonArray = jsonObject.get("lastsave").toString(); // 鏇存柊鏃堕棿
+                String fileUrl = jsonObject.get("url").toString(); // 鏇存柊鏂囦欢url
+                HttpUtil.downloadFile(fileUrl, FileUtil.file(wordUrl + "/" + fileName));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            writer.write("{\"error\":-1}");
+            return;
+        }
+        /*
+         * status = 1锛屾垜浠粰onlyOffice鐨勬湇鍔¤繑鍥瀧"error":"0"}鐨勪俊鎭��
+         * 杩欐牱onlyOffice浼氳涓哄洖璋冩帴鍙f槸娌¢棶棰樼殑锛岃繖鏍峰氨鍙互鍦ㄧ嚎缂栬緫鏂囨。浜嗭紝鍚﹀垯鐨勮瘽浼氬脊鍑虹獥鍙h鏄�
+         */
+        if (Objects.nonNull(writer)) {
+            writer.write("{\"error\":0}");
+        }
+    }
+
+    @ApiOperation(value = "鎶ュ憡鎵归噺涓嬭浇")
+    @GetMapping("/downAll")
+    public Result downAll(String ids) {
+        return Result.success(insReportService.downAll(ids));
+    }
+
+    @ApiOperation(value = "鎶ュ憡鎵归噺涓婁紶")
+    @PostMapping("/upAll")
+    public Result upAll(MultipartFile file) throws IOException {
+        return Result.success(insReportService.upAll(file));
+    }
+
+    /**
+     * 閫�鍥炲埌妫�楠屼换鍔�
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "閫�鍥炲埌妫�楠屼换鍔�")
+    @PostMapping("/sendBackTask")
+    public Result sendBackTask(@RequestBody Map<String, Object> param){
+        Integer id = (Integer) param.get("id");
+        return Result.success(insReportService.sendBackTask(id));
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflow.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflow.java
new file mode 100644
index 0000000..aad7df1
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflow.java
@@ -0,0 +1,143 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType>
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="appKey" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="wri" type="{http://tempuri.org/}OA_WorkflowRequestInfo" minOccurs="0"/>
+ *         &lt;element name="errorCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="errorMsg" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "appKey",
+    "wri",
+    "errorCode",
+    "errorMsg"
+})
+@XmlRootElement(name = "AddWorkflow")
+public class AddWorkflow {
+
+    protected String appKey;
+    protected OAWorkflowRequestInfo wri;
+    protected String errorCode;
+    protected String errorMsg;
+
+    /**
+     * 鑾峰彇appKey灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getAppKey() {
+        return appKey;
+    }
+
+    /**
+     * 璁剧疆appKey灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setAppKey(String value) {
+        this.appKey = value;
+    }
+
+    /**
+     * 鑾峰彇wri灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link OAWorkflowRequestInfo }
+     *
+     */
+    public OAWorkflowRequestInfo getWri() {
+        return wri;
+    }
+
+    /**
+     * 璁剧疆wri灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link OAWorkflowRequestInfo }
+     *
+     */
+    public void setWri(OAWorkflowRequestInfo value) {
+        this.wri = value;
+    }
+
+    /**
+     * 鑾峰彇errorCode灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    /**
+     * 璁剧疆errorCode灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorCode(String value) {
+        this.errorCode = value;
+    }
+
+    /**
+     * 鑾峰彇errorMsg灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    /**
+     * 璁剧疆errorMsg灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorMsg(String value) {
+        this.errorMsg = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflowResponse.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflowResponse.java
new file mode 100644
index 0000000..64a0bc5
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/AddWorkflowResponse.java
@@ -0,0 +1,114 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.*;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType>
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="AddWorkflowResult" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="errorCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="errorMsg" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "addWorkflowResult",
+    "errorCode",
+    "errorMsg"
+})
+@XmlRootElement(name = "AddWorkflowResponse")
+public class AddWorkflowResponse {
+
+    @XmlElement(name = "AddWorkflowResult")
+    protected String addWorkflowResult;
+    protected String errorCode;
+    protected String errorMsg;
+
+    /**
+     * 鑾峰彇addWorkflowResult灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getAddWorkflowResult() {
+        return addWorkflowResult;
+    }
+
+    /**
+     * 璁剧疆addWorkflowResult灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setAddWorkflowResult(String value) {
+        this.addWorkflowResult = value;
+    }
+
+    /**
+     * 鑾峰彇errorCode灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    /**
+     * 璁剧疆errorCode灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorCode(String value) {
+        this.errorCode = value;
+    }
+
+    /**
+     * 鑾峰彇errorMsg灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    /**
+     * 璁剧疆errorMsg灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorMsg(String value) {
+        this.errorMsg = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableField.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableField.java
new file mode 100644
index 0000000..85b40a7
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableField.java
@@ -0,0 +1,69 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * <p>ArrayOfOA_WorkflowRequestTableField complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="ArrayOfOA_WorkflowRequestTableField">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="OA_WorkflowRequestTableField" type="{http://tempuri.org/}OA_WorkflowRequestTableField" maxOccurs="unbounded" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ArrayOfOA_WorkflowRequestTableField", propOrder = {
+    "oaWorkflowRequestTableField"
+})
+public class ArrayOfOAWorkflowRequestTableField {
+
+    @XmlElement(name = "OA_WorkflowRequestTableField", nillable = true)
+    protected List<OAWorkflowRequestTableField> oaWorkflowRequestTableField;
+
+    /**
+     * Gets the value of the oaWorkflowRequestTableField property.
+     *
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the oaWorkflowRequestTableField property.
+     *
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getOAWorkflowRequestTableField().add(newItem);
+     * </pre>
+     *
+     *
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link OAWorkflowRequestTableField }
+     *
+     *
+     */
+    public List<OAWorkflowRequestTableField> getOAWorkflowRequestTableField() {
+        if (oaWorkflowRequestTableField == null) {
+            oaWorkflowRequestTableField = new ArrayList<OAWorkflowRequestTableField>();
+        }
+        return this.oaWorkflowRequestTableField;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableRecord.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableRecord.java
new file mode 100644
index 0000000..b59406d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowRequestTableRecord.java
@@ -0,0 +1,69 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * <p>ArrayOfOA_WorkflowRequestTableRecord complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="ArrayOfOA_WorkflowRequestTableRecord">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="OA_WorkflowRequestTableRecord" type="{http://tempuri.org/}OA_WorkflowRequestTableRecord" maxOccurs="unbounded" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ArrayOfOA_WorkflowRequestTableRecord", propOrder = {
+    "oaWorkflowRequestTableRecord"
+})
+public class ArrayOfOAWorkflowRequestTableRecord {
+
+    @XmlElement(name = "OA_WorkflowRequestTableRecord", nillable = true)
+    protected List<OAWorkflowRequestTableRecord> oaWorkflowRequestTableRecord;
+
+    /**
+     * Gets the value of the oaWorkflowRequestTableRecord property.
+     *
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the oaWorkflowRequestTableRecord property.
+     *
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getOAWorkflowRequestTableRecord().add(newItem);
+     * </pre>
+     *
+     *
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link OAWorkflowRequestTableRecord }
+     *
+     *
+     */
+    public List<OAWorkflowRequestTableRecord> getOAWorkflowRequestTableRecord() {
+        if (oaWorkflowRequestTableRecord == null) {
+            oaWorkflowRequestTableRecord = new ArrayList<OAWorkflowRequestTableRecord>();
+        }
+        return this.oaWorkflowRequestTableRecord;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowTable.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowTable.java
new file mode 100644
index 0000000..30b8f88
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ArrayOfOAWorkflowTable.java
@@ -0,0 +1,69 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * <p>ArrayOfOA_WorkflowTable complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="ArrayOfOA_WorkflowTable">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="OA_WorkflowTable" type="{http://tempuri.org/}OA_WorkflowTable" maxOccurs="unbounded" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ArrayOfOA_WorkflowTable", propOrder = {
+    "oaWorkflowTable"
+})
+public class ArrayOfOAWorkflowTable {
+
+    @XmlElement(name = "OA_WorkflowTable", nillable = true)
+    protected List<OAWorkflowTable> oaWorkflowTable;
+
+    /**
+     * Gets the value of the oaWorkflowTable property.
+     *
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the oaWorkflowTable property.
+     *
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getOAWorkflowTable().add(newItem);
+     * </pre>
+     *
+     *
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link OAWorkflowTable }
+     *
+     *
+     */
+    public List<OAWorkflowTable> getOAWorkflowTable() {
+        if (oaWorkflowTable == null) {
+            oaWorkflowTable = new ArrayList<OAWorkflowTable>();
+        }
+        return this.oaWorkflowTable;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequest.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequest.java
new file mode 100644
index 0000000..a9d7a36
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequest.java
@@ -0,0 +1,154 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType>
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="requestid" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ *         &lt;element name="forwardoperator" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="remark" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="userId" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ *         &lt;element name="clientip" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "requestid",
+    "forwardoperator",
+    "remark",
+    "userId",
+    "clientip"
+})
+@XmlRootElement(name = "forwardWorkflowRequest")
+public class ForwardWorkflowRequest {
+
+    protected int requestid;
+    protected String forwardoperator;
+    protected String remark;
+    protected int userId;
+    protected String clientip;
+
+    /**
+     * 鑾峰彇requestid灞炴�х殑鍊笺��
+     *
+     */
+    public int getRequestid() {
+        return requestid;
+    }
+
+    /**
+     * 璁剧疆requestid灞炴�х殑鍊笺��
+     *
+     */
+    public void setRequestid(int value) {
+        this.requestid = value;
+    }
+
+    /**
+     * 鑾峰彇forwardoperator灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getForwardoperator() {
+        return forwardoperator;
+    }
+
+    /**
+     * 璁剧疆forwardoperator灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setForwardoperator(String value) {
+        this.forwardoperator = value;
+    }
+
+    /**
+     * 鑾峰彇remark灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getRemark() {
+        return remark;
+    }
+
+    /**
+     * 璁剧疆remark灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setRemark(String value) {
+        this.remark = value;
+    }
+
+    /**
+     * 鑾峰彇userId灞炴�х殑鍊笺��
+     *
+     */
+    public int getUserId() {
+        return userId;
+    }
+
+    /**
+     * 璁剧疆userId灞炴�х殑鍊笺��
+     *
+     */
+    public void setUserId(int value) {
+        this.userId = value;
+    }
+
+    /**
+     * 鑾峰彇clientip灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getClientip() {
+        return clientip;
+    }
+
+    /**
+     * 璁剧疆clientip灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setClientip(String value) {
+        this.clientip = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequestResponse.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequestResponse.java
new file mode 100644
index 0000000..fd5eae8
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ForwardWorkflowRequestResponse.java
@@ -0,0 +1,62 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType>
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="forwardWorkflowRequestResult" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "forwardWorkflowRequestResult"
+})
+@XmlRootElement(name = "forwardWorkflowRequestResponse")
+public class ForwardWorkflowRequestResponse {
+
+    protected String forwardWorkflowRequestResult;
+
+    /**
+     * 鑾峰彇forwardWorkflowRequestResult灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getForwardWorkflowRequestResult() {
+        return forwardWorkflowRequestResult;
+    }
+
+    /**
+     * 璁剧疆forwardWorkflowRequestResult灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setForwardWorkflowRequestResult(String value) {
+        this.forwardWorkflowRequestResult = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProcess.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProcess.java
new file mode 100644
index 0000000..c54d0a4
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProcess.java
@@ -0,0 +1,67 @@
+package com.ruoyi.common.oa;
+
+import java.util.List;
+import java.util.Map;
+
+public class OAProcess {
+
+    public static String oaReturnMsg(int code, String msg) {
+        return "<miap><miap-header><errorcode>" + code + "</errorcode><errormsg>" + msg + "</errormsg></miap-header" + "><miap-Body></miap-Body></miap>";
+    }
+
+    /**
+     * @param mainFields锛氫富琛ㄥ瓧娈垫暟鎹�
+     * @param detailFields:瀛愯〃瀛楁鏁版嵁
+     * @param requestName:鍒涘缓鐨勬祦绋嬬殑鍚嶇О
+     * @param workflowId:OA娴佺▼ID
+     * @param createrId:OA璐﹀彿
+     * @return OAResult
+     * @throws Exception
+     */
+    public static OAResult start(Map<String, String> mainFields, List<Map<String, String>> detailFields, String requestName, String workflowId, String createrId) throws Exception {
+        OAService oaService = new OAService();
+        //鍒涘缓娴佺▼涓讳綋
+        OAWorkflowRequestInfo wri = new OAWorkflowRequestInfo();
+        wri.setWorkflowId(workflowId);
+        wri.setCreaterId(createrId);
+        wri.setRequestLevel("0");
+        wri.setRequestName(requestName);
+
+        OAWorkflowTable wmi = oaService.createOAMainWorkflowTable(mainFields);
+        // 灏嗕富琛ㄤ俊鎭~鍏呭埌娴佺▼淇℃伅閲�
+        wri.setWorkflowMainTable(wmi);
+
+        ArrayOfOAWorkflowTable owdts = oaService.createOADetailWorkflowTable(detailFields);
+        // 灏嗘槑缁嗚〃淇℃伅濉厖鍒版祦绋嬩俊鎭噷
+        wri.setWorkflowDetailTables(owdts);
+
+        // 鍙戣捣OA娴佺▼
+        OAResult oaResult = oaService.sendWorkFlow(wri);
+        // 杈撳嚭OA娴佺▼鎵ц缁撴灉
+        System.out.println(oaResult);
+        return oaResult;
+    }
+
+
+    public static OAResult start(Map<String, String> mainFields, String requestName, String workflowId, String createrId) throws Exception {
+        OAService oaService = new OAService();
+        //鍒涘缓娴佺▼涓讳綋
+        OAWorkflowRequestInfo wri = new OAWorkflowRequestInfo();
+        wri.setWorkflowId(workflowId);
+        wri.setCreaterId(createrId);
+        wri.setRequestLevel("0");
+        wri.setRequestName(requestName);
+//        wri.setIsnextflow("1");
+        wri.setIsnextflow("0");
+        //鍒涘缓涓昏〃
+        OAWorkflowTable wmi = oaService.createOAMainWorkflowTable(mainFields);
+        // 灏嗕富琛ㄤ俊鎭~鍏呭埌娴佺▼淇℃伅閲�
+        wri.setWorkflowMainTable(wmi);
+
+        // 鍙戣捣OA娴佺▼
+        OAResult oaResult = oaService.sendWorkFlow(wri);
+        // 杈撳嚭OA娴佺▼鎵ц缁撴灉
+        System.out.println(oaResult);
+        return oaResult;
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java
new file mode 100644
index 0000000..1880e93
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java
@@ -0,0 +1,31 @@
+package com.ruoyi.common.oa;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author ZTT
+ */
+@Configuration
+@ConfigurationProperties(prefix = "oa")
+@Data
+public class OAProperty {
+
+	/**
+	 * oa鍦板潃
+	 */
+	private String oaHost;
+
+//	/**
+//	 * 鏂囦欢鏌ョ湅ip鍦板潃
+//	 */
+//	private String prodIp;
+
+	/**
+	 * 瑁呭鐢电紗锛氫笉鍚堟牸瀹℃壒oa鐨刬d
+	 */
+	private String unqualifiedProcessId;
+
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAResult.java
new file mode 100644
index 0000000..7febd9b
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAResult.java
@@ -0,0 +1,29 @@
+package com.ruoyi.common.oa;
+
+import lombok.Data;
+
+/**
+ * @author ZTT
+ */
+@Data
+public class OAResult {
+	private static final String SUCCESS_CODE = "0";
+
+	/**
+	 * 閿欒浠g爜
+	 */
+	private String errorCode;
+	/**
+	 * 閿欒淇℃伅
+	 */
+	private String errorMsg;
+	/**
+	 * 娴佺▼缂栧彿
+	 */
+	private String addWorkflowResult;
+
+
+	public boolean success() {
+		return SUCCESS_CODE.equals(errorCode);
+	}
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAService.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAService.java
new file mode 100644
index 0000000..c80683f
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAService.java
@@ -0,0 +1,152 @@
+package com.ruoyi.common.oa;
+
+import javax.xml.ws.Holder;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZTT
+ */
+public class OAService {
+	/**
+	 * 鍒涘缓OA娴佺▼涓昏〃
+	 *
+	 * @param fields
+	 * @return
+	 */
+	public OAWorkflowTable createOAMainWorkflowTable(Map<String, String> fields) {
+		//------------------涓昏〃鍒楄祴鍊�---------------------------
+		List<OAWorkflowRequestTableField> oaWorkflowRequestTableField = new ArrayList<OAWorkflowRequestTableField>();
+
+		for (Map.Entry<String, String> field : fields.entrySet()) {
+			oaWorkflowRequestTableField.add(createOAWorkflowRequestTableField(field.getKey(), field.getValue().toString()));
+		}
+
+		System.out.println("@#######################");
+		for (OAWorkflowRequestTableField workflowRequestTableField : oaWorkflowRequestTableField) {
+
+			System.out.println(workflowRequestTableField.fieldName +","+ workflowRequestTableField.fieldValue +"--"+ workflowRequestTableField.fieldType);
+		}
+		//鍒涘缓涓昏〃鍒�
+		ArrayOfOAWorkflowRequestTableField wrti = new ArrayOfOAWorkflowRequestTableField();
+		wrti.oaWorkflowRequestTableField = oaWorkflowRequestTableField;
+		// 灏嗕富琛ㄥ垪濉厖鍒颁富琛ㄨ閲�
+		OAWorkflowRequestTableRecord oaWorkflowRequestTableRecord = new OAWorkflowRequestTableRecord();
+		oaWorkflowRequestTableRecord.setWorkflowRequestTableFields(wrti);
+
+		//鍒涘缓涓昏〃琛�
+		ArrayOfOAWorkflowRequestTableRecord wrtri = new ArrayOfOAWorkflowRequestTableRecord();
+		wrtri.getOAWorkflowRequestTableRecord().add(oaWorkflowRequestTableRecord);
+
+		//鍒涘缓涓昏〃
+		OAWorkflowTable wmi = new OAWorkflowTable();
+		//灏嗕富琛ㄨ濉厖鍒颁富琛ㄩ噷
+		wmi.setWorkflowRequestTableRecords(wrtri);
+
+		return wmi;
+	}
+
+	/**
+	 * 鍒涘缓OA鏄庣粏琛ㄦ祦绋�
+	 *
+	 * @param fields
+	 * @return
+	 */
+	public ArrayOfOAWorkflowTable createOADetailWorkflowTable(List<Map<String, String>> fields) {
+		//------------------鏄庣粏琛ㄨ祴鍊�---------------------------
+		//鍒涘缓1寮犳槑缁嗚〃
+		ArrayOfOAWorkflowTable owdts = new ArrayOfOAWorkflowTable();
+		//灏嗘槑缁嗗垪濉厖鍒版槑缁嗚涓�
+		//鏄庣粏灞炴��
+		ArrayOfOAWorkflowRequestTableRecord owrtr = new ArrayOfOAWorkflowRequestTableRecord();
+		for (int i = 0; i < fields.size(); i++) {
+			List<OAWorkflowRequestTableField> owrtf_ = new ArrayList<OAWorkflowRequestTableField>();
+
+			for (Map.Entry<String, String> field : fields.get(i).entrySet()) {
+				owrtf_.add(createOAWorkflowRequestTableField(field.getKey(), field.getValue()));
+			}
+			ArrayOfOAWorkflowRequestTableField owrti = new ArrayOfOAWorkflowRequestTableField();
+			owrti.oaWorkflowRequestTableField = owrtf_;
+			OAWorkflowRequestTableRecord owrtis = new OAWorkflowRequestTableRecord();
+			owrtis.setWorkflowRequestTableFields(owrti);
+			owrtr.getOAWorkflowRequestTableRecord().add(owrtis);
+		}
+
+
+		// 灏嗘槑缁嗚濉厖鍒版槑缁嗚〃閲�
+		OAWorkflowTable owrtrs = new OAWorkflowTable();
+		owrtrs.setWorkflowRequestTableRecords(owrtr);
+		owdts.getOAWorkflowTable().add(owrtrs);
+
+		return owdts;
+	}
+
+	/**
+	 * 鍒涘缓OA娴佺▼琛ㄦ牸灞炴��
+	 *
+	 * @param fieldName
+	 * @param fieldValue
+	 * @param view
+	 * @param edit
+	 * @return
+	 */
+	public OAWorkflowRequestTableField createOAWorkflowRequestTableField(String fieldName, String fieldValue, String view, String edit) {
+		// 鍒涘缓灞炴��
+		OAWorkflowRequestTableField oaWorkflowRequestTableField = new OAWorkflowRequestTableField();
+
+		// 瀵瑰睘鎬ц繘琛岃缃�
+		oaWorkflowRequestTableField.setFieldName(fieldName);
+		oaWorkflowRequestTableField.setFieldValue(fieldValue);
+		oaWorkflowRequestTableField.setView(view);
+		oaWorkflowRequestTableField.setEdit(edit);
+
+		return oaWorkflowRequestTableField;
+	}
+
+	/**
+	 * 鍒涘缓OA娴佺▼琛ㄦ牸灞炴��
+	 *
+	 * @param fieldName
+	 * @param fieldValue
+	 * @return
+	 */
+	public OAWorkflowRequestTableField createOAWorkflowRequestTableField(String fieldName, String fieldValue) {
+		// 鍒涘缓灞炴��
+		OAWorkflowRequestTableField oaWorkflowRequestTableField = new OAWorkflowRequestTableField();
+
+		// 瀵瑰睘鎬ц繘琛岃缃�
+		oaWorkflowRequestTableField.setFieldName(fieldName);
+		oaWorkflowRequestTableField.setFieldValue(fieldValue);
+		oaWorkflowRequestTableField.setView("true");
+		oaWorkflowRequestTableField.setEdit("true");
+		if (fieldName.equals("sqr") || fieldName.equals("fkr")) {
+			oaWorkflowRequestTableField.setFieldType(1);
+		}
+		return oaWorkflowRequestTableField;
+	}
+
+	/**
+	 * 鍙戦�丱A娴佺▼
+	 *
+	 * @param wri
+	 * @return
+	 */
+	public OAResult sendWorkFlow(OAWorkflowRequestInfo wri) {
+		Holder<String> errorCode = new Holder<String>();
+		Holder<String> errorMsg = new Holder<String>();
+		Holder<String> addWorkflowResult = new Holder<String>();
+
+		OAWorkFlowRequest owfr = new OAWorkFlowRequest();
+		// 璋冪敤OA娴佺▼鏂板鏂规硶锛屽彂璧稯A娴佺▼
+		owfr.getOAWorkFlowRequestSoap().addWorkflow("5DEDD10D2E434A139A05953BDB66CC68", wri, errorCode, errorMsg, addWorkflowResult);
+
+		// 娴佺▼鍙戦�佺粨鏋�
+		OAResult oaResult = new OAResult();
+		oaResult.setErrorCode(errorCode.value);
+		oaResult.setErrorMsg(errorMsg.value);
+		oaResult.setAddWorkflowResult(addWorkflowResult.value);
+
+		return oaResult;
+	}
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequest.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequest.java
new file mode 100644
index 0000000..4970814
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequest.java
@@ -0,0 +1,161 @@
+
+package com.ruoyi.common.oa;
+
+
+
+import com.ruoyi.common.utils.ApplicationContextHolder;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.*;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.2.9-b130926.1035
+ * Generated source version: 2.2
+ *
+ */
+@WebServiceClient(name = "OA_WorkFlowRequest", targetNamespace = "http://tempuri.org/")
+public class OAWorkFlowRequest
+    extends Service
+{
+
+    private final static URL OAWORKFLOWREQUEST_WSDL_LOCATION;
+    private final static WebServiceException OAWORKFLOWREQUEST_EXCEPTION;
+    private final static QName OAWORKFLOWREQUEST_QNAME = new QName("http://tempuri.org/", "OA_WorkFlowRequest");
+
+	static {
+		URL url = null;
+		WebServiceException e = null;
+		try {
+			OAProperty oaProperties = ApplicationContextHolder.getBean(OAProperty.class);
+			url = new URL(oaProperties.getOaHost());
+		} catch (MalformedURLException ex) {
+			e = new WebServiceException(ex);
+		}
+		OAWORKFLOWREQUEST_WSDL_LOCATION = url;
+		OAWORKFLOWREQUEST_EXCEPTION = e;
+	}
+
+    public OAWorkFlowRequest() {
+        super(__getWsdlLocation(), OAWORKFLOWREQUEST_QNAME);
+    }
+
+    public OAWorkFlowRequest(WebServiceFeature... features) {
+        super(__getWsdlLocation(), OAWORKFLOWREQUEST_QNAME, features);
+    }
+
+    public OAWorkFlowRequest(URL wsdlLocation) {
+        super(wsdlLocation, OAWORKFLOWREQUEST_QNAME);
+    }
+
+    public OAWorkFlowRequest(URL wsdlLocation, WebServiceFeature... features) {
+        super(wsdlLocation, OAWORKFLOWREQUEST_QNAME, features);
+    }
+
+    public OAWorkFlowRequest(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public OAWorkFlowRequest(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
+        super(wsdlLocation, serviceName, features);
+    }
+
+    /**
+     *
+     * @return
+     *     returns OAWorkFlowRequestSoap
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestSoap")
+    public OAWorkFlowRequestSoap getOAWorkFlowRequestSoap() {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestSoap"), OAWorkFlowRequestSoap.class);
+    }
+
+    /**
+     *
+     * @param features
+     *     A list of {@link WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
+     * @return
+     *     returns OAWorkFlowRequestSoap
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestSoap")
+    public OAWorkFlowRequestSoap getOAWorkFlowRequestSoap(WebServiceFeature... features) {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestSoap"), OAWorkFlowRequestSoap.class, features);
+    }
+
+    /**
+     *
+     * @return
+     *     returns OAWorkFlowRequestSoap
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestSoap12")
+    public OAWorkFlowRequestSoap getOAWorkFlowRequestSoap12() {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestSoap12"), OAWorkFlowRequestSoap.class);
+    }
+
+    /**
+     *
+     * @param features
+     *     A list of {@link WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
+     * @return
+     *     returns OAWorkFlowRequestSoap
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestSoap12")
+    public OAWorkFlowRequestSoap getOAWorkFlowRequestSoap12(WebServiceFeature... features) {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestSoap12"), OAWorkFlowRequestSoap.class, features);
+    }
+
+    /**
+     *
+     * @return
+     *     returns OAWorkFlowRequestHttpGet
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestHttpGet")
+    public OAWorkFlowRequestHttpGet getOAWorkFlowRequestHttpGet() {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestHttpGet"), OAWorkFlowRequestHttpGet.class);
+    }
+
+    /**
+     *
+     * @param features
+     *     A list of {@link WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
+     * @return
+     *     returns OAWorkFlowRequestHttpGet
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestHttpGet")
+    public OAWorkFlowRequestHttpGet getOAWorkFlowRequestHttpGet(WebServiceFeature... features) {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestHttpGet"), OAWorkFlowRequestHttpGet.class, features);
+    }
+
+    /**
+     *
+     * @return
+     *     returns OAWorkFlowRequestHttpPost
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestHttpPost")
+    public OAWorkFlowRequestHttpPost getOAWorkFlowRequestHttpPost() {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestHttpPost"), OAWorkFlowRequestHttpPost.class);
+    }
+
+    /**
+     *
+     * @param features
+     *     A list of {@link WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
+     * @return
+     *     returns OAWorkFlowRequestHttpPost
+     */
+    @WebEndpoint(name = "OA_WorkFlowRequestHttpPost")
+    public OAWorkFlowRequestHttpPost getOAWorkFlowRequestHttpPost(WebServiceFeature... features) {
+        return super.getPort(new QName("http://tempuri.org/", "OA_WorkFlowRequestHttpPost"), OAWorkFlowRequestHttpPost.class, features);
+    }
+
+    private static URL __getWsdlLocation() {
+        if (OAWORKFLOWREQUEST_EXCEPTION!= null) {
+            throw OAWORKFLOWREQUEST_EXCEPTION;
+        }
+        return OAWORKFLOWREQUEST_WSDL_LOCATION;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpGet.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpGet.java
new file mode 100644
index 0000000..55c98ce
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpGet.java
@@ -0,0 +1,50 @@
+
+package com.ruoyi.common.oa;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.2.9-b130926.1035
+ * Generated source version: 2.2
+ *
+ */
+@WebService(name = "OA_WorkFlowRequestHttpGet", targetNamespace = "http://tempuri.org/")
+@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+@XmlSeeAlso({
+    ObjectFactory.class
+})
+public interface OAWorkFlowRequestHttpGet {
+
+
+    /**
+     *
+     * @param requestid
+     * @param clientip
+     * @param remark
+     * @param forwardoperator
+     * @param userId
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod
+    @WebResult(name = "string", targetNamespace = "http://tempuri.org/", partName = "Body")
+    public String forwardWorkflowRequest(
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "requestid")
+        String requestid,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "forwardoperator")
+        String forwardoperator,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "remark")
+        String remark,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "userId")
+        String userId,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "clientip")
+        String clientip);
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpPost.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpPost.java
new file mode 100644
index 0000000..bd5a4e2
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestHttpPost.java
@@ -0,0 +1,50 @@
+
+package com.ruoyi.common.oa;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.2.9-b130926.1035
+ * Generated source version: 2.2
+ *
+ */
+@WebService(name = "OA_WorkFlowRequestHttpPost", targetNamespace = "http://tempuri.org/")
+@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+@XmlSeeAlso({
+    ObjectFactory.class
+})
+public interface OAWorkFlowRequestHttpPost {
+
+
+    /**
+     *
+     * @param requestid
+     * @param clientip
+     * @param remark
+     * @param forwardoperator
+     * @param userId
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod
+    @WebResult(name = "string", targetNamespace = "http://tempuri.org/", partName = "Body")
+    public String forwardWorkflowRequest(
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "requestid")
+        String requestid,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "forwardoperator")
+        String forwardoperator,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "remark")
+        String remark,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "userId")
+        String userId,
+        @WebParam(name = "string", targetNamespace = "http://www.w3.org/2001/XMLSchema", partName = "clientip")
+        String clientip);
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestSoap.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestSoap.java
new file mode 100644
index 0000000..5122cdc
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkFlowRequestSoap.java
@@ -0,0 +1,99 @@
+
+package com.ruoyi.common.oa;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.ws.Holder;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.2.9-b130926.1035
+ * Generated source version: 2.2
+ *
+ */
+@WebService(name = "OA_WorkFlowRequestSoap", targetNamespace = "http://tempuri.org/")
+@XmlSeeAlso({
+    ObjectFactory.class
+})
+public interface OAWorkFlowRequestSoap {
+
+
+    /**
+     *
+     * @param requestid
+     * @param clientip
+     * @param remark
+     * @param forwardoperator
+     * @param userId
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod(action = "http://tempuri.org/forwardWorkflowRequest")
+    @WebResult(name = "forwardWorkflowRequestResult", targetNamespace = "http://tempuri.org/")
+    @RequestWrapper(localName = "forwardWorkflowRequest", targetNamespace = "http://tempuri.org/", className = "com.chinaztt.mes.common.oa.ForwardWorkflowRequest")
+    @ResponseWrapper(localName = "forwardWorkflowRequestResponse", targetNamespace = "http://tempuri.org/", className = "com.chinaztt.mes.common.oa.ForwardWorkflowRequestResponse")
+    public String forwardWorkflowRequest(
+        @WebParam(name = "requestid", targetNamespace = "http://tempuri.org/")
+        int requestid,
+        @WebParam(name = "forwardoperator", targetNamespace = "http://tempuri.org/")
+        String forwardoperator,
+        @WebParam(name = "remark", targetNamespace = "http://tempuri.org/")
+        String remark,
+        @WebParam(name = "userId", targetNamespace = "http://tempuri.org/")
+        int userId,
+        @WebParam(name = "clientip", targetNamespace = "http://tempuri.org/")
+        String clientip);
+
+    /**
+     *
+     * @param addWorkflowResult
+     * @param errorCode
+     * @param appKey
+     * @param wri
+     * @param errorMsg
+     */
+    @WebMethod(operationName = "AddWorkflow", action = "http://tempuri.org/AddWorkflow")
+    @RequestWrapper(localName = "AddWorkflow", targetNamespace = "http://tempuri.org/", className = "com.chinaztt.mes.common.oa.AddWorkflow")
+    @ResponseWrapper(localName = "AddWorkflowResponse", targetNamespace = "http://tempuri.org/", className = "com.chinaztt.mes.common.oa.AddWorkflowResponse")
+    public void addWorkflow(
+        @WebParam(name = "appKey", targetNamespace = "http://tempuri.org/")
+        String appKey,
+        @WebParam(name = "wri", targetNamespace = "http://tempuri.org/")
+        OAWorkflowRequestInfo wri,
+        @WebParam(name = "errorCode", targetNamespace = "http://tempuri.org/", mode = WebParam.Mode.INOUT)
+        Holder<String> errorCode,
+        @WebParam(name = "errorMsg", targetNamespace = "http://tempuri.org/", mode = WebParam.Mode.INOUT)
+        Holder<String> errorMsg,
+        @WebParam(name = "AddWorkflowResult", targetNamespace = "http://tempuri.org/", mode = WebParam.Mode.OUT)
+        Holder<String> addWorkflowResult);
+
+    /**
+     *
+     * @param errorCode
+     * @param appKey
+     * @param updateAndSubmitWorkflowResult
+     * @param wri
+     * @param errorMsg
+     */
+    @WebMethod(operationName = "UpdateAndSubmitWorkflow", action = "http://tempuri.org/UpdateAndSubmitWorkflow")
+    @RequestWrapper(localName = "UpdateAndSubmitWorkflow", targetNamespace = "http://tempuri.org/", className = "com.chinaztt.mes.common.oa.UpdateAndSubmitWorkflow")
+    @ResponseWrapper(localName = "UpdateAndSubmitWorkflowResponse", targetNamespace = "http://tempuri.org/", className = "com.chinaztt.mes.common.oa.UpdateAndSubmitWorkflowResponse")
+    public void updateAndSubmitWorkflow(
+        @WebParam(name = "appKey", targetNamespace = "http://tempuri.org/")
+        String appKey,
+        @WebParam(name = "wri", targetNamespace = "http://tempuri.org/")
+        OAWorkflowRequestInfo wri,
+        @WebParam(name = "errorCode", targetNamespace = "http://tempuri.org/", mode = WebParam.Mode.INOUT)
+        Holder<String> errorCode,
+        @WebParam(name = "errorMsg", targetNamespace = "http://tempuri.org/", mode = WebParam.Mode.INOUT)
+        Holder<String> errorMsg,
+        @WebParam(name = "UpdateAndSubmitWorkflowResult", targetNamespace = "http://tempuri.org/", mode = WebParam.Mode.OUT)
+        Holder<String> updateAndSubmitWorkflowResult);
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestInfo.java
new file mode 100644
index 0000000..f7c585e
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestInfo.java
@@ -0,0 +1,254 @@
+
+package com.ruoyi.common.oa;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>OA_WorkflowRequestInfo complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="OA_WorkflowRequestInfo">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="WorkflowId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="RequestId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="MainId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="CreaterId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="RequestLevel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="RequestName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="Remark" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="WorkflowMainTable" type="{http://tempuri.org/}OA_WorkflowTable" minOccurs="0"/>
+ *         &lt;element name="WorkflowDetailTables" type="{http://tempuri.org/}ArrayOfOA_WorkflowTable" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "OA_WorkflowRequestInfo", propOrder = {
+		"workflowId",
+		"requestId",
+		"mainId",
+		"createrId",
+		"requestLevel",
+		"requestName",
+		"remark",
+		"isnextflow",
+		"workflowMainTable",
+		"workflowDetailTables"
+})
+@Data
+public class OAWorkflowRequestInfo {
+
+	@XmlElement(name = "WorkflowId")
+	protected String workflowId;
+	@XmlElement(name = "RequestId")
+	protected String requestId;
+	@XmlElement(name = "MainId")
+	protected String mainId;
+	@XmlElement(name = "CreaterId")
+	protected String createrId;
+	@XmlElement(name = "RequestLevel")
+	protected String requestLevel;
+	@XmlElement(name = "RequestName")
+	protected String requestName;
+	@XmlElement(name = "Remark")
+	protected String remark;
+	@XmlElement(name = "isnextflow")
+	protected String isnextflow;
+	@XmlElement(name = "WorkflowMainTable")
+	protected OAWorkflowTable workflowMainTable;
+	@XmlElement(name = "WorkflowDetailTables")
+	protected ArrayOfOAWorkflowTable workflowDetailTables;
+
+	/**
+	 * 鑾峰彇workflowId灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link String }
+	 */
+	public String getWorkflowId() {
+		return workflowId;
+	}
+
+	/**
+	 * 璁剧疆workflowId灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link String }
+	 */
+	public void setWorkflowId(String value) {
+		this.workflowId = value;
+	}
+
+	/**
+	 * 鑾峰彇requestId灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link String }
+	 */
+	public String getRequestId() {
+		return requestId;
+	}
+
+	/**
+	 * 璁剧疆requestId灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link String }
+	 */
+	public void setRequestId(String value) {
+		this.requestId = value;
+	}
+
+	/**
+	 * 鑾峰彇mainId灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link String }
+	 */
+	public String getMainId() {
+		return mainId;
+	}
+
+	/**
+	 * 璁剧疆mainId灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link String }
+	 */
+	public void setMainId(String value) {
+		this.mainId = value;
+	}
+
+	/**
+	 * 鑾峰彇createrId灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link String }
+	 */
+	public String getCreaterId() {
+		return createrId;
+	}
+
+	/**
+	 * 璁剧疆createrId灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link String }
+	 */
+	public void setCreaterId(String value) {
+		this.createrId = value;
+	}
+
+	/**
+	 * 鑾峰彇requestLevel灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link String }
+	 */
+	public String getRequestLevel() {
+		return requestLevel;
+	}
+
+	/**
+	 * 璁剧疆requestLevel灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link String }
+	 */
+	public void setRequestLevel(String value) {
+		this.requestLevel = value;
+	}
+
+	/**
+	 * 鑾峰彇requestName灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link String }
+	 */
+	public String getRequestName() {
+		return requestName;
+	}
+
+	/**
+	 * 璁剧疆requestName灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link String }
+	 */
+	public void setRequestName(String value) {
+		this.requestName = value;
+	}
+
+	/**
+	 * 鑾峰彇remark灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link String }
+	 */
+	public String getRemark() {
+		return remark;
+	}
+
+	/**
+	 * 璁剧疆remark灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link String }
+	 */
+	public void setRemark(String value) {
+		this.remark = value;
+	}
+
+	/**
+	 * 鑾峰彇workflowMainTable灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link OAWorkflowTable }
+	 */
+	public OAWorkflowTable getWorkflowMainTable() {
+		return workflowMainTable;
+	}
+
+	/**
+	 * 璁剧疆workflowMainTable灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link OAWorkflowTable }
+	 */
+	public void setWorkflowMainTable(OAWorkflowTable value) {
+		this.workflowMainTable = value;
+	}
+
+	/**
+	 * 鑾峰彇workflowDetailTables灞炴�х殑鍊笺��
+	 *
+	 * @return possible object is
+	 * {@link ArrayOfOAWorkflowTable }
+	 */
+	public ArrayOfOAWorkflowTable getWorkflowDetailTables() {
+		return workflowDetailTables;
+	}
+
+	/**
+	 * 璁剧疆workflowDetailTables灞炴�х殑鍊笺��
+	 *
+	 * @param value allowed object is
+	 *              {@link ArrayOfOAWorkflowTable }
+	 */
+	public void setWorkflowDetailTables(ArrayOfOAWorkflowTable value) {
+		this.workflowDetailTables = value;
+	}
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableField.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableField.java
new file mode 100644
index 0000000..6571bed
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableField.java
@@ -0,0 +1,368 @@
+
+package com.ruoyi.common.oa;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.Objects;
+
+
+/**
+ * <p>OA_WorkflowRequestTableField complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="OA_WorkflowRequestTableField">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="FieldName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="FieldValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="View" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="Edit" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="FieldType" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ *         &lt;element name="SysName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="ValueType1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="ValueType2" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="ValueType3" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="ValueKey" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="ValueTableName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "OA_WorkflowRequestTableField", propOrder = {
+    "fieldName",
+    "fieldValue",
+    "view",
+    "edit",
+    "fieldType",
+    "sysName",
+    "valueType1",
+    "valueType2",
+    "valueType3",
+    "valueKey",
+    "valueTableName"
+})
+@Data
+public class OAWorkflowRequestTableField {
+
+    @XmlElement(name = "FieldName")
+    protected String fieldName;
+    @XmlElement(name = "FieldValue")
+    protected String fieldValue;
+    @XmlElement(name = "View")
+    protected String view;
+    @XmlElement(name = "Edit")
+    protected String edit;
+    @XmlElement(name = "FieldType")
+    protected int fieldType;
+    @XmlElement(name = "SysName")
+    protected String sysName;
+    @XmlElement(name = "ValueType1")
+    protected String valueType1;
+    @XmlElement(name = "ValueType2")
+    protected String valueType2;
+    @XmlElement(name = "ValueType3")
+    protected String valueType3;
+    @XmlElement(name = "ValueKey")
+    protected String valueKey;
+    @XmlElement(name = "ValueTableName")
+    protected String valueTableName;
+
+    /**
+     * 鑾峰彇fieldName灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    /**
+     * 璁剧疆fieldName灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setFieldName(String value) {
+        this.fieldName = value;
+    }
+
+    /**
+     * 鑾峰彇fieldValue灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getFieldValue() {
+        return fieldValue;
+    }
+
+    /**
+     * 璁剧疆fieldValue灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setFieldValue(String value) {
+        this.fieldValue = value;
+    }
+
+    /**
+     * 鑾峰彇view灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getView() {
+        return view;
+    }
+
+    /**
+     * 璁剧疆view灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setView(String value) {
+        this.view = value;
+    }
+
+    /**
+     * 鑾峰彇edit灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getEdit() {
+        return edit;
+    }
+
+    /**
+     * 璁剧疆edit灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setEdit(String value) {
+        this.edit = value;
+    }
+
+    /**
+     * 鑾峰彇fieldType灞炴�х殑鍊笺��
+     *
+     */
+    public int getFieldType() {
+        return fieldType;
+    }
+
+    /**
+     * 璁剧疆fieldType灞炴�х殑鍊笺��
+     *
+     */
+    public void setFieldType(int value) {
+        this.fieldType = value;
+    }
+
+    /**
+     * 鑾峰彇sysName灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getSysName() {
+        return sysName;
+    }
+
+    /**
+     * 璁剧疆sysName灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setSysName(String value) {
+        this.sysName = value;
+    }
+
+    /**
+     * 鑾峰彇valueType1灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getValueType1() {
+        return valueType1;
+    }
+
+    /**
+     * 璁剧疆valueType1灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setValueType1(String value) {
+        this.valueType1 = value;
+    }
+
+    /**
+     * 鑾峰彇valueType2灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getValueType2() {
+        return valueType2;
+    }
+
+    /**
+     * 璁剧疆valueType2灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setValueType2(String value) {
+        this.valueType2 = value;
+    }
+
+    /**
+     * 鑾峰彇valueType3灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getValueType3() {
+        return valueType3;
+    }
+
+    /**
+     * 璁剧疆valueType3灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setValueType3(String value) {
+        this.valueType3 = value;
+    }
+
+    /**
+     * 鑾峰彇valueKey灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getValueKey() {
+        return valueKey;
+    }
+
+    /**
+     * 璁剧疆valueKey灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setValueKey(String value) {
+        this.valueKey = value;
+    }
+
+    /**
+     * 鑾峰彇valueTableName灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getValueTableName() {
+        return valueTableName;
+    }
+
+    /**
+     * 璁剧疆valueTableName灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setValueTableName(String value) {
+        this.valueTableName = value;
+    }
+
+	@Override
+	public String toString() {
+		return "OAWorkflowRequestTableField{" +
+				"fieldName='" + fieldName + '\'' +
+				", fieldValue='" + fieldValue + '\'' +
+				", view='" + view + '\'' +
+				", edit='" + edit + '\'' +
+				", fieldType=" + fieldType +
+				", sysName='" + sysName + '\'' +
+				", valueType1='" + valueType1 + '\'' +
+				", valueType2='" + valueType2 + '\'' +
+				", valueType3='" + valueType3 + '\'' +
+				", valueKey='" + valueKey + '\'' +
+				", valueTableName='" + valueTableName + '\'' +
+				'}';
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		OAWorkflowRequestTableField that = (OAWorkflowRequestTableField) o;
+		return fieldType == that.fieldType && Objects.equals(fieldName, that.fieldName) && Objects.equals(fieldValue, that.fieldValue) && Objects.equals(view, that.view) && Objects.equals(edit, that.edit) && Objects.equals(sysName, that.sysName) && Objects.equals(valueType1, that.valueType1) && Objects.equals(valueType2, that.valueType2) && Objects.equals(valueType3, that.valueType3) && Objects.equals(valueKey, that.valueKey) && Objects.equals(valueTableName, that.valueTableName);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(fieldName, fieldValue, view, edit, fieldType, sysName, valueType1, valueType2, valueType3, valueKey, valueTableName);
+	}
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableRecord.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableRecord.java
new file mode 100644
index 0000000..3c28fd8
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowRequestTableRecord.java
@@ -0,0 +1,62 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>OA_WorkflowRequestTableRecord complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="OA_WorkflowRequestTableRecord">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="WorkflowRequestTableFields" type="{http://tempuri.org/}ArrayOfOA_WorkflowRequestTableField" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "OA_WorkflowRequestTableRecord", propOrder = {
+    "workflowRequestTableFields"
+})
+public class OAWorkflowRequestTableRecord {
+
+    @XmlElement(name = "WorkflowRequestTableFields")
+    protected ArrayOfOAWorkflowRequestTableField workflowRequestTableFields;
+
+    /**
+     * 鑾峰彇workflowRequestTableFields灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link ArrayOfOAWorkflowRequestTableField }
+     *
+     */
+    public ArrayOfOAWorkflowRequestTableField getWorkflowRequestTableFields() {
+        return workflowRequestTableFields;
+    }
+
+    /**
+     * 璁剧疆workflowRequestTableFields灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link ArrayOfOAWorkflowRequestTableField }
+     *
+     */
+    public void setWorkflowRequestTableFields(ArrayOfOAWorkflowRequestTableField value) {
+        this.workflowRequestTableFields = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowTable.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowTable.java
new file mode 100644
index 0000000..11b4add
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/OAWorkflowTable.java
@@ -0,0 +1,90 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>OA_WorkflowTable complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="OA_WorkflowTable">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="TableName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="WorkflowRequestTableRecords" type="{http://tempuri.org/}ArrayOfOA_WorkflowRequestTableRecord" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "OA_WorkflowTable", propOrder = {
+    "tableName",
+    "workflowRequestTableRecords"
+})
+public class OAWorkflowTable {
+
+    @XmlElement(name = "TableName")
+    protected String tableName;
+    @XmlElement(name = "WorkflowRequestTableRecords")
+    protected ArrayOfOAWorkflowRequestTableRecord workflowRequestTableRecords;
+
+    /**
+     * 鑾峰彇tableName灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getTableName() {
+        return tableName;
+    }
+
+    /**
+     * 璁剧疆tableName灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setTableName(String value) {
+        this.tableName = value;
+    }
+
+    /**
+     * 鑾峰彇workflowRequestTableRecords灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link ArrayOfOAWorkflowRequestTableRecord }
+     *
+     */
+    public ArrayOfOAWorkflowRequestTableRecord getWorkflowRequestTableRecords() {
+        return workflowRequestTableRecords;
+    }
+
+    /**
+     * 璁剧疆workflowRequestTableRecords灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link ArrayOfOAWorkflowRequestTableRecord }
+     *
+     */
+    public void setWorkflowRequestTableRecords(ArrayOfOAWorkflowRequestTableRecord value) {
+        this.workflowRequestTableRecords = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/ObjectFactory.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ObjectFactory.java
new file mode 100644
index 0000000..d19d18a
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/ObjectFactory.java
@@ -0,0 +1,149 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the com.chinaztt.mes.common.oa package.
+ * <p>An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups.  Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _String_QNAME = new QName("http://tempuri.org/", "string");
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.chinaztt.mes.common.oa
+     *
+     */
+    public ObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link AddWorkflowResponse }
+     *
+     */
+    public AddWorkflowResponse createAddWorkflowResponse() {
+        return new AddWorkflowResponse();
+    }
+
+    /**
+     * Create an instance of {@link AddWorkflow }
+     *
+     */
+    public AddWorkflow createAddWorkflow() {
+        return new AddWorkflow();
+    }
+
+    /**
+     * Create an instance of {@link OAWorkflowRequestInfo }
+     *
+     */
+    public OAWorkflowRequestInfo createOAWorkflowRequestInfo() {
+        return new OAWorkflowRequestInfo();
+    }
+
+    /**
+     * Create an instance of {@link UpdateAndSubmitWorkflow }
+     *
+     */
+    public UpdateAndSubmitWorkflow createUpdateAndSubmitWorkflow() {
+        return new UpdateAndSubmitWorkflow();
+    }
+
+    /**
+     * Create an instance of {@link UpdateAndSubmitWorkflowResponse }
+     *
+     */
+    public UpdateAndSubmitWorkflowResponse createUpdateAndSubmitWorkflowResponse() {
+        return new UpdateAndSubmitWorkflowResponse();
+    }
+
+    /**
+     * Create an instance of {@link ForwardWorkflowRequestResponse }
+     *
+     */
+    public ForwardWorkflowRequestResponse createForwardWorkflowRequestResponse() {
+        return new ForwardWorkflowRequestResponse();
+    }
+
+    /**
+     * Create an instance of {@link ForwardWorkflowRequest }
+     *
+     */
+    public ForwardWorkflowRequest createForwardWorkflowRequest() {
+        return new ForwardWorkflowRequest();
+    }
+
+    /**
+     * Create an instance of {@link OAWorkflowTable }
+     *
+     */
+    public OAWorkflowTable createOAWorkflowTable() {
+        return new OAWorkflowTable();
+    }
+
+    /**
+     * Create an instance of {@link OAWorkflowRequestTableRecord }
+     *
+     */
+    public OAWorkflowRequestTableRecord createOAWorkflowRequestTableRecord() {
+        return new OAWorkflowRequestTableRecord();
+    }
+
+    /**
+     * Create an instance of {@link ArrayOfOAWorkflowTable }
+     *
+     */
+    public ArrayOfOAWorkflowTable createArrayOfOAWorkflowTable() {
+        return new ArrayOfOAWorkflowTable();
+    }
+
+    /**
+     * Create an instance of {@link ArrayOfOAWorkflowRequestTableRecord }
+     *
+     */
+    public ArrayOfOAWorkflowRequestTableRecord createArrayOfOAWorkflowRequestTableRecord() {
+        return new ArrayOfOAWorkflowRequestTableRecord();
+    }
+
+    /**
+     * Create an instance of {@link OAWorkflowRequestTableField }
+     *
+     */
+    public OAWorkflowRequestTableField createOAWorkflowRequestTableField() {
+        return new OAWorkflowRequestTableField();
+    }
+
+    /**
+     * Create an instance of {@link ArrayOfOAWorkflowRequestTableField }
+     *
+     */
+    public ArrayOfOAWorkflowRequestTableField createArrayOfOAWorkflowRequestTableField() {
+        return new ArrayOfOAWorkflowRequestTableField();
+    }
+
+    /**
+     * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+     *
+     */
+    @XmlElementDecl(namespace = "http://tempuri.org/", name = "string")
+    public JAXBElement<String> createString(String value) {
+        return new JAXBElement<String>(_String_QNAME, String.class, null, value);
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflow.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflow.java
new file mode 100644
index 0000000..7f82b54
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflow.java
@@ -0,0 +1,143 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType>
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="appKey" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="wri" type="{http://tempuri.org/}OA_WorkflowRequestInfo" minOccurs="0"/>
+ *         &lt;element name="errorCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="errorMsg" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "appKey",
+    "wri",
+    "errorCode",
+    "errorMsg"
+})
+@XmlRootElement(name = "UpdateAndSubmitWorkflow")
+public class UpdateAndSubmitWorkflow {
+
+    protected String appKey;
+    protected OAWorkflowRequestInfo wri;
+    protected String errorCode;
+    protected String errorMsg;
+
+    /**
+     * 鑾峰彇appKey灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getAppKey() {
+        return appKey;
+    }
+
+    /**
+     * 璁剧疆appKey灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setAppKey(String value) {
+        this.appKey = value;
+    }
+
+    /**
+     * 鑾峰彇wri灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link OAWorkflowRequestInfo }
+     *
+     */
+    public OAWorkflowRequestInfo getWri() {
+        return wri;
+    }
+
+    /**
+     * 璁剧疆wri灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link OAWorkflowRequestInfo }
+     *
+     */
+    public void setWri(OAWorkflowRequestInfo value) {
+        this.wri = value;
+    }
+
+    /**
+     * 鑾峰彇errorCode灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    /**
+     * 璁剧疆errorCode灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorCode(String value) {
+        this.errorCode = value;
+    }
+
+    /**
+     * 鑾峰彇errorMsg灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    /**
+     * 璁剧疆errorMsg灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorMsg(String value) {
+        this.errorMsg = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflowResponse.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflowResponse.java
new file mode 100644
index 0000000..37153bc
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/UpdateAndSubmitWorkflowResponse.java
@@ -0,0 +1,114 @@
+
+package com.ruoyi.common.oa;
+
+import javax.xml.bind.annotation.*;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType>
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="UpdateAndSubmitWorkflowResult" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="errorCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         &lt;element name="errorMsg" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "updateAndSubmitWorkflowResult",
+    "errorCode",
+    "errorMsg"
+})
+@XmlRootElement(name = "UpdateAndSubmitWorkflowResponse")
+public class UpdateAndSubmitWorkflowResponse {
+
+    @XmlElement(name = "UpdateAndSubmitWorkflowResult")
+    protected String updateAndSubmitWorkflowResult;
+    protected String errorCode;
+    protected String errorMsg;
+
+    /**
+     * 鑾峰彇updateAndSubmitWorkflowResult灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getUpdateAndSubmitWorkflowResult() {
+        return updateAndSubmitWorkflowResult;
+    }
+
+    /**
+     * 璁剧疆updateAndSubmitWorkflowResult灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setUpdateAndSubmitWorkflowResult(String value) {
+        this.updateAndSubmitWorkflowResult = value;
+    }
+
+    /**
+     * 鑾峰彇errorCode灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    /**
+     * 璁剧疆errorCode灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorCode(String value) {
+        this.errorCode = value;
+    }
+
+    /**
+     * 鑾峰彇errorMsg灞炴�х殑鍊笺��
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    /**
+     * 璁剧疆errorMsg灞炴�х殑鍊笺��
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setErrorMsg(String value) {
+        this.errorMsg = value;
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/oa/package-info.java b/ruoyi-common/src/main/java/com/ruoyi/common/oa/package-info.java
new file mode 100644
index 0000000..cd30acf
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/oa/package-info.java
@@ -0,0 +1,2 @@
+@javax.xml.bind.annotation.XmlSchema(namespace = "http://tempuri.org/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+package com.ruoyi.common.oa;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ApplicationContextHolder.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ApplicationContextHolder.java
new file mode 100644
index 0000000..a610a15
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ApplicationContextHolder.java
@@ -0,0 +1,52 @@
+package com.ruoyi.common.utils;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: zhangxy
+ * @Date: 2021-05-24 16:29
+ */
+@Component
+public class ApplicationContextHolder implements ApplicationContextAware {
+	private static ApplicationContext applicationContext;
+
+	@Override
+	public void setApplicationContext(ApplicationContext ctx) throws BeansException {
+		applicationContext = ctx;
+	}
+
+	/**
+	 * Get application context from everywhere
+	 *
+	 * @return
+	 */
+	public static ApplicationContext getApplicationContext() {
+		return applicationContext;
+	}
+
+	/**
+	 * Get bean by class
+	 *
+	 * @param clazz
+	 * @param <T>
+	 * @return
+	 */
+	public static <T> T getBean(Class<T> clazz) {
+		return applicationContext.getBean(clazz);
+	}
+
+	/**
+	 * Get bean by class name
+	 *
+	 * @param name
+	 * @param <T>
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T getBean(String name) {
+		return (T) applicationContext.getBean(name);
+	}
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FormatterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FormatterConfig.java
deleted file mode 100644
index 5360870..0000000
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FormatterConfig.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//package com.ruoyi.framework.config;
-//
-//import com.fasterxml.jackson.databind.DeserializationFeature;
-//import com.fasterxml.jackson.databind.ObjectMapper;
-//import com.fasterxml.jackson.databind.SerializationFeature;
-//import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-//import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
-//import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.http.converter.HttpMessageConverter;
-//import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
-//import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-//import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
-//
-//import java.text.SimpleDateFormat;
-//import java.time.LocalDateTime;
-//import java.time.format.DateTimeFormatter;
-//import java.util.List;
-//
-//@Configuration
-//public class FormatterConfig extends WebMvcConfigurationSupport {
-//
-//
-//    @Value("${spring.jackson.date-format}")
-//    private String pattern;
-//
-//    // 鍏ㄥ眬鏍煎紡鍖栧鐞�
-//    @Override
-//    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
-//        Jackson2ObjectMapperBuilder json = Jackson2ObjectMapperBuilder.json();
-//        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
-//
-//        //localDateTime鏍煎紡鍖�
-//        JavaTimeModule module = new JavaTimeModule();
-//        LocalDateTimeDeserializer dateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern));
-//        LocalDateTimeSerializer dateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
-//        module.addDeserializer(LocalDateTime.class, dateTimeDeserializer);
-//        module.addSerializer(LocalDateTime.class, dateTimeSerializer);
-//        ObjectMapper objectMapper = json.modules(module)
-//                .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build();
-//
-//        //date鏃堕棿鏍煎紡鍖�
-//        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-//        objectMapper.setDateFormat(new SimpleDateFormat(pattern.split(" ")[0]));
-//
-//        // 璁剧疆鏍煎紡鍖栧唴瀹�
-//        converter.setObjectMapper(objectMapper);
-//        converters.add(0, converter);
-//    }
-//}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/LocalDateTimeSerializerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/LocalDateTimeSerializerConfig.java
new file mode 100644
index 0000000..f6c966a
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/LocalDateTimeSerializerConfig.java
@@ -0,0 +1,36 @@
+package com.ruoyi.framework.config;
+
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Configuration
+public class LocalDateTimeSerializerConfig {
+    @Value("${spring.jackson.date-format}")
+    private String pattern;
+
+    @Bean
+    public LocalDateTimeSerializer localDateTimeSerializer() {
+        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
+    }
+
+    @Bean
+    public LocalDateTimeDeserializer localDateTimeDeserializer() {
+        return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern));
+    }
+
+    @Bean
+    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
+        return builder -> {
+            builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
+            builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
+            builder.simpleDateFormat(pattern);
+        };
+    }
+}

--
Gitblit v1.9.3