Browse Source

Merge branch 'master' of http://192.168.1.220:10080/esb/esb

zhenglingfeng 8 years ago
parent
commit
f97a51b7ab

+ 1 - 1
hos-admin/src/main/java/com/yihu/hos/HosAdminApplication.java

@ -21,6 +21,6 @@ public class HosAdminApplication {
    @Bean
    public Queue queue() {
        return new ActiveMQQueue("configuration.queue");
        return new ActiveMQQueue("configuration.service.flow");
    }
}

+ 9 - 4
hos-admin/src/main/java/com/yihu/hos/common/constants/Constants.java

@ -6,18 +6,23 @@ package com.yihu.hos.common.constants;
 * Created at 2016/8/25.
 */
public class Constants {
    //队列名称
    //娴佺▼-闃熷垪鍚嶇О
    public static String FLOW_QUEUE_NAME = "configuration.service.flow";
    //源代码类别
    //娴佺▼-璺�敱绫诲瀷
    public static String FLOW_TYPE_ROUTE = "route";
    public static String FLOW_TYPE_PROCESSOR = "processor";
    //流程相关的操作 发送消息
    //娴佺▼-璺�敱绫诲瀷
    public static String FLOW_OP_UPDATE = "update";
    public static String FLOW_OP_DELETE = "delete";
    public static String FLOW_OP_ADD = "add";
    //娴佺▼-鎿嶄綔娑堟伅
    public static String PROCESSOR_ADD = "processorAdded";
    public static String PROCESSOR_DATA_CHANGE = "processorDataChanged";
    public static String PROCESSOR_DATA_DELETE = "processorDataDELETE";
    public static String PROCESSOR_DATA_DELETE = "processorDataDelete";
    public static String ROUTE_DEFINE_ADD = "routeDefineAdded";
    public static String ROUTE_DEFINE_CHANGE = "routeDefineChanged";
    public static String ROUTE_DEFINE_DELETE = "routeDefineDelete";

+ 1 - 1
hos-admin/src/main/java/com/yihu/hos/resource/dao/IRsAppResourceDao.java

@ -1,7 +1,7 @@
package com.yihu.hos.resource.dao;
import com.yihu.hos.web.framework.dao.XSQLGeneralDAO;
import com.yihu.hos.resource.model.RsAppResource;
import com.yihu.hos.web.framework.dao.XSQLGeneralDAO;
import java.util.List;

+ 4 - 0
hos-admin/src/main/java/com/yihu/hos/services/ServiceFlowEventService.java

@ -42,6 +42,10 @@ public class ServiceFlowEventService {
        this.sendMsg("processorDataChanged", serviceFlow, packageName, className, path);
    }
    public void processorDataDeleted(String serviceFlow, String packageName, String className, String path) {
        this.sendMsg("processorDataDeleted", serviceFlow, packageName, className, path);
    }
    /**
     * 当外界组件通知一个新的RouteDefine路由被定义时,该事件被触发
     */

+ 15 - 15
hos-admin/src/main/java/com/yihu/hos/system/controller/FlowController.java

@ -1,5 +1,6 @@
package com.yihu.hos.system.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.system.model.SystemServiceFlow;
import com.yihu.hos.system.model.SystemServiceFlowClass;
import com.yihu.hos.system.service.FlowManager;
@ -19,7 +20,9 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -77,17 +80,19 @@ public class FlowController extends BaseController {
    @RequestMapping("/editorFlow")
    public String editorFlow(Model model, String id) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            SystemServiceFlow flow = null;
            SystemServiceFlowClass flowClass = null;
            List<SystemServiceFlowClass> flowClassList = null;
            if (id != null && id.length() > 0) {
                flow = flowManage.getFlowById(Integer.parseInt(id));
                flowClass = flowManage.getFlowClassByFlowId(flow.getId());
                flowClassList = flowManage.getFlowClassByFlowId(flow.getId());
            }  else {
                flow = new SystemServiceFlow();
                flowClass = new SystemServiceFlowClass();
                flowClassList = new ArrayList<>();
            }
            flow.setFlowClassArray(flowClassList);
            model.addAttribute("model", flow);
            model.addAttribute("flowClass", flowClass);
            model.addAttribute("flowClass", objectMapper.writeValueAsString(flowClassList));
            model.addAttribute("contentPage", "/system/flow/editorFlow");
        } catch (Exception e) {
            e.printStackTrace();
@ -108,9 +113,9 @@ public class FlowController extends BaseController {
            SystemServiceFlow obj = new SystemServiceFlow();
            BeanUtils.populate(obj, request.getParameterMap());
            SystemServiceFlowClass flowClass = new SystemServiceFlowClass();
            List<SystemServiceFlowClass> flowClass = new ArrayList<>();
            BeanUtils.populate(flowClass, request.getParameterMap());
            obj.setFlowClass(flowClass);
            obj.setFlowClassArray(flowClass);
            return flowManage.addFlow(obj);
        } catch (Exception ex) {
            ex.printStackTrace();
@ -147,16 +152,11 @@ public class FlowController extends BaseController {
     */
    @RequestMapping("updateFlow")
    @ResponseBody
    public Result updateFlow(HttpServletRequest request) {
    public Result updateFlow(HttpServletRequest request,String flowClass) {
        try {
            SystemServiceFlow obj = new SystemServiceFlow();
            BeanUtils.populate(obj, request.getParameterMap());
            SystemServiceFlowClass flowClass = new SystemServiceFlowClass();
            BeanUtils.populate(flowClass, request.getParameterMap());
            obj.setFlowClass(flowClass);
            return flowManage.updateFlow(obj);
            ObjectMapper objectMapper = new ObjectMapper();
            SystemServiceFlow flow = objectMapper.readValue(flowClass,SystemServiceFlow.class);
            return flowManage.updateFlow(flow);
        } catch (Exception ex) {
            ex.printStackTrace();
            return Result.error(ex.getMessage());

+ 29 - 2
hos-admin/src/main/java/com/yihu/hos/system/dao/FlowClassDao.java

@ -3,6 +3,8 @@ package com.yihu.hos.system.dao;
import com.yihu.hos.system.dao.intf.IFlowClassDao;
import com.yihu.hos.system.model.SystemServiceFlowClass;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;
import java.util.List;
@ -19,11 +21,36 @@ public class FlowClassDao extends SQLGeneralDAO implements IFlowClassDao {
    @Override
    public SystemServiceFlowClass getFlowClassByFlowId(Integer flowId) throws Exception {
    public List<SystemServiceFlowClass> getFlowClassByFlowId(Integer flowId) throws Exception {
        List<SystemServiceFlowClass> flowClasses = (List<SystemServiceFlowClass>) super.hibernateTemplate.find("from SystemServiceFlowClass s where s.flowId=? ", flowId);
        if (flowClasses != null && flowClasses.size() > 0) {
            return flowClasses.get(0);
            return flowClasses;
        }
        return null;
    }
    @Override
    public boolean deleteFlowClassByFlowId(Integer flowId) {
        try {
            Session session = getCurrentSession();
            String sql = "delete from system_service_flow_class where flow_id = :flowId";
            Query query = session.createSQLQuery(sql);
            query.setInteger("flowId", flowId);
            query.executeUpdate();
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
    @Override
    public List<Integer> getFlowClassIds(Integer flowId) {
        Session session = getCurrentSession();
        String sql = "SELECT id from system_service_flow_class where flow_id = :flowId";
        Query query = session.createSQLQuery(sql);
        query.setInteger("flowId", flowId);
        return query.list();
    }
}

+ 5 - 2
hos-admin/src/main/java/com/yihu/hos/system/dao/intf/IFlowClassDao.java

@ -3,12 +3,15 @@ package com.yihu.hos.system.dao.intf;
import com.yihu.hos.system.model.SystemServiceFlowClass;
import com.yihu.hos.web.framework.dao.XSQLGeneralDAO;
import java.util.List;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/8/19.
 */
public interface IFlowClassDao extends XSQLGeneralDAO {
    SystemServiceFlowClass getFlowClassByFlowId(Integer flowId) throws Exception;
    List<SystemServiceFlowClass> getFlowClassByFlowId(Integer flowId) throws Exception;
    boolean deleteFlowClassByFlowId(Integer flowId);
    List<Integer> getFlowClassIds(Integer flowId);
}

+ 16 - 5
hos-admin/src/main/java/com/yihu/hos/system/model/SystemServiceFlow.java

@ -1,5 +1,7 @@
package com.yihu.hos.system.model;
import java.util.List;
/**
 *  系统管理-服务流程
 * @author HZY
@ -15,14 +17,23 @@ public class SystemServiceFlow implements java.io.Serializable {
    private Integer valid;
    private String createDate;
    private SystemServiceFlowClass flowClass;
    private String flowClassList;
    private List<SystemServiceFlowClass> flowClassArray;
    public String getFlowClassList() {
        return flowClassList;
    }
    public void setFlowClassList(String flowClassList) {
        this.flowClassList = flowClassList;
    }
    public SystemServiceFlowClass getFlowClass() {
        return flowClass;
    public List<SystemServiceFlowClass> getFlowClassArray() {
        return flowClassArray;
    }
    public void setFlowClass(SystemServiceFlowClass flowClass) {
        this.flowClass = flowClass;
    public void setFlowClassArray(List<SystemServiceFlowClass> flowClassArray) {
        this.flowClassArray = flowClassArray;
    }
    public Integer getId() {

+ 11 - 0
hos-admin/src/main/java/com/yihu/hos/system/model/SystemServiceFlowClass.java

@ -14,6 +14,17 @@ public class SystemServiceFlowClass implements java.io.Serializable {
    private Integer flowId;
    private String type;
    //标识 是否有做文件上传
    private String isUpdate;
    public String getIsUpdate() {
        return isUpdate;
    }
    public void setIsUpdate(String isUpdate) {
        this.isUpdate = isUpdate;
    }
    public Integer getId() {
        return id;
    }

+ 92 - 49
hos-admin/src/main/java/com/yihu/hos/system/service/FlowManager.java

@ -1,8 +1,8 @@
package com.yihu.hos.system.service;
import com.yihu.hos.common.ActiveMqUtil;
import com.yihu.hos.common.constants.Constants;
import com.yihu.hos.core.file.FileUtil;
import com.yihu.hos.services.ServiceFlowEventService;
import com.yihu.hos.system.dao.FlowClassDao;
import com.yihu.hos.system.dao.intf.IFlowClassDao;
import com.yihu.hos.system.dao.intf.IFlowDao;
@ -10,12 +10,14 @@ import com.yihu.hos.system.model.SystemServiceFlow;
import com.yihu.hos.system.model.SystemServiceFlowClass;
import com.yihu.hos.system.service.intf.IFlowManage;
import com.yihu.hos.web.framework.model.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
@ -36,6 +38,9 @@ public class FlowManager implements IFlowManage {
    @Resource(name = FlowClassDao.BEAN_ID)
    private IFlowClassDao flowClassDao;
    @Autowired
    ServiceFlowEventService serviceFlowEventService;
    @Override
    public Result getFlowList(Map<String, Object> params) throws Exception {
        return flowDao.getFlowList(params);
@ -49,19 +54,14 @@ public class FlowManager implements IFlowManage {
    @Transactional
    public Result addFlow(SystemServiceFlow obj) throws Exception {
        flowDao.saveEntity(obj);
        SystemServiceFlowClass flowClass = obj.getFlowClass();
        flowClass.setFlowId(obj.getId());
        flowDao.saveEntity(flowClass);
        //发送消息到MQ对列
        if (Constants.FLOW_TYPE_ROUTE.equals(flowClass.getType())) {
            //route
            ActiveMqUtil.sendMessage(Constants.FLOW_QUEUE_NAME, Constants.ROUTE_DEFINE_ADD);
        } else if (Constants.FLOW_TYPE_PROCESSOR.equals(flowClass.getType())) {
            //processor
            ActiveMqUtil.sendMessage(Constants.FLOW_QUEUE_NAME, Constants.PROCESSOR_ADD);
        } else {
            return Result.error("未选择类别,清查看!");
        List<SystemServiceFlowClass> flowClassList = obj.getFlowClassArray();
        for (SystemServiceFlowClass flowClass:flowClassList){
            flowClass.setFlowId(obj.getId());
            flowDao.saveEntity(flowClass);
            //发送消息到MQ对列
            sendUpdateMessage(obj.getCode(), flowClass, Constants.FLOW_OP_ADD);
        }
        return Result.success("保存成功");
    }
@ -73,41 +73,42 @@ public class FlowManager implements IFlowManage {
        flow.setPath(obj.getPath());
        flow.setChart(obj.getChart());
        flow.setValid(obj.getValid());
        SystemServiceFlowClass newFlowClass = flowClassDao.getFlowClassByFlowId(obj.getId());
        SystemServiceFlowClass flowClass = obj.getFlowClass();
        newFlowClass.setClassName(flowClass.getClassName());
        newFlowClass.setPackageName(flowClass.getPackageName());
        newFlowClass.setClassPath(flowClass.getClassPath());
        //发送消息到MQ对列
        if (Constants.FLOW_TYPE_ROUTE.equals(flowClass.getType())) {
            //route
            ActiveMqUtil.sendMessage(Constants.FLOW_QUEUE_NAME, Constants.ROUTE_DEFINE_CHANGE);
        } else if (Constants.FLOW_TYPE_PROCESSOR.equals(flowClass.getType())) {
            //processor
            ActiveMqUtil.sendMessage(Constants.FLOW_QUEUE_NAME, Constants.PROCESSOR_DATA_CHANGE);
        } else {
            return Result.error("未选择类别,清查看!");
        List<Integer> classIds = flowClassDao.getFlowClassIds(obj.getId());//原flowclass集合
        List<SystemServiceFlowClass> flowClassList = obj.getFlowClassArray();
        for (SystemServiceFlowClass flowClass:flowClassList){
            if (flowClass.getId()!=null) {
                classIds.remove(flowClass.getId());
                flowClassDao.updateEntity(flowClass);
                sendUpdateMessage(flow.getCode(), flowClass, Constants.FLOW_OP_UPDATE);
            }else {
                flowClassDao.saveEntity(flowClass);
                sendUpdateMessage(flow.getCode(), flowClass, Constants.FLOW_OP_ADD);
            }
        }
        //删除判断
        if (classIds !=null && classIds.size()>0){
            for (Integer id:classIds){
                SystemServiceFlowClass flowClass = getFlowClassById(id);
                flowClassDao.deleteEntity(flowClass);
                sendDeleteMessage(flow.getCode(), flowClass);
            }
        }
        return Result.success("更新成功");
    }
    @Transactional
    public Result deleteFlow(Integer id) throws Exception {
        SystemServiceFlow flow = flowDao.getEntity(SystemServiceFlow.class, id);
        SystemServiceFlowClass flowClass = flowClassDao.getFlowClassByFlowId(id);
        flowClassDao.deleteEntity(flowClass);
        flowDao.deleteEntity(flow);
        //发送消息到MQ对列
        if (Constants.FLOW_TYPE_ROUTE.equals(flowClass.getType())) {
            //route
            ActiveMqUtil.sendMessage(Constants.FLOW_QUEUE_NAME, Constants.ROUTE_DEFINE_DELETE);
        } else if (Constants.FLOW_TYPE_PROCESSOR.equals(flowClass.getType())) {
            //processor
            ActiveMqUtil.sendMessage(Constants.FLOW_QUEUE_NAME, Constants.PROCESSOR_DATA_DELETE);
        } else {
            return Result.error("未选择类别,清查看!");
        List<SystemServiceFlowClass> flowClassList = flowClassDao.getFlowClassByFlowId(id);
        for (SystemServiceFlowClass flowClass:flowClassList){
            flowClassDao.deleteEntity(flowClass);
            //发送消息到MQ对列
            sendDeleteMessage(flow.getCode(), flowClass);
        }
        flowDao.deleteEntity(flow);
        return Result.success("删除成功");
    }
@ -121,10 +122,14 @@ public class FlowManager implements IFlowManage {
    }
    @Override
    public SystemServiceFlowClass getFlowClassByFlowId(Integer flowId) throws Exception {
    public List<SystemServiceFlowClass> getFlowClassByFlowId(Integer flowId) throws Exception {
        return flowClassDao.getFlowClassByFlowId(flowId);
    }
    public SystemServiceFlowClass getFlowClassById(Integer id) throws Exception {
        return flowClassDao.getEntity(SystemServiceFlowClass.class,id);
    }
    @Transactional
    public Result addFlowClass(SystemServiceFlowClass obj) throws Exception {
        flowDao.saveEntity(obj);
@ -138,14 +143,7 @@ public class FlowManager implements IFlowManage {
    @Transactional
    public boolean deleteFlowClassByFlowId(Integer flowId) {
        boolean succ = false;
        try {
            SystemServiceFlowClass flowClass = flowClassDao.getFlowClassByFlowId(flowId);
            flowClassDao.deleteEntity(flowClass);
            succ = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        boolean succ =flowClassDao.deleteFlowClassByFlowId(flowId);
        return succ;
    }
@ -165,4 +163,49 @@ public class FlowManager implements IFlowManage {
        }
        return null;
    }
    /**
     * 发送MQ消息-更新路由
     * @param flowCode  服务流程Code标识
     * @param flowClass
     * @param operate
     */
    public  void sendUpdateMessage(String flowCode,SystemServiceFlowClass flowClass,String operate){
        //发送消息到MQ对列
        if ("1".equals(flowClass.getIsUpdate()) && Constants.FLOW_TYPE_ROUTE.equals(flowClass.getType())) {
            //route
            switch (operate){
                case "add" : serviceFlowEventService.routeDefineAdded(flowCode, flowClass.getPackageName(), flowClass.getClassName(), flowClass.getClassPath()); break;
                case "delete" : serviceFlowEventService.routeDefineDelete(flowCode, flowClass.getPackageName(), flowClass.getClassName()); break;
                case "update" : serviceFlowEventService.routeDefineChanged(flowCode, flowClass.getPackageName(), flowClass.getClassName(), flowClass.getClassPath()); break;
                default : break;
            }
        } else if ( "1".equals(flowClass.getIsUpdate()) && Constants.FLOW_TYPE_PROCESSOR.equals(flowClass.getType())) {
            //processor
            switch (operate){
                case "add" : serviceFlowEventService.processorAdded(flowCode, flowClass.getPackageName(), flowClass.getClassName(), flowClass.getClassPath()); break;
                case "delete" : serviceFlowEventService.processorDataDeleted(flowCode, flowClass.getPackageName(), flowClass.getClassName(), flowClass.getClassPath()); break;
                case "update" : serviceFlowEventService.processorDataChanged(flowCode, flowClass.getPackageName(), flowClass.getClassName(), flowClass.getClassPath()); break;
                default : break;
            }
        }
    }
    /**
     * 发送MQ消息-删除路由
     * @param flowCode 服务流程Code标识
     * @param flowClass
     */
    public  void sendDeleteMessage(String flowCode,SystemServiceFlowClass flowClass){
        //发送消息到MQ对列
        if ( Constants.FLOW_TYPE_ROUTE.equals(flowClass.getType())) {
            //route
            serviceFlowEventService.routeDefineDelete(flowCode, flowClass.getPackageName(), flowClass.getClassName());
        } else if (Constants.FLOW_TYPE_PROCESSOR.equals(flowClass.getType())) {
            //processor
            serviceFlowEventService.processorDataDeleted(flowCode, flowClass.getPackageName(), flowClass.getClassName(), flowClass.getClassPath());
        }
    }
}

+ 2 - 1
hos-admin/src/main/java/com/yihu/hos/system/service/intf/IFlowManage.java

@ -5,6 +5,7 @@ import com.yihu.hos.system.model.SystemServiceFlow;
import com.yihu.hos.system.model.SystemServiceFlowClass;
import com.yihu.hos.web.framework.model.Result;
import java.util.List;
import java.util.Map;
/**
@ -28,7 +29,7 @@ public interface IFlowManage extends IBaseManager {
    Result getFlowClassList(Map<String, Object> params) throws Exception;
    SystemServiceFlowClass getFlowClassByFlowId(Integer id) throws Exception;
    List<SystemServiceFlowClass> getFlowClassByFlowId(Integer id) throws Exception;
    Result addFlowClass(SystemServiceFlowClass obj) throws Exception;

+ 112 - 83
hos-admin/src/main/webapp/WEB-INF/ehr/jsp/system/flow/editorFlow.jsp

@ -2,110 +2,134 @@
<%@include file="/WEB-INF/ehr/commons/jsp/commonInclude.jsp" %>
<!--######应用管理页面 > 应用详情模板页######-->
<div id="div_info_form" class="m-form-inline" style="padding-top:10px;" data-role-form>
<div class="wrapper">
    <div id="div_info_form" class="m-form-inline content" data-role-form>
    <div class="m-form-group">
        <label><span class="red">*&nbsp;</span>流程名称:</label>
        <div class="m-form-group">
            <label><span class="red">*&nbsp;</span>流程名称:</label>
        <div class="m-form-control ">
            <div class="l-text">
                <input type="text" class="l-text-field required" placeholder="请输入流程名称" name="name"/>
            <div class="m-form-control ">
                <div class="l-text">
                    <input type="text" class="l-text-field required" placeholder="请输入流程名称" name="name"/>
                </div>
            </div>
        </div>
    </div>
    <div class="m-form-group">
        <label><span class="red">*&nbsp;</span>流程:</label>
        <div class="m-form-group">
            <label><span class="red">*&nbsp;</span>流程Code:</label>
        <div class="m-form-control">
            <form id="form1" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">
                <input type="text" name="path" class="l-textbox btnGrayUp" style="width: 144px;"  placeholder="点击选择流程文件" readonly="readonly" data-id="">
                <div style="float: right;">
                    <div  class="l-button l-button-no btnGrayDo" data-id="1">
                        <span style="background-color: rgb(240, 240, 240);">导入</span>
                    </div>
                    <label class="say1" style="display: inline-block;width: 70px;"></label>
                </div>
                <input type="file" name="file" style="display: none" id="file1" />
            </form>
        </div>
    </div>
    <div class="m-form-group">
        <label><span class="red">*&nbsp;</span>流程图:</label>
        <div class="m-form-control">
            <form id="form2" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">
                <input type="text" name="chart" class="l-textbox btnGrayUp" style="width: 144px;"  placeholder="点击选择图片" readonly="readonly" data-id="">
                <div style="float: right;">
                    <div  class="l-button l-button-no btnGrayDo" data-id="2">
                        <span style="background-color: rgb(240, 240, 240);">导入</span>
                    </div>
                    <label class="say2" style="display: inline-block;width: 70px;"></label>
            <div class="m-form-control ">
                <div class="l-text">
                    <input type="text" class="l-text-field required" placeholder="请输入流程Code" name="code"/>
                </div>
                <input type="file" name="file" style="display: none" id="file2" />
            </form>
            </div>
        </div>
    </div>
    <div class="m-form-group">
        <label><span class="red">*&nbsp;</span>源代码:</label>
        <%--<div class="m-form-group">--%>
        <%--<label><span class="red">*&nbsp;</span>流程:</label>--%>
        <div class="m-form-control">
            <form id="form3" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">
                <input type="text" name="classPath" class="l-textbox btnGrayUp" style="width: 144px;"  placeholder="点击选择源代码文件" readonly="readonly" data-id="">
                <div style="float: right;">
                    <div  class="l-button l-button-no btnGrayDo" data-id="3">
                        <span style="background-color: rgb(240, 240, 240);">导入</span>
        <%--<div class="m-form-control">--%>
        <%--<form id="form1" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">--%>
        <%--<input type="text" name="path" class="l-textbox btnGrayUp" style="width: 144px;"  placeholder="点击选择流程文件" readonly="readonly" data-id="">--%>
        <%--<div style="float: right;">--%>
        <%--<div  class="l-button l-button-no btnGrayDo" data-id="1">--%>
        <%--<span style="background-color: rgb(240, 240, 240);">导入</span>--%>
        <%--</div>--%>
        <%--<label class="say1" style="display: inline-block;width: 70px;"></label>--%>
        <%--</div>--%>
        <%--<input type="file" name="file" style="display: none" id="file1" />--%>
        <%--</form>--%>
        <%--</div>--%>
        <%--</div>--%>
        <div class="m-form-group">
            <label><span class="red">*&nbsp;</span>流程图:</label>
            <div class="m-form-control">
                <form id="formIcon" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">
                    <input type="text" name="chart" class="l-textbox btnIconGrayUp" style="width: 144px;"  placeholder="点击选择图片" readonly="readonly" data-id="">
                    <div style="float: right;">
                        <div  class="l-button l-button-no formIcon" data-id="formIcon">
                            <span style="background-color: rgb(240, 240, 240);">导入</span>
                        </div>
                        <label class="sayformIcon" style="display: inline-block;width: 70px;"></label>
                    </div>
                    <label class="say3" style="display: inline-block;width: 70px;"></label>
                </div>
                <input type="file" name="file" style="display: none" id="file3" />
            </form>
        </div>
    </div>
    <div class="m-form-group">
        <label><span class="red">*&nbsp;</span>包名:</label>
        <div class="m-form-control">
            <div class="l-text">
                <input type="text" class="l-text-field" placeholder="请输入包名" name="packageName"/>
                    <input type="file" name="file" style="display: none" id="fileIcon" />
                </form>
            </div>
        </div>
    </div>
    <div class="m-form-group">
        <label><span class="red">*&nbsp;</span>类名:</label>
        <%--<div class="m-form-group">--%>
        <%--<label><span class="red">*&nbsp;</span>源代码:</label>--%>
        <%--<div class="m-form-control">--%>
        <%--<form id="form3" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">--%>
        <%--<input type="text" name="classPath" class="l-textbox btnGrayUp" style="width: 144px;"  placeholder="点击选择源代码文件" readonly="readonly" data-id="">--%>
        <%--<div style="float: right;">--%>
        <%--<div  class="l-button l-button-no btnGrayDo" data-id="3">--%>
        <%--<span style="background-color: rgb(240, 240, 240);">导入</span>--%>
        <%--</div>--%>
        <%--<label class="say3" style="display: inline-block;width: 70px;"></label>--%>
        <%--</div>--%>
        <%--<input type="file" name="file" style="display: none" id="file3" />--%>
        <%--</form>--%>
        <%--</div>--%>
        <%--</div>--%>
        <%--<div class="m-form-group">--%>
        <%--<label><span class="red">*&nbsp;</span>包名:</label>--%>
        <div class="m-form-control">
            <div class="l-text">
                <input type="text" class="l-text-field required" placeholder="请输入类名" name="className"/>
        <%--<div class="m-form-control">--%>
        <%--<div class="l-text">--%>
        <%--<input type="text" class="l-text-field" placeholder="请输入包名" name="packageName"/>--%>
        <%--</div>--%>
        <%--</div>--%>
        <%--</div>--%>
        <%--<div class="m-form-group">--%>
        <%--<label><span class="red">*&nbsp;</span>类名:</label>--%>
        <%--<div class="m-form-control">--%>
        <%--<div class="l-text">--%>
        <%--<input type="text" class="l-text-field required" placeholder="请输入类名" name="className"/>--%>
        <%--</div>--%>
        <%--</div>--%>
        <%--</div>--%>
        <div class="m-form-group">
            <label>状态:</label>
            <div class="m-form-control ">
                <div class="l-text">
                    <input type="text" id="valid"  class="l-text-field required" name="valid">
                </div>
            </div>
        </div>
    </div>
    <div class="m-form-group">
        <label>状态:</label>
        <div class="m-form-control ">
            <div class="l-text">
                <input type="text" id="valid"  class="l-text-field required" name="valid">
        <%--<div class="m-form-group">--%>
        <%--<label>类别:</label>--%>
        <%--<div class="m-form-control ">--%>
        <%--<div class="l-text">--%>
        <%--<input type="text" id="type"  class="l-text-field required" name="type">--%>
        <%--</div>--%>
        <%--</div>--%>
        <%--</div>--%>
        <div class="m-form-group" >
            <label><span class="red"></span></label>
            <div class="m-form-control" id="classDiv">
            </div>
        </div>
    </div>
    <div class="m-form-group">
        <label>类别:</label>
        <div class="m-form-control ">
            <div class="l-text">
                <input type="text" id="type"  class="l-text-field required" name="type">
        <div class="m-form-group">
            <label></label>
            <div id="btnAddClass" class="l-button l-button-no">
                <span>添加节点</span>
            </div>
        </div>
        <!-- 隐藏字段 -->
        <div class="m-form-group" style="display: none;">
            <input name="id" id="flowId" hidden="hidden"/>
            <input name="flowClassList" id="flowClassList" hidden="hidden"/>
        </div>
    </div>
</div>
    <!-- 隐藏字段 -->
    <div class="m-form-group" style="display: none;">
        <input name="id" hidden="hidden"/>
<div class="m-form-bottom">
    <div id="btnCancel" class="l-button l-button-no">
        <span>关闭</span>
    </div>
    <div class="m-form-bottom">
        <div id="btnCancel" class="l-button l-button-no">
            <span>关闭</span>
        </div>
        <div id="btnSave" class="l-button">
            <span>保存</span>
        </div>
    <div id="btnSave" class="l-button">
        <span>保存</span>
    </div>
</div>
@ -113,4 +137,9 @@
<link rel="stylesheet" type="text/css" href="${staticRoot}/lib/webuploader/webuploader.css" />
<style>
    .m-form-group label{width: 135px;}
    .m-form-bottom .l-button {float: right;margin: 10px;}
    .wrapper{position:absolute;z-index:1;top:0;bottom:48px;left:0;width:100%;overflow:hidden;}
    .content{height:100%;padding-top:10px;position:absolute;z-index:1;width:100%;overflow-x:hidden;}
    .m-form-bottom{position:absolute;z-index:2;bottom:0;left:0;width:100%;background:#f5f8fa;padding:0; height: auto;}
    .flows{    border: 1px solid deepskyblue;margin-bottom: 10px;width: 550px;}
</style>

+ 263 - 36
hos-admin/src/main/webapp/WEB-INF/ehr/jsp/system/flow/editorFlowJs.jsp

@ -7,10 +7,12 @@
<script type="text/javascript">
    /* *************************** 模块初始化 ***************************** */
    var editorParam = {
    var editorFlow = {
        //form
        actionUrl:"${contextRoot}/flow/addFlow",
        index:1,
        $mun:0,//保存节点数量
        flowClassData:[],//节点数据
        init: function () {
            this.bindEvents();
            this.initForm();
@ -21,8 +23,6 @@
            var modelString = "${model.id}";
            if(modelString!=undefined && modelString!=null && modelString.length>0)
            {
                var type = "${flowClass.type}";
                liger.get("type").selectValue(type);
                var valid = "${model.valid}";
                liger.get("valid").selectValue(valid);
               data={
@ -32,10 +32,9 @@
                   path: "${model.path}",
                   chart:"${model.chart}",
                   valid:"${model.valid}",
                   type: type,
                   classPath: "${flowClass.classPath}",
                   packageName: "${flowClass.packageName}",
                   className: "${flowClass.className}",
                   flowClassList: '${flowClass}',
                   flowClassArray:'${model.flowClassArray}',
                   createDate:'${model.createDate}'
                };
                me.actionUrl = "${contextRoot}/flow/updateFlow";
@ -51,19 +50,56 @@
                },
            });
            me.resolveFlow();
        },
        bindFlowClass:function(index){
            var me = this;
            $("#type"+index).ligerComboBox({data : [{"value":"route","code":"route"},{"value":"processor","code":"processor"}],
                cancelable:false,
                onSuccess:function(data){
                }});
            var type = $("#type"+index).val();
            if(!type || type==''){
                type = "route";
            }
            liger.get("type"+index).selectValue(type);
            me.flowClassData[me.$mun]= {
                "packageName": $("#packageName"+index).val(),
                "className": $("#className"+index).val(),
                "classPath": $("#classPath"+index).val(),
                "flowId": $("#flowId").val(),//流程id
                "type":$("#type"+index).val(),
                "id":$("#classId"+index).val(),
                "isUpdate":$("#isUpdate"+index).val()
            }
            me.$mun+=1;
        },
        bindEvents: function () {
            var me = this;
            $(".m-form-bottom").on("click","#btnSave",function () {
                if(!$("#div_info_form").ligerAutoForm("validate")){
                    return;
                }
                var index =newMaxFormIndex();
                    for (var i = index; i > 0; i--) {
                        me.bindFlowClass(i);
                    }
                var data = $("#div_info_form").ligerAutoForm("getData");
                delete data.file;
                data.flowClassArray=me.flowClassData;
                var dataStr = JSON.stringify(data);
                $.ajax({ //ajax处理
                    type: "POST",
                    url : me.actionUrl,
                    dataType : "json",
                    data:data,
                    data:{"flowClass":dataStr},
                    cache:false,
                    success :function(data){
                        if(data.successFlg) {
@ -92,23 +128,55 @@
                onSuccess:function(data){
                }});
            $("#form1").on("click",".btnGrayUp",function(){
                var inputVal=$(this).closest("div").find("input[type=text]");
                var obj=$(this).closest("div").find("input[type=file]")
                obj.change(function(){
                    inputVal.val(obj.val());
                })
                obj.click();
            });
            $("#form2").on("click",".btnGrayUp",function(){
                var inputVal=$(this).closest("div").find("input[type=text]");
                var obj=$(this).closest("div").find("input[type=file]")
                obj.change(function(){
                    inputVal.val(obj.val());
                })
                obj.click();
            /* =====================添加新节点========================= */
            $(".m-form-group").on("click","#btnAddClass",function () {
                var index =newMaxFormIndex();
                if( index>1){
                    index++
                }
                var html = '<div class="flows"  dataIndex="'+index+'" id="paramGroup'+index+'">';
                html += '<div class="m-form-group" dataIndex="'+index+'"  ><label>类别 : </label><div class="m-form-control ">'  +
                        '<div class="l-text"><input type="text" id="type'+index+'" class="l-text-field required" name="type"></div>'+
                        '</div></div>';
                html += '<div class="m-form-group" style="border:1px solid #e1e1e1"><label>包名'+index+' : </label><div class="m-form-control"  controlType="textbox" id="packName'+index+'_div" style="margin-left:0px;">'  +
                        '<input type="text" id="packageName'+index+'"  class="l-textbox"/></div></div>';
                html += '<div class="m-form-group"   dataIndex="'+index+'" id="paramGroup'+index+'"><label>类名'+index+' :</label>'+
                        '<div class="m-form-control"  controlType="textbox" id="className'+index+'_div" style="margin-left:0px;"> '  +
                        '<input type="text" id="className'+index+'"  class="l-textbox"/></div></div>';
                html += ' <div class="m-form-group"><label>源代码'+index+' : </label><div class="m-form-control">' +
                        '<form id="form'+index+'" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">';
                html += ' <input name="isUpdate" type="text" id="isUpdate'+index+'"   class="isUpdate" hidden="hidden"/>';
                html += ' <input type="text"  id="classPath'+index+'" name="classPath" class="l-textbox btnGrayUp" style="width: 144px;"  placeholder="点击选择源代码文件" readonly="readonly" data-id="">'+
                        ' <div style="float: right;">'+
                        ' <div  class="l-button l-button-no btnGrayDo'+index+'" data-id="'+index+'">'+
                        ' <span style="background-color: rgb(240, 240, 240);">导入</span> </div>'+
                        '<label class="say'+index+'" style="display: inline-block;width: 70px;"></label>'+
                        '</div><input type="file" name="file" style="display: none" id="file'+index+'" /></form>'+
                        '</div></div>';
                html += '<div class="m-form-group"><div class="m-form-control"><a class="m-btn-cancle" href="javascrip:void()" style="display:block;" onclick="$(\'#paramGroup'+index+'\').remove()"></a></div></div>';
                $("#classDiv").append(html);
                $("#type"+index).ligerComboBox({data : [{"value":"route","code":"route"},{"value":"processor","code":"processor"}],
                    cancelable:false,
                    onSuccess:function(data){
                    }});
                var type = $("#type"+index).val();
                if(!type || type==''){
                    type = "route";
                }
                liger.get("type"+index).selectValue(type);
                bindForm(index);
                bindUpload(index);
            });
            $("#form3").on("click",".btnGrayUp",function(){
            $("#formIcon").on("click",".btnIconGrayUp",function(){
                var inputVal=$(this).closest("div").find("input[type=text]");
                var obj=$(this).closest("div").find("input[type=file]")
                obj.change(function(){
@ -117,13 +185,12 @@
                obj.click();
            });
            $(".btnGrayDo").bind("click",function(){
                var id = $(this).attr("data-id");
                var formId = '#form'+id;
            $(".formIcon").bind("click",function(){
                var formId = '#formIcon';
                var formObj=$(formId);//要提交的表单
                var Obj=$(".btnGrayDo");
                var upObj=formObj.closest("input").find(".btnGrayUp");//浏览的按钮
                var formsay=formObj.find(".say"+id);//提示文字
                var Obj=$(".formIcon");
                var upObj=formObj.closest("input").find(".btnIconGrayUp");//浏览的按钮
                var formsay=formObj.find(".sayformIcon");//提示文字
                if(formObj.closest("div").find("input[type=text]").val().length!=0){//判断是否选择了文件
                    formsay.attr("class","say true").html("上传中");
                    formObj.ajaxForm({
@ -132,8 +199,8 @@
                            if(data.successFlg){
                                formsay.attr("class","say true").html("上传成功");
                                formObj.find("input[type=text]").attr("data-id",data.message)//设置已上传的文件的ID
                                formObj.find(".btnDel").css("display","inline-block")
                                formObj.closest("div").find("span").html("重新导入<i></i>");
                            }else{
                                $.ligerDialog.error("上传格式有问题");
                                Obj.css("background","#ebebeb").html("导入");
@ -152,9 +219,160 @@
            });
            /* ===================== 文件预览 动态绑定事件========================== */
            /* =====================上传文件 原数据绑定=========================== */
            var index =newMaxFormIndex();
                for (var i = index; i > 0; i--) {
                    bindForm(i);
//                    bindUpload(i);
                }
//            $("#form"+index).on("click",".btnGrayDo",function(){
//            $(".btnGrayDo").bind("click",function(){
//                var id = $(this).attr("data-id");
//                alert(id);
//                var formId = '#form'+id;
//                var formObj=$(formId);//要提交的表单
//                var Obj=$(".btnGrayDo");
//                var upObj=formObj.closest("input").find(".btnGrayUp");//浏览的按钮
//                var formsay=formObj.find(".say"+id);//提示文字
//                if(formObj.closest("div").find("input[type=text]").val().length!=0){//判断是否选择了文件
//                    formsay.attr("class","say true").html("上传中");
//                    formObj.ajaxForm({
//                        dataType: 'json',
//                        success:  function processJson(data){
//                            if(data.successFlg){
//                                formsay.attr("class","say true").html("上传成功");
//                                formObj.find("input[type=text]").attr("data-id",data.message)//设置已上传的文件的ID
//                                formObj.find(".btnDel").css("display","inline-block")
//                                formObj.closest("div").find("span").html("重新导入<i></i>");
//                            }else{
//                                $.ligerDialog.error("上传格式有问题");
//                                Obj.css("background","#ebebeb").html("导入");
//
//                            }
//                            //console.log(eval('('+data.data+')'));
//                        },
//                        error: function processJson(data){
//                            formsay.attr("class","say false").html("上传失败");
//                        }
//                    });
//                    formObj.submit();
//                }else{
//                    $.ligerDialog.error("请选择要上传的文件");
//                }
//            });
        },
        resolveFlow:function(){
            var index = 1;
            var flowStr = '${flowClass}';
            if (flowStr != "") {
                var flowJson = $.parseJSON(flowStr);
                $.each(flowJson, function(i, data){
                    var html = '<div class="flows"  dataIndex="'+index+'" id="paramGroup'+index+'">';
                    html += '<div class="m-form-group" dataIndex="'+index+'"  ><label>类别 :</label><div class="m-form-control "> '  +
                            '<div class="l-text"><input type="text" id="type'+index+'" value="'+data.type+'" class="l-text-field required" name="type"></div>'+
                            '</div></div>';
                    html += '<div class="m-form-group" style="border:1px solid #e1e1e1"><label>包名'+index+' : </label><div class="m-form-control"  controlType="textbox" id="packName'+index+'_div" style="margin-left:0px;">'  +
                            '<input type="text" id="packageName'+index+'" value="'+data.packageName+'" class="l-textbox"/></div></div>';
                    html += '<div class="m-form-group"   dataIndex="'+index+'" id="paramGroup'+index+'"><label>'+
                            '类名'+index+' : </label><div class="m-form-control"  controlType="textbox" id="className'+index+'_div" style="margin-left:0px;">'  +
                            '<input type="text" id="className'+index+'" value="'+data.className+'"  class="l-textbox"/></div></div>';
                    html += ' <div class="m-form-group"><label>源代码'+index+' : </label><div class="m-form-control">' +
                            '<form id="form'+index+'" action="${contextRoot}/flow/upload" method="post" enctype="multipart/form-data">';
                    html += ' <input type="text" name="isUpdate" id="isUpdate'+index+'" class="isUpdate" hidden="hidden"/>';
                    html += ' <input type="text"  id="classPath'+index+'" value="'+data.classPath+'"   name="classPath" class="l-textbox btnGrayUp" style="width: 144px;"  placeholder="点击选择源代码文件" readonly="readonly" data-id="">'+
                            ' <div style="float: right;">'+
                            ' <div  class="l-button l-button-no btnGrayDo'+index+'" data-id="'+index+'">'+
                            ' <span style="background-color: rgb(240, 240, 240);">导入</span> </div>'+
                            '<label class="say'+index+'" style="display: inline-block;width: 70px;"></label>'+
                            '</div><input type="file" name="file" style="display: none" id="file'+index+'" /></form>'+
                            '</div></div>';
                    html += ' <input name="id" value="'+data.id+'" id="classId'+index+'" hidden="hidden"/>';
                    html += '<div class="m-form-group"><div class="m-form-control"><a class="m-btn-cancle" href="javascrip:void()" style="display:block;" onclick="$(\'#paramGroup'+index+'\').remove()"></a></div></div>';
                    $("#classDiv").append(html);
                    $("#type"+index).ligerComboBox({data : [{"value":"route","code":"route"},{"value":"processor","code":"processor"}],
                        cancelable:false,
                        onSuccess:function(data){
                        }});
                    var type = data.type;
                    if(!type || type==''){
                        type = "route";
                    }
                    liger.get("type"+index).selectValue(type);
                    bindForm(index);
                    bindUpload(index);
                    index++;
                });
            }
        }
    };
    function bindForm(index){
        $("#form"+index).on("click",".btnGrayUp",function(){
            var inputVal=$(this).closest("div").find("input[type=text]");
            var obj=$(this).closest("div").find("input[type=file]");
            obj.change(function(){
                inputVal.val(obj.val());
            })
            obj.click();
        });
    }
    function bindUpload(index){
        $(".btnGrayDo"+index).bind("click",function(){
            var formId = '#form'+index;
            var formObj=$(formId);//要提交的表单
            var Obj=$(".btnGrayDo"+index);
            var upObj=formObj.closest("input").find(".btnGrayUp");//浏览的按钮
            var formsay=formObj.find(".say"+index);//提示文字
            if(formObj.closest("div").find("input[type=text]").val().length!=0){//判断是否选择了文件
                formsay.attr("class","say true").html("上传中");
                formObj.ajaxForm({
                    dataType: 'json',
                    success:  function processJson(data){
                        if(data.successFlg){
                            formsay.attr("class","say true").html("上传成功");
                            formObj.find("input[type=text]").attr("data-id",data.message)//设置已上传的文件的ID
                            var inputVal=formObj.closest("div").find("input[type=text]");
                            inputVal.val(data.message);
                            formObj.closest("div").find("span").html("重新导入<i></i>");
                            var isUpdate=formObj.find(".isUpdate");//是否有上传过
                            isUpdate.val("1");//上传过
                        }else{
                            $.ligerDialog.error("上传格式有问题");
                            Obj.css("background","#ebebeb").html("导入");
                        }
                        //console.log(eval('('+data.data+')'));
                    },
                    error: function processJson(data){
                        formsay.attr("class","say false").html("上传失败");
                    }
                });
                formObj.submit();
            }else{
                $.ligerDialog.error("请选择要上传的文件");
            }
        });
    }
    function getFilePath(input){
        if(input){//input是<input type="file">Dom对象
            if(window.navigator.userAgent.indexOf("MSIE")>=1){  //如果是IE
@ -171,11 +389,20 @@
        }
    }
    //获取动态添加的form的最大值。
    function newMaxFormIndex(){
        var index;
        var size = $(".flows").length;
        if(size!="" && size>0){
            index=$("#"+$(".flows")[size-1].id).attr("dataIndex");//获取参数的个数
        }else{
            index=1;
        }
        return index;
    }
    $(function () {
        editorParam.init();
        getFilePath($("#file1"));
        getFilePath($("#file2"));
        getFilePath($("#file3"));
        editorFlow.init();
    });
</script>

+ 2 - 2
hos-admin/src/main/webapp/WEB-INF/ehr/jsp/system/flow/flowJs.jsp

@ -138,8 +138,8 @@
            }
            me.dialog = $.ligerDialog.open({
                height: 500,
                width: 500,
                height: 800,
                width: 800,
                title: title,
                url: '${contextRoot}/flow/editorFlow',
                //load: true,