Merge branch 'websocket' of http://47.103.154.90:83/r/WI/Service.V1.0 into websocket
# Conflicts:
# JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/scheduledTasks/checkForTicketStatusChanges.java
| | |
| | | }
|
| | |
|
| | | public ModelAndView createOrder(SMTAIServerRequest tranReq) throws Exception {
|
| | | String title = tranReq.convParamToString("title", true);
|
| | | String wstypeid = tranReq.convParamToString("wstypeid", false);
|
| | | String wstypename = tranReq.convParamToString("wstypename", false);
|
| | | String urgencylevel = tranReq.convParamToString("urgencylevel", false);
|
| | | String shape = tranReq.convParamToString("shape", false);
|
| | | String deadline = tranReq.convParamToString("deadline", false);
|
| | | String stepstatus = tranReq.convParamToString("stepstatus", false);
|
| | | String originatetypetext = tranReq.convParamToString("originatetypetext", false);
|
| | | String content = tranReq.convParamToString("content", false);
|
| | | String address = tranReq.convParamToString("address", false);
|
| | | String stepid = tranReq.convParamToString("stepid", false);
|
| | | String org = tranReq.convParamToString("org", false);
|
| | | String deptname = tranReq.convParamToString("deptname", false);
|
| | | String dealtime = tranReq.convParamToString("dealtime", false);
|
| | | String username = tranReq.convParamToString("username", false);
|
| | | String contactname = tranReq.convParamToString("contactname", false);
|
| | | String contactphone = tranReq.convParamToString("contactphone", false);
|
| | | String acceptuserid = tranReq.convParamToString("acceptuserid", false);
|
| | | String acceptusername = tranReq.convParamToString("acceptusername", false);
|
| | | String acceptuseraccount = tranReq.convParamToString("acceptuseraccount", false);
|
| | | String dealuserid = tranReq.convParamToString("dealuserid", false);
|
| | | String dealusername = tranReq.convParamToString("dealusername", false);
|
| | | String dealuseraccount = tranReq.convParamToString("dealuseraccount", false);
|
| | | String flowstatus = tranReq.convParamToString("flowstatus", false);
|
| | | String attachment = tranReq.convParamToString("attachment", false);
|
| | | String creator = tranReq.convParamToString("creator", false);
|
| | | String createtime = tranReq.convParamToString("createtime", false);
|
| | | String isplan = tranReq.convParamToString("isplan", false);
|
| | | String originateid = tranReq.convParamToString("originateid", false);
|
| | | String appointstarttime = tranReq.convParamToString("appointstarttime", false);
|
| | | String appointendtime = tranReq.convParamToString("appointendtime", false);
|
| | | String parentid = tranReq.convParamToString("parentid", false);
|
| | | String relateids = tranReq.convParamToString("relateids", false);
|
| | | String oname = tranReq.convParamToString("oname", false);
|
| | | String otype = tranReq.convParamToString("otype", false);
|
| | |
|
| | | SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
|
| | | try {
|
| | | db.executeSQL(
|
| | | "INSERT INTO work_order_list("
|
| | | + "order_id, title, wstypeid, wstypename, urgencylevel, shape, deadline, stepstatus, "
|
| | | + "originatetypetext, content, address, step_id, org, deptname, dealtime, username, contactname, "
|
| | | + "contactphone, acceptuserid, acceptusername, acceptuseraccount, dealuserid, dealusername, "
|
| | | + "dealuseraccount, flowstatus, attachment, creator, createtime, isplan, originateid, "
|
| | | + "appointstarttime, appointendtime, parentid, relateids,is_notify,oname,otype"
|
| | | + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)",
|
| | | new Object[] {
|
| | | SMTStatic.newUUID(),
|
| | | title,
|
| | | wstypeid,
|
| | | wstypename,
|
| | | urgencylevel,
|
| | | shape,
|
| | | deadline,
|
| | | stepstatus,
|
| | | originatetypetext,
|
| | | content,
|
| | | address,
|
| | | stepid,
|
| | | org,
|
| | | deptname,
|
| | | dealtime,
|
| | | username,
|
| | | contactname,
|
| | | contactphone,
|
| | | acceptuserid,
|
| | | acceptusername,
|
| | | acceptuseraccount,
|
| | | dealuserid,
|
| | | dealusername,
|
| | | dealuseraccount,
|
| | | flowstatus,
|
| | | attachment,
|
| | | creator,
|
| | | new Date(),
|
| | | isplan,
|
| | | originateid,
|
| | | appointstarttime,
|
| | | appointendtime,
|
| | | parentid,
|
| | | relateids,
|
| | | "N",
|
| | | oname,
|
| | | otype
|
| | | });
|
| | | } catch (Exception e) {
|
| | | throw new Exception("数据库错误", e);
|
| | | }
|
| | |
|
| | | return tranReq.returnJsonState(true, null, null);
|
| | | // String title = tranReq.convParamToString("title", true);
|
| | | // String wstypeid = tranReq.convParamToString("wstypeid", false);
|
| | | // String wstypename = tranReq.convParamToString("wstypename", false);
|
| | | // String urgencylevel = tranReq.convParamToString("urgencylevel", false);
|
| | | // String shape = tranReq.convParamToString("shape", false);
|
| | | // String deadline = tranReq.convParamToString("deadline", false);
|
| | | // String stepstatus = tranReq.convParamToString("stepstatus", false);
|
| | | // String originatetypetext = tranReq.convParamToString("originatetypetext", false);
|
| | | // String content = tranReq.convParamToString("content", false);
|
| | | // String address = tranReq.convParamToString("address", false);
|
| | | // String stepid = tranReq.convParamToString("stepid", false);
|
| | | // String org = tranReq.convParamToString("org", false);
|
| | | // String deptname = tranReq.convParamToString("deptname", false);
|
| | | // String dealtime = tranReq.convParamToString("dealtime", false);
|
| | | // String username = tranReq.convParamToString("username", false);
|
| | | // String contactname = tranReq.convParamToString("contactname", false);
|
| | | // String contactphone = tranReq.convParamToString("contactphone", false);
|
| | | // String acceptuserid = tranReq.convParamToString("acceptuserid", false);
|
| | | // String acceptusername = tranReq.convParamToString("acceptusername", false);
|
| | | // String acceptuseraccount = tranReq.convParamToString("acceptuseraccount", false);
|
| | | // String dealuserid = tranReq.convParamToString("dealuserid", false);
|
| | | // String dealusername = tranReq.convParamToString("dealusername", false);
|
| | | // String dealuseraccount = tranReq.convParamToString("dealuseraccount", false);
|
| | | // String flowstatus = tranReq.convParamToString("flowstatus", false);
|
| | | // String attachment = tranReq.convParamToString("attachment", false);
|
| | | // String creator = tranReq.convParamToString("creator", false);
|
| | | // String createtime = tranReq.convParamToString("createtime", false);
|
| | | // String isplan = tranReq.convParamToString("isplan", false);
|
| | | // String originateid = tranReq.convParamToString("originateid", false);
|
| | | // String appointstarttime = tranReq.convParamToString("appointstarttime", false);
|
| | | // String appointendtime = tranReq.convParamToString("appointendtime", false);
|
| | | // String parentid = tranReq.convParamToString("parentid", false);
|
| | | // String relateids = tranReq.convParamToString("relateids", false);
|
| | | // String oname = tranReq.convParamToString("oname", false);
|
| | | // String otype = tranReq.convParamToString("otype", false);
|
| | | //
|
| | | // SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
|
| | | // try {
|
| | | // db.executeSQL(
|
| | | // "INSERT INTO work_order_list("
|
| | | // + "order_id, title, wstypeid, wstypename, urgencylevel, shape, deadline, stepstatus, "
|
| | | // + "originatetypetext, content, address, step_id, org, deptname, dealtime, username, contactname, "
|
| | | // + "contactphone, acceptuserid, acceptusername, acceptuseraccount, dealuserid, dealusername, "
|
| | | // + "dealuseraccount, flowstatus, attachment, creator, createtime, isplan, originateid, "
|
| | | // + "appointstarttime, appointendtime, parentid, relateids,is_notify,oname,otype"
|
| | | // + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)",
|
| | | // new Object[] {
|
| | | // SMTStatic.newUUID(),
|
| | | // title,
|
| | | // wstypeid,
|
| | | // wstypename,
|
| | | // urgencylevel,
|
| | | // shape,
|
| | | // deadline,
|
| | | // stepstatus,
|
| | | // originatetypetext,
|
| | | // content,
|
| | | // address,
|
| | | // stepid,
|
| | | // org,
|
| | | // deptname,
|
| | | // dealtime,
|
| | | // username,
|
| | | // contactname,
|
| | | // contactphone,
|
| | | // acceptuserid,
|
| | | // acceptusername,
|
| | | // acceptuseraccount,
|
| | | // dealuserid,
|
| | | // dealusername,
|
| | | // dealuseraccount,
|
| | | // flowstatus,
|
| | | // attachment,
|
| | | // creator,
|
| | | // new Date(),
|
| | | // isplan,
|
| | | // originateid,
|
| | | // appointstarttime,
|
| | | // appointendtime,
|
| | | // parentid,
|
| | | // relateids,
|
| | | // "N",
|
| | | // oname,
|
| | | // otype
|
| | | // });
|
| | | // } catch (Exception e) {
|
| | | // throw new Exception("数据库错误", e);
|
| | | // }
|
| | | //
|
| | | // return tranReq.returnJsonState(true, null, null);
|
| | | return tranReq.returnJsonState(true, null, null);
|
| | | }
|
| | |
|
| | | public ModelAndView updateOrderStatus(SMTAIServerRequest tranReq) throws Exception {
|
| | |
| | |
|
| | | SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
|
| | | try {
|
| | | db.executeSQL(
|
| | | "UPDATE work_order_list SET stepstatus = ? and status_update_time = ? WHERE id = ?",
|
| | | DBRecords dbRecords = db.querySQL("select * from work_order_list where order_id = ?", new Object[]{id});
|
| | | Integer statusBeforeModification = dbRecords.getRecords().get(0).getInteger("stepstatus");
|
| | | db.executeSQL(
|
| | | "UPDATE work_order_list SET stepstatus = ? , status_update_time = ? , is_notify = 'N' WHERE order_id = ?",
|
| | | new Object[] {stepstatus, new Date(),id});
|
| | | String sql = "INSERT INTO ai_sys.work_order_detail (order_id, status_before_modification, status_after_modification,createTime) VALUES (?, ?, ?, ?)";
|
| | | db.executeSQL(sql, new Object[] {id, statusBeforeModification, stepstatus, new Date()});
|
| | |
|
| | |
|
| | | } catch (Exception e) {
|
| | | throw new Exception("更新工单状态失败", e);
|
| | | }
|
| | |
| | | }
|
| | |
|
| | | public ModelAndView getOrderList(SMTAIServerRequest tranReq) throws Exception {
|
| | | SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
|
| | | SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
|
| | | try {
|
| | | DBRecords recs = db.querySQL("SELECT * FROM work_order_list", null);
|
| | | if (recs.getRowCount() != 0) {
|
| | | SMTJsonWriter jsonWr = new SMTJsonWriter(false);
|
| | | jsonWr.beginArray("values"); // 开始一个数组,key为 "values"
|
| | |
|
| | | for (DBRecord rec : recs.getRecords()) {
|
| | |
| | |
|
| | | jsonWr.endArray(); // 结束数组
|
| | |
|
| | | return tranReq.returnJson(jsonWr); // 返回整个结构
|
| | | return tranReq.returnJson(jsonWr);
|
| | | // return tranReq.returnJsonState(true, "成功", jsonWr.getRootJson());
|
| | |
|
| | | } else {
|
| | | return tranReq.returnJsonState(false, "未找到工单", null);
|
| | |
| | | package com.smtaiserver.smtaiserver.control;
|
| | |
|
| | | import java.util.*;
|
| | | import java.util.regex.Pattern;
|
| | |
|
| | | import com.smtservlet.util.Json;
|
| | | import okhttp3.OkHttpClient;
|
| | | import okhttp3.Request;
|
| | | import okhttp3.Response;
|
| | | import org.dom4j.Document;
|
| | | import org.springframework.web.servlet.ModelAndView;
|
| | |
|
| | | import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
|
| | | import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
|
| | | import com.smtaiserver.smtaiserver.core.SMTCheckChatStreamView;
|
| | |
| | | import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecords;
|
| | | import com.smtaiserver.smtaiserver.javaai.qwen.agent.SMTQwenAgent;
|
| | | import com.smtservlet.core.SMTRequest;
|
| | | import com.smtservlet.util.Json;
|
| | | import com.smtservlet.util.SMTJsonWriter;
|
| | | import com.smtservlet.util.SMTStatic;
|
| | | import java.util.*;
|
| | | import java.util.regex.Pattern;
|
| | | import okhttp3.OkHttpClient;
|
| | | import okhttp3.Request;
|
| | | import okhttp3.Response;
|
| | | import org.apache.logging.log4j.LogManager;
|
| | | import org.apache.logging.log4j.Logger;
|
| | | import org.dom4j.Document;
|
| | | import org.springframework.web.servlet.ModelAndView;
|
| | |
|
| | | public class SMTWorkflowManagerControl
|
| | | {
|
| | |
|
| | | private static final Logger _logger = LogManager.getLogger(SMTWorkflowManagerControl.class);
|
| | | private static String[] _flowFuncNames = new String[] {
|
| | | "assessment", "评估"
|
| | | };
|
| | |
| | | }
|
| | | catch(Exception ex)
|
| | | {
|
| | | errmsg = "工作流配置错误";
|
| | | errmsg = "工作流配置错误 : " + SMTStatic.toString(ex);
|
| | | _logger.error("工作流配置错误 : " + SMTStatic.toString(ex));
|
| | | publish = "N";
|
| | | }
|
| | |
|
| | |
| | | public void webSocketBroadcast(NativeObject nativeObject) throws Exception {
|
| | | SMTJsonWriter jsonWr = new SMTJsonWriter(false);
|
| | | SMTAIServerApp.convJSToJsonWriter(nativeObject, jsonWr);
|
| | | SMTAIServerApp.getApp().webSocketApp(jsonWr.toString());
|
| | | SMTAIServerApp.getApp().webSocketApp(jsonWr.getFullJson());
|
| | | }
|
| | |
|
| | | public Object getArg(String key)
|
| | |
| | | import com.smtaiserver.smtaiserver.database.SMTDatabase; |
| | | import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect; |
| | | import com.smtaiserver.smtaiserver.javaai.qwen.agent.SMTQwenAgent; |
| | | import com.smtaiserver.smtaiserver.web.SMTWebSocketHandler; |
| | | import com.smtservlet.util.Json; |
| | | |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import lombok.extern.log4j.Log4j2; |
| | | import org.apache.logging.log4j.LogManager; |
| | | import org.apache.logging.log4j.Logger; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | public class checkForTicketStatusChanges { |
| | | private static final Logger _logger = LogManager.getLogger(checkForTicketStatusChanges.class); |
| | | |
| | | |
| | | @Scheduled(cron = "0/10 * * * * ?") // 一秒一次 |
| | | public void execCheckForTicketStatusChanges() throws Exception { |
| | | /** |
| | | * 工单状态转变为 已接单 |
| | | * |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(cron = "0/10 * * * * ?") |
| | | public void execCheckForTicketStatusChangesByOrdersTaken() throws Exception { |
| | | _logger.info("start checkForTicketStatusChanges task"); |
| | | |
| | | try |
| | | { |
| | | Date date = new Date(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MINUTE, -5); |
| | | Date time = cal.getTime(); |
| | | |
| | | try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase()) |
| | | { |
| | | SMTDatabase.DBRecords dbRecords = |
| | | db.querySQL( |
| | | "select order_id from work_order_list where is_notify =? and status_update_time > ? and stepstatus =1", |
| | | new Object[] {"N", time}); |
| | | |
| | | _logger.info("查询到状态为已接单的工单的数量:{}", dbRecords.getRowCount()); |
| | | for (SMTDatabase.DBRecord rec : dbRecords.getRecords()) { |
| | | String agentId = |
| | | (String) |
| | | SMTAIServerApp.getApp() |
| | | .getGlobalConfig( |
| | | "work_order.workflow_agent_re", "status_changes_received_order"); |
| | | |
| | | Json jsonArgs = Json.object("question", "", "order_id", rec.getString("order_id")); |
| | | |
| | | SMTQwenAgent agent = SMTAIServerApp.getApp().getQwenAgentManager().getAgentById(agentId); |
| | | if (agent == null) throw new Exception("can't find agent : " + agentId); |
| | | SMTLLMConnect llm = SMTAIServerApp.getApp().allocLLMConnect(null); |
| | | |
| | | SMTAIServerRequest _tranReq = new SMTAIServerRequest(); |
| | | agent.callAgents("/", jsonArgs, llm, "", _tranReq); |
| | | } |
| | | |
| | | } |
| | | } |
| | | catch (Exception e) { |
| | | _logger.error("checkForTicketStatusChanges error", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 工单状态转变为 已完成 |
| | | * |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(cron = "0/10 * * * * ?") |
| | | public void execCheckForTicketStatusChangesByFinish() throws Exception { |
| | | _logger.info("start checkForTicketStatusChanges task"); |
| | | SMTDatabase db = SMTAIServerApp.getApp().allocDatabase(); |
| | | Date date = new Date(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MINUTE, -5); |
| | | Date time = cal.getTime(); |
| | | |
| | | try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase()) |
| | | { |
| | | SMTDatabase.DBRecords dbRecords = |
| | | db.querySQL( |
| | | "select order_id from work_order_list where is_notify =? and status_update_time > ?", |
| | | try { |
| | | SMTDatabase.DBRecords dbRecords = |
| | | db.querySQL( |
| | | "select order_id from work_order_list where is_notify =? and status_update_time > ? and stepstatus =4", |
| | | new Object[] {"N", time}); |
| | | |
| | | _logger.info("查询到的数量:{}", dbRecords.getRowCount()); |
| | | for (SMTDatabase.DBRecord rec : dbRecords.getRecords()) |
| | | { |
| | | String agentId = "create_work_order"; |
| | | |
| | | Json jsonArgs = Json.object("question", "", "order_id", "aaaaa"); |
| | | |
| | | SMTQwenAgent agent = SMTAIServerApp.getApp().getQwenAgentManager().getAgentById(agentId); |
| | | if(agent == null) |
| | | throw new Exception("can't find agent : " + agentId); |
| | | SMTLLMConnect llm = SMTAIServerApp.getApp().allocLLMConnect(null); |
| | | |
| | | |
| | | SMTAIServerRequest _tranReq = new SMTAIServerRequest(); |
| | | agent.callAgents("/", jsonArgs, llm, "", _tranReq ); |
| | | |
| | | } |
| | | _logger.info("查询到状态为已完成的工单的数量:{}", dbRecords.getRowCount()); |
| | | for (SMTDatabase.DBRecord rec : dbRecords.getRecords()) { |
| | | String agentId = |
| | | (String) |
| | | SMTAIServerApp.getApp() |
| | | .getGlobalConfig( |
| | | "work_order.workflow_agent_finish", "status_changes_received_order"); |
| | | Json jsonArgs = Json.object("question", "", "order_id", rec.getString("order_id")); |
| | | |
| | | SMTQwenAgent agent = SMTAIServerApp.getApp().getQwenAgentManager().getAgentById(agentId); |
| | | if (agent == null) throw new Exception("can't find agent : " + agentId); |
| | | SMTLLMConnect llm = SMTAIServerApp.getApp().allocLLMConnect(null); |
| | | |
| | | SMTAIServerRequest _tranReq = new SMTAIServerRequest(); |
| | | agent.callAgents("/", jsonArgs, llm, "", _tranReq); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | _logger.error("checkForTicketStatusChanges error", e); |
| | |
| | | package com.smtservlet.core;
|
| | |
|
| | | import com.smtservlet.core.SMTApp.SMTRequestConfig;
|
| | | import com.smtservlet.database.SMTDaoAbstract.SMTDaoSelectPage;
|
| | | import com.smtservlet.util.Json;
|
| | | import com.smtservlet.util.SMTJsonWriter;
|
| | | import com.smtservlet.util.SMTStatic;
|
| | | import com.smtservlet.util.SMTStatic.SMTCalcTime;
|
| | | import com.smtservlet.util.SMTStatic.SMTConvEmpty;
|
| | | import com.smtservlet.util.SMTStatic.SMTConvType;
|
| | | import java.io.File;
|
| | | import java.io.FileInputStream;
|
| | | import java.io.IOException;
|
| | |
| | | import javax.servlet.http.HttpServletRequest;
|
| | | import javax.servlet.http.HttpServletResponse;
|
| | | import javax.servlet.http.HttpSession;
|
| | |
|
| | | import org.apache.logging.log4j.LogManager;
|
| | | import org.apache.logging.log4j.Logger;
|
| | | import org.springframework.core.MethodParameter;
|
| | |
| | | import org.springframework.web.multipart.MultipartFile;
|
| | | import org.springframework.web.servlet.ModelAndView;
|
| | | import org.springframework.web.servlet.View;
|
| | |
|
| | |
|
| | | import com.smtservlet.core.SMTApp.SMTRequestConfig;
|
| | | import com.smtservlet.database.SMTDaoAbstract.SMTDaoSelectPage;
|
| | | import com.smtservlet.util.Json;
|
| | | import com.smtservlet.util.SMTJsonWriter;
|
| | | import com.smtservlet.util.SMTStatic.SMTCalcTime;
|
| | | import com.smtservlet.util.SMTStatic.SMTConvEmpty;
|
| | | import com.smtservlet.util.SMTStatic.SMTConvType;
|
| | | import com.smtservlet.util.SMTStatic;
|
| | |
|
| | | /**
|
| | | * 将webRequest包装成SMTRequest类进行操作
|
| | |
| | | {
|
| | | return this.returnJson(newReturnJsonWriter(isOK, msg, url));
|
| | | }
|
| | | public ModelAndView returnJsonState(boolean isOK, String msg, Object url) throws Exception
|
| | | {
|
| | | return this.returnJson(newReturnJsonWriter(isOK, msg, url));
|
| | | }
|
| | |
|
| | | /**
|
| | | * 创建缺省的JsonWriter为返回json准备
|
| | |
| | | jsonWr.addKeyValue("json_url", url);
|
| | | return jsonWr;
|
| | | }
|
| | | public SMTJsonWriter newReturnJsonWriter(boolean isOK, String msg, Object url) throws Exception
|
| | | {
|
| | | SMTJsonWriter jsonWr = new SMTJsonWriter(false);
|
| | | jsonWr.addKeyValue("json_ok", isOK);
|
| | | if(msg != null)
|
| | | jsonWr.addKeyValue("json_msg", msg);
|
| | | if(url != null)
|
| | | jsonWr.addKeyValue("json_url", url);
|
| | | return jsonWr;
|
| | | }
|
| | |
|
| | | public SMTJsonWriter newReturnAsyncEndJsonWriter(boolean returnRequestParam, String[] params) throws Exception
|
| | | {
|