Browse Source

加入 添加流程

java110 4 years ago
parent
commit
e4c5493e41

+ 10 - 0
java110-bean/src/main/java/com/java110/entity/audit/AuditUser.java

@@ -27,6 +27,8 @@ public class AuditUser extends PageDto implements Serializable {
     //流程对象编码
     private String objCode;
 
+    private String processDefinitionKey;
+
 
     public String getObjCode() {
         return objCode;
@@ -83,4 +85,12 @@ public class AuditUser extends PageDto implements Serializable {
     public void setCommunityId(String communityId) {
         this.communityId = communityId;
     }
+
+    public String getProcessDefinitionKey() {
+        return processDefinitionKey;
+    }
+
+    public void setProcessDefinitionKey(String processDefinitionKey) {
+        this.processDefinitionKey = processDefinitionKey;
+    }
 }

+ 18 - 4
java110-db/src/main/resources/mapper/oa/OaWorkflowFormServiceDaoImplMapper.xml

@@ -73,7 +73,7 @@
             , t.table_name= #{tableName}
         </if>
         where 1=1
-            and t.form_id= #{formId}
+        and t.form_id= #{formId}
 
     </update>
 
@@ -117,14 +117,13 @@
     </update>
 
 
-
     <!-- 查询OA表单数量 add by wuxw 2018-07-03 -->
     <select id="queryOaWorkflowFormDataCount" parameterType="Map" resultType="Map">
         select count(1) count
         from ${tableName} t
         where 1 =1
-            and t.store_id = #{storeId}
-            and t.status_cd= '0'
+        and t.store_id = #{storeId}
+        and t.status_cd= '0'
         <if test="startTime !=null and startTime != ''">
             and t.create_time &gt; #{startTime}
         </if>
@@ -164,4 +163,19 @@
         </if>
     </select>
 
+    <!-- 保存表单数据 -->
+    <insert id="saveOaWorkflowFormDataInfo" parameterType="Map">
+        insert into ${tableName} (
+        <foreach collection="columns" item="item" separator=",">
+            ${item}
+        </foreach>
+        id,create_user_id,create_user_name,state
+        )values(
+        <foreach collection="values" item="valueItem" separator=",">
+            #{valueItem}
+        </foreach>,
+        #{id},#{state},#{createUserId},#{createUserName}
+        )
+    </insert>
+
 </mapper>

+ 88 - 0
java110-interface/src/main/java/com/java110/intf/common/IOaWorkflowUserInnerServiceSMO.java

@@ -0,0 +1,88 @@
+package com.java110.intf.common;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.config.feign.FeignConfiguration;
+import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.entity.audit.AuditUser;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import java.util.List;
+
+@FeignClient(name = "common-service", configuration = {FeignConfiguration.class})
+@RequestMapping("/oaWorkflowUserApi")
+public interface IOaWorkflowUserInnerServiceSMO {
+
+    /**
+     * 启动流程
+     *
+     * @return
+     */
+    @RequestMapping(value = "/startProcess", method = RequestMethod.POST)
+    JSONObject startProcess(@RequestBody JSONObject reqJson);
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    @RequestMapping(value = "/getUserTaskCount", method = RequestMethod.POST)
+    long getUserTaskCount(@RequestBody AuditUser user);
+
+    /**
+     * 获取用户任务
+     *
+     * @param user 用户信息
+     */
+    @RequestMapping(value = "/getUserTasks", method = RequestMethod.POST)
+    List<JSONObject> getUserTasks(@RequestBody AuditUser user);
+
+    /**
+     * 查询用户处理任务数
+     *
+     * @param user
+     * @return
+     */
+    @RequestMapping(value = "/getUserHistoryTaskCount", method = RequestMethod.POST)
+    long getUserHistoryTaskCount(@RequestBody AuditUser user);
+
+    /**
+     * 获取用户处理审批的任务
+     *
+     * @param user 用户信息
+     */
+    @RequestMapping(value = "/getUserHistoryTasks", method = RequestMethod.POST)
+    List<JSONObject> getUserHistoryTasks(@RequestBody AuditUser user);
+
+
+    /**
+     * 处理任务
+     *
+     * @param reqJson
+     * @return true 为流程结束 false 为流程没有结束
+     */
+    @RequestMapping(value = "/completeTask", method = RequestMethod.POST)
+    boolean completeTask(@RequestBody JSONObject reqJson);
+
+    /**
+     * 查询批注信息
+     *
+     * @param reqJson
+     * @return
+     */
+    @RequestMapping(value = "/getAuditMessage", method = RequestMethod.POST)
+    List<AuditMessageDto> getAuditMessage(@RequestBody JSONObject reqJson);
+
+    /**
+     * 获取任务当前处理人
+     *
+     * @param reqJson
+     * @return
+     */
+    @RequestMapping(value = "/getTaskCurrentUser", method = RequestMethod.POST)
+    JSONObject getTaskCurrentUser(@RequestBody JSONObject reqJson);
+
+}

+ 7 - 0
java110-interface/src/main/java/com/java110/intf/oa/IOaWorkflowFormInnerServiceSMO.java

@@ -1,5 +1,6 @@
 package com.java110.intf.oa;
 
+import com.alibaba.fastjson.JSONObject;
 import com.java110.config.feign.FeignConfiguration;
 import com.java110.dto.oaWorkflowForm.OaWorkflowFormDto;
 import com.java110.po.oaWorkflowForm.OaWorkflowFormPo;
@@ -74,4 +75,10 @@ public interface IOaWorkflowFormInnerServiceSMO {
 
     @RequestMapping(value = "/queryOaWorkflowFormDatas", method = RequestMethod.POST)
     List<Map> queryOaWorkflowFormDatas(@RequestBody Map paramIn);
+
+    /**
+     * 保存表单数据
+     * @param reqJson
+     */
+    int saveOaWorkflowFormData(@RequestBody JSONObject reqJson);
 }

+ 0 - 1
service-api/src/main/java/com/java110/api/listener/complaint/SaveComplaintListener.java

@@ -46,7 +46,6 @@ public class SaveComplaintListener extends AbstractServiceApiPlusListener {
         Assert.hasKeyAndValue(reqJson, "complaintName", "必填,请填写投诉人");
         Assert.hasKeyAndValue(reqJson, "tel", "必填,请填写投诉电话");
         Assert.hasKeyAndValue(reqJson, "userId", "必填,请填写用户信息");
-        //Assert.hasKeyAndValue(reqJson, "state", "必填,请填写投诉状态");
         Assert.hasKeyAndValue(reqJson, "context", "必填,请填写投诉内容");
         Assert.hasKeyAndValue(reqJson, "communityId", "必填,请填写小区ID");
 

+ 1 - 5
service-common/src/main/java/com/java110/common/bmo/workflow/impl/QueryWorkFlowFirstStaffBMOImpl.java

@@ -216,11 +216,6 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
         Assert.listOnlyOne(oaWorkflowFormDtos, "未设置表单");
         //查询表是否存在
 
-//        int count = oaWorkflowFormInnerServiceSMOImpl.hasTable(oaWorkflowFormDtos.get(0).getTableName());
-//        if (count > 0) { // 已经部署过不用再部署
-//            return;
-//        }
-
         String formJson = oaWorkflowFormDtos.get(0).getFormJson();
 
         Assert.isJsonObject(formJson, "表单设计出错,请重新设计");
@@ -293,6 +288,7 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
         sql.append("store_id varchar(30) not null COMMENT '商户ID',");
         sql.append("create_user_id varchar(30) not null COMMENT '创建人ID',");
         sql.append("create_user_name varchar(64) not null COMMENT '创建人',");
+        sql.append("state varchar(12) not null COMMENT '状态 1001 申请 1002 待审核 1003 退回 1004 委托 1005 办结',");
         sql.append("create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',");
         sql.append("status_cd varchar(2) NOT NULL DEFAULT '0' COMMENT '数据状态,详细参考c_status表,S 保存,0, 在用 1失效'");
         sql.append(")");

+ 329 - 0
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java

@@ -0,0 +1,329 @@
+package com.java110.common.smo.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.dto.PageDto;
+import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.user.UserDto;
+import com.java110.dto.workflow.WorkflowDto;
+import com.java110.entity.audit.AuditUser;
+import com.java110.intf.common.IOaWorkflowUserInnerServiceSMO;
+import com.java110.intf.common.IWorkflowInnerServiceSMO;
+import com.java110.intf.store.IComplaintInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricTaskInstance;
+import org.activiti.engine.history.HistoricTaskInstanceQuery;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.query.Query;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Comment;
+import org.activiti.engine.task.Task;
+import org.activiti.engine.task.TaskQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+//@Service("resourceEntryStoreSMOImpl")
+@RestController
+public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements IOaWorkflowUserInnerServiceSMO {
+
+    @Autowired
+    private ProcessEngine processEngine;
+
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
+
+    @Autowired
+    private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl;
+
+
+    /**
+     * 启动流程
+     *
+     * @return
+     */
+    public JSONObject startProcess(@RequestBody JSONObject reqJson) {
+        //将信息加入map,以便传入流程中
+        Map<String, Object> variables = new HashMap<String, Object>();
+        //variables.put("reqJson", reqJson);
+        variables.put("startUserId", reqJson.getString("createUserId"));
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(getWorkflowDto(reqJson.getString("processDefinitionKey")), reqJson.getString("id"), variables);
+        //将得到的实例流程id值赋给之前设置的变量
+        String processInstanceId = processInstance.getId();
+        // System.out.println("流程开启成功.......实例流程id:" + processInstanceId);
+        reqJson.put("processInstanceId", processInstanceId);
+        //第一个节点自动提交
+        //autoFinishFirstTask(reqJson);
+        return reqJson;
+    }
+
+    private String getWorkflowDto(String processDefinitionKey) {
+        return WorkflowDto.DEFAULT_PROCESS + processDefinitionKey;
+    }
+
+    /**
+     * 自动提交第一步
+     */
+    private void autoFinishFirstTask(JSONObject reqJson) {
+        Task task = null;
+        TaskQuery query = taskService.createTaskQuery().taskCandidateOrAssigned(reqJson.getString("createUserId")).active();
+        List<Task> todoList = query.list();//获取申请人的待办任务列表
+        for (Task tmp : todoList) {
+            if (tmp.getProcessInstanceId().equals(reqJson.getString("processInstanceId"))) {
+                task = tmp;//获取当前流程实例,当前申请人的待办任务
+                break;
+            }
+        }
+        Assert.notNull(task, "未找到当前用户任务userId = " + reqJson.getString("createUserId"));
+        reqJson.put("taskId", task.getId());
+        reqJson.put("auditCode", "10000");
+        reqJson.put("auditMessage", "提交");
+        completeTask(reqJson);
+    }
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    public long getUserTaskCount(@RequestBody AuditUser user) {
+        TaskService taskService = processEngine.getTaskService();
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey(getWorkflowDto(user.getProcessDefinitionKey()));
+        query.taskAssignee(user.getUserId());
+        return query.count();
+    }
+
+    /**
+     * 获取用户任务
+     *
+     * @param user 用户信息
+     */
+    public List<JSONObject> getUserTasks(@RequestBody AuditUser user) {
+        TaskService taskService = processEngine.getTaskService();
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey(getWorkflowDto(user.getProcessDefinitionKey()));
+        ;
+        query.taskAssignee(user.getUserId());
+        query.orderByTaskCreateTime().desc();
+        List<Task> list = null;
+        if (user.getPage() != PageDto.DEFAULT_PAGE) {
+            list = query.listPage((user.getPage() - 1) * user.getRow(), user.getRow());
+        } else {
+            list = query.list();
+        }
+        JSONObject taskBusinessKeyMap = null;
+        List<JSONObject> tasks = new ArrayList<>();
+        for (Task task : list) {
+            taskBusinessKeyMap = new JSONObject();
+            String processInstanceId = task.getProcessInstanceId();
+            //3.使用流程实例,查询
+            ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+            //4.使用流程实例对象获取BusinessKey
+            String business_key = pi.getBusinessKey();
+            taskBusinessKeyMap.put(business_key, task.getId());
+            tasks.add(taskBusinessKeyMap);
+        }
+        return tasks;
+    }
+
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    public long getUserHistoryTaskCount(@RequestBody AuditUser user) {
+        HistoryService historyService = processEngine.getHistoryService();
+//        Query query = historyService.createHistoricTaskInstanceQuery()
+//                .processDefinitionKey("complaint")
+//                .taskAssignee(user.getUserId());
+
+        HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
+                .processDefinitionKey(getWorkflowDto(user.getProcessDefinitionKey()))
+                .taskAssignee(user.getUserId())
+                .finished();
+        if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("complaint");
+        } else if (!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("complaitDealUser");
+        }
+
+        Query query = historicTaskInstanceQuery;
+
+        return query.count();
+    }
+
+    /**
+     * 获取用户审批的任务
+     *
+     * @param user 用户信息
+     */
+    public List<JSONObject> getUserHistoryTasks(@RequestBody AuditUser user) {
+        HistoryService historyService = processEngine.getHistoryService();
+
+        HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
+                .processDefinitionKey(getWorkflowDto(user.getProcessDefinitionKey()))
+                .taskAssignee(user.getUserId())
+                .finished();
+        if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("complaint");
+        } else if (!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("complaitDealUser");
+        }
+
+        Query query = historicTaskInstanceQuery.orderByHistoricTaskInstanceStartTime().desc();
+
+        List<HistoricTaskInstance> list = null;
+        if (user.getPage() != PageDto.DEFAULT_PAGE) {
+            list = query.listPage((user.getPage() - 1) * user.getRow(), user.getRow());
+        } else {
+            list = query.list();
+        }
+        JSONObject taskBusinessKeyMap = null;
+        List<JSONObject> tasks = new ArrayList<>();
+        List<String> complaintIds = new ArrayList<>();
+        for (HistoricTaskInstance task : list) {
+            String processInstanceId = task.getProcessInstanceId();
+            //3.使用流程实例,查询
+            HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+            //4.使用流程实例对象获取BusinessKey
+            String business_key = pi.getBusinessKey();
+            taskBusinessKeyMap.put(business_key, task.getId());
+            tasks.add(taskBusinessKeyMap);
+        }
+        return tasks;
+    }
+
+
+    public boolean completeTask(@RequestBody JSONObject reqJson) {
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
+        String processInstanceId = task.getProcessInstanceId();
+        Authentication.setAuthenticatedUserId(reqJson.getString("createUserId"));
+        taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("auditCode", reqJson.getString("auditCode"));
+        variables.put("currentUserId", reqJson.getString("createUserId"));
+        variables.put("flag", "1200".equals(reqJson.getString("auditCode")) ? "false" : "true");
+        variables.put("startUserId", reqJson.getString("startUserId"));
+        taskService.complete(reqJson.getString("taskId"), variables);
+
+        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+        if (pi == null) {
+            return true;
+        }
+        return false;
+    }
+
+    public List<AuditMessageDto> getAuditMessage(@RequestBody JSONObject reqJson) {
+
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
+        String processInstanceId = task.getProcessInstanceId();
+        List<Comment> comments = taskService.getProcessInstanceComments(processInstanceId);
+        List<AuditMessageDto> auditMessageDtos = new ArrayList<>();
+        if (comments == null || comments.size() < 1) {
+            return auditMessageDtos;
+        }
+        AuditMessageDto messageDto = null;
+        for (Comment comment : comments) {
+            messageDto = new AuditMessageDto();
+            messageDto.setCreateTime(comment.getTime());
+            messageDto.setUserId(comment.getUserId());
+            messageDto.setMessage(comment.getFullMessage());
+        }
+
+        return auditMessageDtos;
+    }
+
+    /**
+     * 获取任务当前处理人
+     *
+     * @param reqJson
+     * @return
+     */
+    public JSONObject getTaskCurrentUser(@RequestBody JSONObject reqJson) {
+
+        TaskService taskService = processEngine.getTaskService();
+        List<Task> tasks = taskService.createTaskQuery().processInstanceBusinessKey(reqJson.getString("id")).list();
+
+        if (tasks == null || tasks.size() == 0) {
+            reqJson.put("currentUserId","");
+            reqJson.put("currentUserName","");
+            reqJson.put("currentUserTel","");
+            return reqJson;
+        }
+        String userIds = "";
+        String userNames = "";
+        String userTels = "";
+        String taskIds = "";
+        for (Task task : tasks) {
+            String userId = task.getAssignee();
+            taskIds += (task.getId() + "/");
+            List<UserDto> users = userInnerServiceSMOImpl.getUserInfo(new String[]{userId});
+            if (users == null || users.size() == 0) {
+                continue;
+            }
+            userIds += (userId + "/");
+            userNames += (users.get(0).getName() + "/");
+            userTels += (users.get(0).getTel() + "/");
+        }
+        userIds = userIds.endsWith("/") ? userIds.substring(0, userIds.length() - 1) : userIds;
+        userNames = userNames.endsWith("/") ? userNames.substring(0, userNames.length() - 1) : userNames;
+        userTels = userTels.endsWith("/") ? userTels.substring(0, userTels.length() - 1) : userTels;
+        taskIds = taskIds.endsWith("/") ? taskIds.substring(0, taskIds.length() - 1) : taskIds;
+
+        reqJson.put("currentUserId",userIds);
+        reqJson.put("currentUserName",userNames);
+        reqJson.put("currentUserTel",userTels);
+        reqJson.put("taskId",taskIds);
+        return reqJson;
+
+    }
+
+
+    public ProcessEngine getProcessEngine() {
+        return processEngine;
+    }
+
+    public void setProcessEngine(ProcessEngine processEngine) {
+        this.processEngine = processEngine;
+    }
+
+    public RuntimeService getRuntimeService() {
+        return runtimeService;
+    }
+
+    public void setRuntimeService(RuntimeService runtimeService) {
+        this.runtimeService = runtimeService;
+    }
+
+    public TaskService getTaskService() {
+        return taskService;
+    }
+
+    public void setTaskService(TaskService taskService) {
+        this.taskService = taskService;
+    }
+
+}

+ 44 - 14
service-oa/src/main/java/com/java110/oa/api/OaWorkflowApi.java

@@ -21,12 +21,14 @@ import com.java110.po.oaWorkflowForm.OaWorkflowFormPo;
 import com.java110.po.oaWorkflowXml.OaWorkflowXmlPo;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
-import org.bouncycastle.jcajce.provider.digest.MD2;
+import com.mysql.cj.x.protobuf.MysqlxDatatypes;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @RestController
@@ -323,20 +325,48 @@ public class OaWorkflowApi {
      */
     @RequestMapping(value = "/queryOaWorkflowFormData", method = RequestMethod.GET)
     public ResponseEntity<String> queryOaWorkflowFormData(@RequestHeader(value = "store-id") String storeId,
-                                                      @RequestParam(value = "flowId", required = false) String flowId,
-                                                      @RequestParam(value = "startTime", required = false) String startTime,
-                                                      @RequestParam(value = "endTime", required = false) String endTime,
-                                                      @RequestParam(value = "createUserName", required = false) String createUserName,
-                                                      @RequestParam(value = "page") int page,
-                                                      @RequestParam(value = "row") int row) {
+                                                          @RequestParam(value = "flowId", required = false) String flowId,
+                                                          @RequestParam(value = "startTime", required = false) String startTime,
+                                                          @RequestParam(value = "endTime", required = false) String endTime,
+                                                          @RequestParam(value = "createUserName", required = false) String createUserName,
+                                                          @RequestParam(value = "page") int page,
+                                                          @RequestParam(value = "row") int row) {
         Map paramIn = new HashMap();
-        paramIn.put("page",page);
-        paramIn.put("row",row);
-        paramIn.put("createUserName",createUserName);
-        paramIn.put("endTime",endTime);
-        paramIn.put("startTime",startTime);
-        paramIn.put("flowId",flowId);
-        paramIn.put("storeId",storeId);
+        paramIn.put("page", page);
+        paramIn.put("row", row);
+        paramIn.put("createUserName", createUserName);
+        paramIn.put("endTime", endTime);
+        paramIn.put("startTime", startTime);
+        paramIn.put("flowId", flowId);
+        paramIn.put("storeId", storeId);
         return getOaWorkflowFormBMOImpl.queryOaWorkflowFormData(paramIn);
     }
+
+    /**
+     * 保存流程数据
+     *
+     * @param storeId 小区ID
+     * @return
+     * @serviceCode /oaWorkflow/saveOaWorkflowFormData
+     * @path /app/oaWorkflow/saveOaWorkflowFormData
+     */
+    @RequestMapping(value = "/saveOaWorkflowFormData", method = RequestMethod.POST)
+    public ResponseEntity<String> saveOaWorkflowFormData(@RequestHeader(value = "store-id") String storeId,
+                                                         @RequestHeader(value = "user-id") String userId,
+                                                         @RequestBody JSONObject reqJson) {
+        Assert.hasKeyAndValue(reqJson, "flowId", "flowId不能为空");
+        List<String> columns = new ArrayList<>();
+        List<String> values = new ArrayList<>();
+        for (String key : reqJson.keySet()) {
+            if ("flowId".equals(key)) {
+                continue;
+            }
+            columns.add(key);
+            values.add(reqJson.getString(key));
+        }
+        reqJson.put("columns",columns.toArray(new String[columns.size()]));
+        reqJson.put("values",columns.toArray(new String[values.size()]));
+        reqJson.put("storeId", storeId);
+        return getOaWorkflowFormBMOImpl.saveOaWorkflowFormData(reqJson);
+    }
 }

+ 8 - 0
service-oa/src/main/java/com/java110/oa/bmo/oaWorkflowForm/IGetOaWorkflowFormBMO.java

@@ -1,4 +1,5 @@
 package com.java110.oa.bmo.oaWorkflowForm;
+import com.alibaba.fastjson.JSONObject;
 import com.java110.dto.oaWorkflowForm.OaWorkflowFormDto;
 import org.springframework.http.ResponseEntity;
 
@@ -17,4 +18,11 @@ public interface IGetOaWorkflowFormBMO {
 
 
     ResponseEntity<String> queryOaWorkflowFormData(Map paramIn);
+
+    /**
+     * 保存表单数据
+     * @param reqJson
+     * @return
+     */
+    ResponseEntity<String> saveOaWorkflowFormData(JSONObject reqJson);
 }

+ 74 - 2
service-oa/src/main/java/com/java110/oa/bmo/oaWorkflowForm/impl/GetOaWorkflowFormBMOImpl.java

@@ -1,10 +1,17 @@
 package com.java110.oa.bmo.oaWorkflowForm.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
 import com.java110.dto.oaWorkflowForm.OaWorkflowFormDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.common.IOaWorkflowUserInnerServiceSMO;
 import com.java110.intf.oa.IOaWorkflowFormInnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
 import com.java110.oa.bmo.oaWorkflowForm.IGetOaWorkflowFormBMO;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -12,7 +19,6 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -22,6 +28,15 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
     @Autowired
     private IOaWorkflowFormInnerServiceSMO oaWorkflowFormInnerServiceSMOImpl;
 
+    @Autowired
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowUserInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
+
     /**
      * @param oaWorkflowFormDto
      * @return 订单服务能够接受的报文
@@ -55,6 +70,7 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
      * {"key":"textdate1","label":"日期","type":"textdate"},
      * {"key":"textdatetime1","label":"时间","type":"textdatetime"},
      * {"action":"submit","key":"button1","label":"Button","type":"button"}],"type":"default"}
+     *
      * @param paramIn
      * @return
      */
@@ -70,7 +86,7 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
 
         Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单");
 
-        paramIn.put("tableName",oaWorkflowFormDtos.get(0).getTableName());
+        paramIn.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
 
         int count = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDataCount(paramIn);
 
@@ -88,4 +104,60 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
         return responseEntity;
     }
 
+    /**
+     * 保存表单数据
+     *
+     * @param reqJson
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> saveOaWorkflowFormData(JSONObject reqJson) {
+        OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto();
+        oaWorkflowFormDto.setFlowId(reqJson.get("flowId").toString());
+        oaWorkflowFormDto.setStoreId(reqJson.get("storeId").toString());
+        oaWorkflowFormDto.setRow(1);
+        oaWorkflowFormDto.setPage(1);
+        List<OaWorkflowFormDto> oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto);
+        Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单");
+
+        //
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDto.setFlowId(reqJson.getString("flowId"));
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+        Assert.listOnlyOne(oaWorkflowDtos, "流程不存在");
+
+        if (!OaWorkflowDto.STATE_COMPLAINT.equals(oaWorkflowDtos.get(0).getState())) {
+            throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署");
+        }
+
+        if (StringUtil.isEmpty(oaWorkflowDtos.get(0).getProcessDefinitionKey())) {
+            throw new IllegalArgumentException(oaWorkflowDtos.get(0).getFlowName() + "流程未部署");
+        }
+
+        //查询用户名称
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("userId"));
+        List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "用户不存在");
+
+        //保存表单数据
+        reqJson.put("id", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_flowId));
+        reqJson.put("state", "1001");
+        reqJson.put("createUserId", reqJson.getString("userId"));
+        reqJson.put("createUserName", userDtos.get(0).getUserName());
+        reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
+
+        int flag = oaWorkflowFormInnerServiceSMOImpl.saveOaWorkflowFormData(reqJson);
+        if (flag < 1) {
+            throw new IllegalArgumentException("保存失败");
+        }
+
+        reqJson.put("processDefinitionKey", oaWorkflowDtos.get(0).getProcessDefinitionKey());
+        oaWorkflowUserInnerServiceSMOImpl.startProcess(reqJson);
+
+        return ResultVo.success();
+    }
+
 }

+ 7 - 0
service-oa/src/main/java/com/java110/oa/dao/IOaWorkflowFormServiceDao.java

@@ -70,4 +70,11 @@ public interface IOaWorkflowFormServiceDao {
     int queryOaWorkflowFormDataCount(Map paramIn);
 
     List<Map> queryOaWorkflowFormDatas(Map paramIn);
+
+    /**
+     * 保存数据
+     * @param paramIn
+     * @return
+     */
+    int saveOaWorkflowFormDataInfo(Map paramIn);
 }

+ 8 - 0
service-oa/src/main/java/com/java110/oa/dao/impl/OaWorkflowFormServiceDaoImpl.java

@@ -136,5 +136,13 @@ public class OaWorkflowFormServiceDaoImpl extends BaseServiceDao implements IOaW
         return businessOaWorkflowFormInfos;
     }
 
+    @Override
+    public int saveOaWorkflowFormDataInfo(Map paramIn) {
+        logger.debug("保存saveOaWorkflowFormDataInfo 入参 info : {}",paramIn);
+
+        int saveFlag = sqlSessionTemplate.insert("oaWorkflowFormServiceDaoImpl.saveOaWorkflowFormDataInfo",paramIn);
+        return saveFlag;
+    }
+
 
 }

+ 6 - 0
service-oa/src/main/java/com/java110/oa/smo/impl/OaWorkflowFormInnerServiceSMOImpl.java

@@ -1,6 +1,7 @@
 package com.java110.oa.smo.impl;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.dto.PageDto;
 import com.java110.dto.oaWorkflowForm.OaWorkflowFormDto;
@@ -116,6 +117,11 @@ public class OaWorkflowFormInnerServiceSMOImpl extends BaseServiceSMO implements
         return info;
     }
 
+    @Override
+    public int saveOaWorkflowFormData(@RequestBody JSONObject reqJson) {
+        return oaWorkflowFormServiceDaoImpl.saveOaWorkflowFormDataInfo(BeanConvertUtil.beanCovertMap(reqJson));
+    }
+
     public IOaWorkflowFormServiceDao getOaWorkflowFormServiceDaoImpl() {
         return oaWorkflowFormServiceDaoImpl;
     }