动态解析svg ajax交互

11 篇文章 0 订阅
3 篇文章 0 订阅

svg.js

window.onload = function() {

    var id = "";
    var sURL = window.location.href;
    var p_question = sURL.indexOf("?");
    var p_start = sURL.indexOf("=");
    if (p_start != -1)
        id = sURL.substring(p_question + 1, p_start);    
    var doubleSlash = sURL.indexOf("//");
    var firstSlash = sURL.indexOf("/", doubleSlash + 2);
    var secSlash = sURL.indexOf("/", firstSlash + 1);

    if ("svgid" == id)
    {
        var sec_p = sURL.indexOf("=", p_start + 1);
        if (sec_p != -1)
            id = sURL.substring(p_start + 1, sURL.indexOf(sec_p));
        else
            id = sURL.substring(p_start + 1);
        var xmlHttp = getXmlHttp();        
        if (null != xmlHttp)
        {
        /*    var doubleSlash = sURL.indexOf("//");
            var firstSlash = sURL.indexOf("/", doubleSlash + 2);
            var secSlash = sURL.indexOf("/", firstSlash + 1);*/
            var url = sURL.substring(0, secSlash)
                    + "/bizmonitor/SVGAction.do?id=" + encodeURIComponent(id);
            xmlHttp.open("GET", url, true);
            xmlHttp.onreadystatechange = function()
            {
                if (xmlHttp.readyState == 4)
                {
                    if (xmlHttp.status == 200)
                    {
                        var json = eval("(" + xmlHttp.responseText + ")");
                        for (i in json)
                        {
                            var dom = document.getElementById(i);
                            if (dom != null)
                            {
                                dom.removeAttribute("class");
                                dom.setAttribute("stroke", "#000000");
                                // The work flow state has ended.
                                if (json[i] == 1)
                                    dom.setAttribute("fill", "#6FA45E");
                                else if (json[i] == 2)// The work flow state is being processed...
                                    dom.setAttribute("fill", "#FD5D5D");
                                else
                                {
                                    // Default or unprocessed status temporary,
                                    // keep unchanged,and nothing to do.
                                }
                            }
                        }
                    } else {
                        alert('wrong: ' + xmlHttp.status);
                    }
                }
            };
            xmlHttp.send(null);
        }
    }
    else if ("koName" == id)
    {    
        var xmlHttp = getXmlHttp();
        if(xmlHttp != null)
        {
            var koName = sURL.substring(p_start+1);
            
            var url = sURL.substring(0, secSlash) + "/svgProcess.do?koName=" + koName + "&type=getWorkItemTask";
            xmlHttp.open("GET", url, true);
            xmlHttp.onreadystatechange = function()
            {
                if (xmlHttp.readyState == 4)
                {
                    if (xmlHttp.status == 200)
                    {
                        var json = eval("(" + xmlHttp.responseText + ")");
                        for (i in json)
                        {
                            var dom = document.getElementById(i);
                            if (dom != null)
                            {                                     
                                //alert(i + ", " + json[i]);
                                createNode(i, json[i]);
                            }                            
                        }
                    }
                    else
                        alert('wrong: ' + xmlHttp.status);
                }
            };
            xmlHttp.send(null);
        }
    }
    else
    {
        var p = sURL.lastIndexOf("=");
        if (p != -1)
        {
            id = sURL.substr(p + 1);
            var sDom = document.getElementById(id);
            if (sDom != null)
            {
                sDom.removeAttribute("class");
                // sDom.setAttribute("fill","url(#grad1)");
                sDom.setAttribute("fill", "#FD5D5D");
                sDom.setAttribute("stroke", "#000000");
            }
        }
    }
};
function getXmlHttp()
{
    var xmlHttp = null;
    if (window.XMLHttpRequest)
        xmlHttp = new XMLHttpRequest();
    else if (window.ActiveXObject)
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    return xmlHttp;
}
function createNode(id, count)
{
    var dom = document.getElementById(id);
    //dom.removeAttribute("class");
    //dom.setAttributeNS(null, "stroke", "#000000");
    //dom.setAttributeNS(null, "fill", "#FD5D5D");        
    var x, y;
    var textAnchor;
    var rectX, rectY;
    if(dom.nodeName == "ellipse" || dom.nodeName == "circle")
    {                  
        x = dom.getAttribute("cx");
        y = dom.getAttribute("cy");
        var tempX = x;
        var tempY = y;
        y = parseInt(tempY) + 10;
        rectX = parseInt(tempX)-29;
        rectY = tempY;
        textAnchor = "middle";
    }
    else if(dom.nodeName == "rect")
    {
        x = dom.getAttribute("x");
        y = dom.getAttribute("y");
        var tempX = x;
        var tempY = y;
        textAnchor = "start";
        x = parseInt(tempX) + 9;
        y = parseInt(tempY) + 51;
        rectX = parseInt(tempX) + 5;
        rectY = parseInt(tempY) + 43;
    }
    else if(dom.nodeName == "path")
    {
        var str = dom.getAttribute("d");
        var spaceFirst = str.indexOf(" ");// According to the path attribute Mxx XXX Lxxx take decided to reference SVG manual
        var spaceSec = str.indexOf(" ", spaceFirst + 1);
        var x = str.substring(1, spaceFirst);// Take out the first letter 'M'
        var y = str.substring(spaceFirst + 1, spaceSec - 1);
        var tempX = x;
        var tempY = y;            
        y = parseInt(tempY) - 7;
        rectX = parseInt(tempX) -29;
        rectY = parseInt(tempY) -15;              
        textAnchor = "middle";
    }
    
    var text = document.createElementNS("http://www.w3.org/2000/svg","text");
    text.setAttributeNS(null, "fill", "#000000");    
    text.setAttributeNS(null, "x", x);
    text.setAttributeNS(null, "y", y);             
    text.setAttributeNS(null, "text-anchor", textAnchor);  
    text.setAttributeNS(null, "font-size", "8px");
    text.appendChild(document.createTextNode("有" + count + "条待办事项"));

    var rect = document.createElementNS("http://www.w3.org/2000/svg","rect");
    
    rect.setAttributeNS(null, "x", rectX);
    rect.setAttributeNS(null, "y", rectY);
    rect.setAttributeNS(null, "width", "60px");
    rect.setAttributeNS(null, "height","12px");
    rect.setAttributeNS(null, "fill", "#FEFEA6");     
    var pDom = dom.parentNode;
    pDom.appendChild(rect);
    pDom.appendChild(text);
}

overall.js

var url = window.location.href;
var p = url.indexOf("/", 8);
if(-1 != p)
    url = url.substring(0, p + 1);
// 总体流程框架条件
var processKos = '{"设备销售流程":"fJmKR9T5nsT", "设备售后服务流程":"bfa7ffcc12f13b23b38fa7cf0bcb54", "设备采购及安装流程":"bfa7ffcc12f142a7e3ddae8ed90c87", "耗材销售流程":"bcjUMVEEeQ7","设备耗材客户投诉处理流程":"bfa7ffcc12e554326431de8dfc4871"}';
var width=800;
var height=600;        
var x = parseInt(screen.width / 2.0) - (width / 2.0);
var y = parseInt(screen.height / 2.0) - (height / 2.0);
var urlParam = "width="+ width+ ",height="+ height+ ",top="+ y+ ",left="+ x+ ",modal=yes,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no, status=no";

// 打开url非中文的连接
function openWindow(url)
{
    try
    {
        // 默认支持svg的浏览器
        window.open(url,'pop',urlParam);
    }
    catch (e)
    {    
        // Adobe viewer 等需要第三方插件支持的svg的浏览器
        browserEval("window.open('" + url + "', 'pop', '" + urlParam + "')");
    }    
}
// 处理具体的作业,进入任务处理栏
function processWorkItem(koName, workId, workName)
{
    var purl;
    if(workId == "" || workId == "undefined")
    {
        var pros = eval('(' + processKos + ')');
        //purl = url + "app/svgProcess.do?processId=" + pros[koName] + "&type=" + "startProcess";// 启动流程 TODO
        purl= url + "app/bizstation/GetFuncDetailAction.do?processId=" + pros[koName] + "&type=" + "startProcess";
    }
        
    else
        purl = url + "app/bizstation/GetWorkDetailAction.do?workItemId="+ workId +"&workName="+ workName+"&proName="+ koName + "&opId=12&enabled=0";
    openWindow(purl);                
}
// 绑定主流程文本事件,传递流程KO.id/流程名称
function bindProcessEvent()
{
    var jsonKos = eval('(' + processKos + ')');    
    for(var key in jsonKos)
    {
        var koId = jsonKos[key];
        var koDocText = document.getElementById(koId);
        if(koDocText != null)
            koDocText.setAttributeNS(null, "onclick", "processEvent('"+ key +"')");                    
    }
}
// 处理主流程文本事件
function processEvent(koName)
{    
    var purl = url + "app/images/svg/" + koName +".svg?koName=" + encodeURI(encodeURI(koName));
    try
    {            
        window.open(purl,'pop',urlParam);
    }
    catch (e)
    {    
        purl =     url + "app/images/svg/" + encodeURIComponent(encodeURIComponent(koName)) +".svg?koName=" + encodeURI(encodeURI(koName));
        browserEval("window.open('" + purl + "', 'pop', '" + urlParam + "')");
    }                
}
function Send(url, processKos)
{
    this.url = url;
    this.processKos = processKos;
}

//具体流程对象,koId=流程KO.ID, koName=流程名称, processes=流程数组
function ProcessKo(koId, koName, processes, modelId)
{
    this.koId = koId;
    this.koName = koName;
    this.processes = processes;
    this.modelId = modelId;
    this.addEventText = addEventText;
}
function Process(processId,workItems)
{
    this.processId = processId;
    this.workItems = workItems;
}

function WorkItem(workId, workName)
{
    this.workId = workId;
    this.workName = workName;
}
// 设置文本框及容器的可见性
function switchAttrVisable(sdom) {             
    if (null != sdom) {
        var attr = sdom.getAttribute("visibility");
        if ("visible" == attr)
            sdom.setAttribute("visibility", 'hidden');
        else
            sdom.setAttribute("visibility", "visible");
    }
}
// 显示流程中具体作业信息;jsoKo为流程信息集合;
function showItems(koId, koName, processes)
{    
     var gdoc = document.getElementById(koId + "_g");
     var rdoc = document.getElementById(koId + "_r");
     var x, y, tempY;
     if(gdoc != null && rdoc != null)
     {// 准备显示作业信息
         switchAttrVisable(gdoc);
         switchAttrVisable(rdoc);
         removeTextNode(gdoc);
         x = rdoc.getAttribute("x");
         y = rdoc.getAttribute("y");
     }
     if(processes != "undefined")
     {    
         var f = 0;// 标记作业个数,辅助计算文本坐标位置
         var json = eval('(' + processes + ')');
         for(var i in json)
         {    
            var j = 0;                          
            for(var k in json[i])
            {      
                var processId;                
                
                if(typeof(k) == "string" && k != "toJSONString")
                     processId = k;// 流程ID  
                
                if(processId != "undefined")
                {
                    var json2 = json[i][k];// 作业数组                         
                    
                    for(var m in json2)
                    {
                        for(var n in json2[m])
                        {
                            if(typeof(json2[m][n]) == "string")
                            {
                                f++;
                                var workId = n;
                                var workName = json2[m][n];  
                                var tx = parseFloat(x) + 4;    // 文本横坐标
                                var ty = parseFloat(y) + 15 * f;  // 文本纵坐标                                        
                                tempY = ty;
                                createTextNode(koName, processId, workId, workName, rdoc, gdoc, tx, ty);
                                //alert(processId + ": [" + workId + ", " + workName + "]");                                                 
                            }                                         
                        }
                    }
                }         
            }                 
         }    
         var startX = parseFloat(x) + 4;
         var startY = parseFloat(tempY) + 15;
         createTextNode(koName, processId, '', '启动', rdoc, gdoc, startX, startY);                                    
    }
    else
    {
         var startX = parseFloat(x) + 4;
         var startY = parseFloat(y) + 15;
         createTextNode(koName, '', '', '启动', rdoc, gdoc, startX, startY);    
    }
    
}

//  移除文本节点
function removeTextNode(gdoc)
{
    if (null != gdoc) {
        while (gdoc.childNodes.length > 0) {
            for ( var i = 0; i < gdoc.childNodes.length; i++) {
                gdoc.removeChild(gdoc.childNodes.item(i));
            }
        }
    }
}
//创建文本节点
function createTextNode(koName, processId, workId, workName, rdoc, gdoc, tx, ty)
{             
    var nodeVal;
    nodeVal =  workId + workName; // 节点要显示的信息
    if(nodeVal.length > 27)
        nodeVal = nodeVal.substring(0, 24) + "....";// 保持长度在26个字符以内,超出用省略号代替,使用鼠标移动提示处理具体信息

    var a = document.createElementNS("http://www.w3.org/2000/svg", "a");
    a.setAttributeNS("link", "xlink:href", "");
    var text = document.createElementNS("http://www.w3.org/2000/svg",
            "text");
    text.setAttributeNS(null, "class", "linkText");
    text.setAttributeNS(null, "x", tx);
    text.setAttributeNS(null, "y", ty);
    text.setAttributeNS(null, "onclick", "processWorkItem('"+ koName +"','"+ workId +"','"+ workName +"')");
    text.appendChild(document.createTextNode(nodeVal));

    var attr = document
            .createElementNS("http://www.w3.org/2000/svg", "set");
    attr.setAttributeNS(null, "attributeName", "stroke");
    attr.setAttributeNS(null, "from", "#68A4FF");
    attr.setAttributeNS(null, "to", "red");
    attr.setAttributeNS(null, "begin", "mouseover");
    attr.setAttributeNS(null, "end", "mouseout");
    text.appendChild(attr);    
    a.appendChild(text);
    if (null != gdoc)
        gdoc.appendChild(a);
}

// 绑定待办事项文本事件
function addEventText()
{                      
    var text = document.getElementById(this.koId + "_p");                
    if(text != null)
    {                        
        var str = format(this.processes);
        if(str != "undefined")
            text.setAttributeNS(null, "onclick", "showItems('"+ this.koId +"','"+ this.koName +"', '" + str + "')");
    }
}

/* 格式化javascript对象(ProcessKo)为json格式字符串
   格式后为:var json = '[{"SB-售后服务-001":[{"SB-售后服务-001_A3":"流水线规划"},{"SB-售后服务-001_A4":"与客户确认基础培训计划"}]},{"SB-售后服务-002":[{"SB-售后服务-002_E1":"收到客户支付款项"}]}]';
 */
function format(obj)
{
   if(obj.length > 0)
    {
        var str = "[";
        for(var j=0; j< obj.length; j++)
        {
            str +="{";
            var process = obj[j];
            str += "\""+ process.processId + "\"" + ":[";
            var works = obj[j].workItems;
            for(var w=0; w<works.length; w++)
            {
                 str +="{" +"\""+ works[w].workId + "\"" + ":" + "\"" + works[w].workName + "\""+"}";
                 if(w < works.length-1)
                    str += ",";
            }
            
            if(j< obj.length-1)
                str += "]},"
            else
                str += "]}";
            
       }
       str += "]";                        
    }
    return str;
}

// 处理所有主流程信息设定
function setProcessTask(koId, count)
{                        
    var tspanId = koId + "_t";                
    var parentId = koId + "_p";
    var tspan = document.getElementById(tspanId);      
    var parentText = document.getElementById(parentId);
    if(tspan != null)
    {                        
        if(count == 0)
            tspan.setAttributeNS(null, "stroke", "#FF0000");
        tspan.firstChild.nodeValue = "(" + count + ")";                         
    }
}
Send.prototype.sendData = function()
{
    var xmlHttp = null;

    if(window.ActiveXObject)
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

    else if(window.XMLHttpRequest)
        xmlHttp = new XMLHttpRequest();
    
    if(xmlHttp !=  null)
    {
       // alert('send....');
        xmlHttp.open("POST", this.url ,true );

        xmlHttp.onreadystatechange = function()
        {
            if (xmlHttp.readyState == 4 )
            {
                if (xmlHttp.status == 200 )
                {
                    var kos = xmlHttp.responseText;    
                    if(kos != "undefined")
                    {
                        jsonKos = eval('(' + kos + ')');                        
                        for(i in jsonKos)
                        {
                            var koId = jsonKos[i].id;
                            var koCount = jsonKos[i].count;                                         
                            var koName = jsonKos[i].name;// 流程名称
                            setProcessTask(koId, koCount);
                            var processSet = jsonKos[i].processSet;
                            var pk;
                            if(processSet == null)
                            {
                                pk = new ProcessKo(koId, koName, null);
                                pk.addEventText();// 为每个流程增加事件
                            }
                                
                            if(typeof(processSet) == "object")
                            {                                         
                                var processes = new Array();// 存放ko中的具体流程对象的数组
                                for(var p=0; p<processSet.length; p ++)
                                {
                                    var processId = processSet[p].id;
                                    if( typeof(processId) != "undefined")
                                    {
                                         var workItems = processSet[p].workToDoSet;    // 作业集合包含相同流程名称的不同流程id的作业    
                                         var workItemsArray = new Array();// 存放作业对象的数组
                                         if(typeof(workItems) == "object" && workItems != null)
                                         {
                                            for(var w=0; w<workItems.length; w++)
                                            {
                                                var workId = workItems[w].id;// 作业id
                                                var workName = workItems[w].name;// 作业名称
                                                var workItem = new WorkItem(workId, workName);
                                                workItemsArray.push(workItem);
                                            }
                                         }
                                    }
                                    var process = new Process(processId, workItemsArray);  
                                    processes.push(process);
                                }
                                var pk = new ProcessKo(koId, koName, processes);
                                pk.addEventText();// 为每个流程增加事件
                            }                                
                        }                                     
                    }
                }
                else
                   alert('wrong: ' + xmlHttp.status) ;
            }
        };
        xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlHttp.send("processKos=" + this.processKos);      // 发送请求
     }                
}
window.onload = function()
{                                                          
    var sUrl = url + "app/svgProcess.do";                
    var send = new Send(sUrl, processKos);
    send.sendData();
    bindProcessEvent();
}
function interval(){}// 虚拟的方法,屏蔽打开文本时候超链接出现的异常 

overall.svg/

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg id="svgid" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="1024px" height="610px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
        <style type="text/css">
            <![CDATA[
                .str3 {stroke:black;stroke-width:0.900001}
                .str0 {stroke:black;stroke-width:1.53543}
                .str2 {stroke:black;stroke-width:2.12599;cursor:pointer}
                .str1 {stroke:black;stroke-width:2.12599;stroke-dasharray:2.125986 2.125986}
                .fil0 {fill:none}
                .fil6 {fill:black}
                .fil5 {fill:#003399}
                .fil1 {fill:black;font-size:14px}
                .fil2 {fill:blue;fill-rule:nonzero;font-size:12px;}
                .fil4 {fill:#003399;fill-rule:nonzero}
                .fil3 {fill:black;fill-opacity:0.000000}
                .linkText
                {
                    text-anchor:start;
                    text-decoration:underline;                
                    stroke-opacity:1;
                    fill-rule:nonzero;
                    font-size:12px;
                    fill:none;
                    stroke:#0066FF;
                    stroke-width:0.8px;
                    cursour:pointer;
                }
                .linkTextTitle
                {
                   text-anchor:start;
                   text-decoration:underline;
                    stroke-opacity:1;
                    fill-rule:nonzero;
                    font-size:16px;
                    fill:none;
                    stroke:#0066FF;
                    stroke-width:0.8px;
                    cursour:pointer;
                }
                .taskItem
                {
                  fill:none;
                  text-anchor:start;     
                  font-size:13px;
                  stroke:#0066ff;
                  text-decoration:underline;
                  stroke-width:0.8;
                  cursour:pointer;
                }
               ]]>
        </style>        
    </defs>    

    <defs>
        <script type="text/javascript" xlink:href="overall.js"></script>          
    </defs>
    <rect style="stroke-width:1;fill:none;stroke:black" x="1.9998" y="13.4468" width="1020" height="57.7031" transform="matrix(0.9999999,0,0,0.67,-4.238418E-05,-4.174084)" visibility="visible" />
    <text x="100.9998" y="13.4468" letter-spacing="4" transform="matrix(2.201999,0,0,2.164999,156.741,4.843808)">总体流程框架</text>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M670.647 336.272l-8.91969 -6.29174 9.70985 0 9.70985 6.3 -9.70985 6.29174 -9.70985 0 8.91969 -6.3zm-33.5339 -1.05827l34.324 0 0 2.11654 -34.324 0 0 -2.11654z" />
    </g>
    <rect class="fil0 str0" x="77.6503" y="288.099" width="111.366" height="93.8476" rx="20.1969" ry="20.1969" transform="matrix(1,0,0,1,0,-39)" />
    <a  xlink:href="">
        <text id="fJmKR9T5nsT" x="84" y="300" class="linkTextTitle">设备销售流程</text>
    </a>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M261.917 336.421l-8.91969 -6.29174 9.70985 0 9.70985 6.3 -9.70985 6.29174 -9.70985 0 8.91969 -6.3zm-72.9001 -0.767717l73.6902 0 0 1.53543 -73.6902 0 0 -1.53543z" />
    </g>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M144.927 359.269l-0.767717 0.764174 -17.8795 0 0 -1.52835 17.8795 0 0.767717 0.764174zm-0.767717 -0.764174l0.767717 0 0 0.764174 -0.767717 -0.764174zm0 20.4851l-0.767717 -0.764174 0 -18.9567 1.53543 0 0 18.9567 -0.767717 0.764174zm0.767717 -0.764174l0 0.764174 -0.767717 0 0.767717 -0.764174zm-19.415 0l0.767717 -0.764174 17.8795 0 0 1.52835 -17.8795 0 -0.767717 -0.764174zm0.767717 0.764174l-0.767717 0 0 -0.764174 0.767717 0.764174zm0 -20.4851l0.767717 0.764174 0 18.9567 -1.53543 0 0 -18.9567 0.767717 -0.764174zm-0.767717 0.764174l0 -0.764174 0.767717 0 -0.767717 0.764174z" />
    </g>
    <g id="fJmKR9T5nsT_l" transform="matrix(1,0,0,1,0,-39)" xmlns="http://www.w3.org/2000/svg">
        <line class="fil0 str2" x1="130.74" y1="368.748" x2="139.701" y2="368.748" />
        <line class="fil0 str2" x1="135.22" y1="373.497" x2="135.22" y2="363.997" />
    </g>
    <rect class="fil0 str0" x="404.448" y="179.553" width="111.366" height="93.8476" rx="20.1969" ry="20.1969" transform="matrix(1,0,0,1,0,-39)" />
    <a xlink:href="" transform="matrix(1,0,0,1,0,-39)">
        <text id="bfa7ffcc12f13b23b38fa7cf0bcb54" x="412" y="220" class="linkTextTitle">设备售后服务</text>
        <text id="bfa7ffcc12f13b23b38fa7cf0bcb54" x="435" y="240" class="linkTextTitle">流程</text>
    </a>
    <rect class="fil0 str0" x="404.61" y="402.952" width="111.366" height="93.8476" rx="20.1969" ry="20.1969" transform="matrix(1,0,0,1,0,-39)" />
    <a xlink:href="" transform="matrix(1,0,0,1,20,-19)" id="bfa7ffcc12f142a7e3ddae8ed90c87">
        <text x="392" y="422" class="linkTextTitle">设备采购及安</text>
        <text x="408" y="442" class="linkTextTitle">装流程</text>
    </a>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M388.591 225.79l-8.91969 -6.29174 9.70985 0 9.70985 6.3 -9.70985 6.29174 -9.70985 0 8.91969 -6.3zm-86.706 -0.767717l87.4961 0 0 1.53543 -87.4961 0 0 -1.53543z" />
    </g>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M394.672 449.83l-8.91969 -6.29174 9.70985 0 9.70985 6.3 -9.70985 6.29174 -9.70985 0 8.91969 -6.3zm-92.7863 -0.767717l93.5764 0 0 1.53543 -93.5764 0 0 -1.53543z" />
    </g>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M613.908 303.26l6.29174 -8.91969 0 9.70985 -6.3 9.70985 -6.29174 -9.70985 0 -9.70985 6.3 8.91969zm0.767717 -77.0753l0 77.8654 -1.53543 0 0 -77.8654 1.53543 0z" />
    </g>
    <line class="fil0 str0" x1="515.976" y1="226.186" x2="613.907" y2="226.186" transform="matrix(1,0,0,1,0,-39)" />
    <line class="fil0 str0" x1="302.781" y1="314.021" x2="302.781" y2="225.51" transform="matrix(1,0,0,1,0,-39)" />
    <line class="fil0 str0" x1="302.781" y1="449.83" x2="302.781" y2="357.881" transform="matrix(1,0,0,1,0,-39)" />
    <polygon class="fil0 str0" points="274.69,335.322 302.781,314.021 327.814,334.873 302.781,357.88 " transform="matrix(1,0,0,1,0,-39)" />
    <rect class="fil6 str0" x="290.523" y="333.582" width="25.9272" height="4.73914" transform="matrix(1,0,0,1,0,-39)" />
    <rect class="fil6 str0" transform="matrix(0,-0.561483,0.438305,0,301.252,310.695)" width="48.9544" height="10.1988" />
    <polygon class="fil0 str0" points="586.451,335.322 614.541,314.021 639.575,334.873 614.541,357.88 " transform="matrix(1,0,0,1,0,-39)" />
    <rect class="fil6 str0" x="602.284" y="333.582" width="25.9272" height="4.73914" transform="matrix(1,0,0,1,0,-39)" />
    <rect class="fil6 str0" transform="matrix(0,-0.561483,0.438305,0,613.0112,310.695)" width="48.9544" height="10.1988" />
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M613.904 364.256l-6.29174 8.91969 0 -9.70985 6.3 -9.70985 6.29174 9.70985 0 9.70985 -6.3 -8.91969zm-0.767717 85.5449l0 -86.3351 1.53543 0 0 86.3351 -1.53543 0z" />
    </g>
    <line class="fil0 str0" x1="515.974" y1="449.801" x2="613.904" y2="449.801" transform="matrix(1,0,0,1,0,-39)" />
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M470.578 250.583l-0.764174 0.764174 -17.8795 0 0 -1.52835 17.8795 0 0.764174 0.764174zm-0.764174 -0.764174l0.764174 0 0 0.764174 -0.764174 -0.764174zm0 20.4839l-0.764174 -0.764174 0 -18.9555 1.52835 0 0 18.9555 -0.764174 0.764174zm0.764174 -0.764174l0 0.764174 -0.764174 0 0.764174 -0.764174zm-19.4079 0l0.764174 -0.764174 17.8795 0 0 1.52835 -17.8795 0 -0.764174 -0.764174zm0.764174 0.764174l-0.764174 0 0 -0.764174 0.764174 0.764174zm0 -20.4839l0.764174 0.764174 0 18.9555 -1.52835 0 0 -18.9555 0.764174 -0.764174zm-0.764174 0.764174l0 -0.764174 0.764174 0 -0.764174 0.764174z" />
    </g>
    <a transform="matrix(1,0,0,1,0,-39)">
        <line class="fil0 str2"  x1="456.394" y1="260.06" x2="465.355" y2="260.06" transform="matrix(1,0,0,1,0,0) " />
        <line class="fil0 str2"  x1="460.862" y1="264.81" x2="460.862" y2="255.311" transform="matrix(1,0,0,1,0,0) " />
    </a>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M471.639 473.676l-0.767717 0.767717 -17.8819 0 0 -1.53543 17.8819 0 0.767717 0.767717zm-0.767717 -0.767717l0.767717 0 0 0.767717 -0.767717 -0.767717zm0 20.4933l-0.767717 -0.767717 0 -18.9579 1.53543 0 0 18.9579 -0.767717 0.767717zm0.767717 -0.767717l0 0.767717 -0.767717 0 0.767717 -0.767717zm-19.4173 0l0.767717 -0.767717 17.8819 0 0 1.53543 -17.8819 0 -0.767717 -0.767717zm0.767717 0.767717l-0.767717 0 0 -0.767717 0.767717 0.767717zm0 -20.4933l0.767717 0.767717 0 18.9579 -1.53543 0 0 -18.9579 0.767717 -0.767717zm-0.767717 0.767717l0 -0.767717 0.767717 0 -0.767717 0.767717z" />
    </g>
    <g id="bfa7ffcc12f142a7e3ddae8ed90c87_l">
        <line class="fil0 str2"  x1="457.45" y1="483.154" x2="466.411" y2="483.154" transform="matrix(1,0,0,1,0,-39)" />
        <line class="fil0 str2"  x1="461.929" y1="487.904" x2="461.929" y2="478.405" transform="matrix(1,0,0,1,0,-39)" />
    </g>
    <rect class="fil0 str0" x="796.038" y="179.553" width="111.366" height="93.8476" rx="20.1969" ry="20.1969" transform="matrix(1,0,0,1,0,-39)" />
    <a xlink:href="" transform="matrix(1,0,0,1,20,-19)">
        <text id="bcjUMVEEeQ7" x="784" y="210" class="linkTextTitle">耗材销售流程</text>
    </a>
    <rect class="fil0 str0" x="794.392" y="402.953" width="111.366" height="93.8476" rx="20.1969" ry="20.1969" transform="matrix(1,0,0,1,0,-39)" />
    <a xlink:href="" transform="matrix(1,0,0,1,20,-19)" id="bfa7ffcc12e554326431de8dfc4871">
        <text x="780" y="420" class="linkTextTitle">设备耗材客户</text>
        <text x="780" y="440" class="linkTextTitle">投诉处理流程</text>
    </a>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M783.814 225.79l-8.91969 -6.29174 9.70985 0 9.70985 6.3 -9.70985 6.29174 -9.70985 0 8.91969 -6.3zm-76.6241 -0.767717l77.4142 0 0 1.53543 -77.4142 0 0 -1.53543z" />
    </g>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M782.8 449.981l-8.91969 -6.29174 9.70985 0 9.70985 6.3 -9.70985 6.29174 -9.70985 0 8.91969 -6.3zm-75.6095 -0.767717l76.3997 0 0 1.53543 -76.3997 0 0 -1.53543z" />
    </g>
    <line class="fil0 str2" x1="707.191" y1="314.021" x2="707.191" y2="226.308" transform="matrix(1,0,0,1,0,-39)" />
    <line class="fil0 str2" x1="707.191" y1="449.979" x2="707.191" y2="358.742" transform="matrix(1,0,0,1,0,-39)" />
    <polygon class="fil0 str0" points="679.289,335.322 707.379,314.021 732.413,334.873 707.379,357.88 " transform="matrix(0.84,0,0,1,112.936,-39)" />
    <rect class="fil6 str3" x="695.123" y="333.582" width="25.9272" height="4.73914" transform="matrix(1,0,0,1,0,-39)" />
    <rect class="fil6 str0" transform="matrix(0,-0.561483,0.438305,0,705.8494,310.695)" width="48.9544" height="10.1988" />
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M860.378 249.784l-0.764174 0.767717 -17.8784 0 0 -1.53543 17.8784 0 0.764174 0.767717zm-0.764174 -0.767717l0.764174 0 0 0.767717 -0.764174 -0.767717zm0 20.4898l-0.764174 -0.767717 0 -18.9543 1.52835 0 0 18.9543 -0.764174 0.767717zm0.764174 -0.767717l0 0.767717 -0.764174 0 0.764174 -0.767717zm-19.4067 0l0.764174 -0.767717 17.8784 0 0 1.53543 -17.8784 0 -0.764174 -0.767717zm0.764174 0.767717l-0.764174 0 0 -0.767717 0.764174 0.767717zm0 -20.4898l0.764174 0.767717 0 18.9543 -1.52835 0 0 -18.9543 0.764174 -0.767717zm-0.764174 0.767717l0 -0.767717 0.764174 0 -0.764174 0.767717z" />
    </g>
    <g id="bcjUMVEEeQ7_l">
        <line class="fil0 str2"  x1="846.194" y1="259.263" x2="855.155" y2="259.263" transform="matrix(1,0,0,1,0,-39)" />
        <line class="fil0 str2"  x1="850.675" y1="264.012" x2="850.675" y2="254.512" transform="matrix(1,0,0,1,0,-39)" />
    </g>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M860.665 474.623l-0.767717 0.764174 -17.8807 0 0 -1.52835 17.8807 0 0.767717 0.764174zm-0.767717 -0.764174l0.767717 0 0 0.764174 -0.767717 -0.764174zm0 20.4874l-0.767717 -0.764174 0 -18.9591 1.53543 0 0 18.9591 -0.767717 0.764174zm0.767717 -0.764174l0 0.764174 -0.767717 0 0.767717 -0.764174zm-19.4162 0l0.767717 -0.764174 17.8807 0 0 1.52835 -17.8807 0 -0.767717 -0.764174zm0.767717 0.764174l-0.767717 0 0 -0.764174 0.767717 0.764174zm0 -20.4874l0.767717 0.764174 0 18.9591 -1.53543 0 0 -18.9591 0.767717 -0.764174zm-0.767717 0.764174l0 -0.764174 0.767717 0 -0.767717 0.764174z" />
    </g>
    <g id="bfa7ffcc12e554326431de8dfc4871_l">
        <line class="fil0 str2"  x1="846.478" y1="484.102" x2="855.438" y2="484.102" transform="matrix(1,0,0,1,0,-39)" />
        <line class="fil0 str2"  x1="850.958" y1="488.852" x2="850.958" y2="479.352" transform="matrix(1,0,0,1,0,-39)" />
    </g>
    <g transform="matrix(1,0,0,1,0,-39)">
        <path class="fil1" d="M914.813 449.981l8.91969 6.29174 -9.70985 0 -9.70985 -6.3 9.70985 -6.29174 9.70985 0 -8.91969 6.3zm49.4552 0.767717l-50.2453 0 0 -1.53543 50.2453 0 0 1.53543z" />
    </g>
    <line class="fil0 str0" x1="909.291" y1="225.788" x2="964.976" y2="225.788" transform="matrix(1,0,0,1,0,-39)" />
    <line class="fil0 str0" x1="964.266" y1="449.979" x2="964.266" y2="225.788" transform="matrix(1,0,0,1,0,-39)" />
    <a  xlink:href="javascript:interval();"><text id="fJmKR9T5nsT_p" class="taskItem" x="70" y="396" transform="matrix(1,0,0,1,15,-39)">有<tspan id="fJmKR9T5nsT_t">(0)</tspan>条待办事项</text></a>
    <a  xlink:href="javascript:interval();"><text id="bfa7ffcc12f13b23b38fa7cf0bcb54_p" class="taskItem" x="70" y="396" transform="matrix(1,0,0,1,341,-148)">有<tspan id="bfa7ffcc12f13b23b38fa7cf0bcb54_t">(0)</tspan>条待办事项</text></a>
    <a  xlink:href="javascript:interval();"><text id="bcjUMVEEeQ7_p" class="taskItem" x="70" y="396" transform="matrix(1,0,0,1,733,-148)">有<tspan id="bcjUMVEEeQ7_t">(0)</tspan>条待办事项</text></a>
    <a  xlink:href="javascript:interval();"><text id="bfa7ffcc12f142a7e3ddae8ed90c87_p" class="taskItem" x="70" y="396" transform="matrix(1,0,0,1,339,76)">有<tspan id="bfa7ffcc12f142a7e3ddae8ed90c87_t">(0)</tspan>条待办事项</text></a>
    <a  xlink:href="javascript:interval();"><text id="bfa7ffcc12e554326431de8dfc4871_p" class="taskItem" x="70" y="396" transform="matrix(1,0,0,1,730,76)">有<tspan id="bfa7ffcc12e554326431de8dfc4871_t">(0)</tspan>条待办事项</text></a>
    
    <rect id="bfa7ffcc12f13b23b38fa7cf0bcb54_r" x="331" y="259" width="252" height="102" fill="#FFFFCC" stroke="#FF9900" transform="matrix(1,0,0,1,0,-2)" visibility="hidden" />
    <g id="bfa7ffcc12f13b23b38fa7cf0bcb54_g">        
    </g>
    
    <rect id="bfa7ffcc12f142a7e3ddae8ed90c87_r" x="329" y="481" width="251" height="110" fill="#FFFFCC" stroke="#FF9900" transform="matrix(1,0,0,1,1,0)" visibility="hidden" />
    <g id="bfa7ffcc12f142a7e3ddae8ed90c87_g">      
    </g>
    
    <rect id="bcjUMVEEeQ7_r" x="733" y="255" width="226" height="105" fill="#FFFFCC" stroke="#FF9900" visibility="hidden" />
    <g id="bcjUMVEEeQ7_g">         
    </g>
    
    <rect id="bfa7ffcc12e554326431de8dfc4871_r" x="731" y="480" width="249" height="110" fill="#FFFFCC" stroke="#FF9900" visibility="hidden" />
    <g id="bfa7ffcc12e554326431de8dfc4871_g">     
    </g>
    
    <rect id="fJmKR9T5nsT_r" x="61" y="370" width="225" height="124" fill="#FFFFCC" stroke="#FF9900" stroke-opacity="1" visibility="hidden" />
    <g id="fJmKR9T5nsT_g">
    </g>
<rect class="fil0 str1" x="2.95095" y="110.39" width="1020" height="548.028" rx="25" ry="25" stroke-opacity="0.5" transform="matrix(1,0,0,0.988,-1,-56.427)" />
</svg>

/

json格式换行 java 使用gjson.jar处理更方便操作对象

/*
 * $Id: JSONUtil.java 386 2011-05-11 13:29:55Z mk $
 *
 * Copyright (c) 2011 SHANGHAI NEWTECH FABRIC PRINTING LTD
 * All Rights Reserved.
 * Confidential and for internal use only.
 */
package com.bizatworktech.bizessence.in.tab.util;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import net.sf.json.JSONObject;

import com.bizatworktech.bizessence.cm.xc.BEException;
import com.bizatworktech.bizessence.in.eForm.form.EntityKey;
import com.bizatworktech.bizessence.in.eForm.form.QueryForm;
import com.bizatworktech.bizessence.in.kdAPI.monitor.IMonitorDelegator;
import com.bizatworktech.bizessence.in.kdAPI.query.impl.MnProcessQuery;
import com.bizatworktech.bizessence.in.kdAPI.query.impl.WorkToDoVo;
import com.bizatworktech.bizessence.in.svg.Process;
import com.bizatworktech.bizessence.in.svg.ProcessKo;
import com.bizatworktech.bizessence.in.svg.WorkToDo;
import com.bizatworktech.bizessence.rp.ac.bd.QtKiProcess;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

/**
 * 生成json格式工具类
 *
 * @author mk
 * @version $Revision: 386 $
 * @since 2.0
 */
public class JSONUtil
{
    private static JSONUtil instance;

    private JSONUtil()
    {
    }

    public synchronized static JSONUtil getInstance()
    {
        if (instance == null)
        {
            instance = new JSONUtil();
        }
        return instance;
    }

    public String toJSONString(QueryForm qf)
            throws UnsupportedEncodingException
    {
        EntityKey[] keys = qf.getKeys();
        StringBuffer buf = new StringBuffer();
        buf.append("{eForm:[");
        for (EntityKey ek : keys)
        {
            buf.append("{id:\"").append(ek.getId()).append("\",").append(
                    "name:\"").append(ek.getName()).append("\",").append(
                    "isKW:\"").append(ek.isKW()).append("\",").append(
                    "value:\"").append(ek.getValue());
            buf.append("\"}");
            buf.append(",");
        }
        buf.append("]}");
        String str = buf.toString();
        int lastCommaIndex = str.lastIndexOf(",");
        String json = str.substring(0, lastCommaIndex)
                + str.substring(lastCommaIndex + 1);
        return java.net.URLEncoder.encode(json, "UTF-8");
    }

    /**
     * 采用对象实现方式
     *
     * @param workToDoVoAllList
     *            查询返回的有效的作业列表
     * @param inputParam
     *            请求参数作为查询列表的条件
     * @return a string of JSONObject 输c出结果测试 {"耗材销售流程":{"count":1,
     *         "processSet":
     *         [{"workToDoSet":[{"id":"HC-销售流程-001_G4","name":"销售合同签订"}],
     *         "id":"HC-销售流程-001","name":"耗材销售流程"}],
     *         "id":"\"bcjUMVEEeQ7\"","name":"耗材销售流程"},
     *
     *         "设备耗材客户投诉处理流程":{"count":1,
     *         "processSet":[{"workToDoSet":[{"id":"SB-HC-客户投诉处理-001_G2"
     *         ,"name":"填写客诉投诉单"}],
     *         "id":"SB-HC-客户投诉处理-001","name":"设备耗材客户投诉处理流程"}],
     *         "id":"\"bfa7ffcc12e554326431de8dfc4871\"",
     *         "name":"设备耗材客户投诉处理流程"},
     *
     *         "设备销售流程":{"count":0, "processSet":[], "id":"\"fJmKR9T5nsT\"",
     *         "name":"设备销售流程"},
     *
     *         "设备售后服务流程":{"count":3,
     *         "processSet":[{"workToDoSet":[{"id":"SB-售后服务-001_A3"
     *         ,"name":"流水线规划"}, {"id":"SB-售后服务-001_A4","name":"与客户确认基础培训计划"}],
     *         "id":"SB-售后服务-001","name":"设备售后服务流程"},
     *         {"workToDoSet":[{"id":"SB-售后服务-002_E1","name":"收到客户支付款项"}],
     *         "id":"SB-售后服务-002","name":"设备售后服务流程"}],
     *         "id":"\"bfa7ffcc12f13b23b38fa7cf0bcb54\"", "name":"设备售后服务流程"},
     *
     *         "设备采购及安装流程":{"count":2,
     *         "processSet":[{"workToDoSet":[{"id":"mk-20120307001_A2"
     *         ,"name":"提供技术标准"}], "id":"mk-20120307001","name":"设备采购及安装流程"},
     *         {"workToDoSet":[{"id":"mk-20120306002_A2","name":"提供技术标准"}],
     *         "id":"mk-20120306002","name":"设备采购及安装流程"}],
     *         "id":"\"bfa7ffcc12f142a7e3ddae8ed90c87\"","name":"设备采购及安装流程"}}
     *
     */

    public String toJSONString(List<WorkToDoVo> workToDoVoAllList,
            String inputParam)
    {
        Map<String, ProcessKo> koMap = getProcessKos(inputParam);
        ProcessKo processKo = null;
        Process process = null;
        WorkToDo workItem = null;
        for (WorkToDoVo work : workToDoVoAllList)
        {
            String processName = work.getProcessName();
            String processId = work.getProcessId();
            processKo = koMap.get(processName);
            if (null == processKo)
                continue;// 作业结果中没有该流程
            else
            {
                workItem = new WorkToDo(work.getWorkId(), work.getWorkName());
                if (null == process)
                {
                    process = new Process(processId, processName);
                    updateKoMap(processKo, process, workItem);
                }
                else
                {
                    if (process.getWorkToDoSet().contains(workItem))// 作业是否存在
                        continue;
                    if (process.getName().equals(processKo.getName()))
                    {// 相同KO的流程对象
                        if (!(processId.equals(process.getId())))
                        {// KO中的其他流程
                            process = new Process(processId, processName);
                            updateKoMap(processKo, process, workItem);
                        }
                        else
                        { // 增加KO中的相同流程对象的作业
                            if (!process.getWorkToDoSet().contains(workItem))
                                process.getWorkToDoSet().add(workItem);
                        }
                    }
                    else
                    {// 存在的process 不是 当前KO
                        process = new Process(processId, processName);
                        updateKoMap(processKo, process, workItem);
                    }
                }
                processKo.setCount(processKo.getAllWorkToDo());
            }
        }

        Gson gson = new Gson();
        String json = gson.toJson(koMap);// koId会生成转义字符串'\"'? 影响客户端处理
        int p = 0;
        int start = 0;
        StringBuffer sb = new StringBuffer();
        while (-1 != (p = json.indexOf("\\", p)))
        {
            sb.append(json.substring(start, p));
            start = p + 2;
            p++;
        }
        sb.append(json.substring(start));
        return sb.toString();

    }

    /**
     * JSON格式的字符串转换为Map集合
     *
     * @param inputParam
     * @return
     */
    private Map<String, ProcessKo> getProcessKos(String inputParam)
    {
        JsonParser jp = new JsonParser();
        JsonElement je = jp.parse(inputParam);
        JsonObject jo = je.getAsJsonObject();

        Set<Entry<String, JsonElement>> set = jo.entrySet();
        Map<String, ProcessKo> koMap = new HashMap<String, ProcessKo>();// 存放KO条件
        for (Iterator<Entry<String, JsonElement>> iter = set.iterator(); iter
                .hasNext();)
        {
            Entry<String, JsonElement> e = iter.next();
            String processName = e.getKey();
            String processKoId = e.getValue().toString();
            koMap.put(processName, new ProcessKo(processKoId, processName));
        }
        return koMap;
    }

    private void updateKoMap(ProcessKo processKo, Process process,
            WorkToDo workItem)
    {
        if (!processKo.getProcessSet().contains(process))
        {
            if (!process.getWorkToDoSet().contains(workItem))
            {
                HashSet<WorkToDo> workSet = new HashSet<WorkToDo>();
                workSet.add(workItem);
                process.setWorkToDoSet(workSet);// 流程对象增加作业
            }
            if (processKo.getProcessSet().isEmpty())
            {
                HashSet<Process> processSet = new HashSet<Process>();
                processSet.add(process);// 流程集合对象增加流程
                processKo.setProcessSet(processSet);// 流程KO增加流程对象集合
            }
            else
            {
                if (!processKo.getProcessSet().contains(process))
                    processKo.getProcessSet().add(process);
            }
        }
        else
        {
            if (!process.getWorkToDoSet().contains(workItem))
                process.getWorkToDoSet().add(workItem);
        }
    }

    /**
     * 采用集合实现方式
     *
     * @param workToDoVoAllList
     *            接收所有待办事项
     * @param names
     *            流程名称
     * @return
     */
    public String toJSONString(List<WorkToDoVo> workToDoVoAllList,
            String[] names)
    {
        Map<String, Map<String, String>> processToWorkMap = new HashMap<String, Map<String, String>>();// 接收流程名称映射待办事项
        Map<String, String> workItemMap = null;
        Map<String, Integer> processCountMap = null;
        for (String name : names)
        {

            for (WorkToDoVo work : workToDoVoAllList)
            {
                String processName = work.getProcessName();
                String processId = work.getProcessId();
                if (name.equals(processName))
                {
                    String workId = work.getWorkId();
                    String workName = work.getWorkName();

                    if (null != processToWorkMap.get(processName + "$"
                            + processId))// 该流程已经存在待办事项,继续添加
                        processToWorkMap.get(processName + "$" + processId)
                                .put(workId, workName);
                    else
                    {
                        workItemMap = new HashMap<String, String>();
                        workItemMap.put(workId, workName);
                        processToWorkMap.put(processName + "$" + processId,
                                workItemMap);
                    }
                }
            }
            // 方便客户端处理数据,流程名称(包含多个同名流程)对应个数保存起来
            for (Iterator<String> iter = processToWorkMap.keySet().iterator(); iter
                    .hasNext();)
            {
                String key = iter.next();
                String proName = null;
                int p = key.indexOf("$");
                if (-1 != p)
                    proName = key.substring(0, p);
                if (name.equals(proName))
                {
                    if (null == processCountMap)
                        processCountMap = new HashMap<String, Integer>();
                    int count = processToWorkMap.get(key).size();
                    if (null == processCountMap.get(name))
                        processCountMap.put(name, count);
                    else
                    {
                        count += processCountMap.get(name).intValue();
                        processCountMap.put(name, count);
                    }
                }
            }

        }

        String processCount = null;
        String json = null;
        if (null != processCountMap)
            processCount = JSONObject.fromObject(processCountMap).toString();
        if (null != processToWorkMap)
            json = JSONObject.fromObject(processToWorkMap).toString();
        json += "$" + processCount;

        return json.toString();
    }

    @SuppressWarnings("unchecked")
    public String toJSONString(IMonitorDelegator md, String koName,
            String userId) throws BEException
    {
        Map<String, Integer> map = new HashMap<String, Integer>();// 接收作业ko
                                                                    // 映射处理中的任务个数
        QtKiProcess conditions = new QtKiProcess();
        conditions.setName(koName);
        conditions.setState(4);// 处理中

        Object[] objs = md.getMnProcesses(conditions);// 已创建
        conditions.setState(1);
        Object[] objs2 = md.getMnProcesses(conditions);
        List<MnProcessQuery> processList = new ArrayList<MnProcessQuery>();
        if (((Integer) objs[0]).intValue() > 0)
            processList.addAll((List<MnProcessQuery>) objs[1]);
        if (((Integer) objs2[0]).intValue() > 0)
            processList.addAll((List<MnProcessQuery>) objs2[1]);

        if (null != processList)
        {
            for (MnProcessQuery process : processList)
            {
                if (userId.equals(process.getAssignee()))
                {
                    Map<String, Integer> map2 = md.getProcessFoState(process
                            .getId());
                    if (null != map2)
                    {
                        for (Iterator<Entry<String, Integer>> iter = map2
                                .entrySet().iterator(); iter.hasNext();)
                        {
                            Entry<String, Integer> e = iter.next();
                            if (2 == e.getValue())// 处理中的作业
                            {
                                if (null == map.get(e.getKey()))
                                    map.put(e.getKey(), 1);
                                else
                                    map.put(e.getKey(), map.get(e.getKey())
                                            .intValue() + 1);
                            }
                        }
                    }
                }
            }
        }

        String json = JSONUtil.getInstance().mapToJsonString(map);
        return json;
    }

    /**
     * Map 转换为json格式
     *
     * @param map
     * @return
     */
    public String mapToJsonString(Map<?, ?> map)
    {
        if (null != map)
            return JSONObject.fromObject(map).toString();

        return null;
    }

    public static void main(String[] args)
    {
    }
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值