package com.smtaiserver.smtaiserver.javaai.qwen.extcall;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.dom4j.Document;
|
import org.dom4j.Element;
|
import org.dom4j.Node;
|
|
import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
|
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
|
import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError;
|
import com.smtaiserver.smtaiserver.javaai.SMTJavaAISession;
|
import com.smtservlet.util.Json;
|
import com.smtservlet.util.SMTJsonWriter;
|
import com.smtservlet.util.SMTStatic;
|
|
public abstract class SMTQwenExtCall
|
{
|
protected static abstract class ExtCallArg
|
{
|
protected String _name;
|
protected String _default;
|
|
public abstract void loadArgToMap(Json callExtJson, SMTAIServerRequest tranReq, Map<String, Object> r_mapId2Value) throws Exception;
|
|
public void initInstance(Element xmlArg) throws Exception
|
{
|
_name = SMTStatic.getXmlAttr(xmlArg, "name");
|
_default = SMTStatic.getXmlAttr(xmlArg, "default", null);
|
}
|
|
public String getArgId()
|
{
|
return _name;
|
}
|
}
|
|
protected static class ExtCallArgRequest extends ExtCallArg
|
{
|
@Override
|
public void loadArgToMap(Json callExtJson, SMTAIServerRequest tranReq, Map<String, Object> r_mapId2Value) throws Exception
|
{
|
String value = callExtJson.safeGetStr(_name, null);
|
if(value == null)
|
{
|
if(_default == null)
|
throw new Exception("argument is not seted : " + _name);
|
|
value = _default;
|
}
|
|
r_mapId2Value.put(_name, value);
|
}
|
|
}
|
|
protected static class ExtCallArgCalcBaseTime extends ExtCallArg
|
{
|
private String _base_start_time;
|
private String _base_end_time;
|
private String _comp_start_time;
|
|
public void initInstance(Element xmlArg) throws Exception
|
{
|
super.initInstance(xmlArg);
|
_base_start_time = SMTStatic.getXmlAttr(xmlArg, "base_start_time");
|
_base_end_time = SMTStatic.getXmlAttr(xmlArg, "base_end_time");
|
_comp_start_time = SMTStatic.getXmlAttr(xmlArg, "comp_start_time");
|
}
|
|
@Override
|
public void loadArgToMap(Json callExtJson, SMTAIServerRequest tranReq, Map<String, Object> r_mapId2Value)
|
{
|
Date dateBaseStartTime = SMTStatic.toDate(r_mapId2Value.get(_base_start_time));
|
Date dateBaseEndTime = SMTStatic.toDate(r_mapId2Value.get(_base_end_time));
|
Date dateCompStartTime = SMTStatic.toDate(r_mapId2Value.get(_comp_start_time));
|
|
long subSecond = (dateBaseEndTime.getTime() - dateBaseStartTime.getTime()) / 1000;
|
String value = SMTStatic.toString(SMTStatic.calculateTime(dateCompStartTime, SMTStatic.SMTCalcTime.ADD_SECOND, (int)subSecond));
|
|
r_mapId2Value.put(_name, value);
|
}
|
}
|
|
protected static class ExtCallArgTodayCalc extends ExtCallArg
|
{
|
private SMTStatic.SMTCalcTime _calcOP;
|
private int _calcValue;
|
|
@Override
|
public void initInstance(Element xmlArg) throws Exception
|
{
|
super.initInstance(xmlArg);
|
|
_calcOP = SMTStatic.SMTCalcTime.valueOf(SMTStatic.getXmlAttr(xmlArg, "op", "ADD_MINUTE"));
|
_calcValue = SMTStatic.toInt(SMTStatic.getXmlAttr(xmlArg, "value", "0"));
|
}
|
|
@Override
|
public void loadArgToMap(Json callExtJson, SMTAIServerRequest tranReq, Map<String, Object> r_mapId2Value)
|
{
|
String value = SMTStatic.toString(SMTStatic.calculateTime(new Date(), SMTStatic.SMTCalcTime.ZERO_TIME, 0, _calcOP, _calcValue));
|
r_mapId2Value.put(_name, value);
|
}
|
}
|
|
////////////////////////////////////////////////////////////////////////////
|
|
protected String _callId;
|
protected List<ExtCallArg> _listCallArg = new ArrayList<>();
|
protected String _callConfig;
|
|
protected abstract SMTJavaAIError invokeByArgs(Map<String, Object> mapId2Value, SMTJavaAISession session, Json callExtJson, SMTJsonWriter jsonWr, SMTAIServerRequest tranReq) throws Exception;
|
|
public SMTJavaAIError invoke(SMTJavaAISession session, Json callExtJson, SMTJsonWriter jsonWr, SMTAIServerRequest tranReq) throws Exception
|
{
|
// 获取参数
|
Map<String, Object> mapId2Value = loadArguments(callExtJson, tranReq);
|
SMTJavaAIError error = invokeByArgs(mapId2Value, session, callExtJson, jsonWr, tranReq);
|
return error;
|
}
|
|
protected Map<String, Object> loadArguments(Json callExtJson, SMTAIServerRequest tranReq) throws Exception
|
{
|
Map<String, Object> mapId2Value = new HashMap<>();
|
for(ExtCallArg callArg : _listCallArg)
|
{
|
callArg.loadArgToMap(callExtJson, tranReq, mapId2Value);
|
}
|
|
return mapId2Value;
|
}
|
|
public String getCallId()
|
{
|
return _callId;
|
}
|
|
public void initInstance(DBRecord rec) throws Exception
|
{
|
_callId = rec.getString("call_id");
|
_callConfig = rec.getString("call_config");
|
Document doc = SMTStatic.convStrToXmlDoc("<ROOT>" + rec.getString("call_argument") + "</ROOT>");
|
for(Node nodeArg : doc.selectNodes("ROOT/REQUEST_ARGS/ARG"))
|
{
|
ExtCallArg callArg = new ExtCallArgRequest();
|
callArg.initInstance((Element)nodeArg);
|
_listCallArg.add(callArg);
|
}
|
|
for(Node nodeArg : doc.selectNodes("ROOT/CALC_ARGS/ARG"))
|
{
|
ExtCallArg callArg;
|
String type = SMTStatic.getXmlAttr((Element)nodeArg, "type");
|
if("calc_base_time".equals(type))
|
{
|
callArg = new ExtCallArgCalcBaseTime();
|
}
|
else if("today_calc".equals(type))
|
{
|
callArg = new ExtCallArgTodayCalc();
|
}
|
else
|
{
|
throw new Exception("can't find call ext : " + type);
|
}
|
|
callArg.initInstance((Element)nodeArg);
|
_listCallArg.add(callArg);
|
}
|
|
}
|
}
|