修改:1、qtask.call 服务

2、其他界面样式优化
This commit is contained in:
2024-04-01 01:06:06 +08:00
parent 4dcebf32de
commit 7bbbd29931
18 changed files with 170 additions and 104 deletions

View File

@@ -15,7 +15,8 @@
<row> <row>
<div class="col-md-12 col-xs-12" id="top"> <div class="col-md-12 col-xs-12" id="top">
<div class="logo"> <div class="logo">
<h1>Meta-Kit</h1> <!--<h1>Meta-Kit</h1>-->
<h1>{{sysPlat.name}}</h1>
</div> </div>
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<!--item in pages--> <!--item in pages-->
@@ -83,7 +84,7 @@
<!-- load main body to here --> <!-- load main body to here -->
<div id="main"></div> <div id="main"></div>
<div class="footer"> <div class="footer">
Meta-Kit Developer v0.2 Meta-Kit Dev-v0.2.1
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,5 +1,3 @@
<row class="data-list"> <row class="data-list">
<div class="col-md-12"> <div class="col-md-12">
<h3 class="pull-left">业务预览</h3> <h3 class="pull-left">业务预览</h3>
@@ -117,7 +115,7 @@
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div> <div>
<ul class="pager pull-right" style="margin: 5px 10px"> <ul class="pager pull-right">
<li class="previous"> <li class="previous">
<a style="border: 0;">共{{list.total}}条数据</a> <a style="border: 0;">共{{list.total}}条数据</a>

View File

@@ -87,16 +87,15 @@
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div> <div>
<ul class="pager pull-right" style="margin: 1px 0"> <ul class="pager pull-right">
<li class="previous"> <li class="previous">
<a >共{{list.total}}条数据</a> <a >共{{list.total}}条数据</a>
</li> </li>
<li :class="['previous', {'disabled':limit.pn==1}]"> <li :class="['previous', {'disabled':limit.pn==1}]">
<a @click="loadList(-- limit.pn)" href="javascript:;">«上一页</a> <a @click="loadList(-- limit.pn)" href="javascript:"><i class="icon icon-angle-left"></i>上一页</a>
</li> </li>
<li :class="['next', {'disabled':limit.pn >= limit.total}]"> <li :class="['next', {'disabled':limit.pn >= limit.total}]">
<a @click="loadList(limit.pn = ++limit.pn )" href="javascript:;">»下一页</a> <a @click="loadList(limit.pn = ++limit.pn )" href="javascript:">下一页<i class="icon icon-angle-right"></i></a>
</li> </li>
<li class="previous"> <li class="previous">
@@ -173,13 +172,15 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="4"> <th>操作</th>
<td colspan="3">
<div class="pull-right"> <div class="pull-right">
<button @click="debug()" type="button" class="btn btn-primary" style="margin-right: 20px">调试</button> <button @click="debug()" type="button" class="btn btn-primary" style="margin-right: 20px">
<i class="icon icon-bug"> 调试</i></button>
<button @click="openDia({})" type="button" class="btn btn-default" data-dismiss="modal">取消</button> <button @click="openDia({})" type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button @click="reset(row.name)" type="button" class="btn btn-default" data-dismiss="modal">重置</button> <button @click="reset(row.name)" type="button" class="btn btn-default" data-dismiss="modal">重置</button>
<button @click="save()" type="button" class="btn btn-primary">保存</button> <button @click="save()" type="button" class="btn btn-primary">
<i class="icon icon-save"> 保存</i></button>
</div> </div>
</td> </td>
</tr> </tr>

View File

@@ -231,6 +231,9 @@ var red = {
}, },
timeFmt: function (date,fmt){ timeFmt: function (date,fmt){
if (!this.isValidDate(date)) {
return "";
}
fmt = fmt || "yyyy-MM-dd HH:mm:ss"; fmt = fmt || "yyyy-MM-dd HH:mm:ss";
var o = { var o = {
"M+" : date.getMonth()+1, //月份 "M+" : date.getMonth()+1, //月份
@@ -286,6 +289,9 @@ var red = {
} }
} }
return cloneObj; return cloneObj;
},
isValidDate: function (date) {
return date instanceof Date && !isNaN(date.getTime());
} }
} }

View File

@@ -2,11 +2,17 @@ package dev.zhub.mk.qtask;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.tccn.base.Kv;
import net.tccn.base.Utils;
import net.tccn.qtask.Task;
import org.redkale.annotation.Comment; import org.redkale.annotation.Comment;
import org.redkale.convert.json.JsonConvert;
import org.redkale.persistence.Column; import org.redkale.persistence.Column;
import org.redkale.persistence.Entity; import org.redkale.persistence.Entity;
import org.redkale.persistence.Id; import org.redkale.persistence.Id;
import java.util.Map;
@Getter @Getter
@Setter @Setter
@Entity @Entity
@@ -44,4 +50,27 @@ public class QTask {
@Comment("[状态]10正常80删除") @Comment("[状态]10正常80删除")
private int status = 10; private int status = 10;
public Task createTask(Kv<String, String> para) {
// TODO : QTask 作为 Task 的引用值,省去创建重复 Task 属性
Task task = new Task();
task.setName(name);
task.setTitle(title);
task.setContent(content);
task.setDbPlatId(dbplatid);
task.setCatalog(catalog);
Kv _para = Kv.of();
if (!Utils.isEmpty(this.para)) {
try {
Map<String, String> map = JsonConvert.root().convertFrom(JsonConvert.TYPE_MAP_STRING_STRING, this.para);
_para.putAll(map);
} catch (Exception e) {
new IllegalArgumentException(String.format("fromJson error:[%s]", this.para), e);
}
}
_para.putAll(para); // 填充传入的参数,优先级最高
task.setPara(_para);
return task;
}
} }

View File

@@ -35,6 +35,10 @@ public class BaseService implements Service {
protected File APP_HOME; protected File APP_HOME;
@Resource(name = "meta") @Resource(name = "meta")
protected DataSource metaSource; protected DataSource metaSource;
@Resource
protected MetaKit metaKit;
protected static Properties prop = new Properties(); protected static Properties prop = new Properties();
protected static TplKit tplKit = TplKit.use(true); protected static TplKit tplKit = TplKit.use(true);
private static boolean tplInit = false; private static boolean tplInit = false;

View File

@@ -10,7 +10,6 @@ import net.tccn.dict.Dict;
import net.tccn.meta.*; import net.tccn.meta.*;
import net.tccn.plat.MetaDb; import net.tccn.plat.MetaDb;
import net.tccn.plat.MetaPlat; import net.tccn.plat.MetaPlat;
import net.tccn.qtask.DbTask;
import net.tccn.qtask.TaskKit; import net.tccn.qtask.TaskKit;
import net.tccn.user.MetaUser; import net.tccn.user.MetaUser;
import org.redkale.annotation.Resource; import org.redkale.annotation.Resource;
@@ -49,7 +48,7 @@ public class MetaKit extends AbstractService {
@Getter @Getter
private static List<MetaUser> users; private static List<MetaUser> users;
@Getter @Getter
private static List<QTask> taskEntities; private static List<QTask> qTasks;
@Getter @Getter
private static List<Dict> dicts; private static List<Dict> dicts;
@@ -60,10 +59,16 @@ public class MetaKit extends AbstractService {
@Resource(name = "meta") @Resource(name = "meta")
protected DataSource metaSource; protected DataSource metaSource;
public <T> void reloadxAsync(Class<T> clazz) {
if (clazz == QTask.class) {
qTasks = metaSource.queryList(QTask.class);
TaskKit.init(qTasks);
}
}
@Override @Override
public void init(AnyValue config) { public void init(AnyValue config) {
taskEntities = metaSource.queryList(QTask.class); reloadxAsync(QTask.class);
TaskKit.init();
} }
// ----------------------------------- // -----------------------------------
@@ -77,17 +82,6 @@ public class MetaKit extends AbstractService {
// reload(DbTask.class); // reload(DbTask.class);
reload(Dict.class); reload(Dict.class);
new Thread(() -> {
while (true) {
try {
reload(MetaUser.class);
Thread.sleep(15000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}).start();
/* /*
同步 本地文件配置数据到 数据库 同步 本地文件配置数据到 数据库
List<List<? extends Doc>> list = asList(metaTables, metaLinks, metaServices, dbPlats, sysPlats, users, taskEntities, dicts); List<List<? extends Doc>> list = asList(metaTables, metaLinks, metaServices, dbPlats, sysPlats, users, taskEntities, dicts);
@@ -147,11 +141,11 @@ public class MetaKit extends AbstractService {
Type type = new TypeToken<List<MetaUser>>() { Type type = new TypeToken<List<MetaUser>>() {
}.getType(); }.getType();
users = FileKit.readAs(file, type);; users = FileKit.readAs(file, type);;
} else if (DbTask.class == clazz) { } /*else if (DbTask.class == clazz) {
Type type = new TypeToken<List<DbTask>>() { Type type = new TypeToken<List<DbTask>>() {
}.getType(); }.getType();
taskEntities = FileKit.readAs(file, type);; taskEntities = FileKit.readAs(file, type);;
} else if (Dict.class == clazz) { } */ else if (Dict.class == clazz) {
Type type = new TypeToken<List<Dict>>() { Type type = new TypeToken<List<Dict>>() {
}.getType(); }.getType();
dicts = FileKit.readAs(file, type);; dicts = FileKit.readAs(file, type);;
@@ -164,10 +158,11 @@ public class MetaKit extends AbstractService {
else if (MetaDb.class == clazz) dbPlats = DbAccount.dao.find(); else if (MetaDb.class == clazz) dbPlats = DbAccount.dao.find();
else if (MetaPlat.class == clazz) sysPlats = MetaPlat.dao.find(); else if (MetaPlat.class == clazz) sysPlats = MetaPlat.dao.find();
else if (MetaUser.class == clazz) users = MetaUser.dao.find(); else if (MetaUser.class == clazz) users = MetaUser.dao.find();
else if (DbTask.class == clazz) { /*else if (DbTask.class == clazz) {
// taskEntities = DbTask.dao.find(); // taskEntities = DbTask.dao.find();
// TaskKit.init(); // TaskKit.init();
} else if (Dict.class == clazz) { }*/
else if (Dict.class == clazz) {
dicts = Dict.dao.find(); dicts = Dict.dao.find();
} }
} }
@@ -184,7 +179,7 @@ public class MetaKit extends AbstractService {
cacheSave(DbAccount.class); cacheSave(DbAccount.class);
cacheSave(MetaPlat.class); cacheSave(MetaPlat.class);
cacheSave(MetaUser.class); cacheSave(MetaUser.class);
cacheSave(DbTask.class); //cacheSave(DbTask.class);
cacheSave(Dict.class); cacheSave(Dict.class);
} }
@@ -196,7 +191,7 @@ public class MetaKit extends AbstractService {
else if (DbAccount.class == clazz) list = dbPlats; else if (DbAccount.class == clazz) list = dbPlats;
else if (MetaPlat.class == clazz) list = sysPlats; else if (MetaPlat.class == clazz) list = sysPlats;
else if (MetaUser.class == clazz) list = users; else if (MetaUser.class == clazz) list = users;
else if (DbTask.class == clazz) list = taskEntities; // else if (DbTask.class == clazz) list = taskEntities;
else if (Dict.class == clazz) list = dicts; else if (Dict.class == clazz) list = dicts;
if (list == null || list.size() == 0) return; if (list == null || list.size() == 0) return;

View File

@@ -243,6 +243,11 @@ public class Utils {
FromItem fromItem = plainSelect.getFromItem(); FromItem fromItem = plainSelect.getFromItem();
List<Join> joins = plainSelect.getJoins(); List<Join> joins = plainSelect.getJoins();
Expression where = plainSelect.getWhere(); Expression where = plainSelect.getWhere();
GroupByElement group = plainSelect.getGroupBy();
if (fromItem == null) {
return null;
}
sqlCount += " FROM " + fromItem; sqlCount += " FROM " + fromItem;
if (joins != null) { if (joins != null) {
@@ -253,6 +258,11 @@ public class Utils {
if (!Utils.isEmpty(where)) { if (!Utils.isEmpty(where)) {
sqlCount += " WHERE " + where; sqlCount += " WHERE " + where;
} }
if (!Utils.isEmpty(group)) {
sqlCount += " " + group;
sqlCount = "SELECT COUNT(1) FROM (" + sqlCount + ") _";
}
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@@ -89,6 +89,11 @@ public class DbKit implements DbSource {
return dbSource.exetute(sql); return dbSource.exetute(sql);
} }
@Override
public int exetuteUpdate(String sql) {
return dbSource.exetuteUpdate(sql);
}
// ----------------------------------------- // -----------------------------------------
public <T> CompletableFuture<T> findAsync(String sql, Class<T> type) { public <T> CompletableFuture<T> findAsync(String sql, Class<T> type) {
return CompletableFuture.supplyAsync(() -> find(sql, type)); return CompletableFuture.supplyAsync(() -> find(sql, type));

View File

@@ -42,4 +42,6 @@ public interface DbSource extends IService {
void dropTable(String tableName); void dropTable(String tableName);
boolean exetute(String sql); boolean exetute(String sql);
int exetuteUpdate(String sql);
} }

View File

@@ -5,9 +5,7 @@ import net.tccn.base.Kv;
import java.sql.*; import java.sql.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -108,7 +106,7 @@ public class DbSourceMysql implements DbSource {
ResultSetMetaData metaData = rs.getMetaData(); ResultSetMetaData metaData = rs.getMetaData();
int count = metaData.getColumnCount(); int count = metaData.getColumnCount();
while (rs.next()) { while (rs.next()) {
Map row = new HashMap(); Kv row = Kv.of();
for (int i = 1; i <= count; i++) { for (int i = 1; i <= count; i++) {
String columnTypeName = metaData.getColumnTypeName(i); String columnTypeName = metaData.getColumnTypeName(i);
//String columnName = metaData.getColumnName(i); //String columnName = metaData.getColumnName(i);
@@ -117,8 +115,12 @@ public class DbSourceMysql implements DbSource {
if (rs.getObject(i) != null) { if (rs.getObject(i) != null) {
switch (columnTypeName) { switch (columnTypeName) {
case "DATETIME", "TIMESTAMP", "DATE" -> { case "DATETIME", "TIMESTAMP" -> {
row.put(columnLabel, rs.getTimestamp(i).getTime()); // row.put(columnLabel, rs.getTimestamp(i).getTime());
row.put(columnLabel, rs.getTimestamp(i));
}
case "DATE" -> {
row.put(columnLabel, rs.getDate(i));
} }
default -> { default -> {
row.put(columnLabel, rs.getObject(i)); row.put(columnLabel, rs.getObject(i));
@@ -175,6 +177,7 @@ public class DbSourceMysql implements DbSource {
return Kv.toAs(v, type); return Kv.toAs(v, type);
} catch (SQLException e) { } catch (SQLException e) {
System.out.println("sql execute error: " + sql);
e.printStackTrace(); e.printStackTrace();
return null; return null;
} finally { } finally {
@@ -207,6 +210,20 @@ public class DbSourceMysql implements DbSource {
} }
} }
@Override
public int exetuteUpdate(String sql) {
Connection connection = connection();
try (
PreparedStatement ps = connection.prepareStatement(sql)
) {
return ps.executeUpdate();
} catch (SQLException e) {
throw new CfgException("SQL 执行失败:", sql);
} finally {
release(connection);
}
}
//fixme: lxy 处理连接超过8小时失效问题 //fixme: lxy 处理连接超过8小时失效问题
private Connection connection() { private Connection connection() {
Connection connection = null; Connection connection = null;

View File

@@ -1,3 +1,4 @@
/*
package net.tccn.base.dbq.qtask; package net.tccn.base.dbq.qtask;
import lombok.Getter; import lombok.Getter;
@@ -6,9 +7,11 @@ import net.tccn.base.arango.Doc;
import javax.persistence.Table; import javax.persistence.Table;
*/
/** /**
* @author: liangxianyou at 2018/11/13 14:59. * @author: liangxianyou at 2018/11/13 14:59.
*/ *//*
@Getter @Getter
@Setter @Setter
@Table(name = "DbTask", catalog = "db_meta") @Table(name = "DbTask", catalog = "db_meta")
@@ -29,3 +32,4 @@ public class DbTask extends Doc<DbTask> {
//------------------------------------- //-------------------------------------
} }
*/

View File

@@ -1,3 +1,4 @@
/*
package net.tccn.qtask; package net.tccn.qtask;
import lombok.Getter; import lombok.Getter;
@@ -6,9 +7,11 @@ import net.tccn.base.arango.Doc;
import javax.persistence.Table; import javax.persistence.Table;
*/
/** /**
* Created by liangxianyou at 2019/4/20 20:04. * Created by liangxianyou at 2019/4/20 20:04.
*/ *//*
@Getter @Getter
@Setter @Setter
@Table(name = "DbTask", catalog = "db_meta") @Table(name = "DbTask", catalog = "db_meta")
@@ -28,3 +31,4 @@ public class DbTask extends Doc<DbTask> {
// --------------------- // ---------------------
} }
*/

View File

@@ -1,33 +1,25 @@
package net.tccn.qtask; package net.tccn.qtask;
import net.tccn.base.BaseService; import net.tccn.base.BaseService;
import net.tccn.base.JBean;
import net.tccn.base.Kv; import net.tccn.base.Kv;
import org.redkale.net.http.RestMapping; import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam; import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService; import org.redkale.net.http.RestService;
import org.redkale.service.RetResult;
import java.util.Map;
/** /**
* @author: liangxianyou at 2018/11/13 18:14. * @author: liangxianyou at 2018/11/13 18:14.
*/ */
@RestService(automapping = true, comment = "qtask查询服务") @RestService(name = "qtask", automapping = true, comment = "qtask查询服务")
public class QtaskService extends BaseService { public class QtaskService extends BaseService {
// 调用示例: http://qtask_service_addr_xxxxxx/qtask/call?name=abxx&platToken=3421432&para={h:1} // 调用示例: http://qtask_service_addr_xxxxxx/qtask/call?name=abxx&platToken=3421432&para={h:1}
@RestMapping(name = "call", auth = false) @RestMapping(name = "call", auth = false)
public JBean call(String name, Map<String, String> para, @RestParam(name = "platToken") String token) { public RetResult<Object> call(String name, Kv<String, String> para, @RestParam(name = "platToken") String platToken) {
JBean jBean = new JBean(); if (para == null) {
para = Kv.of();
Kv kv = Kv.of();
if (para != null) {
para.forEach((k, v) -> kv.put(k, v));
} }
return RetResult.success(TaskKit.taskRun(name, platToken, para));
jBean.setBody(TaskKit.taskRun(name, token, kv));
return jBean;
} }
} }

View File

@@ -3,10 +3,8 @@ package net.tccn.qtask;
import dev.zhub.mk.qtask.QTask; import dev.zhub.mk.qtask.QTask;
import net.tccn.base.Kv; import net.tccn.base.Kv;
import net.tccn.base.MetaKit; import net.tccn.base.MetaKit;
import org.redkale.convert.json.JsonConvert;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@@ -14,61 +12,40 @@ import java.util.Optional;
* Created by liangxianyou at 2019/4/20 19:59. * Created by liangxianyou at 2019/4/20 19:59.
*/ */
public class TaskKit { public class TaskKit {
static final JsonConvert convert = JsonConvert.root(); private static List<QTask> qTasks;
private static List<QTask> taskEntities;
static { public static void init(List<QTask> tasks) {
init(); qTasks = tasks;
} }
public static void init() { public static Task buildTask(String name, String plattoken, Kv para) {
taskEntities = MetaKit.getTaskEntities(); QTask taskEntity = getTaskEntity(name, plattoken);
}
public static Task buildTask(String name, String platToken, Kv para) {
QTask taskEntity = getTaskEntity(name, platToken);
return buildTask(taskEntity, para); return buildTask(taskEntity, para);
} }
public static Task buildTask(dev.zhub.mk.qtask.QTask taskEntity, Kv para) { public static Task buildTask(dev.zhub.mk.qtask.QTask qTask, Kv para) {
Task task = new Task(); Task task = qTask.createTask(para);
task.setName(taskEntity.getName()); task.setDbAccount(MetaKit.getDbPlat(qTask.getDbplatid()));
task.setTitle(taskEntity.getTitle());
task.setContent(taskEntity.getContent());
task.setDbPlatId(taskEntity.getDbplatid());
task.setCatalog(taskEntity.getCatalog());
Kv _para = Kv.of().putAll(para);
if (taskEntity.getPara() != null) {
try {
Map<String, String> map = convert.convertFrom(JsonConvert.TYPE_MAP_STRING_STRING, taskEntity.getPara());
map.forEach((k,v) -> _para.put(k, v));
} catch (Exception e) {
new IllegalArgumentException(String.format("fromJson error:[%s]",taskEntity.getPara()), e);
}
}
task.setPara(_para);
task.setDbAccount(MetaKit.getDbPlat(taskEntity.getDbplatid()));
return task; return task;
} }
public static QTask getTaskEntity(String name, String platToken) { public static QTask getTaskEntity(String name, String platid) {
Objects.requireNonNull(name); Objects.requireNonNull(name);
Objects.requireNonNull(platToken); Objects.requireNonNull(platid);
Optional<QTask> any = taskEntities.stream() Optional<QTask> any = qTasks.stream()
.filter(x -> name.equals(x.getName()) && MetaKit.getPlatId(platToken).equals(x.getPlatid())) .filter(x -> name.equals(x.getName()) && MetaKit.getPlatId(platid).equals(x.getPlatid()))
.findAny(); .findAny();
return any.get(); return any.get();
} }
public static Object taskRun(String name, String platToken, Kv para) { public static Object taskRun(String name, String plattoken, Kv para) {
Task task = buildTask(name, platToken, para); Task task = buildTask(name, plattoken, para);
return QRuner.query(task); return QRuner.query(task);
} }
public static Object taskRun(QTask entity) { public static Object taskRun(QTask qTask) {
Task task = buildTask(entity, Kv.of()); Task task = buildTask(qTask, Kv.of());
return QRuner.query(task); return QRuner.query(task);
} }
} }

View File

@@ -3,7 +3,6 @@ package net.tccn.qtask;
import dev.zhub.mk.qtask.QTask; import dev.zhub.mk.qtask.QTask;
import net.tccn.base.BaseService; import net.tccn.base.BaseService;
import net.tccn.base.JBean; import net.tccn.base.JBean;
import net.tccn.base.MetaKit;
import org.redkale.net.http.RestBody; import org.redkale.net.http.RestBody;
import org.redkale.net.http.RestHeader; import org.redkale.net.http.RestHeader;
import org.redkale.net.http.RestParam; import org.redkale.net.http.RestParam;
@@ -44,6 +43,9 @@ public class _QtaskService extends BaseService {
task.setPlatid(platId(token)); task.setPlatid(platId(token));
metaSource.insert(task); metaSource.insert(task);
// 刷新缓存
metaKit.reloadxAsync(QTask.class);
return render(); return render();
} }
@@ -51,6 +53,9 @@ public class _QtaskService extends BaseService {
@RestBody QTask task) { @RestBody QTask task) {
metaSource.update(task); metaSource.update(task);
// 刷新缓存
metaKit.reloadxAsync(QTask.class);
return render(); return render();
} }
@@ -58,12 +63,15 @@ public class _QtaskService extends BaseService {
@RestBody QTask task) { @RestBody QTask task) {
metaSource.updateColumn(QTask.class, task.getQtaskid(), ColumnValue.create("status", 80)); metaSource.updateColumn(QTask.class, task.getQtaskid(), ColumnValue.create("status", 80));
// 刷新缓存
metaKit.reloadxAsync(QTask.class);
return render(); return render();
} }
@Comment("qtask保存") /*@Comment("qtask保存")
public JBean save(DbTask task, @RestParam(name = "platToken") String token) { public JBean save(DbTask task, @RestParam(name = "platToken") String token) {
JBean jBean = new JBean(); JBean jBean = new JBean();
@@ -96,7 +104,7 @@ public class _QtaskService extends BaseService {
return jBean; return jBean;
} }*/
@Comment("debug调试接口") @Comment("debug调试接口")
public JBean debug(QTask task, @RestParam(name = "platToken") String token) { public JBean debug(QTask task, @RestParam(name = "platToken") String token) {

View File

@@ -10,7 +10,9 @@ import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.qtask.QTask; import net.tccn.qtask.QTask;
import net.tccn.qtask.Task; import net.tccn.qtask.Task;
import java.util.Map; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class QTaskMysql extends QTaskAbs implements QTask { public class QTaskMysql extends QTaskAbs implements QTask {
@@ -34,7 +36,11 @@ public class QTaskMysql extends QTaskAbs implements QTask {
String sql = tpl.renderToString(getTask().getPara()).replaceAll("[\\s]+", " "); String sql = tpl.renderToString(getTask().getPara()).replaceAll("[\\s]+", " ");
// 聚合统计返回统计结果 TODO 待完善 // 聚合统计返回统计结果 TODO 待完善
if ((sql.startsWith("SELECT COUNT") || sql.startsWith("select count") || sql.startsWith("SELECT count") || sql.startsWith("select COUNT"))) { if (sql.startsWith("UPDATE ") || sql.startsWith("update ")) {
return dbKit.exetuteUpdate(sql);
}
String countSql = Utils.parserCountSql(sql);
if (countSql == null || (sql.startsWith("SELECT COUNT") || sql.startsWith("select count") || sql.startsWith("SELECT count") || sql.startsWith("select COUNT"))) {
return dbKit.find(sql, Kv.class); return dbKit.find(sql, Kv.class);
} }
@@ -69,8 +75,18 @@ public class QTaskMysql extends QTaskAbs implements QTask {
sql = Utils.parserSql(sql); sql = Utils.parserSql(sql);
Kv kv = Kv.of(); Kv kv = Kv.of();
kv.set("count", dbKit.findLong(Utils.parserCountSql(sql)));
kv.set("list", dbKit.queryList(sql, Map.class)); CompletableFuture<Long> countFuture = dbKit.findColumnAsync(countSql, long.class);
CompletableFuture<List<Kv>> listFuture = dbKit.queryListAsync(sql, Kv.class);
try {
kv.set("count", countFuture.get());
kv.set("list", listFuture.get());
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
return kv; return kv;
} }
} }

View File

@@ -1,4 +1,3 @@
import dev.zhub.mk.qtask.QTask;
import net.tccn.base.*; import net.tccn.base.*;
import net.tccn.base.dbq.fbean.FBean; import net.tccn.base.dbq.fbean.FBean;
import net.tccn.base.dbq.jdbc.api.DbAccount; import net.tccn.base.dbq.jdbc.api.DbAccount;
@@ -8,8 +7,6 @@ import net.tccn.dict.Dict;
import net.tccn.dict.DictKit; import net.tccn.dict.DictKit;
import net.tccn.meta.MetaService; import net.tccn.meta.MetaService;
import net.tccn.meta.MetaTable; import net.tccn.meta.MetaTable;
import net.tccn.qtask.DbTask;
import net.tccn.qtask.TaskKit;
import net.tccn.user.MetaUser; import net.tccn.user.MetaUser;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test; import org.junit.Test;