Commit 40836807 authored by 谢恒's avatar 谢恒

HSCLOUD_CLIENT

parent 18598f33
Pipeline #36124 failed with stages
......@@ -9,9 +9,9 @@
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hs</groupId>
<artifactId>admin</artifactId>
<artifactId>client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>admin</name>
<name>client</name>
<description>Admin project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
......@@ -27,9 +27,13 @@
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
......@@ -46,40 +50,21 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
......@@ -91,15 +76,16 @@
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.34.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
......@@ -109,6 +95,11 @@
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
<build>
......@@ -116,6 +107,7 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.5.RELEASE</version>
<configuration>
<excludes>
<exclude>
......
package com.hs.admin;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.sqlite.SQLiteDataSource;
import java.io.File;
/**
* @author xieheng
*/
@EnableRabbit
@EnableScheduling
@SpringBootApplication
@MapperScan("com.hs.admin.dao")
public class AdminApplication {
......
package com.hs.admin.base;
/**
* @author xieheng
*/
public enum CommandEnum {
/**
*
*/
SEND("1", "SEND"),
PAUSE("2", "Pause"),
DELETE("3", "Delete"),
RESUME("4", "Resume");
private String code;
private String msg;
CommandEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public static boolean exists(String code) {
CommandEnum[] values = CommandEnum.values();
for (CommandEnum commandEnum : values) {
if (commandEnum.getCode().equals(code)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(exists("1"));
}
}
......@@ -20,14 +20,9 @@ import java.util.Map;
import static java.util.stream.Collectors.joining;
/**
* @Description:AOP拦截打印请求地址、参数
* @Author 何志鹏
* @Date 2020/6/1 14:30
* @Version 1.0
*/
@Aspect
@Component
//@Aspect
//@Component
@Slf4j
public class LogAspect {
......
package com.hs.admin.base;
/**
* @author xieheng
*/
public class RabbitMqConstant {
public static final String JOB_QUEUE = "data_agent_job_queue_";
public static final String MSG_QUEUE = "data_agent_msg_queue";
public static final String ACTIVE_QUEUE = "data_agent_active_queue";
}
\ No newline at end of file
package com.hs.admin.base;
import lombok.AllArgsConstructor;
import java.io.Serializable;
......@@ -91,6 +93,10 @@ public class Result implements Serializable {
return new Result(Boolean.FALSE, CodeMessageEnum.SERVICE_ERROR.getMsg(), CodeMessageEnum.SERVICE_ERROR.getCode(), null, System.currentTimeMillis());
}
public static Result returnError(Object data) {
return new Result(Boolean.FALSE, CodeMessageEnum.SERVICE_ERROR.getMsg(), CodeMessageEnum.SERVICE_ERROR.getCode(), data, System.currentTimeMillis());
}
/**
* 返回成功
*
......@@ -101,6 +107,10 @@ public class Result implements Serializable {
return new Result(Boolean.TRUE, CodeMessageEnum.REQUEST_SUCCESS.getMsg(), CodeMessageEnum.REQUEST_SUCCESS.getCode(), data, System.currentTimeMillis());
}
public static Result returnSuccess() {
return new Result(Boolean.TRUE, CodeMessageEnum.REQUEST_SUCCESS.getMsg(), CodeMessageEnum.REQUEST_SUCCESS.getCode(), null, System.currentTimeMillis());
}
/**
* 返回自定义异常
*
......
package com.hs.admin.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* auth_token
*
* @author
*/
@Data
@AllArgsConstructor
public class AuthToken implements Serializable {
private String jcbId;
private String token;
private Date lasttime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -7,32 +7,24 @@ import java.util.Date;
/**
* jcb
* @author
*
* @author
*/
@Data
public class Jcb implements Serializable {
private Integer id;
private Integer jcbId;
private String jcbId;
private String dbName;
private String dbPwd;
private String dbUsername;
private String host;
private String name;
private String port;
private String remark;
private Integer state;
private Date gmtCreate;
private Integer type;
private Date gmtModify;
private Integer dbType;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -4,10 +4,7 @@ import lombok.Data;
@Data
public class MqData {
private String jcbId;
private String jobName;
private Integer type;
private String content;
private String sql;
private String url;
private String guid;
private String tableName;
}
package com.hs.admin.bean;
/**
* @author xieheng
*/
public enum OperateEnum {
/**
*
*/
SEND("1", "SEND"),
PAUSE("2", "Pause"),
DELETE("3", "Delete"),
RESUME("4", "Resume");
;
private String code;
private String msg;
OperateEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public static boolean exists(String code) {
OperateEnum[] values = OperateEnum.values();
for (OperateEnum commandEnum : values) {
if (commandEnum.getCode().equals(code)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(exists("1"));
}
}
package com.hs.admin.bean;
import com.hs.admin.util.ObjUtil;
import lombok.Data;
import java.io.Serializable;
......@@ -7,61 +8,45 @@ import java.util.Date;
/**
* sys_task
* @author
*
* @author
*/
@Data
public class SysTask implements Serializable {
private Integer id;
/**
* 租户id
*/
private Integer jcbId;
/**
* 任务名
*/
private String jobName;
/**
* 任务描述
*/
private String content;
/**
* cron表达式
*/
private String cronExpression;
private String ctype;
private Integer state;
/**
* 任务执行时调用哪个类的方法 包名+类名
* 租户id
*/
private String beanClass;
private String jcbId;
private Integer cid;
/**
* 任务状态:NONE:0 ,NORMAL:1 ,PAUSED:2 ,COMPLETE:3 ,ERROR:4 ,BLOCKED:5
*/
private Integer jobStatus;
/**
* 任务分组
*/
private String jobGroup;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 任务操作类型:1查询2新增3修改4删除
*/
private Integer type;
private String type;
private String jobName;
private String jobGroup;
private String beanClass;
public SysTask init() {
ObjUtil.initField(this);
return this;
}
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.hs.admin.bean;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* table_log
* @author
*/
@Data
public class TableLog implements Serializable {
private Integer id;
private String tableName;
private Date hsCloudLastTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.hs.admin.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.stereotype.Component;
import org.sqlite.JDBC;
import org.sqlite.SQLiteDataSource;
import javax.sql.DataSource;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author xieheng
*/
@Component
@Order(0)
public class SqliteConfig {
@Value("${sqlite.url}")
private String url;
/**
* @description:自动创建admin.db数据库文件并执行sql初始化表结构
* @author: XieHeng
* @return: SQLiteDataSource
* @date: 2021/5/30 10:15 上午
*/
@Bean
public SQLiteDataSource getDataSource() {
File file = new File(url);
if (!file.exists()) {
file.mkdirs();
}
SQLiteDataSource dataSource = new SQLiteDataSource();
dataSource.setUrl("jdbc:sqlite:" + url + "admin.db?date_string_format=yyyy-MM-dd HH:mm:ss");
Connection connection = null;
try {
Class.forName("org.sqlite.JDBC");
Resource classPathResource = new ClassPathResource("main.sql");
connection = dataSource.getConnection();
ScriptUtils.executeSqlScript(connection, classPathResource);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (!connection.isClosed()) {
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return dataSource;
}
}
......@@ -2,13 +2,26 @@ package com.hs.admin.controller;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.base.PageResult;
import com.hs.admin.base.RabbitMqConstant;
import com.hs.admin.base.Result;
import com.hs.admin.bean.AuthToken;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.Jcb;
import com.hs.admin.bean.TableLog;
import com.hs.admin.dao.AuthTokenDao;
import com.hs.admin.dto.JcbDto;
import com.hs.admin.listener.RabbitMqListener;
import com.hs.admin.service.JcbService;
import com.hs.admin.util.DbUtil;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import com.hs.admin.util.LoginUserUtil;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -23,6 +36,10 @@ public class JcbController {
LoginUserUtil loginUserUtil;
@Resource
JcbService jcbService;
@Resource
RabbitMqListener rabbitMqListener;
@Resource
private ApplicationContext applicationContext;
/**
* @description: 添加租户/修改
......@@ -36,22 +53,48 @@ public class JcbController {
Result result;
try {
loginUserUtil.getLoginUser();
boolean b = jcbService.saveJcb(jcbDto);
if (b) {
result = Result.returnSuccess(null);
} else {
result = Result.returnError();
}
Jcb jcb = jcbService.saveJcb(jcbDto);
new Thread(() -> {
createAndListener(jcbDto.getJcbId());
//创建table_log
createTable(jcb);
}).start();
result = Result.returnSuccess(null);
} catch (HsRuntimeException e) {
LogUtil.error("\n>>>>>saveJcb错误日志:"+e);
LogUtil.error("\n>>>>>saveJcb错误日志:" + e);
result = Result.returnHsException(e);
} catch (Exception e) {
LogUtil.error("\n>>>>>saveJcb错误日志:"+e);
e.printStackTrace();
LogUtil.error("\n>>>>>saveJcb错误日志:" + e);
result = Result.returnError();
}
return JsonUtils.beanToJson(result);
}
private void createTable(Jcb jcb) {
JdbcTemplate jdbcTemplate = DbUtil.getJdbcTemplate(DbUtil.getDataBase(jcb));
String sql = "if not exists(select null from sysobjects where xtype='u'and name ='table_log') " +
"CREATE TABLE table_log (id INTEGER identity(1,1) NOT NULL PRIMARY KEY, table_name varchar(64) NOT NULL UNIQUE, hs_cloud_last_time DATETIME NOT NULL );";
jdbcTemplate.execute(sql);
}
/**
* @description:添加队列并监听
* @author: XieHeng
* @param: jcbId
* @return: void
* @date: 2021/5/30 10:14 上午
*/
private void createAndListener(String jcbId) {
String queueName = RabbitMqConstant.JOB_QUEUE + jcbId;
//创建新的队列
rabbitMqListener.newQueue(queueName);
SimpleMessageListenerContainer container = applicationContext.getBean(SimpleMessageListenerContainer.class);
//将新队列进行监听
container.addQueueNames(queueName);
}
/**
* @description: 删除租户
* @param: jcbId
......@@ -60,21 +103,18 @@ public class JcbController {
* @date: 2021/5/10 9:02 上午
*/
@GetMapping(value = "/api/admin/deleteJcb")
public String delJcb(Integer id) {
public String delJcb(String jcbId) {
Result result;
try {
loginUserUtil.getLoginUser();
boolean b = jcbService.delJcb(id);
if (b) {
result = Result.returnSuccess(null);
} else {
result = Result.returnError();
}
jcbService.delJcb(jcbId);
result = Result.returnSuccess();
} catch (HsRuntimeException e) {
LogUtil.error("\n>>>>>deleteJcb错误日志:"+e);
LogUtil.error("\n>>>>>deleteJcb错误日志:" + e);
result = Result.returnHsException(e);
} catch (Exception e) {
LogUtil.error("\n>>>>>deleteJcb错误日志:"+e);
e.printStackTrace();
LogUtil.error("\n>>>>>deleteJcb错误日志:" + e);
result = Result.returnError();
}
return JsonUtils.beanToJson(result);
......@@ -88,6 +128,7 @@ public class JcbController {
* @author: XieHeng
* @date: 2021/5/10 9:04 上午
*/
@GetMapping(value = "/api/admin/getJcbList")
public String getJcbList(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "20") Integer pageSize) {
Result result;
......@@ -96,10 +137,34 @@ public class JcbController {
PageResult<Jcb> pageResult = jcbService.getJcbList(pageNum, pageSize);
result = Result.returnSuccess(pageResult);
} catch (HsRuntimeException e) {
LogUtil.error("\n>>>>>getJcbList错误日志:"+e);
LogUtil.error("\n>>>>>getJcbList错误日志:" + e);
result = Result.returnHsException(e);
} catch (Exception e) {e.printStackTrace();
LogUtil.error("\n>>>>>getJcbList错误日志:" + e);
result = Result.returnError();
}
return JsonUtils.beanToJson(result);
}
/**
* @description: 数据库连接校验
* @author: XieHeng
* @param: dataBase
* @return: String
* @date: 2021/5/17 2:32 下午
*/
@PostMapping(value = "/api/admin/checkDataBase")
public String checkDb(@RequestBody DataBase dataBase) {
Result result;
try {
loginUserUtil.getLoginUser();
jcbService.checkDb(dataBase);
result = Result.returnSuccess(null);
} catch (HsRuntimeException e) {
LogUtil.error("\n>>>>>checkDb错误日志:" + e);
result = Result.returnHsException(e);
} catch (Exception e) {
LogUtil.error("\n>>>>>getJcbList错误日志:"+e);
LogUtil.error("\n>>>>>checkDb错误日志:" + e);
result = Result.returnError();
}
return JsonUtils.beanToJson(result);
......
package com.hs.admin.controller;
import com.hs.admin.base.Result;
import com.hs.admin.util.JsonUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.ArrayList;
/**
* @author xieheng
*/
@Controller
public class LogController {
@GetMapping(value = "/api/admin/logs")
public String getLogs(ModelMap modelMap) {
String path = System.getProperty("user.dir");
File f = new File(path + "/mylogs");
System.out.println(f.getPath());
File[] files = f.listFiles();
ArrayList<Object> list = new ArrayList<>();
for (File file : files) {
list.add(file.getAbsolutePath());
}
modelMap.put("list", list);
return "log";
}
@ResponseBody
@GetMapping(value = "/api/admin/download")
public void download(String path, HttpServletRequest request, HttpServletResponse response) {
File f = new File(path);
try {
downFile(request, response, "日志", f);
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:
// 获取项目下文件或者文件流
// File file = new File(this.getClass().getResource("/xls/adminImportUserTemplate.xls").toURI());
// in = new BufferedInputStream(this.getClass().getResourceAsStream("/xls/adminImportUserTemplate.xls"));
/**
* 下载文件到浏览器
*
* @param request
* @param response
* @param filename 要下载的文件名
* @param file 需要下载的文件对象
* @throws IOException
*/
public static void downFile(HttpServletRequest request, HttpServletResponse response, String filename, File file) throws IOException {
// 文件存在才下载
if (file.exists()) {
OutputStream out = null;
FileInputStream in = null;
try {
// 1.读取要下载的内容
in = new FileInputStream(file);
// 2. 告诉浏览器下载的方式以及一些设置
// 解决文件名乱码问题,获取浏览器类型,转换对应文件名编码格式,IE要求文件名必须是utf-8, firefo要求是iso-8859-1编码
String agent = request.getHeader("user-agent");
if (agent.contains("FireFox")) {
filename = new String(filename.getBytes("UTF-8"), "iso-8859-1");
} else {
filename = URLEncoder.encode(filename, "UTF-8");
}
// 设置下载文件的mineType,告诉浏览器下载文件类型
String mineType = request.getServletContext().getMimeType(filename);
response.setContentType(mineType);
// 设置一个响应头,无论是否被浏览器解析,都下载
response.setHeader("Content-disposition", "attachment; filename=" + filename);
// 将要下载的文件内容通过输出流写到浏览器
out = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
}
}
}
}
......@@ -39,6 +39,7 @@ public class LoginController {
} catch (HsRuntimeException e) {
result = Result.returnHsException(e);
} catch (Exception e) {
e.printStackTrace();
LogUtil.error(">>>>>\nlogin错误日志:" + e);
result = Result.returnError();
}
......
......@@ -3,18 +3,28 @@ package com.hs.admin.controller;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.base.PageResult;
import com.hs.admin.base.Result;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dto.TaskDto;
import com.hs.admin.service.TaskService;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import com.hs.admin.util.LoginUserUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Map;
/**
* s
*
* @author xieheng
*/
@RestController
......@@ -24,72 +34,60 @@ public class TaskController {
@Resource
TaskService taskService;
/**
* @description: 添加任务
* @param: dto
* @description: 获取分页数据
* @param: taskDto
* @return: String
* @author: XieHeng
* @date: 2021/5/10 3:23 下午
* @date: 2021/5/10 3:38 下午
*/
/*
@PutMapping(value = "/api/admin/saveTask")
public String saveTask(@RequestBody @Validated TaskDto dto) {
@GetMapping(value = "/api/admin/getTaskList")
public String getTaskList(String jcbId, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "20") Integer pageSize) {
Result result;
try {
loginUserUtil.getLoginUser();
boolean b = taskService.saveTask(dto);
if (b) {
result = Result.returnSuccess(null);
} else {
result = Result.returnError();
}
PageResult<Map> pageResult = taskService.getTaskRecordList(jcbId, pageNum, pageSize);
result = Result.returnSuccess(pageResult);
} catch (HsRuntimeException e) {
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:" + e);
result = Result.returnHsException(e);
} catch (Exception e) {
} catch (Exception e) {e.printStackTrace();
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:" + e);
result = Result.returnError();
}
return JsonUtil.beanToJson(result);
return JsonUtils.beanToJson(result);
}
@GetMapping(value = "/api/admin/delTask")
public String delTask(Integer taskId) {
@GetMapping(value = "/api/admin/getTaskListByCid")
public String getTaskListByCid(Integer cid,String jcbId, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "20") Integer pageSize) {
Result result;
try {
loginUserUtil.getLoginUser();
boolean b = taskService.delTask(taskId);
if (b) {
result = Result.returnSuccess(null);
} else {
result = Result.returnError();
}
PageResult<Map> pageResult = taskService.getTaskListByCid(cid,jcbId, pageNum, pageSize);
result = Result.returnSuccess(pageResult);
} catch (HsRuntimeException e) {
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:" + e);
result = Result.returnHsException(e);
} catch (Exception e) {
e.printStackTrace();
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:" + e);
result = Result.returnError();
}
return JsonUtil.beanToJson(result);
return JsonUtils.beanToJson(result);
}
*/
/**
* @description: 获取分页数据
* @param: taskDto
* @return: String
* @author: XieHeng
* @date: 2021/5/10 3:38 下午
*/
@GetMapping(value = "/api/admin/getTaskList")
public String getTaskList(TaskDto taskDto) {
@GetMapping(value = "/api/admin/getContentById/{id}")
public String getContentById(@PathVariable Integer id){
Result result;
try {
loginUserUtil.getLoginUser();
PageResult<Map> pageResult = taskService.getTaskList(taskDto);
result = Result.returnSuccess(pageResult);
String content = taskService.getContentById(id);
result = Result.returnSuccess(content);
} catch (HsRuntimeException e) {
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:"+e);
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:" + e);
result = Result.returnHsException(e);
} catch (Exception e) {
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:"+e);
LogUtil.error("\n>>>>/api/admin/getTaskList错误日志:" + e);
result = Result.returnError();
}
return JsonUtils.beanToJson(result);
......
package com.hs.admin.dao;
import com.hs.admin.bean.AuthToken;
import com.hs.admin.util.DateUtil;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
public interface AuthTokenDao {
int insert(AuthToken record);
int getCount(String jcbId);
AuthToken findToken(String jcbId);
void updateToken(@Param("jcbId") String jcbId, @Param("token") String token, @Param("date") Date date);
}
\ No newline at end of file
package com.hs.admin.dao;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.Jcb;
import org.apache.ibatis.annotations.Param;
......@@ -10,24 +11,30 @@ import java.util.List;
* @author xieheng
*/
public interface JcbDao {
int deleteByPrimaryKey(Integer jcbId);
int deleteByPrimaryKey(String jcbId);
int insert(Jcb record);
Jcb selectByPrimaryKey(Integer jcbId);
Jcb selectByPrimaryKey(String jcbId);
int updateByPrimaryKey(Jcb record);
int delJcb(String jcbId);
int delJcb(Integer id);
List<Jcb> findAllByState(@Param("index") Integer index, @Param("pageSize") Integer pageSize);
List<Jcb> findAllByState(long before);
int updateById(Jcb jcb);
int checkTask(Integer id);
int getCount(Integer jcbId);
Jcb getCount(String jcbId);
long getTotalCount();
DataBase getDbInfo(String jcbId);
List<Jcb> findPage(Integer index, Integer pageSize);
int updateModifyTime(@Param("jcbId") String jcbId, @Param("dateTime") long dateTime);
List<String> getJcbIdList();
}
\ No newline at end of file
package com.hs.admin.dao;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.SysTask;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -14,23 +13,25 @@ public interface SysTaskDao {
int updateByPrimaryKey(SysTask record);
int delTask(Integer taskId);
Long getTotalCountById(String jcbId);
List<Map> findAllByCondition(HashMap<String, Object> map);
Long getTotalCount(String jcbId);
int delTaskById(Integer id);
List<Map> findPage(@Param("jcbId") String jcbId, @Param("index") Integer index, @Param("pageSize") Integer pageSize);
Long getTotalCount(HashMap<String, Object> map);
SysTask findTaskByJcbIdAndCid(@Param("jcbId") String jcbId, @Param("cid") Integer cid);
SysTask findTaskByJobName(String jobName);
Long getRecordTotalCount(Integer cid, String jcbId);
int updateMqContent(SysTask sysTask);
List<Map> findPageByCid(@Param("cid") Integer cid,@Param("jcbId") String jcbId, @Param("index") Integer index, @Param("pageSize") Integer pageSize);
int update(SysTask task);
void updateJobStatus(SysTask sysTask);
List<SysTask> getTaskList();
List<SysTask> getAllTaskList();
int delete(SysTask task);
String getContentById(Integer id);
DataBase getDbInfo(String jcbId);
int deleteByJcbIdAndCid(@Param("jcbId") String jcbId, @Param("cid") Integer cid);
void deleteByJcbId(String id);
}
\ No newline at end of file
package com.hs.admin.dao;
import com.hs.admin.bean.TableLog;
public interface TableLogDao {
int deleteByPrimaryKey(Integer id);
int insert(TableLog record);
int insertSelective(TableLog record);
TableLog selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(TableLog record);
int updateByPrimaryKey(TableLog record);
TableLog findByTableName(String tableName);
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ import lombok.Data;
@Data
public class JcbDto {
private Integer id;
private Integer jcbId;
private String jcbId;
private String jcbName;
private String host;
private String port;
......
This diff is collapsed.
package com.hs.admin.listener;
import com.hs.admin.bean.OperateEnum;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.service.SchedulerJobService;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
/**
* @author xieheng
*/
@Component
public class MyMessageListener implements MessageListener {
@Resource
SchedulerJobService schedulerJobService;
@Resource
SysTaskDao sysTaskDao;
@Override
public void onMessage(Message message) {
System.out.println(message.getMessageProperties().getConsumerQueue());
String data = null;
try {
data = new String(message.getBody(),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
LogUtil.info(">>>>>客户端进入消费,data=:" + data);
SysTask sysTask = JsonUtils.jsonToBean(data, SysTask.class);
String type = sysTask.getType();
if (type.equals(OperateEnum.PAUSE.getCode())) {
schedulerJobService.pauseJob(sysTask);
sysTaskDao.updateJobStatus(sysTask);
} else if (type.equals(OperateEnum.RESUME.getCode())) {
schedulerJobService.resumeJob(sysTask);
sysTaskDao.updateJobStatus(sysTask);
} else if (type.equals(OperateEnum.DELETE.getCode())) {
schedulerJobService.deleteJob(sysTask);
sysTaskDao.deleteByJcbIdAndCid(sysTask.getJcbId(),sysTask.getCid());
} else if (type.equals(OperateEnum.SEND.getCode())) {
schedulerJobService.initJob(sysTask);
}
LogUtil.info(">>>>>客户端消费成功结束");
}
}
package com.hs.admin.listener;
import com.hs.admin.bean.MqData;
import com.hs.admin.base.RabbitMqConstant;
import com.hs.admin.bean.OperateEnum;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.dao.JcbDao;
import com.hs.admin.service.SchedulerJobService;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.Connection;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author xieheng
*/
@Component
public class RabbitMqListener {
@Resource
SysTaskDao sysTaskDao;
RabbitTemplate rabbitTemplate;
@Resource
MyMessageListener messageListener;
@Resource
SchedulerJobService schedulerJobService;
@Resource
JcbDao jcbDao;
@Bean
public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(getAllQueueName());
LogUtil.info(">>>>>>>监听队列"+JsonUtils.beanToJson(container.getQueueNames()));
container.setMessageListener(messageListener);
return container;
}
public String[] getAllQueueName() {
List<String> jcbIdList = jcbDao.getJcbIdList();
List<String> list = new ArrayList<>();
if (!CollectionUtils.isEmpty(jcbIdList)) {
for (String jcbId : jcbIdList) {
String queueName = RabbitMqConstant.JOB_QUEUE + jcbId;
list.add(queueName);
}
}
return list.toArray(new String[list.size()]);
}
/**
* @description: 消费端消费
* @param: data
* @return: void
* @description:新增队列
* @author: XieHeng
* @date: 2021/5/7 1:41 下午
* @param: queueName
* @return: void
* @date: 2021/5/25 1:49 下午
*/
// @RabbitListener(queues = "item_queue")
public synchronized void mqTest(String data) {
LogUtil.info(">>>>>进入消费,data=:" + data);
MqData mqData = JsonUtils.jsonToBean(data, MqData.class);
if (ObjectUtils.isEmpty(mqData)) {
LogUtil.error(">>>>>>item_queue消息消费内容为空");
return;
}
String jobName = mqData.getJobName();
SysTask sysTask = sysTaskDao.findTaskByJobName(jobName);
sysTask.setContent(JsonUtils.beanToJson(mqData));
int i = sysTaskDao.updateMqContent(sysTask);
if (i == 1) {
schedulerJobService.deleteJob(sysTask);
schedulerJobService.initJob(sysTask);
public void newQueue(String queueName) {
ConnectionFactory connectionFactory = rabbitTemplate.getConnectionFactory();
Connection connection = connectionFactory.createConnection();
Channel channel = connection.createChannel(true);
try {
channel.queueDeclare(queueName, false, false, false, null);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
channel.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(">>>>>消费成功结束");
}
}
package com.hs.admin.listener;
import com.alibaba.fastjson.JSONObject;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.service.SchedulerJobService;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.List;
/**
* @author xieheng
......@@ -18,11 +26,35 @@ public class SchedulerJobListener implements CommandLineRunner {
@Resource
SchedulerJobService schedulerJobService;
@Resource
SysTaskDao sysTaskDao;
@Override
public void run(String... args) {
try {
schedulerJobService.initJobList();
List<SysTask> sysTaskList = sysTaskDao.getAllTaskList();
if (!CollectionUtils.isEmpty(sysTaskList)) {
//服务器启动自动启动正常的任务监听
for (SysTask task : sysTaskList) {
String content = task.getContent();
JSONObject jsonObject = null;
try {
jsonObject = JSONObject.parseObject(content);
String cronExpression = jsonObject.getString("cronExpression");
content = jsonObject.getString("params");
task.setContent(content);
if (!ObjectUtils.isEmpty(cronExpression)) {
task.setCronExpression(cronExpression);
task.setBeanClass("com.hs.admin.job.Select");
schedulerJobService.initJob(task);
LogUtil.info(">>>>>>>定时任务初始化:" + JsonUtils.beanToJson(task));
}
} catch (Exception e) {
LogUtil.error(">>>>>>>定时任务初始化失败"+e);
}
}
}
} catch (Exception e) {
LOGGER.error(">>>SchedulerJobListener error :" + e);
}
......
package com.hs.admin.proxy;
import org.springframework.cglib.proxy.InvocationHandler;
import org.springframework.cglib.proxy.Proxy;
import javax.swing.plaf.basic.BasicComboPopup;
import java.lang.reflect.Method;
/**
* 动态代理类
*
* @author xieheng
*/
public class MySubjectProxy<T> implements InvocationHandler {
//构造方法注入
private Class<T> proxyInterface;
public MySubjectProxy(Class<T> proxyInterface) {
this.proxyInterface = proxyInterface;
}
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
return method.invoke(proxyInterface, objects);
}
}
package com.hs.admin.scheduler;
import com.hs.admin.base.RabbitMqConstant;
import com.hs.admin.bean.Jcb;
import com.hs.admin.dao.JcbDao;
import com.hs.admin.util.LogUtil;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.sqlite.date.DateFormatUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* @author xieheng
*/
@Component
public class ActiveJcbScheduler {
@Resource
RabbitTemplate rabbitTemplate;
@Resource
JcbDao jcbDao;
@Scheduled(cron = "0 0/5 * * * ? ")
public void checkActiveJcb() {
LogUtil.info(">>>>>>>>>>>>>客户端发送心跳开始");
long now = System.currentTimeMillis();
long ten = 10 * 60 * 1000;
long before = now - ten;
List<Jcb> jcbList = jcbDao.findAllByState(before);
if (!CollectionUtils.isEmpty(jcbList)) {
for (Jcb jcb : jcbList) {
LogUtil.info(">>>>>>>>>>>>>客户端发送心跳 id="+jcb.getJcbId());
rabbitTemplate.convertAndSend(RabbitMqConstant.ACTIVE_QUEUE,jcb.getJcbId());
}
}
LogUtil.info(">>>>>>>>>>>>>客户端发送心跳结束");
}
}
package com.hs.admin.scheduler;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.bean.AuthToken;
import com.hs.admin.bean.Jcb;
import com.hs.admin.dao.AuthTokenDao;
import com.hs.admin.dao.JcbDao;
import com.hs.admin.util.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author xieheng
*/
@Component
public class TokenUtil {
@Value("${ocid_client_id}")
private String clientId;
@Value("${ocid_client_secret}")
private String clientSecret;
@Value("${ocid_scope}")
private String scope;
@Value("${ocid_password}")
private String password;
@Value("${ocid_token_url}")
private String interfaceTokenUrl;
@Resource
AuthTokenDao authTokenDao;
public String getToken(String jcbId) {
String accessToken = null;
HashMap<String, Object> map = new HashMap<>();
map.put("grant_type", "password");
map.put("client_id", clientId);
map.put("client_secret", clientSecret);
HashMap<Object, Object> userMap = new HashMap<>();
userMap.put("TenantCode", jcbId);
userMap.put("UserNo", "admin");
userMap.put("Lang", "cn");
map.put("username", JsonUtils.beanToJson(userMap));
map.put("password", password);
map.put("scope", scope);
String result = HttpUtil.post(interfaceTokenUrl, map);
LogUtil.info(">>>>>获取token");
if (!ObjectUtils.isEmpty(result)) {
Map<String, Object> objectMap = JsonUtils.jsonToMap(result);
if (objectMap != null) {
accessToken = objectMap.get("access_token").toString();
return accessToken;
}
}
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(),"获取token失败");
}
}
package com.hs.admin.service;
import com.hs.admin.base.PageResult;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.Jcb;
import com.hs.admin.dto.JcbDto;
import java.util.List;
/**
* @author xieheng
*/
public interface JcbService {
boolean saveJcb(JcbDto jcbDto);
Jcb saveJcb(JcbDto jcbDto);
boolean delJcb(Integer jcbId);
void delJcb(String jcbId);
PageResult<Jcb> getJcbList(Integer pageNum, Integer pageSize);
void checkDb(DataBase dataBase);
}
......@@ -10,13 +10,11 @@ public interface SchedulerJobService {
boolean runNow(SysTask sysTask);
boolean parseJob(SysTask sysTask);
boolean pauseJob(SysTask sysTask);
boolean resumeJob(SysTask sysTask);
boolean initJobList();
boolean deleteJob(SysTask sysTask);
boolean editCron(SysTask task, String cron);
SysTask editCron(SysTask task, String cron);
}
......@@ -2,7 +2,6 @@ package com.hs.admin.service;
import com.hs.admin.base.PageResult;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dto.TaskDto;
import java.util.Map;
......@@ -10,9 +9,9 @@ import java.util.Map;
* @author xieheng
*/
public interface TaskService {
boolean saveTask(TaskDto dto);
PageResult<Map> getTaskRecordList(String jcbId, Integer pageNum, Integer pageSize);
boolean delTask(Integer taskId);
PageResult<Map> getTaskListByCid(Integer cid,String jcbId, Integer pageNum, Integer pageSize);
PageResult<Map> getTaskList(TaskDto taskDto);
String getContentById(Integer id);
}
package com.hs.admin.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.base.PageResult;
import com.hs.admin.base.StateEnum;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.Jcb;
import com.hs.admin.dao.JcbDao;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.dto.JcbDto;
import com.hs.admin.service.JcbService;
import com.hs.admin.util.DynamicDataBaseUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
......@@ -31,9 +31,9 @@ public class JcbServiceImpl implements JcbService {
SysTaskDao sysTaskDao;
@Override
public boolean saveJcb(JcbDto jcbDto) {
public Jcb saveJcb(JcbDto jcbDto) {
Integer id = jcbDto.getId();
Integer jcbId = jcbDto.getJcbId();
String jcbId = jcbDto.getJcbId();
String jcbName = jcbDto.getJcbName();
String remark = jcbDto.getRemark();
String dbName = jcbDto.getDbName();
......@@ -41,7 +41,7 @@ public class JcbServiceImpl implements JcbService {
String port = jcbDto.getPort();
String username = jcbDto.getDbUsername();
String pwd = jcbDto.getDbPwd();
Integer type = jcbDto.getType();
Integer type = ObjectUtils.isEmpty(jcbDto.getType()) ? 1 : jcbDto.getType();
if (StringUtils.isEmpty(jcbId)) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "租户编号不能为空");
}
......@@ -63,6 +63,14 @@ public class JcbServiceImpl implements JcbService {
if (StringUtils.isEmpty(pwd)) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "数据库密码不能为空");
}
DataBase dataBase = new DataBase();
dataBase.setHost(host);
dataBase.setPort(port);
dataBase.setName(dbName);
dataBase.setUsername(username);
dataBase.setPassword(pwd);
dataBase.setDbType(String.valueOf(type));
checkDb(dataBase);
Jcb jcb = new Jcb();
jcb.setJcbId(jcbId);
jcb.setName(jcbName);
......@@ -72,19 +80,30 @@ public class JcbServiceImpl implements JcbService {
jcb.setDbName(dbName);
jcb.setDbUsername(username);
jcb.setDbPwd(pwd);
jcb.setType(ObjectUtils.isEmpty(type) ? 1 : type);
jcb.setDbType(ObjectUtils.isEmpty(type) ? 1 : type);
if (id == null) {
int count = jcbDao.getCount(jcbId);
if (count > 0) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "租户已经存在,不能重复添加");
Jcb dbjcb = jcbDao.getCount(jcbId);
if (dbjcb != null) {
if (dbjcb.getState() != 3) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "租户已经存在,不能重复添加");
} else {
jcb.setGmtCreate(new Date());
jcb.setGmtModify(new Date());
jcb.setState(StateEnum.ENABLE.getCode());
jcb.setId(dbjcb.getId());
jcbDao.updateById(jcb);
}
} else {
jcb.setState(StateEnum.ENABLE.getCode());
jcb.setGmtCreate(new Date());
jcb.setGmtModify(new Date());
jcbDao.insert(jcb);
}
jcb.setState(StateEnum.ENABLE.getCode());
jcb.setGmtCreate(new Date());
return jcbDao.insert(jcb) == 1;
} else {
jcb.setId(id);
return jcbDao.updateById(jcb) == 1;
jcbDao.updateById(jcb);
}
return jcb;
}
/**
......@@ -96,28 +115,32 @@ public class JcbServiceImpl implements JcbService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean delJcb(Integer id) {
if (id == null || id < 1) {
public void delJcb(String id) {
if (ObjectUtils.isEmpty(id)) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "参数错误");
}
//校验是否有存在正常的任务。否则不能删除租户
int i = jcbDao.checkTask(id);
if (i > 0) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "租户存在任务,不能删除");
int i = jcbDao.delJcb(id);
if (i != 1) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "删除失败");
}
if (jcbDao.delJcb(id) == 1) {
sysTaskDao.delTaskById(id);
return true;
}
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "删除失败");
sysTaskDao.deleteByJcbId(id);
}
@Override
public PageResult<Jcb> getJcbList(Integer pageNum, Integer pageSize) {
Integer index = (pageNum - 1) * pageSize;
Long totalCount = jcbDao.getTotalCount();
List<Jcb> jcbList = jcbDao.findAllByState(index, pageSize);
List<Jcb> jcbList = jcbDao.findPage(index, pageSize);
return new PageResult<>(totalCount, jcbList);
}
@Override
public void checkDb(DataBase dataBase) {
boolean b = DynamicDataBaseUtil.checkDataBaseConnection(dataBase);
if (!b) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "数据库校验失败");
}
}
}
......@@ -4,7 +4,9 @@ import com.hs.admin.bean.SysTask;
import com.hs.admin.service.JobManagerService;
import com.hs.admin.util.JsonUtils;
import org.quartz.*;
import org.quartz.utils.Key;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.net.URL;
......@@ -26,28 +28,29 @@ public class JobManagerServiceImpl implements JobManagerService {
@Override
public boolean addJob(SysTask task) {
try {
deleteJob(task);
String key = String.valueOf(task.getJcbId());
String value = String.valueOf(task.getCid());
// 创建jobDetail实例,绑定Job实现类
// 指明job的名称,所在组的名称,以及绑定job类
Class<? extends Job> jobClass = (Class<? extends Job>) (Class.forName(task.getBeanClass()).newInstance().getClass());
// 任务名称和组构成任务key
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(task.getJobName(), task.getJobGroup()).build();
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(key, value).build();
// 定义调度触发规则
// 使用cornTrigger规则
// 触发器key
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(task.getJobName(), task.getJobGroup())
.startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND))
.withSchedule(CronScheduleBuilder.cronSchedule(task.getCronExpression())).startNow().build();
TriggerBuilder builder = TriggerBuilder.newTrigger().withIdentity(key, value)
.startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND));
if (!ObjectUtils.isEmpty(task.getCronExpression())) {
builder.withSchedule(CronScheduleBuilder.cronSchedule(task.getCronExpression()));
}
Trigger trigger = builder.startNow().build();
trigger.getJobDataMap().put("triggerTask", JsonUtils.beanToJson(task));
// 把作业和触发器注册到任务调度中
Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
if (triggerState.equals(Trigger.TriggerState.NONE)) {
scheduler.scheduleJob(jobDetail, trigger);
// 启动
if (!scheduler.isShutdown()) {
scheduler.start();
return true;
}
}
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
return true;
} catch (Exception e) {
e.printStackTrace();
}
......@@ -62,9 +65,12 @@ public class JobManagerServiceImpl implements JobManagerService {
*/
@Override
public boolean pauseJob(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
JobKey jobKey = JobKey.jobKey(String.valueOf(task.getJcbId()), String.valueOf(task.getCid()));
try {
scheduler.pauseJob(jobKey);
boolean b = scheduler.checkExists(jobKey);
if (b) {
scheduler.deleteJob(jobKey);
}
return true;
} catch (SchedulerException e) {
e.printStackTrace();
......@@ -80,9 +86,14 @@ public class JobManagerServiceImpl implements JobManagerService {
*/
@Override
public boolean resumeJob(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
JobKey jobKey = JobKey.jobKey(String.valueOf(task.getJcbId()), String.valueOf(task.getCid()));
try {
scheduler.resumeJob(jobKey);
boolean b = scheduler.checkExists(jobKey);
if (b) {
scheduler.resumeJob(jobKey);
} else {
addJob(task);
}
return true;
} catch (SchedulerException e) {
e.printStackTrace();
......@@ -98,8 +109,8 @@ public class JobManagerServiceImpl implements JobManagerService {
*/
@Override
public boolean deleteJob(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
try {
JobKey jobKey = JobKey.jobKey(String.valueOf(task.getJcbId()), String.valueOf(task.getCid()));
scheduler.deleteJob(jobKey);
return true;
} catch (SchedulerException e) {
......@@ -117,7 +128,7 @@ public class JobManagerServiceImpl implements JobManagerService {
*/
@Override
public boolean runJobNow(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
JobKey jobKey = JobKey.jobKey(String.valueOf(task.getJcbId()), String.valueOf(task.getCid()));
try {
scheduler.triggerJob(jobKey);
return true;
......@@ -135,7 +146,7 @@ public class JobManagerServiceImpl implements JobManagerService {
*/
@Override
public boolean updateJobCron(SysTask task) {
TriggerKey triggerKey = TriggerKey.triggerKey(task.getJobName(), task.getJobGroup());
TriggerKey triggerKey = TriggerKey.triggerKey(String.valueOf(task.getJcbId()), String.valueOf(task.getCid()));
try {
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(task.getCronExpression());
......@@ -148,8 +159,4 @@ public class JobManagerServiceImpl implements JobManagerService {
return false;
}
public static void main(String[] args) {
URL url = Thread.currentThread().getContextClassLoader().getResource("TestJob");
System.out.println(url.toString());
}
}
......@@ -2,7 +2,6 @@ package com.hs.admin.service.impl;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.base.JobStateEnum;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.service.JobManagerService;
......@@ -11,11 +10,9 @@ import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.List;
/**
* @author xieheng
......@@ -24,8 +21,6 @@ import java.util.List;
public class SchedulerJobServiceImpl implements SchedulerJobService {
@Resource
JobManagerService jobManagerService;
@Resource
SysTaskDao sysTaskDao;
/**
* @description: 校验任务id
......@@ -62,32 +57,22 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
private boolean excuteInitJobOperate(SysTask task) {
if (!ObjectUtils.isEmpty(task)) {
boolean b = jobManagerService.addJob(task);
if (b) {
task.setJobStatus(JobStateEnum.NORMAL.getCode());
return sysTaskDao.update(task) == 1;
}
return jobManagerService.addJob(task);
} else {
LogUtil.error("初始化定时任务失败");
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return false;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean parseJob(SysTask task) {
public boolean pauseJob(SysTask task) {
if (!ObjectUtils.isEmpty(task)) {
boolean b = jobManagerService.pauseJob(task);
if (b) {
task.setJobStatus(JobStateEnum.PAUSED.getCode());
return sysTaskDao.update(task) == 1;
}
return jobManagerService.pauseJob(task);
} else {
LogUtil.error("暂停任务失败:" + JsonUtils.beanToJson(task));
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return false;
}
@Override
......@@ -95,36 +80,19 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
if (!ObjectUtils.isEmpty(task)) {
boolean b = jobManagerService.resumeJob(task);
if (b) {
task.setJobStatus(JobStateEnum.NORMAL.getCode());
return sysTaskDao.update(task) == 1;
LogUtil.error("恢复任务" + JsonUtils.beanToJson(task));
return b;
}
} else {
LogUtil.error("恢复任务失败" + JsonUtils.beanToJson(task));
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return false;
}
LogUtil.error("恢复任务失败" + JsonUtils.beanToJson(task));
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
@Override
public boolean initJobList() {
//从库里查询所有待执行任务
List<SysTask> taskList = sysTaskDao.getTaskList();
if (!CollectionUtils.isEmpty(taskList)) {
for (SysTask task : taskList) {
excuteInitJobOperate(task);
}
} else {
LogUtil.error("initJobList error: 没有待执行任务");
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return true;
}
@Override
public boolean deleteJob(SysTask task) {
if (!ObjectUtils.isEmpty(task)) {
jobManagerService.deleteJob(task);
return sysTaskDao.delete(task) == 1;
return jobManagerService.deleteJob(task);
} else {
LogUtil.error("删除任务失败" + JsonUtils.beanToJson(task));
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
......@@ -132,16 +100,17 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
}
@Override
public boolean editCron(SysTask task, String cron) {
public SysTask editCron(SysTask task, String cron) {
if (ObjectUtils.isEmpty(task)) {
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getMsg(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
task.setCronExpression(cron);
jobManagerService.updateJobCron(task);
sysTaskDao.updateByPrimaryKey(task);
jobManagerService.runJobNow(task);
return true;
return task;
}
}
package com.hs.admin.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hs.admin.base.PageResult;
import com.hs.admin.base.StateEnum;
import com.hs.admin.bean.Jcb;
import com.hs.admin.bean.SysTask;
import com.hs.admin.bean.*;
import com.hs.admin.dao.JcbDao;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.dto.TaskDto;
import com.hs.admin.service.JcbService;
import com.hs.admin.service.TaskService;
import com.hs.admin.util.DateUtil;
import com.hs.admin.util.DbUtil;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import com.hs.admin.vo.ResponseVO;
import com.hs.admin.vo.ResultVO;
import org.apache.http.client.utils.DateUtils;
import org.quartz.CronExpression;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import javax.print.attribute.standard.JobName;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.text.ParseException;
import java.util.*;
/**
* @author xieheng
......@@ -28,75 +32,123 @@ import java.util.Map;
@Service
public class TaskServiceImpl implements TaskService {
@Resource
SysTaskDao taskDao;
SysTaskDao sysTaskDao;
@Resource
JcbService jcbService;
JcbDao jcbDao;
@Override
public boolean saveTask(TaskDto dto) {
Integer jcbId = dto.getJcbId();
Integer id = dto.getId();
String beanClass = dto.getBeanClass();
String cronExpression = dto.getCronExpression();
String jobGroup = dto.getJobGroup();
Integer type = dto.getType();
String name = dto.getName();
SysTask sysTask = new SysTask();
if (!StringUtils.isEmpty(name)) {
sysTask.setJobName(name);
public PageResult<Map> getTaskRecordList(String jcbId, Integer pageNum, Integer pageSize) {
Integer index = (pageNum - 1) * pageSize;
Long totalCount = sysTaskDao.getTotalCountById(jcbId);
List<Map> jcbList = sysTaskDao.findPage(jcbId, index, pageSize);
Map tmp = jcbList.get(0);
DataBase dataBase = new DataBase();
dataBase.setHost(tmp.get("host").toString());
dataBase.setPort(tmp.get("port").toString());
dataBase.setName(tmp.get("dbName").toString());
dataBase.setUsername(tmp.get("dbUsername").toString());
dataBase.setPassword(tmp.get("dbPwd").toString());
dataBase.setDbType(tmp.get("dbType").toString());
List<Map> list = new ArrayList<>();
for (Map map : jcbList) {
Map<String, Object> result = new HashMap<>();
result.put("jcbId", jcbId);
result.put("jcbName", map.get("jcbName").toString());
result.put("jobName", map.get("jobName").toString());
Object contentObj = map.get("content");
if (!ObjectUtils.isEmpty(contentObj)) {
String content = contentObj.toString();
ResponseVO vo = null;
try {
vo = JsonUtils.jsonToBean(content, ResponseVO.class);
} catch (Exception e) {
continue;
}
Object params = vo.getParams();
if (!ObjectUtils.isEmpty(params)) {
SysTask task = JsonUtils.jsonToBean(params.toString(), SysTask.class);
MqData mqData = JsonUtils.jsonToBean(task.getContent(), MqData.class);
String tableName = mqData.getTableName();
String cronExpression = task.getCronExpression();
if (!ObjectUtils.isEmpty(tableName)) {
getTableTime(tableName, dataBase, map);
} else {
Object createTime = map.get("createTime");
Date date = new Date(Long.valueOf(String.valueOf(createTime)));
map.put("lastExecuteTime", DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"));
}
if (!ObjectUtils.isEmpty(cronExpression)) {
getNextExecuteTime(cronExpression, map);
}
}
}
}
if (!StringUtils.isEmpty(type)) {
sysTask.setType(type);
}
if (!StringUtils.isEmpty(cronExpression)) {
sysTask.setCronExpression(cronExpression);
}
if (!StringUtils.isEmpty(beanClass)) {
sysTask.setBeanClass(beanClass);
}
if (!StringUtils.isEmpty(name)) {
sysTask.setJobName(name);
}
if (!StringUtils.isEmpty(jobGroup)) {
sysTask.setJobGroup(jobGroup);
}
if (id == null) {
sysTask.setJcbId(jcbId);
sysTask.setContent("");
sysTask.setJobStatus(StateEnum.ENABLE.getCode());
sysTask.setCreateTime(new Date());
sysTask.setUpdateTime(new Date());
return taskDao.insert(sysTask) == 1;
return new PageResult<>(totalCount, jcbList);
}
private Map getNextExecuteTime(String cronExpression, Map map) {
if (ObjectUtils.isEmpty(cronExpression)) {
map.put("nextTime", "");
} else {
sysTask.setId(id);
return taskDao.updateByPrimaryKey(sysTask) == 1;
try {
CronExpression cron = new CronExpression(cronExpression);
Date date = cron.getNextValidTimeAfter(new Date());
map.put("nextTime", DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"));
} catch (Exception e) {
e.printStackTrace();
}
}
return map;
}
@Override
public boolean delTask(Integer taskId) {
int i = 0;
private Map getTableTime(String tableName, DataBase dataBase, Map map) {
JdbcTemplate jdbcTemplate = DbUtil.getJdbcTemplate(dataBase);
TableLog tableLog = null;
try {
i = taskDao.delTask(taskId);
} catch (Exception e) {
tableLog = jdbcTemplate.queryForObject("select * from table_log where table_name=?", new BeanPropertyRowMapper<>(TableLog.class), tableName);
} catch (DataAccessException e) {
e.printStackTrace();
}
return i == 1;
if (!ObjectUtils.isEmpty(tableLog)) {
Date hsCloudLastTime = tableLog.getHsCloudLastTime();
map.put("lastExecuteTime", DateUtil.format(hsCloudLastTime, "yyyy-MM-dd HH:mm:ss"));
}
return map;
}
@Override
public PageResult<Map> getTaskList(TaskDto taskDto) {
Integer jcbId = taskDto.getJcbId();
if (jcbId == null) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "缺少租户Id");
public PageResult<Map> getTaskListByCid(Integer cid, String jcbId, Integer pageNum, Integer pageSize) {
Integer index = (pageNum - 1) * pageSize;
Long totalCount = sysTaskDao.getRecordTotalCount(cid, jcbId);
List<Map> jcbList = sysTaskDao.findPageByCid(cid, jcbId, index, pageSize);
if (!CollectionUtils.isEmpty(jcbList)) {
for (Map map : jcbList) {
String ctype = map.get("ctype").toString();
String content = map.get("content").toString();
ResponseVO vo = null;
try {
vo = JsonUtils.jsonToBean(content, ResponseVO.class);
} catch (Exception e) {
map.put("content", "");
continue;
}
ResultVO resultVO = vo.getResultVO();
if (ObjectUtils.isEmpty(resultVO)) {
map.put("content", "");
} else {
//除上传操作不显示result
if (!"2".equals(ctype)) {
resultVO.setResult(null);
}
map.put("content", resultVO);
}
}
}
Integer index = (taskDto.getPageNum() - 1) * taskDto.getPageSize();
HashMap<String, Object> map = new HashMap<>();
map.put("jcbId", jcbId);
map.put("index", index);
map.put("pageSize", taskDto.getPageSize());
Long totalCount = taskDao.getTotalCount(map);
List<Map> sysTaskList = taskDao.findAllByCondition(map);
return new PageResult<>(totalCount, sysTaskList);
return new PageResult<>(totalCount, jcbList);
}
@Override
public String getContentById(Integer id) {
return sysTaskDao.getContentById(id);
}
}
This diff is collapsed.
package com.hs.admin.job;
package com.hs.admin.util;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.MqData;
import com.hs.admin.bean.Student;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.util.DynamicDataBaseUtil;
import com.hs.admin.util.JsonUtils;
import com.zaxxer.hikari.HikariDataSource;
import org.quartz.*;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import com.hs.admin.bean.Jcb;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
@DisallowConcurrentExecution
@Component
public class TestJob implements Job {
@Resource
RabbitTemplate rabbitTemplate;
@Resource
SysTaskDao sysTaskDao;
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
System.out.println(JsonUtils.beanToJson(jobDataMap));
String triggerTask = jobDataMap.get("triggerTask").toString();
SysTask sysTask = JsonUtils.jsonToBean(triggerTask, SysTask.class);
MqData mqData = JsonUtils.jsonToBean(sysTask.getContent(), MqData.class);
String guid = mqData.getGuid();
String jcbId = mqData.getJcbId();
String url = mqData.getUrl();
Integer type = mqData.getType();
String jobName = mqData.getJobName();
String content = mqData.getContent();
//根据jcbId选择db操作todo
DataBase dataBase = getDataBaseInfo(jcbId);
HikariDataSource dataSource = null;
try {
dataSource = DynamicDataBaseUtil.configure(dataBase);
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
List<Student> students = jdbcTemplate.query(content, new BeanPropertyRowMapper<>(Student.class));
System.out.println(">>>>>>>>>>>" + JsonUtils.beanToJson(students));
if (!CollectionUtils.isEmpty(students)) {
for (Student student : students) {
//将db返回结果发送消息队列
// rabbitTemplate.convertAndSend(RabbitMqConfig.ITEM_TOPIC_EXCHANGE,"",j);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//每次用完记得关闭连接
dataSource.close();
}
//
// String content = "00...........这是另一个定时任务!" + LocalDateTime.now();
// System.out.println("00...........这是另一个定时任务!" + LocalDateTime.now());
// String path = "/Users/macbookpro/Documents/";
// String date = LocalDate.now().toString();
// String className = this.getClass().getSimpleName();
// path = path + date;
// File file = new File(path);
// if (!file.exists()) {
// file.mkdirs();
// }
// String fileName = path + "/" + className + ".txt";
// FileUtil.writeFile(fileName, content);
}
public class DbUtil {
/**
* @description: 读取本地配置文件
......@@ -87,8 +19,8 @@ public class TestJob implements Job {
* @author: XieHeng
* @date: 2021/5/7 4:11 下午
*/
private DataBase readProperties(String jcbId) {
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("dbconfig/db.properties");
public static DataBase readProperties(String jcbId) {
InputStream inputStream = DbUtil.class.getClassLoader().getResourceAsStream("dbconfig/db.properties");
Properties properties = new Properties();
try {
properties.load(inputStream);
......@@ -124,31 +56,49 @@ public class TestJob implements Job {
return null;
}
private DataBase getDataBaseInfo(String jcbId) {
DataBase dataBase = sysTaskDao.getDbInfo(jcbId);
String type = dataBase.getDbType();
/**
* @description:获取sqlserver JdbcTemplate
* @author: XieHeng
* @param: dbInfo
* @return: NamedParameterJdbcTemplate
* @date: 2021/5/24 5:14 下午
*/
public static JdbcTemplate getJdbcTemplate(DataBase dbInfo) {
SQLServerDataSource ds = new SQLServerDataSource();
DataBase dataBase = getDataBaseInfo(dbInfo);
ds.setUser(dataBase.getUsername());
ds.setPassword(dataBase.getPassword());
ds.setServerName(dataBase.getHost());
ds.setPortNumber(Integer.parseInt(dataBase.getPort()));
ds.setDatabaseName(dataBase.getName());
ds.setLoginTimeout(10);
return new JdbcTemplate(ds);
}
public static DataBase getDataBase(Jcb jcb) {
DataBase dataBase = new DataBase();
dataBase.setHost(jcb.getHost());
dataBase.setPort(jcb.getPort());
dataBase.setName(jcb.getDbName());
dataBase.setUsername(jcb.getDbUsername());
dataBase.setPassword(jcb.getDbPwd());
dataBase.setDbType(String.valueOf(jcb.getDbType()));
return dataBase;
}
/**
* @description:获取数据库信息
* @author: XieHeng
* @param: dataBase
* @return: DataBase
* @date: 2021/5/24 5:14 下午
*/
public static DataBase getDataBaseInfo(DataBase dataBase) {
String host = dataBase.getHost();
String dbName = dataBase.getName();
String port = dataBase.getPort();
String driver = null;
String url = null;
switch (type) {
//1sqlserver,2mysql,3oracle
case "1":
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
url = "jdbc:sqlserver://" + host + ":" + port + ";DatabaseName=" + dbName;
break;
case "2":
driver = "com.mysql.cj.jdbc.Driver";
url = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
break;
case "3":
driver = "oracle.jdbc.OracleDriver";
url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbName;
break;
default:
break;
}
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://" + host + ":" + port + ";DatabaseName=" + dbName;
dataBase.setDbDriver(driver);
dataBase.setUrl(url);
return dataBase;
......
package com.hs.admin.util;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.bean.DataBase;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import com.mysql.cj.jdbc.MysqlDataSource;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.util.ObjectUtils;
import java.sql.Connection;
import java.sql.SQLException;
public class DynamicDataBaseUtil {
/**
......@@ -16,8 +24,8 @@ public class DynamicDataBaseUtil {
dataSource.setUsername(dataBase.getUsername());
dataSource.setPassword(dataBase.getPassword());
dataSource.setDriverClassName(dataBase.getDbDriver());
dataSource.setMaximumPoolSize(2);
dataSource.setMinimumIdle(1);
// dataSource.setMaximumPoolSize(2);
// dataSource.setMinimumIdle(1);
dataSource.setAutoCommit(true);
// dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL");
dataSource.addDataSourceProperty("cachePrepStmts", "true");
......@@ -25,4 +33,64 @@ public class DynamicDataBaseUtil {
dataSource.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
return dataSource;
}
public static boolean checkDataBaseConnection(DataBase dataBase) {
String dbType = dataBase.getDbType();
String username = dataBase.getUsername();
String password = dataBase.getPassword();
String host = dataBase.getHost();
String port = dataBase.getPort();
String dbName = dataBase.getName();
if (ObjectUtils.isEmpty(username) || ObjectUtils.isEmpty(password) || ObjectUtils.isEmpty(host) || ObjectUtils.isEmpty(port) || ObjectUtils.isEmpty(dbType) || ObjectUtils.isEmpty(dbName)) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "数据库连接失败");
}
if ("1".equals(dbType)) {
SQLServerDataSource ds = new SQLServerDataSource();
ds.setUser(username);
ds.setPassword(password);
ds.setServerName(host);
ds.setPortNumber(Integer.parseInt(port));
ds.setDatabaseName(dbName);
ds.setLoginTimeout(1);
Connection connection = null;
try {
connection = ds.getConnection();
return true;
} catch (Exception e) {
return false;
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
} else if ("2".equals(dbType)) {
MysqlDataSource ds = new MysqlDataSource();
ds.setUser(username);
ds.setPassword(password);
ds.setServerName(host);
ds.setPortNumber(Integer.parseInt(port));
ds.setDatabaseName(dbName);
Connection connection = null;
try {
connection = ds.getConnection();
return true;
} catch (Exception e) {
return false;
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
return false;
}
}
This diff is collapsed.
package com.hs.admin.util;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description:
* @author:XIEHENG
* @Date: 2018/8/6
* @Time:9:32
*/
public class ObjUtil {
/**
* 获取对象下所有不为空的属性和值
*
* @param obj
* @return
*/
public static Map<String, Object> checkfield(Object obj) {
Map<String, Object> map = null;
try {
Class<?> objClass = obj.getClass();
Field[] fields = objClass.getDeclaredFields();
map = new HashMap<>();
for (Field field : fields) {
field.setAccessible(true);
Object val = field.get(obj);
if (val != null) {
map.put(field.getName(), val);
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return map;
}
public static void initField(Object object) {
try {
Class<?> objectClass = object.getClass();
Field[] fields = objectClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String type = field.getType().getSimpleName();
if (field.get(object) == null) {
if (type.equals("String")) {
field.set(object, "");
} else if (type.equals("Integer")) {
field.set(object, new Integer(0));
} else if (type.equals("Long")) {
field.set(object, new Long(0));
} else if (type.equals("Char")) {
field.set(object, "");
} else if (type.equals("Date")) {
field.set(object, new Date());
} else if (type.equals("BigDecimal")) {
field.set(object, new BigDecimal(0));
} else if (type.equals("Double")) {
field.set(object, new Double(0));
} else if (type.equals("Byte")) {
field.set(object, new Byte("0"));
} else if (type.equals("Float")) {
field.set(object, new Float(0));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.hs.admin.util;
import com.hs.admin.base.RabbitMqConstant;
import com.hs.admin.dao.JcbDao;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.sun.org.apache.bcel.internal.generic.NEW;
import org.springframework.amqp.rabbit.connection.Connection;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeoutException;
/**
* @author xieheng
*/
@Component
public class RabbitmqUtil {
@Resource
RabbitTemplate rabbitTemplate;
@Resource
JcbDao jcbDao;
String[] queueNames;
public String[] getQueueNames() {
return queueNames;
}
public void setQueueNames(String[] queueNames) {
this.queueNames = queueNames;
}
/**
* @description:新增队列
* @author: XieHeng
* @param: queueName
* @return: void
* @date: 2021/5/25 1:49 下午
*/
public void newQueue(String queueName) {
ConnectionFactory connectionFactory = rabbitTemplate.getConnectionFactory();
Connection connection = connectionFactory.createConnection();
Channel channel = connection.createChannel(true);
try {
channel.queueDeclare(queueName, false, false, false, null);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
channel.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@PostConstruct
public void getJcbIdList() {
List<String> jcbIdList = jcbDao.getJcbIdList();
if (!CollectionUtils.isEmpty(jcbIdList)) {
List<String> list = new ArrayList<>();
for (String jcbId : jcbIdList) {
String queueName = RabbitMqConstant.JOB_QUEUE + jcbId;
newQueue(queueName);
list.add(queueName);
}
queueNames = list.toArray(new String[list.size()]);
} else {
queueNames = new String[]{RabbitMqConstant.JOB_QUEUE};
}
}
}
package com.hs.admin.vo;
import com.hs.admin.base.Result;
import com.hs.admin.bean.SysTask;
import lombok.Data;
import org.springframework.util.ObjectUtils;
/**
* @author xieheng
*/
@Data
public class ResponseVO {
private Object params;
private ResultVO resultVO;
}
package com.hs.admin.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @author xieheng
*/
@AllArgsConstructor
@Data
public class ResultVO {
private Object result;
private Boolean success;
private String message;
@Override
public String toString() {
return "ResultVO{" +
"result='" + result + '\'' +
", success='" + success + '\'' +
", message='" + message + '\'' +
'}';
}
}
\ No newline at end of file
spring.application.name=admin
server.port=8090
server.port=15596
#mybatis
mybatis.mapperLocations=classpath:mapper/*.xml
logging.level.com.hs.admin.dao=debug
#spring.web.resources.static-locations=classpath:/static/
#db
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.url=jdbc:sqlite::resource:static/sqlite/admin.db?date_string_format=yyyy-MM-dd HH:mm:ss
spring.datasource.username=
spring.datasource.password=
#spring.datasource.url=jdbc:mysql://localhost:3306/xh-test?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
#spring.datasource.username=root
#spring.datasource.password=123456
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.hikari.read-only=false
#spring.datasource.hikari.connection-timeout=60000
#spring.datasource.hikari.idle-timeout=60000
#spring.datasource.hikari.validation-timeout=3000
#spring.datasource.hikari.max-lifetime=60000
#spring.datasource.hikari.login-timeout=5
#spring.datasource.hikari.maximum-pool-size=300
#spring.datasource.hikari.minimum-idle=10
#sqlite3
#spring.datasource.driver-class-name=org.sqlite.JDBC
#spring.datasource.url=jdbc:sqlite::resource:static/sqlite/admin.db?date_string_format=yyyy-MM-dd HH:mm:ss
#spring.datasource.username=
#spring.datasource.password=
#spring.datasource.hikari.minimum-idle=3
#spring.datasource.hikari.maximum-pool-size=10
#spring.datasource.hikari.max-lifetime=30000
#spring.datasource.hikari.connection-test-query=SELECT 1
#rabbitmq
spring.rabbitmq.host=hangzhou-node1.huansi.net
spring.rabbitmq.port=30963
spring.rabbitmq.username=trade
spring.rabbitmq.password=trade
#spring.rabbitmq.host=127.0.0.1
#spring.rabbitmq.port=5672
#spring.rabbitmq.username=admin
#spring.rabbitmq.password=123456
#ocid
ocid_upload_url=http://esb-hangzhou.app.hscloud.top/api/edi/Upload
ocid_token_url=https://huansi.oauth.app.hscloud.top/connect/token
ocid_client_id=esb client
ocid_client_secret=6F8CDD46-E782-4AF4-8F32-4A2D0E8C625D
ocid_username={"TenantCode":"ZJYF", "UserNo":"admin","Lang":"cn"}
ocid_scope=ESB
ocid_password=123456
hs_cloud_last_time=2021-01-01 00:00:00
hs_cloud_last_time_name=HSCloudLastTime
#数据库自动生成地址
sqlite.url=sqlite/
#toen定时任务
token_scheduler_cron=0 0 3 1/2 * ?
spring.thymeleaf.prefix=classpath:/templates/
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<!--
总体说明:根节点下有2个属性,三个节点
属性: contextName 上下文名称; property 设置变量
节点: appender, root, logger
-->
<configuration scan="true" scanPeriod="10 seconds">
<!--
contextName说明:
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,
用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。
-->
<contextName>logback-spring</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
<property name="logging.path" value="myLogs"/>
<!--0. 日志格式和颜色渲染 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr"
converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--1. 输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<!--日志文档输出格式-->
<encoder>
<!--指定日志格式-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!--设置字符集-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到文档-->
<!-- 时间滚动输出 level为 DEBUG 日志 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名~~~~~file设置打印的文件的路径及文件名,建议绝对路径-->
<file>${logging.path}/web_debug.log</file>
<!--日志文档输出格式-->
<encoder>
<!--指定日志格式-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<!--
日志记录器的滚动策略
SizeAndTimeBasedRollingPolicy 按日期,大小记录日志
另外一种方式:
rollingPolicy的class设置为ch.qos.logback.core.rolling.TimeBasedRollingPolicy
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 -->
<!--
归档的日志文件的路径,例如今天是2018-08-23日志,当前写的日志文件路径为file节点指定,
可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
而2018-08-23的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
-->
<fileNamePattern>${logging.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--
配置日志文件不能超过100M,若超过100M,日志文件会以索引0开始,命名日志文件
例如error.20180823.0.txt
-->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录debug级别的 -->
<!-- 过滤策略:
LevelFilter : 只打印level标签设置的日志级别
ThresholdFilter:打印大于等于level标签设置的级别,小的舍弃
-->
<!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的日志级别 -->
<level>debug</level>
<!--匹配到就允许-->
<onMatch>ACCEPT</onMatch>
<!--没有匹配到就禁止-->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.2 level为 INFO 日志,时间滚动输出 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${logging.path}/web_info.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${logging.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.4 level为 ERROR 日志,时间滚动输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${logging.path}/web_error.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logging.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>7</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 4. 最终的策略 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>
/*
Navicat Premium Data Transfer
Source Server : admin
Source Server Type : SQLite
Source Server Version : 3030001
Source Schema : main
Target Server Type : SQLite
Target Server Version : 3030001
File Encoding : 65001
Date: 01/06/2021 09:20:10
*/
-- ----------------------------
-- Table structure for auth_token
-- ----------------------------
CREATE TABLE IF NOT EXISTS "auth_token" (
"token" TEXT NOT NULL ,
"jcb_id" TEXT NOT NULL PRIMARY KEY,
"lasttime" DATETIME NOT NULL
);
-- ----------------------------
-- Table structure for jcb
-- ----------------------------
CREATE TABLE IF NOT EXISTS "jcb" (
"jcb_id" TEXT(255) NOT NULL,
"db_name" TEXT(255) NOT NULL,
"db_pwd" TEXT(255) NOT NULL,
"db_username" TEXT(255) NOT NULL,
"host" TEXT(255) NOT NULL,
"name" TEXT(255) NOT NULL,
"port" TEXT(255) NOT NULL,
"remark" TEXT(255) NOT NULL,
"state" INTEGER(11) NOT NULL,
"gmt_create" DATETIME NOT NULL,
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"db_type" INTEGER(1) NOT NULL,
"gmt_modify" DATETIME NOT NULL,
CONSTRAINT "jcb_id" UNIQUE ("jcb_id" ASC)
);
-- ----------------------------
-- Table structure for sys_task
-- ----------------------------
CREATE TABLE IF NOT EXISTS "sys_task" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"jcb_id" TEXT(64) NOT NULL,
"job_name" TEXT(255) NOT NULL,
"job_status" INTEGER(1) NOT NULL,
"create_time" DATETIME NOT NULL,
"ctype" TEXT NOT NULL,
"cid" INTEGER NOT NULL,
"content" TEXT NOT NULL DEFAULT '',
"state" INTEGER NOT NULL
);
-- ----------------------------
-- Table structure for table_log
-- ----------------------------
CREATE TABLE IF NOT EXISTS "table_log" ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "table_name" TEXT NOT NULL, "hs_cloud_last_time" DATETIME NOT NULL, CONSTRAINT "table_name" UNIQUE ("table_name") );
-- ----------------------------
-- Table structure for user
-- ----------------------------
CREATE TABLE IF NOT EXISTS "user" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"user_name" TEXT(255) NOT NULL,
"password" TEXT(255) NOT NULL,
"gmt_create" DATETIME NOT NULL,
"gmt_modify" DATETIME NOT NULL
);
insert into user (user_name,password,gmt_create,gmt_modify)VALUES('admin','87DC6B04718D412DBBFB4620D1A2436B', datetime('now'), datetime('now'));
-- ----------------------------
-- Indexes structure for table jcb
-- ----------------------------
CREATE UNIQUE INDEX "main"."jcb_id"
ON "jcb" (
"jcb_id" ASC
);
-- ----------------------------
-- Indexes structure for table user
-- ----------------------------
CREATE UNIQUE INDEX "main"."user_name"
ON "user" (
"user_name" ASC
);
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hs.admin.dao.AuthTokenDao">
<resultMap id="BaseResultMap" type="com.hs.admin.bean.AuthToken">
<id column="jcb_id" jdbcType="VARCHAR" property="jcbId"/>
<result column="token" jdbcType="VARCHAR" property="token"/>
<result column="lasttime" jdbcType="TIMESTAMP" property="lasttime"/>
</resultMap>
<insert id="insert" parameterType="com.hs.admin.bean.AuthToken">
insert into auth_token (jcb_id,token,lasttime)
values (#{jcbId},#{token},#{lasttime})
</insert>
<update id="updateToken">
update auth_token set token=#{token},lasttime=#{date} where jcb_id=#{jcbId}
</update>
<select id="getCount" resultType="java.lang.Integer">
select count(1)
from auth_token where jcb_id=#{jcbId}
</select>
<select id="findToken" resultMap="BaseResultMap">
select jcb_id,token, lasttime from auth_token where jcb_id=#{jcbId} limit 1
</select>
</mapper>
\ No newline at end of file
......@@ -2,8 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hs.admin.dao.JcbDao">
<resultMap id="BaseResultMap" type="com.hs.admin.bean.Jcb">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="jcb_id" jdbcType="INTEGER" property="jcbId"/>
<id column="jcb_id" jdbcType="INTEGER" property="jcbId"/>
<result column="db_name" jdbcType="VARCHAR" property="dbName"/>
<result column="db_pwd" jdbcType="VARCHAR" property="dbPwd"/>
<result column="db_username" jdbcType="VARCHAR" property="dbUsername"/>
......@@ -13,12 +12,13 @@
<result column="remark" jdbcType="VARCHAR" property="remark"/>
<result column="state" jdbcType="INTEGER" property="state"/>
<result column="gmt_create" jdbcType="TIMESTAMP" property="gmtCreate"/>
<result column="type" jdbcType="INTEGER" property="type"/>
<result column="db_type" jdbcType="INTEGER" property="dbType"/>
<result column="gmt_modify" jdbcType="TIMESTAMP" property="gmtModify"/>
</resultMap>
<sql id="Base_Column_List">
id,jcb_id, db_name, db_pwd, db_username, `host`, `name`, port, remark, `state`, gmt_create,type
jcb_id, db_name, db_pwd, db_username, `host`, `name`, port, remark, `state`, gmt_create,db_type,gmt_modify
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from jcb
......@@ -27,8 +27,7 @@
<select id="findAllByState" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from jcb where state=1 order by gmt_create desc
limit #{pageSize} offset #{index}
from jcb where state=1 and gmt_modify &gt; #{date} order by gmt_create desc
</select>
<select id="checkTask" resultType="java.lang.Integer">
......@@ -37,19 +36,43 @@
left join sys_task st on j.jcb_id = st.jcb_id
where j.state = 1
and st.job_status = 1
and j.id = #{id}
and j.jcb_id = #{id}
</select>
<select id="getCount" resultType="java.lang.Integer">
select count(1)
<select id="getCount" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from jcb
where jcb_id = #{jcbId}
and state = 1
limit 1
</select>
<select id="getTotalCount" resultType="java.lang.Long">
select count(1)
from jcb
where state = 1
</select>
<select id="getDbInfo" resultType="com.hs.admin.bean.DataBase">
select db_name name,
db_pwd password,
db_username username,
host,
port,
db_type dbType
from jcb
where jcb_id = #{jcbId}
and state = 1
limit 1
</select>
<select id="findPage" resultMap="BaseResultMap">
select id,
<include refid="Base_Column_List"/>
from jcb where state=1 order by gmt_create desc
limit #{pageSize} offset #{index}
</select>
<select id="getJcbIdList" resultType="java.lang.String">
select jcb_id
from jcb
where state = 1
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete
from jcb
......@@ -59,17 +82,17 @@
update jcb
set state=3
where state = 1
and id = #{id}
and jcb_id = #{id}
</update>
<insert id="insert" keyColumn="jcb_id" keyProperty="jcbId" parameterType="com.hs.admin.bean.Jcb"
useGeneratedKeys="true">
insert into jcb (jcb_id, db_name, db_pwd, db_username,
`host`, `name`, port, remark,
`state`, gmt_create, type)
host, name, port, remark,
state, gmt_create, db_type, gmt_modify)
values (#{jcbId}, #{dbName,jdbcType=VARCHAR}, #{dbPwd,jdbcType=VARCHAR}, #{dbUsername,jdbcType=VARCHAR},
#{host,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{port,jdbcType=VARCHAR},
#{host,jdbcType=VARCHAR}, #{name}, #{port,jdbcType=VARCHAR},
#{remark,jdbcType=VARCHAR},
#{state,jdbcType=INTEGER}, #{gmtCreate,jdbcType=TIMESTAMP}, #{type})
#{state,jdbcType=INTEGER}, #{gmtCreate,jdbcType=TIMESTAMP}, #{dbType}, #{gmtModify})
</insert>
<update id="updateById" parameterType="com.hs.admin.bean.Jcb">
update jcb
......@@ -101,24 +124,18 @@
<if test="gmtCreate != null">
gmt_create = #{gmtCreate,jdbcType=TIMESTAMP},
</if>
<if test="type != null">
type= #{type}
<if test="gmtModify != null">
gmt_modify = #{gmtModify},
</if>
<if test="dbType != null">
db_type= #{dbType}
</if>
</set>
where id = #{id}
where jcb_id = #{jcbId}
</update>
<update id="updateByPrimaryKey" parameterType="com.hs.admin.bean.Jcb">
<update id="updateModifyTime">
update jcb
set db_name = #{dbName,jdbcType=VARCHAR},
db_pwd = #{dbPwd,jdbcType=VARCHAR},
db_username = #{dbUsername,jdbcType=VARCHAR},
`host` = #{host,jdbcType=VARCHAR},
`name` = #{name,jdbcType=VARCHAR},
port = #{port,jdbcType=VARCHAR},
remark = #{remark,jdbcType=VARCHAR},
`state` = #{state,jdbcType=INTEGER},
gmt_create = #{gmtCreate,jdbcType=TIMESTAMP},
type = #{type}
where id = #{id}
set gmt_modify=#{dateTime}
where jcb_id = #{jcbId}
</update>
</mapper>
\ No newline at end of file
......@@ -5,115 +5,124 @@
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="jcb_id" jdbcType="INTEGER" property="jcbId"/>
<result column="job_name" jdbcType="VARCHAR" property="jobName"/>
<result column="content" jdbcType="VARCHAR" property="content"/>
<result column="cron_expression" jdbcType="VARCHAR" property="cronExpression"/>
<result column="bean_class" jdbcType="VARCHAR" property="beanClass"/>
<result column="job_status" jdbcType="INTEGER" property="jobStatus"/>
<result column="job_group" jdbcType="VARCHAR" property="jobGroup"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="type" jdbcType="INTEGER" property="type"/>
<result column="create_time" jdbcType="VARCHAR" property="createTime"/>
<result column="ctype" jdbcType="VARCHAR" property="ctype"/>
<result column="content" jdbcType="VARCHAR" property="content"/>
<result column="state" jdbcType="INTEGER" property="state"/>
<result column="cid" jdbcType="INTEGER" property="cid"/>
</resultMap>
<sql id="Base_Column_List">
id, jcb_id, job_name, content, cron_expression, bean_class, job_status, job_group,
create_time, update_time, `type`
id, jcb_id, job_name, job_status, create_time, ctype, content, state, cid
</sql>
<select id="findAllByCondition" resultType="java.util.Map">
select st.jcb_id jcbId,
st.job_name jobName,
st.content,
st.cron_expression cronExpression,
st.bean_class beanClass,
st.job_status jobStatus,
st.job_group jobGroup,
st.create_time createTime,
st.type,
j.name
from jcb j
left join sys_task st on j.jcb_id = st.jcb_id
where st.jcb_id = #{jcbId}
and st.job_status != 3
order by st.create_time desc
limit #{pageSize} offset #{index}
</select>
<select id="getTotalCount" resultType="java.lang.Long">
select count(1)
from jcb j
left join sys_task st on j.jcb_id = st.jcb_id
where st.jcb_id = #{jcbId}
and st.job_status != 3
</select>
<update id="delTaskById">
<insert id="insert" parameterType="com.hs.admin.bean.SysTask">
insert into sys_task (jcb_id, job_name, job_status,
create_time, ctype, cid, content, state)
values (#{jcbId,jdbcType=INTEGER}, #{jobName,jdbcType=VARCHAR}, #{jobStatus,jdbcType=INTEGER},
#{createTime,jdbcType=VARCHAR}, #{ctype,jdbcType=INTEGER}, #{cid}, #{content}, #{state})
</insert>
<update id="updateByPrimaryKey" parameterType="com.hs.admin.bean.SysTask">
update sys_task
set job_status=3
where job_status!=3 and jcb_id = (select jcb_id from jcb where id = #{id} limit 1)
set jcb_id = #{jcbId,jdbcType=INTEGER},
job_name = #{jobName,jdbcType=VARCHAR},
job_status = #{jobStatus,jdbcType=INTEGER},
create_time = #{createTime,jdbcType=VARCHAR},
ctype = #{ctype,jdbcType=INTEGER},
content =#{content},
state =#{state}
where id = #{id,jdbcType=INTEGER}
</update>
<update id="delTask">
<update id="updateJobStatus">
update sys_task
set job_status=3
where id = #{taskId}
set job_status=#{jobStatus}
where id = (select id from sys_task where cid = #{cid} and jcb_id = #{jcbId} order by create_time desc limit 1)
</update>
<select id="getTaskList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from sys_task where job_status !=3
</select>
<select id="findTaskByJobName" resultMap="BaseResultMap">
select<include refid="Base_Column_List"/>from sys_task where job_name=#{jobName} limit 1
</select>
<select id="getDbInfo" resultType="com.hs.admin.bean.DataBase">
select db_name name,
db_pwd password,
db_username username,
host,
port,
type dbType
from jcb
<delete id="deleteByJcbIdAndCid">
delete
from sys_task
where jcb_id = #{jcbId}
and cid = #{cid}
</delete>
<delete id="deleteByJcbId">
delete
from sys_task
where jcb_id = #{jcbId}
and state = 1
limit 1
</delete>
<select id="getTotalCountById" resultType="java.lang.Long">
select count(1)
from (
select jcb_id, cid
from sys_task
where jcb_id = #{jcbId}
group by jcb_id, cid
) t
</select>
<select id="getTotalCount" resultType="java.lang.Long">
select count(1)
from sys_task
where jcb_id = #{jcbId}
</select>
<select id="getRecordTotalCount" resultType="java.lang.Long">
select count(1)
from sys_task
where cid = #{cid}
and jcb_id = #{jcbId}
</select>
<select id="findPage" resultType="map">
select j.name jcbName,
j.jcb_id jcbId,
j.db_name dbName,
j.db_pwd dbPwd,
j.db_username dbUsername,
j.host,
j.port,
j.db_type dbType,
st.job_name jobName,
st.ctype,
st.cid,
st.content,
max(st.create_time) createTime,
'' nextTime
from sys_task st
left join jcb j on j.jcb_id = st.jcb_id
where st.jcb_id = #{jcbId}
group by st.cid
order by st.create_time desc
limit #{pageSize}
offset #{index}
</select>
<update id="updateMqContent">
update sys_task
set content=#{content}
where id = #{id}
</update>
<update id="delete">
update sys_task
set job_status=3
where id = #{id}
</update>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.hs.admin.bean.SysTask"
useGeneratedKeys="true">
insert into sys_task (job_name, content, cron_expression,
bean_class, job_status, job_group,
create_time,
update_time)
values (#{jobName,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{cronExpression,jdbcType=VARCHAR},
#{beanClass,jdbcType=VARCHAR}, #{jobStatus,jdbcType=VARCHAR}, #{jobGroup,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
</insert>
<update id="updateByPrimaryKey" >
update sys_task
set job_name = #{jobName,jdbcType=VARCHAR},
content = #{description,jdbcType=VARCHAR},
cron_expression = #{cronExpression,jdbcType=VARCHAR},
bean_class = #{beanClass,jdbcType=VARCHAR},
job_status = #{jobStatus,jdbcType=INTEGER},
job_group = #{jobGroup,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=BIGINT}
</update>
<update id="update">
UPDATE sys_task
SET job_status=#{jobStatus}
where id = #{id}
</update>
<select id="findPageByCid" resultType="map">
select st.id,
j.name jcbName,
st.job_name jobName,
st.job_status jobStatus,
st.ctype,
st.create_time createTime,
st.content,
st.state
from sys_task st
left join jcb j on j.jcb_id = st.jcb_id
where st.cid = #{cid}
and j.jcb_id = #{jcbId}
order by st.create_time desc
limit #{pageSize}
offset #{index}
</select>
<select id="findTaskByJcbIdAndCid" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from sys_task where jcb_id=#{jcbId} and cid=#{cid} limit 1
</select>
<select id="getAllTaskList" resultType="com.hs.admin.bean.SysTask">
select cid, jcb_id jcbId, ctype, content, max(create_time) createTime
from sys_task
where job_status = 1
group by cid, jcb_id
</select>
<select id="getContentById" resultType="java.lang.String">
select content
from sys_task
where id = #{id}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hs.admin.dao.TableLogDao">
<resultMap id="BaseResultMap" type="com.hs.admin.bean.TableLog">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="table_name" jdbcType="VARCHAR" property="tableName"/>
<result column="hs_cloud_last_time" jdbcType="VARCHAR" property="hsCloudLastTime"/>
</resultMap>
<sql id="Base_Column_List">
id, `table_name`, hs_cloud_last_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from table_log
where id = #{id,jdbcType=INTEGER}
</select>
<select id="findByTableName" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from table_log where table_name=#{tableName}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete
from table_log
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.hs.admin.bean.TableLog">
insert into table_log (`table_name`, hs_cloud_last_time)
values (#{tableName,jdbcType=VARCHAR}, #{hsCloudLastTime,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.hs.admin.bean.TableLog">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
Sqlite
</selectKey>
insert into table_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="tableName != null">
`table_name`,
</if>
<if test="hsCloudLastTime != null">
hs_cloud_last_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="tableName != null">
#{tableName,jdbcType=VARCHAR},
</if>
<if test="hsCloudLastTime != null">
#{hsCloudLastTime,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.hs.admin.bean.TableLog">
update table_log
<set>
<if test="tableName != null">
`table_name` = #{tableName,jdbcType=VARCHAR},
</if>
<if test="hsCloudLastTime != null">
hs_cloud_last_time = #{hsCloudLastTime,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.hs.admin.bean.TableLog">
update table_log
set `table_name` = #{tableName,jdbcType=VARCHAR},
hs_cloud_last_time = #{hsCloudLastTime,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
\ No newline at end of file
......@@ -19,7 +19,7 @@
</select>
<select id="findByUserNameAndPassword" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
user_name,password
from user where user_name=#{username} and password=#{password}
</select>
<select id="findUserList" resultType="java.util.Map">
......
This diff is collapsed.
This diff is collapsed.
.handle-box[data-v-1a394c03]{margin-bottom:20px}.handle-input[data-v-1a394c03]{width:300px;display:inline-block}.table[data-v-1a394c03]{width:100%;font-size:14px}.mr10[data-v-1a394c03]{margin-right:10px}[data-v-1a394c03] .formcol{display:flex}[data-v-1a394c03] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-1a394c03]:before{content:"*";color:red}.inputcol[data-v-1a394c03]{margin:12px 0}.el-dialog__wrapper[data-v-1a394c03]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-1a394c03] .el-dialog{margin:0!important}.formcancel[data-v-1a394c03],.submit[data-v-1a394c03]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-1a394c03] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-1a394c03] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-1a394c03] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-1a394c03] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-1a394c03],.el-dialog__wrapper[data-v-1a394c03] .el-dialog__body,.pagination[data-v-1a394c03] li,.pagination[data-v-1a394c03] span,.table[data-v-1a394c03],[data-v-1a394c03] .el-button,[data-v-1a394c03] input.el-input__inner{font-size:12px!important}.handle-input[data-v-1a394c03]{margin-top:4px;margin-bottom:4px}.el-table--fit[data-v-1a394c03],.el-table[data-v-1a394c03]{height:0;overflow-y:scroll}.el-table--fit[data-v-1a394c03]::-webkit-scrollbar,.el-table[data-v-1a394c03]::-webkit-scrollbar{width:6px}.el-table--fit[data-v-1a394c03]::-webkit-scrollbar-thumb,.el-table[data-v-1a394c03]::-webkit-scrollbar-thumb{background-color:silver;border-radius:6px}.card_item[data-v-1a394c03]{width:22%;display:inline-block;margin:12px 1%;text-overflow:ellipsis}.card_row[data-v-1a394c03]{margin:12px auto}.card_row[data-v-1a394c03]:last-child{text-align:right}.el-table[data-v-1a394c03]:before{display:none}
\ No newline at end of file
.handle-box[data-v-4091bd11]{margin-bottom:20px}.handle-input[data-v-4091bd11]{width:300px;display:inline-block}.table[data-v-4091bd11]{width:100%;font-size:14px}.mr10[data-v-4091bd11]{margin-right:10px}[data-v-4091bd11] .formcol{display:flex}[data-v-4091bd11] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-4091bd11]:before{content:"*";color:red}.inputcol[data-v-4091bd11]{margin:12px 0}.el-dialog__wrapper[data-v-4091bd11]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-4091bd11] .el-dialog{margin:0!important}.formcancel[data-v-4091bd11],.submit[data-v-4091bd11]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-4091bd11] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-4091bd11] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-4091bd11] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-4091bd11] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-4091bd11],.el-dialog__wrapper[data-v-4091bd11] .el-dialog__body,.pagination[data-v-4091bd11] li,.pagination[data-v-4091bd11] span,.table[data-v-4091bd11],[data-v-4091bd11] .el-button,[data-v-4091bd11] input.el-input__inner{font-size:12px!important}.handle-input[data-v-4091bd11]{margin-top:4px;margin-bottom:4px}.inputcol[data-v-4091bd11]{width:200px}.handle-box[data-v-452ec523]{margin-bottom:20px}.handle-input[data-v-452ec523]{width:300px;display:inline-block}.table[data-v-452ec523]{width:100%;font-size:14px}.mr10[data-v-452ec523]{margin-right:10px}[data-v-452ec523] .formcol{display:flex}[data-v-452ec523] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-452ec523]:before{content:"*";color:red}.inputcol[data-v-452ec523]{margin:12px 0}.el-dialog__wrapper[data-v-452ec523]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-452ec523] .el-dialog{margin:0!important}.formcancel[data-v-452ec523],.submit[data-v-452ec523]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-452ec523] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-452ec523] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-452ec523] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-452ec523] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-452ec523],.el-dialog__wrapper[data-v-452ec523] .el-dialog__body,.pagination[data-v-452ec523] li,.pagination[data-v-452ec523] span,.table[data-v-452ec523],[data-v-452ec523] .el-button,[data-v-452ec523] input.el-input__inner{font-size:12px!important}.handle-input[data-v-452ec523]{margin-top:4px;margin-bottom:4px}.el-table--fit[data-v-452ec523],.el-table[data-v-452ec523]{height:0;overflow-y:scroll}.el-table--fit[data-v-452ec523]::-webkit-scrollbar,.el-table[data-v-452ec523]::-webkit-scrollbar{width:6px}.el-table--fit[data-v-452ec523]::-webkit-scrollbar-thumb,.el-table[data-v-452ec523]::-webkit-scrollbar-thumb{background-color:silver;border-radius:6px}.card_item[data-v-452ec523]{width:22%;display:inline-block;margin:12px 1.4%;text-overflow:ellipsis}.card_row[data-v-452ec523]{margin:12px auto}.card_row[data-v-452ec523]:last-child{text-align:right}.el-table[data-v-452ec523]:before{display:none}
\ No newline at end of file
.handle-box[data-v-0de9a432]{margin-bottom:20px}.handle-input[data-v-0de9a432]{width:300px;display:inline-block}.table[data-v-0de9a432]{width:100%;font-size:14px}.mr10[data-v-0de9a432]{margin-right:10px}[data-v-0de9a432] .formcol{display:flex}[data-v-0de9a432] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-0de9a432]:before{content:"*";color:red}.inputcol[data-v-0de9a432]{margin:12px 0}.el-dialog__wrapper[data-v-0de9a432]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-0de9a432] .el-dialog{margin:0!important}.formcancel[data-v-0de9a432],.submit[data-v-0de9a432]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-0de9a432] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-0de9a432] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-0de9a432] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-0de9a432] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-0de9a432],.el-dialog__wrapper[data-v-0de9a432] .el-dialog__body,.pagination[data-v-0de9a432] li,.pagination[data-v-0de9a432] span,.table[data-v-0de9a432],[data-v-0de9a432] .el-button,[data-v-0de9a432] input.el-input__inner{font-size:12px!important}.handle-input[data-v-0de9a432]{margin-top:4px;margin-bottom:4px}.handle-box[data-v-3f1b9bf2]{margin-bottom:20px}.handle-input[data-v-3f1b9bf2]{width:300px;display:inline-block}.table[data-v-3f1b9bf2]{width:100%;font-size:14px}.mr10[data-v-3f1b9bf2]{margin-right:10px}[data-v-3f1b9bf2] .formcol{display:flex}[data-v-3f1b9bf2] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-3f1b9bf2]:before{content:"*";color:red}.inputcol[data-v-3f1b9bf2]{margin:12px 0}.el-dialog__wrapper[data-v-3f1b9bf2]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-3f1b9bf2] .el-dialog{margin:0!important}.formcancel[data-v-3f1b9bf2],.submit[data-v-3f1b9bf2]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-3f1b9bf2] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-3f1b9bf2] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-3f1b9bf2] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-3f1b9bf2] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-3f1b9bf2],.el-dialog__wrapper[data-v-3f1b9bf2] .el-dialog__body,.pagination[data-v-3f1b9bf2] li,.pagination[data-v-3f1b9bf2] span,.table[data-v-3f1b9bf2],[data-v-3f1b9bf2] .el-button,[data-v-3f1b9bf2] input.el-input__inner{font-size:12px!important}.handle-input[data-v-3f1b9bf2]{margin-top:4px;margin-bottom:4px}.el-table--fit[data-v-3f1b9bf2],.el-table[data-v-3f1b9bf2]{height:0;overflow-y:scroll}.el-table--fit[data-v-3f1b9bf2]::-webkit-scrollbar,.el-table[data-v-3f1b9bf2]::-webkit-scrollbar{width:6px}.el-table--fit[data-v-3f1b9bf2]::-webkit-scrollbar-thumb,.el-table[data-v-3f1b9bf2]::-webkit-scrollbar-thumb{background-color:silver;border-radius:6px}.card_item[data-v-3f1b9bf2]{width:22%;display:inline-block;margin:12px 1%;text-overflow:ellipsis}.card_row[data-v-3f1b9bf2]{margin:12px auto}.card_row[data-v-3f1b9bf2]:last-child{text-align:right}.el-table[data-v-3f1b9bf2]:before{display:none}
\ No newline at end of file
.handle-box[data-v-0de9a432]{margin-bottom:20px}.handle-input[data-v-0de9a432]{width:300px;display:inline-block}.table[data-v-0de9a432]{width:100%;font-size:14px}.mr10[data-v-0de9a432]{margin-right:10px}[data-v-0de9a432] .formcol{display:flex}[data-v-0de9a432] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-0de9a432]:before{content:"*";color:red}.inputcol[data-v-0de9a432]{margin:12px 0}.el-dialog__wrapper[data-v-0de9a432]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-0de9a432] .el-dialog{margin:0!important}.formcancel[data-v-0de9a432],.submit[data-v-0de9a432]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-0de9a432] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-0de9a432] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-0de9a432] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-0de9a432] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-0de9a432],.el-dialog__wrapper[data-v-0de9a432] .el-dialog__body,.pagination[data-v-0de9a432] li,.pagination[data-v-0de9a432] span,.table[data-v-0de9a432],[data-v-0de9a432] .el-button,[data-v-0de9a432] input.el-input__inner{font-size:12px!important}.handle-input[data-v-0de9a432]{margin-top:4px;margin-bottom:4px}
\ No newline at end of file
.handle-box[data-v-71ff541a]{margin-bottom:20px}.handle-input[data-v-71ff541a]{width:300px;display:inline-block}.table[data-v-71ff541a]{width:100%;font-size:14px}.mr10[data-v-71ff541a]{margin-right:10px}[data-v-71ff541a] .formcol{display:flex}[data-v-71ff541a] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-71ff541a]:before{content:"*";color:red}.inputcol[data-v-71ff541a]{margin:12px 0}.el-dialog__wrapper[data-v-71ff541a]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-71ff541a] .el-dialog{margin:0!important}.formcancel[data-v-71ff541a],.submit[data-v-71ff541a]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-71ff541a] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-71ff541a] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-71ff541a] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-71ff541a] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-71ff541a],.el-dialog__wrapper[data-v-71ff541a] .el-dialog__body,.pagination[data-v-71ff541a] li,.pagination[data-v-71ff541a] span,.table[data-v-71ff541a],[data-v-71ff541a] .el-button,[data-v-71ff541a] input.el-input__inner{font-size:12px!important}.handle-input[data-v-71ff541a]{margin-top:4px;margin-bottom:4px}.el-table--fit[data-v-71ff541a],.el-table[data-v-71ff541a]{height:0;overflow-y:scroll}.el-table--fit[data-v-71ff541a]::-webkit-scrollbar,.el-table[data-v-71ff541a]::-webkit-scrollbar{width:6px}.el-table--fit[data-v-71ff541a]::-webkit-scrollbar-thumb,.el-table[data-v-71ff541a]::-webkit-scrollbar-thumb{background-color:silver;border-radius:6px}.card_item[data-v-71ff541a]{width:22%;display:inline-block;margin:12px 1%;text-overflow:ellipsis}.card_row[data-v-71ff541a]{margin:12px auto}.card_row[data-v-71ff541a]:last-child{text-align:right}.el-table[data-v-71ff541a]:before{display:none}
\ No newline at end of file
.handle-box[data-v-d60aef22]{margin-bottom:20px}.handle-input[data-v-d60aef22]{width:300px;display:inline-block}.table[data-v-d60aef22]{width:100%;font-size:14px}.mr10[data-v-d60aef22]{margin-right:10px}[data-v-d60aef22] .formcol{display:flex}[data-v-d60aef22] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-d60aef22]:before{content:"*";color:red}.inputcol[data-v-d60aef22]{margin:12px 0}.el-dialog__wrapper[data-v-d60aef22]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-d60aef22] .el-dialog{margin:0!important}.formcancel[data-v-d60aef22],.submit[data-v-d60aef22]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-d60aef22] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-d60aef22] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-d60aef22] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-d60aef22] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-d60aef22],.el-dialog__wrapper[data-v-d60aef22] .el-dialog__body,.pagination[data-v-d60aef22] li,.pagination[data-v-d60aef22] span,.table[data-v-d60aef22],[data-v-d60aef22] .el-button,[data-v-d60aef22] input.el-input__inner{font-size:12px!important}.handle-input[data-v-d60aef22]{margin-top:4px;margin-bottom:4px}.inputcol[data-v-d60aef22]{width:200px}.connection[data-v-d60aef22]:active,.connection[data-v-d60aef22]:hover{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.handle-box[data-v-c6e1ee7e]{margin-bottom:20px}.handle-input[data-v-c6e1ee7e]{width:300px;display:inline-block}.table[data-v-c6e1ee7e]{width:100%;font-size:14px}.mr10[data-v-c6e1ee7e]{margin-right:10px}[data-v-c6e1ee7e] .formcol{display:flex}[data-v-c6e1ee7e] .formlable{min-width:140px;display:flex;justify-content:flex-end;align-items:center}.formlable.required[data-v-c6e1ee7e]:before{content:"*";color:red}.inputcol[data-v-c6e1ee7e]{margin:12px 0}.el-dialog__wrapper[data-v-c6e1ee7e]{overflow:hidden;display:flex;align-items:center;justify-content:center}.el-dialog__wrapper[data-v-c6e1ee7e] .el-dialog{margin:0!important}.formcancel[data-v-c6e1ee7e],.submit[data-v-c6e1ee7e]{width:70px;display:block;margin-top:22px;margin-bottom:22px}[data-v-c6e1ee7e] .el-dialog__wrapper .el-dialog{max-height:80%;overflow:scroll}[data-v-c6e1ee7e] .el-dialog__wrapper .el-dialog::-webkit-scrollbar{width:6px}[data-v-c6e1ee7e] .el-dialog__wrapper .el-dialog::-webkit-scrollbar-thumb{background-color:#fff}[data-v-c6e1ee7e] .el-dialog__wrapper .el-dialog .el-dialog__header{position:sticky;top:0;left:0;background-color:#fff;z-index:1002}.container[data-v-c6e1ee7e],.el-dialog__wrapper[data-v-c6e1ee7e] .el-dialog__body,.pagination[data-v-c6e1ee7e] li,.pagination[data-v-c6e1ee7e] span,.table[data-v-c6e1ee7e],[data-v-c6e1ee7e] .el-button,[data-v-c6e1ee7e] input.el-input__inner{font-size:12px!important}.handle-input[data-v-c6e1ee7e]{margin-top:4px;margin-bottom:4px}.el-table--fit[data-v-c6e1ee7e],.el-table[data-v-c6e1ee7e]{height:0;overflow-y:scroll}.el-table--fit[data-v-c6e1ee7e]::-webkit-scrollbar,.el-table[data-v-c6e1ee7e]::-webkit-scrollbar{width:6px}.el-table--fit[data-v-c6e1ee7e]::-webkit-scrollbar-thumb,.el-table[data-v-c6e1ee7e]::-webkit-scrollbar-thumb{background-color:silver;border-radius:6px}.card_item[data-v-c6e1ee7e]{width:22%;display:inline-block;margin:12px 1.4%;text-overflow:ellipsis}.card_row[data-v-c6e1ee7e]{margin:12px auto}.card_row[data-v-c6e1ee7e]:last-child{text-align:right}.el-table[data-v-c6e1ee7e]:before{display:none}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-1e6c22d6"],{"33b7":function(e,t,n){"use strict";n("be24")},"4a5b":function(e,t,n){"use strict";n.r(t);var a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"container"},[n("div",{staticClass:"tables"},[n("div",{staticClass:"handle-box"}),n("el-table",{ref:"table",staticClass:"table",attrs:{border:"","header-cell-class-name":"table-header",data:e.table.tableData,height:e.table.height},on:{"selection-change":e.handleSelectionChange}},[n("el-table-column",{attrs:{prop:"jobName",label:"任务名称","min-width":"100",align:"center"}}),n("el-table-column",{attrs:{prop:"jcbName",label:"租户名称","min-width":"100",align:"center"}}),n("el-table-column",{attrs:{prop:"ctype",label:"类型","min-width":"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(e.extend.type[t.row.ctype].name)+"\n ")]}}])}),n("el-table-column",{attrs:{prop:"lastExecuteTime",label:"上次执行时间","min-width":"100",align:"center"}}),n("el-table-column",{attrs:{prop:"nextTime",label:"下次执行时间","min-width":"100",align:"center"}}),n("el-table-column",{attrs:{label:"操作",width:"300",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("el-button",{attrs:{size:"mini",type:"primary",plain:""},on:{click:function(n){return e.detailController(t.$index,t.row)}}},[e._v("\n 详情 \n ")])]}}])})],1),n("div",{staticClass:"pagination"},[n("el-pagination",{attrs:{background:"",layout:e.page.layout,"current-page":e.page.currentpage,"page-size":e.page.pagesize,total:e.page.pagetotal,"page-sizes":e.page.pagesizes},on:{"current-change":e.pageChange,"size-change":e.pagesizechange}})],1)],1),n("el-dialog",{attrs:{width:"60%",title:e.dialog.title,visible:e.dialog.show,"before-close":e.dialogClose},on:{"update:visible":function(t){return e.$set(e.dialog,"show",t)}}},[n("addup",{attrs:{formData:e.dialog.form,dialog:e.dialog},on:{formSuccess:e.formSuccess}})],1)],1)},r=[],i=(n("ac67"),n("1bc78"),n("32ea"),n("a450"),n("55ae")),s=(n("6a61"),n("4833")),c=n("32f0"),o=n("c968"),l=(n("2763"),n("a355")),u=n("caaf"),p=n.n(u);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function g(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){Object(i["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var h=c["d"],f=c["b"],b={data:function(){return{table:{tableData:[],height:0},page:{currentpage:1,pagesize:10,pagetotal:0,layout:"total, prev, pager, next",pagesizes:[10,20,30,40,50,100]},query:{},dialog:{title:"",show:!1,form:{}},extend:{moment:p.a,type:{1:{name:"查询"},2:{name:"上传"},3:{name:"暂停"},4:{name:"执行"}}},setTableHeight:!0}},mounted:function(){this.init()},components:{addup:l["a"]},methods:{init:function(){var e=Object(s["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.extend.jcbId=this.$router.currentRoute.query.jcbId,e.next=3,this.getlist(g({},this.pagequery()));case 3:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),getlist:function(){var e=Object(s["a"])(regeneratorRuntime.mark((function e(){var t,n,a,r=this,i=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t=i.length>0&&void 0!==i[0]?i[0]:{},e.next=3,h(g(g({},t),this.formquery()));case 3:n=e.sent,200==n.code&&(this.table.tableData=n.data.list||[],a=n.data.length,this.page.currentpage>1&&0==a&&(this.page.currentpage=this.page.currentpage-1,this.$nextTick((function(){r.getlist(t)}))),this.page.pagetotal=n.data.total||0);case 5:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),formquery:function(){var e=this,t={};for(var n in e.query)Object(o["c"])(e.query[n]).success&&(t[n]=e.query[n]);return t.jcbId=this.extend.jcbId,t},pagequery:function(){return{pageNum:this.page.currentpage,pageSize:this.page.pagesize}},querysearch:function(){this.getlist(g({},this.pagequery()))},pageChange:function(e){var t=this;this.page.currentpage=e,this.$nextTick((function(){t.getlist(t.pagequery())}))},pagesizechange:function(e){var t=this;this.page.pagesize=e,this.$nextTick((function(){t.getlist(t.pagequery())}))},dialogClose:function(e){this.getlist(this.pagequery()),e()},handleSelectionChange:function(e){console.log(e)},delAllSelection:function(){},formSuccess:function(e){this.getlist(this.pagequery())},addController:function(){var e=this.addModel();e.success&&(this.dialog.form={idtype:e.idtype,data:e.data},this.dialog.show=!0)},delController:function(){var e=Object(s["a"])(regeneratorRuntime.mark((function e(t,n){var a=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:this.$confirm("此操作将删除该数据, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(Object(s["a"])(regeneratorRuntime.mark((function e(){var t,r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t=a.delOneModel(n),!t.success){e.next=6;break}return e.next=4,f(t.data);case 4:r=e.sent,200==r.code?(a.$message({message:"删除成功",type:"success"}),a.getlist(a.pagequery())):a.$message({message:r.msg||"删除失败,请从新尝试",type:"error"});case 6:case"end":return e.stop()}}),e)})))).catch((function(){}));case 1:case"end":return e.stop()}}),e,this)})));function t(t,n){return e.apply(this,arguments)}return t}(),editController:function(e,t){var n=this.updateModel(t);n.success&&(this.dialog.form={idtype:n.idtype,data:n.data},this.dialog.show=!0)},detailController:function(e,t){this.$router.push({path:"/scheduleLog",query:{id:t.cid,jcbId:t.jcbId}})},editPwdController:function(e,t){},content:function(e,t){this.$alert(t.content,{confirmButtonText:"确定",customClass:"cnt",callback:function(e){}})},updateModel:function(e){for(var t in e.jcbName=e.name,e)e[t]||0==e[t]||(e[t]="");return{idtype:1,success:!0,data:g({},e)}},delOneModel:function(e){return{success:!0,data:{taskId:e.id}}},addModel:function(){var e=this.extend.jcbId;return{idtype:0,success:!0,data:{jcbId:e,name:"",type:"",cronExpression:"",beanClass:"",jobGroup:""}}}}},m=b,y=(n("33b7"),n("d7fe"),n("5d22")),w=Object(y["a"])(m,a,r,!1,null,"1a394c03",null);t["default"]=w.exports},b2e8:function(e,t,n){},be24:function(e,t,n){},d7fe:function(e,t,n){"use strict";n("b2e8")}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-5d54dd36"],{"09bc":function(e,t,n){"use strict";n("501b")},"501b":function(e,t,n){},"7db1":function(e,t,n){"use strict";n("c056")},c056:function(e,t,n){},c51b:function(e,t,n){"use strict";n.r(t);var a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"container"},[n("div",{staticClass:"tables"},[n("div",{staticClass:"handle-box"}),n("el-table",{ref:"table",staticClass:"table",attrs:{border:"","header-cell-class-name":"table-header",data:e.table.tableData,height:e.table.height},on:{"selection-change":e.handleSelectionChange}},[n("el-table-column",{attrs:{prop:"jobName",label:"租户名称","min-width":"100",align:"center"}}),n("el-table-column",{attrs:{prop:"ctype",label:"类型","min-width":"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(e.extend.type[t.row.ctype].name)+"\n ")]}}])}),n("el-table-column",{attrs:{prop:"content",label:"内容","min-width":"200",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("span",{staticStyle:{"white-space":"nowrap","text-overflow":"ellipsis",cursor:"pointer"}},[e._v("\n "+e._s(t.row.content)+"\n ")])]}}])}),n("el-table-column",{attrs:{prop:"state",label:"状态","min-width":"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s("0"==t.row.state?"成功":"失败")+"\n ")]}}])}),n("el-table-column",{attrs:{prop:"createTime",label:"创建时间","min-width":"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(e.extend.moment(t.row.createTime).format("YYYY-MM-DD HH:mm"))+"\n ")]}}])}),n("el-table-column",{attrs:{label:"操作",width:"200",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("el-button",{attrs:{size:"mini",type:"primary",plain:""},on:{click:function(n){return e.content(t.$index,t.row)}}},[e._v("\n 查询内容 \n ")])]}}])})],1),n("div",{staticClass:"pagination"},[n("el-pagination",{attrs:{background:"",layout:e.page.layout,"current-page":e.page.currentpage,"page-size":e.page.pagesize,total:e.page.pagetotal,"page-sizes":e.page.pagesizes},on:{"current-change":e.pageChange,"size-change":e.pagesizechange}})],1)],1),n("el-dialog",{attrs:{width:"60%",title:e.dialog.title,visible:e.dialog.show,"before-close":e.dialogClose},on:{"update:visible":function(t){return e.$set(e.dialog,"show",t)}}},[n("addup",{attrs:{formData:e.dialog.form,dialog:e.dialog},on:{formSuccess:e.formSuccess}})],1)],1)},r=[],i=(n("ac67"),n("1bc78"),n("32ea"),n("a450"),n("55ae")),s=(n("6a61"),n("4833")),c=n("32f0"),o=n("c968"),u=(n("2763"),n("a355")),l=n("caaf"),p=n.n(l);function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function g(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach((function(t){Object(i["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var h=c["e"],f=c["b"],b={data:function(){return{table:{tableData:[],height:0},page:{currentpage:1,pagesize:10,pagetotal:0,layout:"total, prev, pager, next",pagesizes:[10,20,30,40,50,100]},query:{},dialog:{title:"",show:!1,form:{}},extend:{moment:p.a,type:{1:{name:"查询"},2:{name:"上传"},3:{name:"暂停"},4:{name:"执行"}}},setTableHeight:!0}},mounted:function(){this.init()},components:{addup:u["a"]},methods:{init:function(){var e=Object(s["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.extend.jcbId=this.$router.currentRoute.query.jcbId,e.next=3,this.getlist(g({},this.pagequery()));case 3:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),getlist:function(){var e=Object(s["a"])(regeneratorRuntime.mark((function e(){var t,n,a,r,i,s=this,c=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t=c.length>0&&void 0!==c[0]?c[0]:{},n=this.$router.currentRoute.query.id,a=this.$router.currentRoute.query.jcbId,e.next=5,h(g(g(g({},t),this.formquery()),{},{cid:n,jcbId:a}));case 5:r=e.sent,200==r.code&&(this.table.tableData=r.data.list||[],i=r.data.length,this.page.currentpage>1&&0==i&&(this.page.currentpage=this.page.currentpage-1,this.$nextTick((function(){s.getlist(t)}))),this.page.pagetotal=r.data.total||0);case 7:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),formquery:function(){var e=this,t={};for(var n in e.query)Object(o["c"])(e.query[n]).success&&(t[n]=e.query[n]);return t.jcbId=this.extend.jcbId,t},pagequery:function(){return{pageNum:this.page.currentpage,pageSize:this.page.pagesize}},querysearch:function(){this.getlist(g({},this.pagequery()))},pageChange:function(e){var t=this;this.page.currentpage=e,this.$nextTick((function(){t.getlist(t.pagequery())}))},pagesizechange:function(e){var t=this;this.page.pagesize=e,this.$nextTick((function(){t.getlist(t.pagequery())}))},dialogClose:function(e){this.getlist(this.pagequery()),e()},handleSelectionChange:function(e){console.log(e)},delAllSelection:function(){},formSuccess:function(e){this.getlist(this.pagequery())},addController:function(){var e=this.addModel();e.success&&(this.dialog.form={idtype:e.idtype,data:e.data},this.dialog.show=!0)},delController:function(){var e=Object(s["a"])(regeneratorRuntime.mark((function e(t,n){var a=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:this.$confirm("此操作将删除该数据, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(Object(s["a"])(regeneratorRuntime.mark((function e(){var t,r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t=a.delOneModel(n),!t.success){e.next=6;break}return e.next=4,f(t.data);case 4:r=e.sent,200==r.code?(a.$message({message:"删除成功",type:"success"}),a.getlist(a.pagequery())):a.$message({message:r.msg||"删除失败,请从新尝试",type:"error"});case 6:case"end":return e.stop()}}),e)})))).catch((function(){}));case 1:case"end":return e.stop()}}),e,this)})));function t(t,n){return e.apply(this,arguments)}return t}(),editController:function(e,t){var n=this.updateModel(t);n.success&&(this.dialog.form={idtype:n.idtype,data:n.data},this.dialog.show=!0)},detailController:function(e,t){},editPwdController:function(e,t){},content:function(){var e=Object(s["a"])(regeneratorRuntime.mark((function e(t,n){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,Object(c["c"])(n.id);case 2:a=e.sent,this.$alert(a.data,{confirmButtonText:"确定",customClass:"cnt",callback:function(e){}});case 4:case"end":return e.stop()}}),e,this)})));function t(t,n){return e.apply(this,arguments)}return t}(),updateModel:function(e){for(var t in e.jcbName=e.name,e)e[t]||0==e[t]||(e[t]="");return{idtype:1,success:!0,data:g({},e)}},delOneModel:function(e){return{success:!0,data:{taskId:e.id}}},addModel:function(){var e=this.extend.jcbId;return{idtype:0,success:!0,data:{jcbId:e,name:"",type:"",cronExpression:"",beanClass:"",jobGroup:""}}}}},m=b,y=(n("09bc"),n("7db1"),n("5d22")),w=Object(y["a"])(m,a,r,!1,null,"71ff541a",null);t["default"]=w.exports}}]);
\ No newline at end of file
This diff is collapsed.
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["login"],{"50aa":function(e,t){function r(e){return!!e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function n(e){return"function"===typeof e.readFloatLE&&"function"===typeof e.slice&&r(e.slice(0,0))}
/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
e.exports=function(e){return null!=e&&(r(e)||n(e)||!!e._isBuffer)}},"5c53":function(e,t){var r={utf8:{stringToBytes:function(e){return r.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(r.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],r=0;r<e.length;r++)t.push(255&e.charCodeAt(r));return t},bytesToString:function(e){for(var t=[],r=0;r<e.length;r++)t.push(String.fromCharCode(e[r]));return t.join("")}}};e.exports=r},"8a63":function(e,t,r){},"8ef3":function(e,t){(function(){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&r.rotl(e,8)|4278255360&r.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=r.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],r=0,n=0;r<e.length;r++,n+=8)t[n>>>5]|=e[r]<<24-n%32;return t},wordsToBytes:function(e){for(var t=[],r=0;r<32*e.length;r+=8)t.push(e[r>>>5]>>>24-r%32&255);return t},bytesToHex:function(e){for(var t=[],r=0;r<e.length;r++)t.push((e[r]>>>4).toString(16)),t.push((15&e[r]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],r=0;r<e.length;r+=2)t.push(parseInt(e.substr(r,2),16));return t},bytesToBase64:function(e){for(var r=[],n=0;n<e.length;n+=3)for(var o=e[n]<<16|e[n+1]<<8|e[n+2],s=0;s<4;s++)8*n+6*s<=8*e.length?r.push(t.charAt(o>>>6*(3-s)&63)):r.push("=");return r.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var r=[],n=0,o=0;n<e.length;o=++n%4)0!=o&&r.push((t.indexOf(e.charAt(n-1))&Math.pow(2,-2*o+8)-1)<<2*o|t.indexOf(e.charAt(n))>>>6-2*o);return r}};e.exports=r})()},bdc9:function(e,t,r){(function(){var t=r("8ef3"),n=r("5c53").utf8,o=r("50aa"),s=r("5c53").bin,a=function(e,r){e.constructor==String?e=r&&"binary"===r.encoding?s.stringToBytes(e):n.stringToBytes(e):o(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var i=t.bytesToWords(e),u=8*e.length,c=1732584193,l=-271733879,f=-1732584194,p=271733878,d=0;d<i.length;d++)i[d]=16711935&(i[d]<<8|i[d]>>>24)|4278255360&(i[d]<<24|i[d]>>>8);i[u>>>5]|=128<<u%32,i[14+(u+64>>>9<<4)]=u;var m=a._ff,g=a._gg,h=a._hh,v=a._ii;for(d=0;d<i.length;d+=16){var b=c,y=l,w=f,k=p;c=m(c,l,f,p,i[d+0],7,-680876936),p=m(p,c,l,f,i[d+1],12,-389564586),f=m(f,p,c,l,i[d+2],17,606105819),l=m(l,f,p,c,i[d+3],22,-1044525330),c=m(c,l,f,p,i[d+4],7,-176418897),p=m(p,c,l,f,i[d+5],12,1200080426),f=m(f,p,c,l,i[d+6],17,-1473231341),l=m(l,f,p,c,i[d+7],22,-45705983),c=m(c,l,f,p,i[d+8],7,1770035416),p=m(p,c,l,f,i[d+9],12,-1958414417),f=m(f,p,c,l,i[d+10],17,-42063),l=m(l,f,p,c,i[d+11],22,-1990404162),c=m(c,l,f,p,i[d+12],7,1804603682),p=m(p,c,l,f,i[d+13],12,-40341101),f=m(f,p,c,l,i[d+14],17,-1502002290),l=m(l,f,p,c,i[d+15],22,1236535329),c=g(c,l,f,p,i[d+1],5,-165796510),p=g(p,c,l,f,i[d+6],9,-1069501632),f=g(f,p,c,l,i[d+11],14,643717713),l=g(l,f,p,c,i[d+0],20,-373897302),c=g(c,l,f,p,i[d+5],5,-701558691),p=g(p,c,l,f,i[d+10],9,38016083),f=g(f,p,c,l,i[d+15],14,-660478335),l=g(l,f,p,c,i[d+4],20,-405537848),c=g(c,l,f,p,i[d+9],5,568446438),p=g(p,c,l,f,i[d+14],9,-1019803690),f=g(f,p,c,l,i[d+3],14,-187363961),l=g(l,f,p,c,i[d+8],20,1163531501),c=g(c,l,f,p,i[d+13],5,-1444681467),p=g(p,c,l,f,i[d+2],9,-51403784),f=g(f,p,c,l,i[d+7],14,1735328473),l=g(l,f,p,c,i[d+12],20,-1926607734),c=h(c,l,f,p,i[d+5],4,-378558),p=h(p,c,l,f,i[d+8],11,-2022574463),f=h(f,p,c,l,i[d+11],16,1839030562),l=h(l,f,p,c,i[d+14],23,-35309556),c=h(c,l,f,p,i[d+1],4,-1530992060),p=h(p,c,l,f,i[d+4],11,1272893353),f=h(f,p,c,l,i[d+7],16,-155497632),l=h(l,f,p,c,i[d+10],23,-1094730640),c=h(c,l,f,p,i[d+13],4,681279174),p=h(p,c,l,f,i[d+0],11,-358537222),f=h(f,p,c,l,i[d+3],16,-722521979),l=h(l,f,p,c,i[d+6],23,76029189),c=h(c,l,f,p,i[d+9],4,-640364487),p=h(p,c,l,f,i[d+12],11,-421815835),f=h(f,p,c,l,i[d+15],16,530742520),l=h(l,f,p,c,i[d+2],23,-995338651),c=v(c,l,f,p,i[d+0],6,-198630844),p=v(p,c,l,f,i[d+7],10,1126891415),f=v(f,p,c,l,i[d+14],15,-1416354905),l=v(l,f,p,c,i[d+5],21,-57434055),c=v(c,l,f,p,i[d+12],6,1700485571),p=v(p,c,l,f,i[d+3],10,-1894986606),f=v(f,p,c,l,i[d+10],15,-1051523),l=v(l,f,p,c,i[d+1],21,-2054922799),c=v(c,l,f,p,i[d+8],6,1873313359),p=v(p,c,l,f,i[d+15],10,-30611744),f=v(f,p,c,l,i[d+6],15,-1560198380),l=v(l,f,p,c,i[d+13],21,1309151649),c=v(c,l,f,p,i[d+4],6,-145523070),p=v(p,c,l,f,i[d+11],10,-1120210379),f=v(f,p,c,l,i[d+2],15,718787259),l=v(l,f,p,c,i[d+9],21,-343485551),c=c+b>>>0,l=l+y>>>0,f=f+w>>>0,p=p+k>>>0}return t.endian([c,l,f,p])};a._ff=function(e,t,r,n,o,s,a){var i=e+(t&r|~t&n)+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._gg=function(e,t,r,n,o,s,a){var i=e+(t&n|r&~n)+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._hh=function(e,t,r,n,o,s,a){var i=e+(t^r^n)+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._ii=function(e,t,r,n,o,s,a){var i=e+(r^(t|~n))+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._blocksize=16,a._digestsize=16,e.exports=function(e,r){if(void 0===e||null===e)throw new Error("Illegal argument "+e);var n=t.wordsToBytes(a(e,r));return r&&r.asBytes?n:r&&r.asString?s.bytesToString(n):t.bytesToHex(n)}})()},ede4:function(e,t,r){"use strict";r.r(t);var n=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"login-wrap"},[r("div",{staticClass:"ms-login"},[r("div",{staticClass:"ms-title"},[e._v("\n HSCloud\n ")]),r("el-form",{ref:"login",staticClass:"ms-content",attrs:{model:e.param,rules:e.rules,"label-width":"0px"}},[r("el-form-item",{staticClass:"inputrow",attrs:{prop:"userName"}},[r("el-input",{attrs:{placeholder:"账号",autocomplete:"off"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.submitForm()}},model:{value:e.param.userName,callback:function(t){e.$set(e.param,"userName",t)},expression:"param.userName"}})],1),r("el-form-item",{staticClass:"inputrow",attrs:{prop:"password"}},[r("el-input",{attrs:{type:"password",placeholder:"密码"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.submitForm()}},model:{value:e.param.password,callback:function(t){e.$set(e.param,"password",t)},expression:"param.password"}})],1),r("el-form-item",{staticClass:"inputrow state"},[r("el-checkbox-group",{model:{value:e.keepwd,callback:function(t){e.keepwd=t},expression:"keepwd"}},[r("el-checkbox",{attrs:{label:!0}},[e._v("记住密码")])],1),r("div",{staticClass:"lastrow"})],1),r("div",{staticClass:"login-btn inputrow"},[r("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.submitForm()}}},[e._v("立即登录")])],1)],1)],1)])},o=[],s=(r("4057"),r("6a61"),r("4833")),a=(r("bdc9"),r("7ded")),i={data:function(){return{param:{userName:"admin",password:"123456"},rules:{userName:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],valicode:[{required:!0,message:"请输入验证码",trigger:"blur"}]},keepwd:!0,autologin:!0,valicode:{time:0,src:""},getValicodeApi:Object(a["a"])()}},methods:{submitForm:function(){var e=this;this.$refs.login.validate(function(){var t=Object(s["a"])(regeneratorRuntime.mark((function t(r){var n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!r){t.next=15;break}return t.next=3,e.$store.dispatch("user/login",{username:e.param.userName,password:e.param.password});case 3:if(n=t.sent,!n.success){t.next=12;break}return e.keepwd?e.$store.commit("user/set_user_account",{username:e.param.userName,password:e.param.password}):e.$store.commit("user/reset_user_account"),t.next=8,e.$store.dispatch("root/setRoot");case 8:console.log("权限对象:",e.$store.state.root),e.$router.push({path:"/personnel"}),t.next=13;break;case 12:e.$message({message:"账号或密码错误!",type:"error",duration:2e3});case 13:t.next=16;break;case 15:return t.abrupt("return",!1);case 16:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())},toRegister:function(){this.$router.push({path:"/register"})},getValicode:function(){this.getValicodeApi=Object(a["a"])()+"?time="+new Date},changeValicode:function(){var e=this;this.valicode.time>0&&setTimeout((function(){e.valicode.time=e.valicode.time-1,e.changeValicode()}),1e3)}},mounted:function(){var e=this.$router.currentRoute.params;(e.userName||"undefined"!=typeof e.userName&&e.userName.toString())&&(this.param.userName=e.userName,this.param.password=e.password)}},u=i,c=(r("feb9"),r("5d22")),l=Object(c["a"])(u,n,o,!1,null,"20ef3f6e",null);t["default"]=l.exports},feb9:function(e,t,r){"use strict";r("8a63")}}]);
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["login"],{"16a4":function(e,t,r){},"50aa":function(e,t){function r(e){return!!e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function n(e){return"function"===typeof e.readFloatLE&&"function"===typeof e.slice&&r(e.slice(0,0))}
/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
e.exports=function(e){return null!=e&&(r(e)||n(e)||!!e._isBuffer)}},"5c53":function(e,t){var r={utf8:{stringToBytes:function(e){return r.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(r.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],r=0;r<e.length;r++)t.push(255&e.charCodeAt(r));return t},bytesToString:function(e){for(var t=[],r=0;r<e.length;r++)t.push(String.fromCharCode(e[r]));return t.join("")}}};e.exports=r},"8de1":function(e,t,r){"use strict";r("16a4")},"8ef3":function(e,t){(function(){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&r.rotl(e,8)|4278255360&r.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=r.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],r=0,n=0;r<e.length;r++,n+=8)t[n>>>5]|=e[r]<<24-n%32;return t},wordsToBytes:function(e){for(var t=[],r=0;r<32*e.length;r+=8)t.push(e[r>>>5]>>>24-r%32&255);return t},bytesToHex:function(e){for(var t=[],r=0;r<e.length;r++)t.push((e[r]>>>4).toString(16)),t.push((15&e[r]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],r=0;r<e.length;r+=2)t.push(parseInt(e.substr(r,2),16));return t},bytesToBase64:function(e){for(var r=[],n=0;n<e.length;n+=3)for(var o=e[n]<<16|e[n+1]<<8|e[n+2],s=0;s<4;s++)8*n+6*s<=8*e.length?r.push(t.charAt(o>>>6*(3-s)&63)):r.push("=");return r.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var r=[],n=0,o=0;n<e.length;o=++n%4)0!=o&&r.push((t.indexOf(e.charAt(n-1))&Math.pow(2,-2*o+8)-1)<<2*o|t.indexOf(e.charAt(n))>>>6-2*o);return r}};e.exports=r})()},bdc9:function(e,t,r){(function(){var t=r("8ef3"),n=r("5c53").utf8,o=r("50aa"),s=r("5c53").bin,a=function(e,r){e.constructor==String?e=r&&"binary"===r.encoding?s.stringToBytes(e):n.stringToBytes(e):o(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var i=t.bytesToWords(e),u=8*e.length,c=1732584193,l=-271733879,p=-1732584194,f=271733878,d=0;d<i.length;d++)i[d]=16711935&(i[d]<<8|i[d]>>>24)|4278255360&(i[d]<<24|i[d]>>>8);i[u>>>5]|=128<<u%32,i[14+(u+64>>>9<<4)]=u;var m=a._ff,g=a._gg,h=a._hh,v=a._ii;for(d=0;d<i.length;d+=16){var b=c,y=l,w=p,k=f;c=m(c,l,p,f,i[d+0],7,-680876936),f=m(f,c,l,p,i[d+1],12,-389564586),p=m(p,f,c,l,i[d+2],17,606105819),l=m(l,p,f,c,i[d+3],22,-1044525330),c=m(c,l,p,f,i[d+4],7,-176418897),f=m(f,c,l,p,i[d+5],12,1200080426),p=m(p,f,c,l,i[d+6],17,-1473231341),l=m(l,p,f,c,i[d+7],22,-45705983),c=m(c,l,p,f,i[d+8],7,1770035416),f=m(f,c,l,p,i[d+9],12,-1958414417),p=m(p,f,c,l,i[d+10],17,-42063),l=m(l,p,f,c,i[d+11],22,-1990404162),c=m(c,l,p,f,i[d+12],7,1804603682),f=m(f,c,l,p,i[d+13],12,-40341101),p=m(p,f,c,l,i[d+14],17,-1502002290),l=m(l,p,f,c,i[d+15],22,1236535329),c=g(c,l,p,f,i[d+1],5,-165796510),f=g(f,c,l,p,i[d+6],9,-1069501632),p=g(p,f,c,l,i[d+11],14,643717713),l=g(l,p,f,c,i[d+0],20,-373897302),c=g(c,l,p,f,i[d+5],5,-701558691),f=g(f,c,l,p,i[d+10],9,38016083),p=g(p,f,c,l,i[d+15],14,-660478335),l=g(l,p,f,c,i[d+4],20,-405537848),c=g(c,l,p,f,i[d+9],5,568446438),f=g(f,c,l,p,i[d+14],9,-1019803690),p=g(p,f,c,l,i[d+3],14,-187363961),l=g(l,p,f,c,i[d+8],20,1163531501),c=g(c,l,p,f,i[d+13],5,-1444681467),f=g(f,c,l,p,i[d+2],9,-51403784),p=g(p,f,c,l,i[d+7],14,1735328473),l=g(l,p,f,c,i[d+12],20,-1926607734),c=h(c,l,p,f,i[d+5],4,-378558),f=h(f,c,l,p,i[d+8],11,-2022574463),p=h(p,f,c,l,i[d+11],16,1839030562),l=h(l,p,f,c,i[d+14],23,-35309556),c=h(c,l,p,f,i[d+1],4,-1530992060),f=h(f,c,l,p,i[d+4],11,1272893353),p=h(p,f,c,l,i[d+7],16,-155497632),l=h(l,p,f,c,i[d+10],23,-1094730640),c=h(c,l,p,f,i[d+13],4,681279174),f=h(f,c,l,p,i[d+0],11,-358537222),p=h(p,f,c,l,i[d+3],16,-722521979),l=h(l,p,f,c,i[d+6],23,76029189),c=h(c,l,p,f,i[d+9],4,-640364487),f=h(f,c,l,p,i[d+12],11,-421815835),p=h(p,f,c,l,i[d+15],16,530742520),l=h(l,p,f,c,i[d+2],23,-995338651),c=v(c,l,p,f,i[d+0],6,-198630844),f=v(f,c,l,p,i[d+7],10,1126891415),p=v(p,f,c,l,i[d+14],15,-1416354905),l=v(l,p,f,c,i[d+5],21,-57434055),c=v(c,l,p,f,i[d+12],6,1700485571),f=v(f,c,l,p,i[d+3],10,-1894986606),p=v(p,f,c,l,i[d+10],15,-1051523),l=v(l,p,f,c,i[d+1],21,-2054922799),c=v(c,l,p,f,i[d+8],6,1873313359),f=v(f,c,l,p,i[d+15],10,-30611744),p=v(p,f,c,l,i[d+6],15,-1560198380),l=v(l,p,f,c,i[d+13],21,1309151649),c=v(c,l,p,f,i[d+4],6,-145523070),f=v(f,c,l,p,i[d+11],10,-1120210379),p=v(p,f,c,l,i[d+2],15,718787259),l=v(l,p,f,c,i[d+9],21,-343485551),c=c+b>>>0,l=l+y>>>0,p=p+w>>>0,f=f+k>>>0}return t.endian([c,l,p,f])};a._ff=function(e,t,r,n,o,s,a){var i=e+(t&r|~t&n)+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._gg=function(e,t,r,n,o,s,a){var i=e+(t&n|r&~n)+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._hh=function(e,t,r,n,o,s,a){var i=e+(t^r^n)+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._ii=function(e,t,r,n,o,s,a){var i=e+(r^(t|~n))+(o>>>0)+a;return(i<<s|i>>>32-s)+t},a._blocksize=16,a._digestsize=16,e.exports=function(e,r){if(void 0===e||null===e)throw new Error("Illegal argument "+e);var n=t.wordsToBytes(a(e,r));return r&&r.asBytes?n:r&&r.asString?s.bytesToString(n):t.bytesToHex(n)}})()},ede4:function(e,t,r){"use strict";r.r(t);var n=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"login-wrap"},[r("div",{staticClass:"ms-login"},[r("div",{staticClass:"ms-title"},[e._v("\n DataAgent\n ")]),r("el-form",{ref:"login",staticClass:"ms-content",attrs:{model:e.param,rules:e.rules,"label-width":"0px"}},[r("el-form-item",{staticClass:"inputrow",attrs:{prop:"userName"}},[r("el-input",{attrs:{placeholder:"账号",autocomplete:"off"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.submitForm()}},model:{value:e.param.userName,callback:function(t){e.$set(e.param,"userName",t)},expression:"param.userName"}})],1),r("el-form-item",{staticClass:"inputrow",attrs:{prop:"password"}},[r("el-input",{attrs:{type:"password",placeholder:"密码"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.submitForm()}},model:{value:e.param.password,callback:function(t){e.$set(e.param,"password",t)},expression:"param.password"}})],1),r("el-form-item",{staticClass:"inputrow state"},[r("el-checkbox-group",{model:{value:e.keepwd,callback:function(t){e.keepwd=t},expression:"keepwd"}},[r("el-checkbox",{attrs:{label:!0}},[e._v("记住密码")])],1),r("div",{staticClass:"lastrow"})],1),r("div",{staticClass:"login-btn inputrow"},[r("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.submitForm()}}},[e._v("立即登录")])],1)],1)],1)])},o=[],s=(r("4057"),r("6a61"),r("4833")),a=(r("bdc9"),r("7ded")),i={data:function(){return{param:{userName:"admin",password:"123456"},rules:{userName:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],valicode:[{required:!0,message:"请输入验证码",trigger:"blur"}]},keepwd:!0,autologin:!0,valicode:{time:0,src:""},getValicodeApi:Object(a["a"])()}},methods:{submitForm:function(){var e=this;this.$refs.login.validate(function(){var t=Object(s["a"])(regeneratorRuntime.mark((function t(r){var n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!r){t.next=15;break}return t.next=3,e.$store.dispatch("user/login",{username:e.param.userName,password:e.param.password});case 3:if(n=t.sent,!n.success){t.next=12;break}return e.keepwd?e.$store.commit("user/set_user_account",{username:e.param.userName,password:e.param.password}):e.$store.commit("user/reset_user_account"),t.next=8,e.$store.dispatch("root/setRoot");case 8:console.log("权限对象:",e.$store.state.root),e.$router.push({path:"/personnel"}),t.next=13;break;case 12:e.$message({message:"账号或密码错误!",type:"error",duration:2e3});case 13:t.next=16;break;case 15:return t.abrupt("return",!1);case 16:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())},toRegister:function(){this.$router.push({path:"/register"})},getValicode:function(){this.getValicodeApi=Object(a["a"])()+"?time="+new Date},changeValicode:function(){var e=this;this.valicode.time>0&&setTimeout((function(){e.valicode.time=e.valicode.time-1,e.changeValicode()}),1e3)}},mounted:function(){var e=this.$router.currentRoute.params;(e.userName||"undefined"!=typeof e.userName&&e.userName.toString())&&(this.param.userName=e.userName,this.param.password=e.password)}},u=i,c=(r("8de1"),r("5d22")),l=Object(c["a"])(u,n,o,!1,null,"78ec12f8",null);t["default"]=l.exports}}]);
\ No newline at end of file
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><title></title><link rel=icon type=image/png href=./logo.png><script src=./config/config.pro.js></script><link href=assets/css/chunk-28f026cb.f56aee47.css rel=prefetch><link href=assets/css/chunk-43c7bfcd.7e8048d0.css rel=prefetch><link href=assets/css/chunk-4a69c5b2.96e62ea0.css rel=prefetch><link href=assets/css/chunk-7eb22a7c.cd0a3386.css rel=prefetch><link href=assets/css/chunk-85c5c440.e08b36b5.css rel=prefetch><link href=assets/css/chunk-960b7570.f7204c3c.css rel=prefetch><link href=assets/css/home.b760c1b8.css rel=prefetch><link href=assets/css/login.5d8b150e.css rel=prefetch><link href=assets/js/chunk-28f026cb.b6534f5c.js rel=prefetch><link href=assets/js/chunk-2d0baaed.63c807a0.js rel=prefetch><link href=assets/js/chunk-43c7bfcd.923dd2ea.js rel=prefetch><link href=assets/js/chunk-4a69c5b2.e2350b14.js rel=prefetch><link href=assets/js/chunk-7eb22a7c.b12b3968.js rel=prefetch><link href=assets/js/chunk-85c5c440.b836c6fd.js rel=prefetch><link href=assets/js/chunk-960b7570.de4bfbcb.js rel=prefetch><link href=assets/js/home.58e3c6ff.js rel=prefetch><link href=assets/js/login.4b0121a0.js rel=prefetch><link href=assets/css/app.c6908504.css rel=preload as=style><link href=assets/css/chunk-vendors.b6fd5e62.css rel=preload as=style><link href=assets/js/app.982ea36e.js rel=preload as=script><link href=assets/js/chunk-vendors.3ce4c252.js rel=preload as=script><link href=assets/css/chunk-vendors.b6fd5e62.css rel=stylesheet><link href=assets/css/app.c6908504.css rel=stylesheet></head><body><noscript><strong>We're sorry but vms doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=assets/js/chunk-vendors.3ce4c252.js></script><script src=assets/js/app.982ea36e.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><title></title><link rel=icon type=image/png href=./logo.png><script src=./config/config.pro.js></script><link href=assets/css/chunk-1e6c22d6.88e4453f.css rel=prefetch><link href=assets/css/chunk-4a69c5b2.96e62ea0.css rel=prefetch><link href=assets/css/chunk-51e7c6e2.43994efc.css rel=prefetch><link href=assets/css/chunk-5d54dd36.7c756ae4.css rel=prefetch><link href=assets/css/chunk-7eb22a7c.cd0a3386.css rel=prefetch><link href=assets/css/chunk-85c5c440.e08b36b5.css rel=prefetch><link href=assets/css/chunk-960b7570.f7204c3c.css rel=prefetch><link href=assets/css/chunk-c45e86aa.f20de64c.css rel=prefetch><link href=assets/css/home.b760c1b8.css rel=prefetch><link href=assets/css/login.89f359f2.css rel=prefetch><link href=assets/js/chunk-1e6c22d6.283b1844.js rel=prefetch><link href=assets/js/chunk-2d0baaed.63c807a0.js rel=prefetch><link href=assets/js/chunk-4a69c5b2.e2350b14.js rel=prefetch><link href=assets/js/chunk-51e7c6e2.2af3e1c4.js rel=prefetch><link href=assets/js/chunk-5d54dd36.b93d1a02.js rel=prefetch><link href=assets/js/chunk-7eb22a7c.b12b3968.js rel=prefetch><link href=assets/js/chunk-85c5c440.b836c6fd.js rel=prefetch><link href=assets/js/chunk-960b7570.de4bfbcb.js rel=prefetch><link href=assets/js/chunk-c45e86aa.a4ca04a7.js rel=prefetch><link href=assets/js/home.58e3c6ff.js rel=prefetch><link href=assets/js/login.a9c970fb.js rel=prefetch><link href=assets/css/app.37f6a187.css rel=preload as=style><link href=assets/css/chunk-vendors.b6fd5e62.css rel=preload as=style><link href=assets/js/app.e787da46.js rel=preload as=script><link href=assets/js/chunk-vendors.3ce4c252.js rel=preload as=script><link href=assets/css/chunk-vendors.b6fd5e62.css rel=stylesheet><link href=assets/css/app.37f6a187.css rel=stylesheet></head><body><noscript><strong>We're sorry but vms doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=assets/js/chunk-vendors.3ce4c252.js></script><script src=assets/js/app.e787da46.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table class="am-table am-table-bd am-table-bdrs am-table-striped am-table-hover">
<tbody th:remove="all-but-first">
<tr th:each="ea : ${list}">
<td th:text="${ea}"></td>
<td>
<button class="btn" th:onclick="download([[${ea}]]);">下载</button>
</td>
</tr>
</tbody>
</table>
</body>
<script th:inline="javascript">
function download(a) {
window.location.href="/api/admin/download?path="+a;
}
</script>
</html>
\ No newline at end of file
package com.hs.admin;
import com.hs.admin.dto.UserDto;
import com.hs.admin.bean.DataBase;
import com.hs.admin.dao.JcbDao;
import com.hs.admin.service.UserService;
import com.hs.admin.util.DbUtil;
import com.hs.admin.util.JsonUtils;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.connection.Connection;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserTest {
@Autowired
UserService userService;
@Test
public void save() {
UserDto dto = new UserDto();
dto.setUsername("admin");
dto.setPassword("123456");
userService.saveUser(dto);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment