瀏覽代碼

调整审批流程

java110 5 年之前
父節點
當前提交
1ad77028f7

+ 69 - 28
java110-bean/src/main/java/com/java110/dto/oaWorkflowData/OaWorkflowDataDto.java

@@ -1,6 +1,7 @@
 package com.java110.dto.oaWorkflowData;
 
 import com.java110.dto.PageDto;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -14,16 +15,21 @@ import java.util.Date;
  **/
 public class OaWorkflowDataDto extends PageDto implements Serializable {
 
+    public static final String EVENT_COMMIT = "C";
+    public static final String EVENT_TRANSFER = "C";
+
     private String dataId;
-private String businessKey;
-private String context;
-private String staffName;
-private String startTime;
-private String preDataId;
-private String endTime;
-private String storeId;
-private String event;
-private String staffId;
+    private String businessKey;
+    private String context;
+    private String staffName;
+    private String startTime;
+    private String preDataId;
+    private String endTime;
+    private String storeId;
+    private String event;
+    private String staffId;
+    private String flowId;
+    private String his;
 
 
     private Date createTime;
@@ -34,61 +40,80 @@ private String staffId;
     public String getDataId() {
         return dataId;
     }
-public void setDataId(String dataId) {
+
+    public void setDataId(String dataId) {
         this.dataId = dataId;
     }
-public String getBusinessKey() {
+
+    public String getBusinessKey() {
         return businessKey;
     }
-public void setBusinessKey(String businessKey) {
+
+    public void setBusinessKey(String businessKey) {
         this.businessKey = businessKey;
     }
-public String getContext() {
+
+    public String getContext() {
         return context;
     }
-public void setContext(String context) {
+
+    public void setContext(String context) {
         this.context = context;
     }
-public String getStaffName() {
+
+    public String getStaffName() {
         return staffName;
     }
-public void setStaffName(String staffName) {
+
+    public void setStaffName(String staffName) {
         this.staffName = staffName;
     }
-public String getStartTime() {
+
+    public String getStartTime() {
         return startTime;
     }
-public void setStartTime(String startTime) {
+
+    public void setStartTime(String startTime) {
         this.startTime = startTime;
     }
-public String getPreDataId() {
+
+    public String getPreDataId() {
         return preDataId;
     }
-public void setPreDataId(String preDataId) {
+
+    public void setPreDataId(String preDataId) {
         this.preDataId = preDataId;
     }
-public String getEndTime() {
+
+    public String getEndTime() {
         return endTime;
     }
-public void setEndTime(String endTime) {
+
+    public void setEndTime(String endTime) {
         this.endTime = endTime;
     }
-public String getStoreId() {
+
+    public String getStoreId() {
         return storeId;
     }
-public void setStoreId(String storeId) {
+
+    public void setStoreId(String storeId) {
         this.storeId = storeId;
     }
-public String getEvent() {
+
+    public String getEvent() {
         return event;
     }
-public void setEvent(String event) {
+
+    public void setEvent(String event) {
         this.event = event;
     }
-public String getStaffId() {
+
+    public String getStaffId() {
         return staffId;
     }
-public void setStaffId(String staffId) {
+
+    public void setStaffId(String staffId) {
         this.staffId = staffId;
     }
 
@@ -108,4 +133,20 @@ public void setStaffId(String staffId) {
     public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getHis() {
+        return his;
+    }
+
+    public void setHis(String his) {
+        this.his = his;
+    }
 }

+ 61 - 34
java110-bean/src/main/java/com/java110/po/oaWorkflowData/OaWorkflowDataPo.java

@@ -1,88 +1,115 @@
 package com.java110.po.oaWorkflowData;
 
 import java.io.Serializable;
-import java.util.Date;
 
 public class OaWorkflowDataPo implements Serializable {
 
     private String dataId;
-private String businessKey;
-private String context;
-private String staffName;
-private String startTime;
-private String preDataId;
-private String statusCd = "0";
-private String endTime;
-private String storeId;
-private String event;
-private String staffId;
-public String getDataId() {
+    private String flowId;
+    private String businessKey;
+    private String context;
+    private String staffName;
+    private String startTime;
+    private String preDataId;
+    private String statusCd = "0";
+    private String endTime;
+    private String storeId;
+    private String event;
+    private String staffId;
+
+    public String getDataId() {
         return dataId;
     }
-public void setDataId(String dataId) {
+
+    public void setDataId(String dataId) {
         this.dataId = dataId;
     }
-public String getBusinessKey() {
+
+    public String getBusinessKey() {
         return businessKey;
     }
-public void setBusinessKey(String businessKey) {
+
+    public void setBusinessKey(String businessKey) {
         this.businessKey = businessKey;
     }
-public String getContext() {
+
+    public String getContext() {
         return context;
     }
-public void setContext(String context) {
+
+    public void setContext(String context) {
         this.context = context;
     }
-public String getStaffName() {
+
+    public String getStaffName() {
         return staffName;
     }
-public void setStaffName(String staffName) {
+
+    public void setStaffName(String staffName) {
         this.staffName = staffName;
     }
-public String getStartTime() {
+
+    public String getStartTime() {
         return startTime;
     }
-public void setStartTime(String startTime) {
+
+    public void setStartTime(String startTime) {
         this.startTime = startTime;
     }
-public String getPreDataId() {
+
+    public String getPreDataId() {
         return preDataId;
     }
-public void setPreDataId(String preDataId) {
+
+    public void setPreDataId(String preDataId) {
         this.preDataId = preDataId;
     }
-public String getStatusCd() {
+
+    public String getStatusCd() {
         return statusCd;
     }
-public void setStatusCd(String statusCd) {
+
+    public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
-public String getEndTime() {
+
+    public String getEndTime() {
         return endTime;
     }
-public void setEndTime(String endTime) {
+
+    public void setEndTime(String endTime) {
         this.endTime = endTime;
     }
-public String getStoreId() {
+
+    public String getStoreId() {
         return storeId;
     }
-public void setStoreId(String storeId) {
+
+    public void setStoreId(String storeId) {
         this.storeId = storeId;
     }
-public String getEvent() {
+
+    public String getEvent() {
         return event;
     }
-public void setEvent(String event) {
+
+    public void setEvent(String event) {
         this.event = event;
     }
-public String getStaffId() {
+
+    public String getStaffId() {
         return staffId;
     }
-public void setStaffId(String staffId) {
+
+    public void setStaffId(String staffId) {
         this.staffId = staffId;
     }
 
+    public String getFlowId() {
+        return flowId;
+    }
 
-
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
 }

+ 136 - 122
java110-db/src/main/resources/mapper/oa/OaWorkflowDataServiceDaoImplMapper.xml

@@ -5,147 +5,161 @@
 <mapper namespace="oaWorkflowDataServiceDaoImpl">
 
 
-
-
-
     <!-- 保存OA表单审批数据信息 add by wuxw 2018-07-03 -->
     <insert id="saveOaWorkflowDataInfo" parameterType="Map">
         insert into oa_workflow_data(
-data_id,business_key,context,staff_name,start_time,pre_data_id,end_time,store_id,event,staff_id
-) values (
-#{dataId},#{businessKey},#{context},#{staffName},#{startTime},#{preDataId},#{endTime},#{storeId},#{event},#{staffId}
-)
+        data_id,business_key,context,staff_name,start_time,pre_data_id,end_time,store_id,event,staff_id,flow_id
+        ) values (
+        #{dataId},#{businessKey},#{context},#{staffName},#{startTime},#{preDataId},#{endTime},#{storeId},#{event},#{staffId},#{flowId}
+        )
     </insert>
 
 
-
     <!-- 查询OA表单审批数据信息 add by wuxw 2018-07-03 -->
     <select id="getOaWorkflowDataInfo" parameterType="Map" resultType="Map">
-        select  t.data_id,t.data_id dataId,t.business_key,t.business_key businessKey,t.context,t.staff_name,t.staff_name staffName,t.start_time,t.start_time startTime,t.pre_data_id,t.pre_data_id preDataId,t.status_cd,t.status_cd statusCd,t.end_time,t.end_time endTime,t.store_id,t.store_id storeId,t.event,t.staff_id,t.staff_id staffId 
-from oa_workflow_data t 
-where 1 =1 
-<if test="dataId !=null and dataId != ''">
-   and t.data_id= #{dataId}
-</if> 
-<if test="businessKey !=null and businessKey != ''">
-   and t.business_key= #{businessKey}
-</if> 
-<if test="context !=null and context != ''">
-   and t.context= #{context}
-</if> 
-<if test="staffName !=null and staffName != ''">
-   and t.staff_name= #{staffName}
-</if> 
-<if test="startTime !=null and startTime != ''">
-   and t.start_time= #{startTime}
-</if> 
-<if test="preDataId !=null and preDataId != ''">
-   and t.pre_data_id= #{preDataId}
-</if> 
-<if test="statusCd !=null and statusCd != ''">
-   and t.status_cd= #{statusCd}
-</if> 
-<if test="endTime !=null and endTime != ''">
-   and t.end_time= #{endTime}
-</if> 
-<if test="storeId !=null and storeId != ''">
-   and t.store_id= #{storeId}
-</if> 
-<if test="event !=null and event != ''">
-   and t.event= #{event}
-</if> 
-<if test="staffId !=null and staffId != ''">
-   and t.staff_id= #{staffId}
-</if> 
-order by t.create_time desc
-<if test="page != -1 and page != null ">
-   limit #{page}, #{row}
-</if> 
+        select t.data_id,t.data_id dataId,t.business_key,t.business_key businessKey,t.business_key id,t.context,t.staff_name,t.staff_name
+        staffName,t.start_time,t.start_time startTime,t.pre_data_id,t.pre_data_id preDataId,t.status_cd,t.status_cd
+        statusCd,t.end_time,t.end_time endTime,t.store_id,t.store_id storeId,t.event,t.staff_id,t.staff_id
+        staffId,t.flow_id flowId
+        from oa_workflow_data t
+        where 1 =1
+        <if test="dataId !=null and dataId != ''">
+            and t.data_id= #{dataId}
+        </if>
+        <if test="businessKey !=null and businessKey != ''">
+            and t.business_key= #{businessKey}
+        </if>
+        <if test="context !=null and context != ''">
+            and t.context= #{context}
+        </if>
+        <if test="staffName !=null and staffName != ''">
+            and t.staff_name= #{staffName}
+        </if>
+        <if test="startTime !=null and startTime != ''">
+            and t.start_time= #{startTime}
+        </if>
+        <if test="preDataId !=null and preDataId != ''">
+            and t.pre_data_id= #{preDataId}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="endTime !=null and endTime != ''">
+            and t.end_time= #{endTime}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
+        <if test="event !=null and event != ''">
+            and t.event= #{event}
+        </if>
+        <if test="staffId !=null and staffId != ''">
+            and t.staff_id= #{staffId}
+        </if>
+        <if test="flowId !=null and flowId != ''">
+            and t.flow_id= #{flowId}
+        </if>
+        <if test='his !=null and his == "Y"'>
+            and t.end_time is not null
+        </if>
+        <if test='his !=null and his != "Y"'>
+            and t.end_time is null
+        </if>
+        order by t.create_time desc
+        <if test="page != -1 and page != null ">
+            limit #{page}, #{row}
+        </if>
 
     </select>
 
 
-
-
     <!-- 修改OA表单审批数据信息 add by wuxw 2018-07-03 -->
     <update id="updateOaWorkflowDataInfo" parameterType="Map">
-        update  oa_workflow_data t set t.status_cd = #{statusCd}
-<if test="newBId != null and newBId != ''">
-,t.b_id = #{newBId}
-</if> 
-<if test="businessKey !=null and businessKey != ''">
-, t.business_key= #{businessKey}
-</if> 
-<if test="context !=null and context != ''">
-, t.context= #{context}
-</if> 
-<if test="staffName !=null and staffName != ''">
-, t.staff_name= #{staffName}
-</if> 
-<if test="startTime !=null and startTime != ''">
-, t.start_time= #{startTime}
-</if> 
-<if test="preDataId !=null and preDataId != ''">
-, t.pre_data_id= #{preDataId}
-</if> 
-<if test="endTime !=null and endTime != ''">
-, t.end_time= #{endTime}
-</if> 
-<if test="storeId !=null and storeId != ''">
-, t.store_id= #{storeId}
-</if> 
-<if test="event !=null and event != ''">
-, t.event= #{event}
-</if> 
-<if test="staffId !=null and staffId != ''">
-, t.staff_id= #{staffId}
-</if> 
- where 1=1 <if test="dataId !=null and dataId != ''">
-and t.data_id= #{dataId}
-</if> 
+        update oa_workflow_data t set t.status_cd = #{statusCd}
+        <if test="businessKey !=null and businessKey != ''">
+            , t.business_key= #{businessKey}
+        </if>
+        <if test="context !=null and context != ''">
+            , t.context= #{context}
+        </if>
+        <if test="staffName !=null and staffName != ''">
+            , t.staff_name= #{staffName}
+        </if>
+        <if test="startTime !=null and startTime != ''">
+            , t.start_time= #{startTime}
+        </if>
+        <if test="preDataId !=null and preDataId != ''">
+            , t.pre_data_id= #{preDataId}
+        </if>
+        <if test="endTime !=null and endTime != ''">
+            , t.end_time= #{endTime}
+        </if>
+
+        <if test="event !=null and event != ''">
+            , t.event= #{event}
+        </if>
+        <if test="staffId !=null and staffId != ''">
+            , t.staff_id= #{staffId}
+        </if>
+        where 1=1
+        <if test="dataId !=null and dataId != ''">
+            and t.data_id= #{dataId}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
 
     </update>
 
     <!-- 查询OA表单审批数据数量 add by wuxw 2018-07-03 -->
-     <select id="queryOaWorkflowDatasCount" parameterType="Map" resultType="Map">
-        select  count(1) count 
-from oa_workflow_data t 
-where 1 =1 
-<if test="dataId !=null and dataId != ''">
-   and t.data_id= #{dataId}
-</if> 
-<if test="businessKey !=null and businessKey != ''">
-   and t.business_key= #{businessKey}
-</if> 
-<if test="context !=null and context != ''">
-   and t.context= #{context}
-</if> 
-<if test="staffName !=null and staffName != ''">
-   and t.staff_name= #{staffName}
-</if> 
-<if test="startTime !=null and startTime != ''">
-   and t.start_time= #{startTime}
-</if> 
-<if test="preDataId !=null and preDataId != ''">
-   and t.pre_data_id= #{preDataId}
-</if> 
-<if test="statusCd !=null and statusCd != ''">
-   and t.status_cd= #{statusCd}
-</if> 
-<if test="endTime !=null and endTime != ''">
-   and t.end_time= #{endTime}
-</if> 
-<if test="storeId !=null and storeId != ''">
-   and t.store_id= #{storeId}
-</if> 
-<if test="event !=null and event != ''">
-   and t.event= #{event}
-</if> 
-<if test="staffId !=null and staffId != ''">
-   and t.staff_id= #{staffId}
-</if> 
+    <select id="queryOaWorkflowDatasCount" parameterType="Map" resultType="Map">
+        select count(1) count
+        from oa_workflow_data t
+        where 1 =1
+        <if test="dataId !=null and dataId != ''">
+            and t.data_id= #{dataId}
+        </if>
+        <if test="businessKey !=null and businessKey != ''">
+            and t.business_key= #{businessKey}
+        </if>
+        <if test="context !=null and context != ''">
+            and t.context= #{context}
+        </if>
+        <if test="staffName !=null and staffName != ''">
+            and t.staff_name= #{staffName}
+        </if>
+        <if test="startTime !=null and startTime != ''">
+            and t.start_time= #{startTime}
+        </if>
+        <if test="preDataId !=null and preDataId != ''">
+            and t.pre_data_id= #{preDataId}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="endTime !=null and endTime != ''">
+            and t.end_time= #{endTime}
+        </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
+        <if test="event !=null and event != ''">
+            and t.event= #{event}
+        </if>
+        <if test="staffId !=null and staffId != ''">
+            and t.staff_id= #{staffId}
+        </if>
+        <if test="flowId !=null and flowId != ''">
+            and t.flow_id= #{flowId}
+        </if>
+        <if test='his !=null and his == "Y"'>
+            and t.end_time is not null
+        </if>
+        <if test='his !=null and his != "Y"'>
+            and t.end_time is null
+        </if>
 
 
-     </select>
+    </select>
 
 </mapper>

+ 190 - 72
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java

@@ -3,26 +3,36 @@ package com.java110.common.smo.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.PageDto;
 import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.oaWorkflowData.OaWorkflowDataDto;
 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.oa.IOaWorkflowDataInnerServiceSMO;
 import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.po.oaWorkflowData.OaWorkflowDataPo;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
-import org.activiti.bpmn.model.*;
-import org.activiti.engine.*;
-import org.activiti.engine.history.HistoricActivityInstance;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.bpmn.model.FlowElement;
+import org.activiti.bpmn.model.FlowNode;
+import org.activiti.bpmn.model.SequenceFlow;
+import org.activiti.bpmn.model.UserTask;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.RepositoryService;
+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.impl.persistence.entity.ProcessDefinitionEntity;
 import org.activiti.engine.query.Query;
-import org.activiti.engine.runtime.Execution;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Comment;
 import org.activiti.engine.task.Task;
@@ -64,6 +74,9 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
     @Autowired
     private RepositoryService repositoryService;
 
+    @Autowired
+    private IOaWorkflowDataInnerServiceSMO oaWorkflowDataInnerServiceSMOImpl;
+
 
     /**
      * 启动流程
@@ -237,6 +250,10 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         if (task == null) {
             throw new IllegalArgumentException("任务已处理");
         }
+
+        //扩展 工作流功能
+        doTaskAuditAgree(reqJson);
+
         String processInstanceId = task.getProcessInstanceId();
         Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId"));
         taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
@@ -251,13 +268,113 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         return false;
     }
 
+    /**
+     * 处理 审核状态
+     *
+     * @param reqJson
+     */
+    private void doTaskAuditAgree(JSONObject reqJson) {
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("nextUserId"));
+        List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto);
+
+        Assert.listOnlyOne(users, "用户不存在");
+
+        String preDataId = "-1";
+        //查询当前节点
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        OaWorkflowDataPo oaWorkflowDataPo = null;
+        if (oaWorkflowDataDtos == null || oaWorkflowDataDtos.size() < 1) {
+            oaWorkflowDataPo = new OaWorkflowDataPo();
+            oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
+            oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
+            oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+            oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+            oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT);
+            oaWorkflowDataPo.setPreDataId(preDataId);
+            oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+            oaWorkflowDataPo.setStaffName(users.get(0).getName());
+            oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+            oaWorkflowDataPo.setStoreId(reqJson.getString("storeId"));
+            oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
+            return;
+        }
+        //修改 当前 为完成
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
+
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
+        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+        oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT);
+        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+        oaWorkflowDataPo.setStaffName(users.get(0).getName());
+        oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
+    }
+
+    /**
+     * 转办
+     *
+     * @param reqJson
+     * @return
+     */
     public boolean changeTaskToOtherUser(@RequestBody JSONObject reqJson) {
+
+        //查询当前节点
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        Assert.listOnlyOne(oaWorkflowDataDtos, "数据错误未包含上级数据");
+
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("nextUserId"));
+        List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto);
+
+        Assert.listOnlyOne(users, "用户不存在");
+
         TaskService taskService = processEngine.getTaskService();
         Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
         String processInstanceId = task.getProcessInstanceId();
         taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
         taskService.setAssignee(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
         //taskService.setOwner(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
+
+        OaWorkflowDataPo oaWorkflowDataPo = null;
+        //修改 当前 为完成
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
+
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
+        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+        oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_TRANSFER);
+        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+        oaWorkflowDataPo.setStaffName(users.get(0).getName());
+        oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
         return true;
     }
 
@@ -265,74 +382,75 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         TaskService taskService = processEngine.getTaskService();
         Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
         if (task == null) {
-            throw new IllegalArgumentException("流程未启动或已执行完成,无法退回");
+            throw new IllegalArgumentException("任务已处理");
         }
-        List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()
-                .processInstanceBusinessKey(reqJson.getString("id"))
-                .orderByTaskCreateTime()
-                .asc()
-                .list();
-        String myTaskId = null;
-        HistoricTaskInstance myTask = null;
-        for (HistoricTaskInstance hti : htiList) {
-            if (reqJson.getString("curUserId").equals(hti.getAssignee())) {
-                myTaskId = hti.getId();
-                myTask = hti;
-                break;
-            }
+
+        String event = doTaskAuditUnAgree(reqJson);
+        if (OaWorkflowDataDto.EVENT_COMMIT.equals(event)) { //提交状态
+            String processInstanceId = task.getProcessInstanceId();
+            Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId"));
+            taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
+            Map<String, Object> variables = new HashMap<String, Object>();
+            variables.put("nextUserId", reqJson.getString("nextUserId"));
+            variables.put("auditCode", reqJson.getString("auditCode"));
+            taskService.complete(reqJson.getString("taskId"), variables);
+        } else { //转单
+            taskService.setAssignee(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
         }
-        if (null == myTaskId) {
-            throw new IllegalArgumentException("该任务非当前用户提交,无法退回");
+        return true;
+    }
+
+    /**
+     * 审核不同意 退回
+     *
+     * @param reqJson
+     */
+    private String doTaskAuditUnAgree(JSONObject reqJson) {
+        //查询当前节点
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setBusinessKey(reqJson.getString("id"));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        Assert.listOnlyOne(oaWorkflowDataDtos, "没有上级处理人");
+
+        if ("-1".equals(oaWorkflowDataDtos.get(0).getPreDataId())) {
+            throw new IllegalArgumentException("没有上级处理人");
         }
 
-        String processDefinitionId = myTask.getProcessDefinitionId();
-        ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
-        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
-
-        //变量
-//		Map<String, VariableInstance> variables = runtimeService.getVariableInstances(currentTask.getExecutionId());
-        String myActivityId = null;
-        List<HistoricActivityInstance> haiList = historyService.createHistoricActivityInstanceQuery()
-                .executionId(myTask.getExecutionId()).finished().list();
-        for (HistoricActivityInstance hai : haiList) {
-            if (myTaskId.equals(hai.getTaskId())) {
-                myActivityId = hai.getActivityId();
-                break;
-            }
+        oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setStoreId(reqJson.getString("storeId"));
+        oaWorkflowDataDto.setDataId(reqJson.getString(oaWorkflowDataDtos.get(0).getPreDataId()));
+        oaWorkflowDataDto.setPage(1);
+        oaWorkflowDataDto.setRow(1);
+        List<OaWorkflowDataDto> preOaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto);
+
+        //将现在节点处理为完成
+        OaWorkflowDataPo oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
+        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
+
+        reqJson.put("nextUserId", preOaWorkflowDataDtos.get(0).getStaffId());
+        if ("1400".equals(reqJson.getString("auditCode"))) {
+            reqJson.put("nextUserId", reqJson.getString("createUserId"));
         }
-        FlowNode myFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId);
-
-
-        Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
-        String activityId = execution.getActivityId();
-        logger.warn("------->> activityId:" + activityId);
-        FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
-
-        //记录原活动方向
-        List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>();
-        oriSequenceFlows.addAll(flowNode.getOutgoingFlows());
-
-        //清理活动方向
-        flowNode.getOutgoingFlows().clear();
-        //建立新方向
-        List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>();
-        SequenceFlow newSequenceFlow = new SequenceFlow();
-        newSequenceFlow.setId("newSequenceFlowId");
-        newSequenceFlow.setSourceFlowElement(flowNode);
-        newSequenceFlow.setTargetFlowElement(myFlowNode);
-        newSequenceFlowList.add(newSequenceFlow);
-        flowNode.setOutgoingFlows(newSequenceFlowList);
-
-        Authentication.setAuthenticatedUserId(reqJson.getString("curUserId"));
-        taskService.addComment(task.getId(), task.getProcessInstanceId(), "退回," + reqJson.getString("auditMessage"));
-
-        Map<String, Object> currentVariables = new HashMap<String, Object>();
-        currentVariables.put("applier", reqJson.getString("curUserId"));
-        //完成任务
-        taskService.complete(task.getId(), currentVariables);
-        //恢复原方向
-        flowNode.setOutgoingFlows(oriSequenceFlows);
-        return true;
+        oaWorkflowDataPo = new OaWorkflowDataPo();
+        oaWorkflowDataPo.setBusinessKey(preOaWorkflowDataDtos.get(0).getBusinessKey());
+        oaWorkflowDataPo.setFlowId(preOaWorkflowDataDtos.get(0).getFlowId());
+        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
+        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
+        oaWorkflowDataPo.setEvent(preOaWorkflowDataDtos.get(0).getEvent());
+        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getPreDataId());
+        oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId"));
+        oaWorkflowDataPo.setStaffName(preOaWorkflowDataDtos.get(0).getStaffName());
+        oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        oaWorkflowDataPo.setStoreId(preOaWorkflowDataDtos.get(0).getStoreId());
+        oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
+
+        return oaWorkflowDataDtos.get(0).getEvent();
     }
 
     public List<AuditMessageDto> getAuditMessage(@RequestBody JSONObject reqJson) {
@@ -423,15 +541,15 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
             if (targetFlowElement instanceof UserTask) {
                 //判断输出节点的el表达式
                 Map vars = new HashMap();
-                vars.put("auditCode","1200");
+                vars.put("auditCode", "1200");
                 if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
                     //true 获取输出节点名称
-                    taskObj.put("back",outgoingFlow.getTargetFlowElement().getName());
+                    taskObj.put("back", outgoingFlow.getTargetFlowElement().getName());
                 }
-                vars.put("auditCode","1400");
+                vars.put("auditCode", "1400");
                 if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
                     //true 获取输出节点名称
-                    taskObj.put("backIndex",outgoingFlow.getTargetFlowElement().getName());
+                    taskObj.put("backIndex", outgoingFlow.getTargetFlowElement().getName());
                 }
             }
         }

+ 25 - 0
service-oa/src/main/java/com/java110/oa/api/OaWorkflowApi.java

@@ -452,6 +452,31 @@ public class OaWorkflowApi {
         return getOaWorkflowFormBMOImpl.queryOaWorkflowUserHisTaskFormData(paramIn);
     }
 
+    /**
+     * 查询已办
+     *
+     * @param storeId 小区ID
+     * @return
+     * @serviceCode /oaWorkflow/queryOaWorkflowUser
+     * @path /app/oaWorkflow/queryOaWorkflowUser
+     */
+    @RequestMapping(value = "/queryOaWorkflowUser", method = RequestMethod.GET)
+    public ResponseEntity<String> queryOaWorkflowUser(@RequestHeader(value = "store-id") String storeId,
+                                                                     @RequestHeader(value = "user-id") String userId,
+                                                                     @RequestParam(value = "flowId", required = false) String flowId,
+                                                                     @RequestParam(value = "id", required = false) String id,
+                                                                     @RequestParam(value = "page") int page,
+                                                                     @RequestParam(value = "row") int row) {
+        JSONObject paramIn = new JSONObject();
+        paramIn.put("page", page);
+        paramIn.put("row", row);
+        paramIn.put("flowId", flowId);
+        paramIn.put("id", id);
+        paramIn.put("storeId", storeId);
+        paramIn.put("userId", userId);
+        return getOaWorkflowFormBMOImpl.queryOaWorkflowUser(paramIn);
+    }
+
     /**
      * 审核流程
      *

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

@@ -59,4 +59,11 @@ public interface IGetOaWorkflowFormBMO {
      * @return
      */
     ResponseEntity<String> getNextTask(JSONObject reqJson);
+
+    /**
+     * 查询审批流程
+     * @param paramIn
+     * @return
+     */
+    ResponseEntity<String> queryOaWorkflowUser(JSONObject paramIn);
 }

+ 110 - 16
service-oa/src/main/java/com/java110/oa/bmo/oaWorkflowForm/impl/GetOaWorkflowFormBMOImpl.java

@@ -3,15 +3,19 @@ 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.oaWorkflowData.OaWorkflowDataDto;
 import com.java110.dto.oaWorkflowForm.OaWorkflowFormDto;
 import com.java110.dto.user.UserDto;
 import com.java110.entity.audit.AuditUser;
 import com.java110.intf.common.IOaWorkflowUserInnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowDataInnerServiceSMO;
 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.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +23,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
+import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -39,6 +44,10 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
     @Autowired
     private IOaWorkflowUserInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
 
+    @Autowired
+    private IOaWorkflowDataInnerServiceSMO oaWorkflowDataInnerServiceSMOImpl;
+
+
     /**
      * @param oaWorkflowFormDto
      * @return 订单服务能够接受的报文
@@ -234,20 +243,20 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
         List<OaWorkflowFormDto> oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto);
         Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单");
 
-        AuditUser auditUser = new AuditUser();
-        auditUser.setProcessDefinitionKey(oaWorkflowDtos.get(0).getProcessDefinitionKey());
-        auditUser.setFlowId(paramIn.getString("flowId"));
-        auditUser.setUserId(paramIn.getString("userId"));
-        auditUser.setStoreId(paramIn.getString("storeId"));
-        auditUser.setPage(paramIn.getInteger("page"));
-        auditUser.setRow(paramIn.getInteger("row"));
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setFlowId(paramIn.getString("flowId"));
+        oaWorkflowDataDto.setStaffId(paramIn.getString("userId"));
+        oaWorkflowDataDto.setStoreId(paramIn.getString("storeId"));
+        oaWorkflowDataDto.setPage(paramIn.getInteger("page"));
+        oaWorkflowDataDto.setRow(paramIn.getInteger("row"));
+        oaWorkflowDataDto.setHis("Y");
 
-        long count = oaWorkflowUserInnerServiceSMOImpl.getUserHistoryTaskCount(auditUser);
+        long count = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatasCount(oaWorkflowDataDto);
 
         List<JSONObject> datas = null;
 
         if (count > 0) {
-            datas = oaWorkflowUserInnerServiceSMOImpl.getUserHistoryTasks(auditUser);
+            datas = BeanConvertUtil.covertBeanList(oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto), JSONObject.class);
             //刷新 表单数据
             freshFormData(datas, paramIn, oaWorkflowFormDtos.get(0));
         } else {
@@ -262,12 +271,14 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
 
     @Override
     public ResponseEntity<String> auditOaWorkflow(JSONObject reqJson) {
+        //查询流程是否存在
         OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
         oaWorkflowDto.setStoreId(reqJson.getString("storeId"));
         oaWorkflowDto.setFlowId(reqJson.getString("flowId"));
         List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
         Assert.listOnlyOne(oaWorkflowDtos, "流程不存在");
 
+        //流程表单是否存在
         OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto();
         oaWorkflowFormDto.setFlowId(reqJson.get("flowId").toString());
         oaWorkflowFormDto.setStoreId(reqJson.get("storeId").toString());
@@ -276,29 +287,42 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
         List<OaWorkflowFormDto> oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto);
         Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单");
 
+        //流程数据是否存在
+        Map paramMap = new HashMap();
+        paramMap.put("storeId", reqJson.getString("storeId"));
+        paramMap.put("id", reqJson.getString("id"));
+        paramMap.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
+        paramMap.put("page", 1);
+        paramMap.put("row", 1);
+        List<Map> formDatas = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDatas(paramMap);
+
+        Assert.listOnlyOne(formDatas, "工单数据不存在");
+
+        reqJson.put("startUserId", formDatas.get(0).get("create_user_id"));
+
         //业务办理
         if ("1100".equals(reqJson.getString("auditCode"))) { //办理操作
             reqJson.put("nextUserId", reqJson.getString("staffId"));
             boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
             if (isLastTask) {
-                reqJson.put("state", "1005");
+                reqJson.put("state", "1005"); //工单结束
             } else {
-                reqJson.put("state", "1002");
+                reqJson.put("state", "1002"); //工单审核
             }
             reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
             oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson);
+            //完成当前流程 插入下一处理人
         } else if ("1300".equals(reqJson.getString("auditCode"))) { //转单操作
             reqJson.put("nextUserId", reqJson.getString("staffId"));
             oaWorkflowUserInnerServiceSMOImpl.changeTaskToOtherUser(reqJson);
-            reqJson.put("state", "1004");
+            reqJson.put("state", "1004"); //工单转单
             reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
             oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson);
         } else if ("1200".equals(reqJson.getString("auditCode"))
                 || "1400".equals(reqJson.getString("auditCode"))
         ) { //退回操作
-            reqJson.put("nextUserId", reqJson.getString("staffId"));
-            oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
-            reqJson.put("state", "1003");
+            oaWorkflowUserInnerServiceSMOImpl.goBackTask(reqJson);
+            reqJson.put("state", "1003"); //工单退单
             reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
             oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson);
         } else {
@@ -315,6 +339,47 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
         return ResultVo.createResponseEntity(tasks);
     }
 
+    @Override
+    public ResponseEntity<String> queryOaWorkflowUser(JSONObject paramIn) {
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setStoreId(paramIn.getString("storeId"));
+        oaWorkflowDto.setFlowId(paramIn.getString("flowId"));
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+        Assert.listOnlyOne(oaWorkflowDtos, "流程不存在");
+
+        OaWorkflowFormDto oaWorkflowFormDto = new OaWorkflowFormDto();
+        oaWorkflowFormDto.setFlowId(paramIn.get("flowId").toString());
+        oaWorkflowFormDto.setStoreId(paramIn.get("storeId").toString());
+        oaWorkflowFormDto.setRow(1);
+        oaWorkflowFormDto.setPage(1);
+        List<OaWorkflowFormDto> oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto);
+        Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单");
+
+        OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto();
+        oaWorkflowDataDto.setFlowId(paramIn.getString("flowId"));
+        oaWorkflowDataDto.setBusinessKey(paramIn.getString("id"));
+        oaWorkflowDataDto.setStoreId(paramIn.getString("storeId"));
+        oaWorkflowDataDto.setPage(paramIn.getInteger("page"));
+        oaWorkflowDataDto.setRow(paramIn.getInteger("row"));
+
+        long count = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatasCount(oaWorkflowDataDto);
+
+        List<JSONObject> datas = null;
+
+        if (count > 0) {
+            datas = BeanConvertUtil.covertBeanList(oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto), JSONObject.class);
+            //刷新 表单数据
+            freshFormData(datas, paramIn, oaWorkflowFormDtos.get(0));
+        } else {
+            datas = new ArrayList<>();
+        }
+
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) paramIn.getInteger("row")), count, datas);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+        return responseEntity;
+    }
+
     /**
      * 刷入表单数据
      *
@@ -336,14 +401,43 @@ public class GetOaWorkflowFormBMOImpl implements IGetOaWorkflowFormBMO {
         paramMap.put("page", 1);
         paramMap.put("row", ids.size());
         List<Map> formDatas = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowFormDatas(paramMap);
-
+        long duration = 0L;
         for (JSONObject data : datas) {
             for (Map form : formDatas) {
                 if (data.getString("id").equals(form.get("id"))) {
                     data.putAll(form);
                 }
             }
+
+            if (data.containsKey("startTime") && data.containsKey("endTime")) {
+                try {
+                    if (data.getString("endTime") == null) {
+                        duration = DateUtil.getCurrentDate().getTime() - DateUtil.getDateFromString(data.getString("startTime"), DateUtil.DATE_FORMATE_STRING_A).getTime();
+                    } else {
+                        duration = DateUtil.getDateFromString(data.getString("endTime"), DateUtil.DATE_FORMATE_STRING_A).getTime()
+                                - DateUtil.getDateFromString(data.getString("startTime"), DateUtil.DATE_FORMATE_STRING_A).getTime();
+                    }
+                } catch (Exception e) {
+                    duration = 0;
+                }
+                data.put("duration", getCostTime(duration));
+            }
+        }
+    }
+
+    public String getCostTime(Long time) {
+        if (time == null) {
+            return "00:00";
+        }
+        long hours = time / (1000 * 60 * 60);
+        long minutes = (time - hours * (1000 * 60 * 60)) / (1000 * 60);
+        String diffTime = "";
+        if (minutes < 10) {
+            diffTime = hours + ":0" + minutes;
+        } else {
+            diffTime = hours + ":" + minutes;
         }
+        return diffTime;
     }
 
 }