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
*/
@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
*/
@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) {
Jcb jcb = jcbService.saveJcb(jcbDto);
new Thread(() -> {
createAndListener(jcbDto.getJcbId());
//创建table_log
createTable(jcb);
}).start();
result = Result.returnSuccess(null);
} else {
result = Result.returnError();
}
} 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;
......
package com.hs.admin.job;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.base.RabbitMqConstant;
import com.hs.admin.base.Result;
import com.hs.admin.bean.*;
import com.hs.admin.dao.AuthTokenDao;
import com.hs.admin.dao.JcbDao;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.dao.TableLogDao;
import com.hs.admin.scheduler.TokenUtil;
import com.hs.admin.util.*;
import com.hs.admin.vo.ResponseVO;
import com.hs.admin.vo.ResultVO;
import org.quartz.*;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author xieheng
*/
@DisallowConcurrentExecution
@Component
public class Select implements Job {
@Resource
RabbitTemplate rabbitTemplate;
@Resource
JcbDao jcbDao;
@Resource
SysTaskDao sysTaskDao;
@Resource
AuthTokenDao authTokenDao;
@Resource
Scheduler scheduler;
@Resource
TokenUtil tokenUtil;
@Resource
TableLogDao tableLogDao;
@Value("${hs_cloud_last_time}")
private String lastTime;
@Value("${hs_cloud_last_time_name}")
private String lastTimeKey;
@Value("${ocid_client_id}")
private String clientId;
@Value("${ocid_client_secret}")
private String clientSecret;
@Value("${ocid_username}")
private String username;
@Value("${ocid_scope}")
private String scope;
@Value("${ocid_password}")
private String password;
@Value("${ocid_upload_url}")
private String uploadUrl;
@Override
@Transactional(rollbackFor = Exception.class)
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
SysTask sysTask = null;
ResponseVO vo = new ResponseVO();
JobDataMap jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
String triggerTask = jobDataMap.get("triggerTask").toString();
sysTask = JsonUtils.jsonToBean(triggerTask, SysTask.class);
LogUtil.info(">>>>>>>>客户端开始执行定时任务,参数:" + sysTask);
if (sysTask == null) {
return;
}
String jcbId = sysTask.getJcbId();
//操作类型 1查询,2上传,3下发,4执行
String ctype = sysTask.getCtype();
MqData mqData = JsonUtils.jsonToBean(sysTask.getContent(), MqData.class);
if (ObjectUtils.isEmpty(mqData.getSql())) {
JSONObject jsonObject = JSONObject.parseObject(sysTask.getContent());
String content = jsonObject.getString("content");
mqData = JsonUtils.jsonToBean(content, MqData.class);
}
//根据jcbId选择db操作todo
DataBase dbInfo = jcbDao.getDbInfo(jcbId);
sysTask.setState(0);
JdbcTemplate jdbcTemplate = DbUtil.getJdbcTemplate(dbInfo);
if ("1".equals(ctype)) {
//查询操作
vo = selectOperate(mqData, jdbcTemplate, vo);
} else if ("2".equals(ctype)) {
//上传操作
vo = uploadOperate(jcbId, mqData, jdbcTemplate, vo);
} else if ("3".equals(ctype)) {
//下发操作
vo = sendOperate(mqData, jdbcTemplate, vo);
} else {
return;
}
//参数
vo.setParams(sysTask);
SysTask task = sysTaskDao.findTaskByJcbIdAndCid(sysTask.getJcbId(), sysTask.getCid());
//查询每次只更新
if (task != null && "1".equals(sysTask.getCtype())) {
task.setState(sysTask.getState());
task.setContent(JsonUtils.beanToJson(vo));
task.setCreateTime(new Date());
sysTaskDao.updateByPrimaryKey(task);
} else {
sysTask.setContent(JsonUtils.beanToJson(vo));
sysTask.setCreateTime(new Date());
sysTaskDao.insert(sysTask.init());
//保存完置空,服务器不需要内容
vo.setResultVO(new ResultVO("", true, "success"));
}
//更新租户最新活跃时间
jcbDao.updateModifyTime(sysTask.getJcbId(), System.currentTimeMillis());
//将db返回结果发送消息队列
//重新组装参数返回服务端
HashMap<Object, Object> map = new HashMap<>();
map.put("jcbId", jcbId);
map.put("taskId", sysTask.getId());
vo.setParams(map);
rabbitTemplate.convertAndSend(RabbitMqConstant.MSG_QUEUE, JsonUtils.beanToJson(vo));
LogUtil.info(">>>>>>>客户端任务执行成功,发送消息到服务端:task=" + JsonUtils.beanToJson(vo));
}
/**
* @description: 下发操作
* @author: XieHeng
* @param: mqData
* @param: jdbcTemplate
* @return: Result
* @date: 2021/5/30 12:40 下午
*/
private ResponseVO sendOperate(MqData mqData, JdbcTemplate jdbcTemplate, ResponseVO vo) {
String sql = mqData.getSql();
List<Map<String, Object>> mapList = null;
if (sql.toLowerCase().startsWith("select")) {
BeanPropertyRowMapper<Map> rowMapper = new BeanPropertyRowMapper<>(Map.class);
mapList = jdbcTemplate.queryForList(sql);
} else {
int i = jdbcTemplate.update(sql);
}
vo.setResultVO(new ResultVO(mapList, true, "success"));
return vo;
}
/**
* @description: 查询操作
* @author: XieHeng
* @param: mqData
* @param: jcbId
* @return: String
* @date: 2021/5/22 10:11 上午
*/
private ResponseVO selectOperate(MqData mqData, JdbcTemplate jdbcTemplate, ResponseVO vo) {
String sql = mqData.getSql();
//查询操作
List mapList = jdbcTemplate.queryForList(sql);
String resultData = JsonUtils.beanToJson(mapList);
LogUtil.info(">>>>>>>>>>>客户端处理结果集:" + resultData);
vo.setResultVO(new ResultVO(resultData, true, "success"));
return vo;
}
/**
* @description: 上传操作
* @author: XieHeng
* @param: mqData
* @param: jcbId
* @return: boolean
* @date: 2021/5/22 9:39 上午
*/
private ResponseVO uploadOperate(String jcbId, MqData mqData, JdbcTemplate jdbcTemplate, ResponseVO vo) {
String sql = mqData.getSql();
String tableName = mqData.getTableName();
String url = mqData.getUrl();
if (ObjectUtils.isEmpty(url)) {
url = uploadUrl;
}
//获取token
String token = getToken(jcbId);
//根据tableName查询最后一次执行时间
TableLog tableLog = null;
try {
tableLog = jdbcTemplate.queryForObject("select * from table_log where table_name=?", new BeanPropertyRowMapper<>(TableLog.class), tableName);
} catch (DataAccessException e) {
LogUtil.info("?>>>>>>>>查询table表为空");
}
LogUtil.info("?>>>>>>>>上传操作获取上一次执行时间:" + JsonUtils.beanToJson(tableLog));
String hsCloudLastTime;
if (ObjectUtils.isEmpty(tableLog)) {
hsCloudLastTime = lastTime;
} else {
hsCloudLastTime = DateUtil.format(tableLog.getHsCloudLastTime(), "yyyy-MM-dd HH:mm:ss");
}
String regex = "\\{([^}])*\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(sql);
while (matcher.find()) {
String group = matcher.group();
sql = sql.replaceAll("\\{" + lastTimeKey + "\\}", "'" + hsCloudLastTime + "'");
}
sql = sql.replaceAll("[\\t\\n\\r]", " ");
LogUtil.info("***************:sql=" + sql);
String billId = UUID.randomUUID().toString();
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);
if (ObjectUtils.isEmpty(mapList)) {
LogUtil.info(">>>>>>>查询结果集为空");
ResultVO resultVO = new ResultVO("查询结果集为空", true, "success");
vo.setResultVO(resultVO);
return vo;
}
String dataStr = JSON.toJSONString(mapList, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat);
List list = JsonUtils.jsonToList(dataStr, Map.class);
//获取最大返回时间
String dateTime = mapList.stream().max(Comparator.comparing(map -> map.get(lastTimeKey).toString())).get().get(lastTimeKey).toString();
Date date = DateUtil.toDateMillisecond(dateTime);
HashMap<String, Object> map = new HashMap<>();
map.put("bill_type_code", tableName);
map.put("bill_id", billId);
map.put("bill_data", list);
LogUtil.info(">>>>>>>>..upload:url=" + url + ",参数:" + JsonUtils.beanToJson(map) + ",token=" + token);
String data = HttpUtil.postWithToken(url, map, token);
LogUtil.info(">>>>>>>>..upload结果:" + data);
if (!ObjectUtils.isEmpty(data)) {
Map<String, Object> resultMap = JsonUtils.jsonToMap(data);
boolean b = Boolean.parseBoolean(resultMap.get("success").toString());
//如果上传接口返回成功,处理本地记录
if (b) {
int i;
if (tableLog != null) {
String tSql = "update table_log set hs_cloud_last_time=? where id=?";
jdbcTemplate.update(tSql, date, tableLog.getId());
} else {
String tSql = "insert into table_log(table_name,hs_cloud_last_time)values (?,?)";
jdbcTemplate.update(tSql, tableName, dateTime);
}
vo.setParams(list);
}
vo.setResultVO(new ResultVO(data, true, "success"));
} else {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "上传接口错误,无返回值");
}
return vo;
}
private String getToken(String jcbId) {
String token;
try {
AuthToken authToken = authTokenDao.findToken(jcbId);
//如果token为空,通过接口重新获取
//token 24小时有效期,23小时(82800000)刷新token
Date date = new Date(System.currentTimeMillis() - 82800000);
if (ObjectUtils.isEmpty(authToken)) {
token = tokenUtil.getToken(jcbId);
authTokenDao.insert(new AuthToken(jcbId, token, date));
} else {
Date lasttime = authToken.getLasttime();
if (lasttime.before(new Date())) {
token = tokenUtil.getToken(jcbId);
authTokenDao.updateToken(jcbId, token, date);
} else {
token = authToken.getToken();
}
}
} catch (Exception e) {
token = tokenUtil.getToken(jcbId);
}
return token;
}
}
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;
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();
}
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);
}
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) {
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());
return jcbDao.insert(jcb) == 1;
jcb.setGmtModify(new Date());
jcbDao.insert(jcb);
}
} 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(), "租户存在任务,不能删除");
}
if (jcbDao.delJcb(id) == 1) {
sysTaskDao.delTaskById(id);
return true;
}
int i = jcbDao.delJcb(id);
if (i != 1) {
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;
}
}
} 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 {
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;
}
@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);
}
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;
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 {
sysTask.setId(id);
return taskDao.updateByPrimaryKey(sysTask) == 1;
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);
}
}
}
}
return new PageResult<>(totalCount, jcbList);
}
@Override
public boolean delTask(Integer taskId) {
int i = 0;
private Map getNextExecuteTime(String cronExpression, Map map) {
if (ObjectUtils.isEmpty(cronExpression)) {
map.put("nextTime", "");
} else {
try {
i = taskDao.delTask(taskId);
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 i == 1;
}
return map;
}
private Map getTableTime(String tableName, DataBase dataBase, Map map) {
JdbcTemplate jdbcTemplate = DbUtil.getJdbcTemplate(dataBase);
TableLog tableLog = null;
try {
tableLog = jdbcTemplate.queryForObject("select * from table_log where table_name=?", new BeanPropertyRowMapper<>(TableLog.class), tableName);
} catch (DataAccessException e) {
e.printStackTrace();
}
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> 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);
}
}
}
return new PageResult<>(totalCount, jcbList);
}
@Override
public PageResult<Map> getTaskList(TaskDto taskDto) {
Integer jcbId = taskDto.getJcbId();
if (jcbId == null) {
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), "缺少租户Id");
}
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);
public String getContentById(Integer id) {
return sysTaskDao.getContentById(id);
}
}
package com.hs.admin.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.util.StringUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author 日期操作相关的工具
*/
public class DateUtil {
private static final Logger log = LoggerFactory.getLogger(DateUtil.class);
/**
* @param createTime 传入的日期
* @param count 时间间隔
* @return 根据传入的日期与时间间隔,计算过期的时间
*/
public static Date calExpiredTime(Date createTime, int stepType, int count) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(createTime);
calendar.add(stepType, count);
return calendar.getTime();
}
/**
* @param count 提前月的数量
* @return 月的范围
* 计算前count个月的范围,如果月为0,代表当月
*/
public static Date[] getLastetMonthN(int count) {
Date[] date = new Date[2];
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -count);
int minMonDay = calendar.getMinimum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, minMonDay);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.add(Calendar.SECOND, -1);
date[0] = calendar.getTime();
calendar.add(Calendar.MONTH, 1);
int maxMonDay = calendar.getMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, maxMonDay);
date[1] = calendar.getTime();
return date;
}
/**
* @return 获取当前时间的“年-月”信息
*/
public static String getLastYearMonth() {
Calendar calendar = Calendar.getInstance();
StringBuilder sb = new StringBuilder();
calendar.add(Calendar.MONTH, -1);
sb.append(calendar.get(Calendar.YEAR));
sb.append("-");
int month = calendar.get(Calendar.MONTH) + 1;
if (month < 10) {
sb.append("0");
}
sb.append(month);
return sb.toString();
}
/**
* @param date
* @return 获取指定时间的“年-月”信息
*/
public static String getYearMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
StringBuilder sb = new StringBuilder();
sb.append(calendar.get(Calendar.YEAR));
sb.append("-");
int month = calendar.get(Calendar.MONTH) + 1;
if (month < 10) {
sb.append("0");
}
sb.append(month);
return sb.toString();
}
/**
* @param date
* @return 获取指定时间的“年-月-日”信息
*/
public static String getYearMonthDay(Date date) {
DateFormatter dateFormatter = new DateFormatter("yyyy-MM-dd");
String dateTo = dateFormatter.print(date, Locale.CHINA);
return dateTo;
}
/**
* @param date
* @return 获取指定时间的“年-月-日”信息
*/
public static String getToMinute(Date date) {
DateFormatter dateFormatter = new DateFormatter("yyyy-MM-dd HH:mm");
String dateTo = dateFormatter.print(date, Locale.CHINA);
return dateTo;
}
/**
* 获取指定时间的“年-月-日 HH:mm:ss”信息
*/
public static String getYearMonthDayHMS(Date date, String resultDateFormat) {
if (date == null) {
return "";
}
DateFormatter dateFormatter = new DateFormatter(resultDateFormat);
String dateTo = dateFormatter.print(date, Locale.CHINA);
return dateTo;
}
/**
* 获取指定时间的“年-月-日 HH:mm:ss”信息
*/
public static String getYearMonthDayHMS(Date date) {
return getYearMonthDayHMS(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* @return 获取当天日期
*/
public static Date getToday() {
Calendar calendar = Calendar.getInstance();
return calendar.getTime();
}
/**
* @return 获取当天日期字符串
*/
public static String getTodayString() {
return getYearMonthDay(getToday());
}
/**
* @return 当前年月
* 获取当前年月
*/
public static String getNowYearMonth() {
Calendar calendar = Calendar.getInstance();
StringBuilder sb = new StringBuilder();
sb.append(calendar.get(Calendar.YEAR));
sb.append("-");
int month = calendar.get(Calendar.MONTH) + 1;
if (month < 10) {
sb.append("0");
}
sb.append(month);
return sb.toString();
}
/**
* @param date
* @return 昨天的日期
* 获得昨天的日期
*/
public static Date yesterday(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, -1);
Date resultDate = calendar.getTime();
return resultDate;
}
/**
* @param count
* @return 获得以这
*/
public static String getYearMonthCount(int count) {
Calendar calendar = Calendar.getInstance();
StringBuilder sb = new StringBuilder();
calendar.add(Calendar.MONTH, count);
sb.append(calendar.get(Calendar.YEAR));
sb.append("-");
int month = calendar.get(Calendar.MONTH) + 1;
if (month < 10) {
sb.append("0");
}
sb.append(month);
return sb.toString();
}
/**
* @param dateStr 时间字符串
* @return 增加一天之后的时间字符串
*/
public static String addOneDay(String dateStr) {
try {
DateFormatter dateFormatter = new DateFormatter("yyyy-MM-dd");
Date date = dateFormatter.parse(dateStr, Locale.CHINA);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);
date = calendar.getTime();
String dateTo = dateFormatter.print(date, Locale.CHINA);
return dateTo;
} catch (ParseException e) {
log.error("addOneDay dateStr={} cause={}", dateStr, e);
}
return null;
}
/**
* @param date 日期
* @return 将日期设为周一
* 返回周一的日期
*/
public static Date toSunday(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Date dateResult = calendar.getTime();
return dateResult;
}
/**
* @param date 日期
* @return 本月第一天的日期
* 将日期设为本月的第一天
*/
public static Date toBeginOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date dateResult = calendar.getTime();
return dateResult;
}
/**
* @param date
* @param resultDateFormat
* @return 本月第一天的日期
* 将日期设为本月的第一天
*/
public static String toBeginOfMonth(Date date, String resultDateFormat) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return new SimpleDateFormat(resultDateFormat).format(calendar.getTime());
}
/**
* @param date
* @param resultDateFormat 获取当前月最后一天
* @return
*/
public static String toEndOfMonth(Date date, String resultDateFormat) {
//获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
return new SimpleDateFormat(resultDateFormat).format(ca.getTime());
}
public static Date toEndOfMonth(Date date) {
//获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String format = new SimpleDateFormat("yyyy-MM-dd").format(ca.getTime());
return toDate(format);
}
/**
* 每周的第一天
*
* @param resultDateFormat
* @return
*/
public static String getFirstOfWeek(Date date, String resultDateFormat) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int d = 0;
if (cal.get(Calendar.DAY_OF_WEEK) == 1) {
d = -6;
} else {
d = 2 - cal.get(Calendar.DAY_OF_WEEK);
}
cal.add(Calendar.DAY_OF_WEEK, d);
// 所在周开始日期
return new SimpleDateFormat(resultDateFormat).format(cal.getTime());
}
/**
* 每周的最后一天
*
* @param date
* @param resultDateFormat
*/
public static String getLastOfWeek(Date date, String resultDateFormat) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int d = 6;
cal.add(Calendar.DAY_OF_WEEK, d);
// 所在周结束日期
return new SimpleDateFormat(resultDateFormat).format(cal.getTime());
}
/**
* @param date 日期
* @return 将日期设置为年的第一天
* 年的第一天
*/
public static Date toEndOfYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_YEAR, 1);
calendar.add(Calendar.YEAR, 1);
calendar.add(Calendar.DATE, -1);
Date dateResult = calendar.getTime();
return dateResult;
}
/**
* @param date 日期
* @return 将日期转化到零点
*/
public static Date toFirstTimeOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date result = calendar.getTime();
return result;
}
/**
* @param date 日期
* @return 将日期转化到一天末尾
*/
public static Date toLastTimeOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date result = calendar.getTime();
return result;
}
/**
* @param date1
* @param date2
* @return 是否为同一天
* 判断是否为同一天
*/
public static boolean sameDay(Date date1, Date date2) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int day1 = calendar.get(Calendar.DATE);
int month1 = calendar.get(Calendar.MONTH);
int year1 = calendar.get(Calendar.YEAR);
calendar.setTime(date2);
int day2 = calendar.get(Calendar.DATE);
int month2 = calendar.get(Calendar.MONTH);
int year2 = calendar.get(Calendar.YEAR);
return year2 == year1 && month1 == month2 && day1 == day2;
}
/**
* @param date 日期
* @return 递增后的日期
* 日期按天递增
*/
public static Date dayIncrement(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);
return calendar.getTime();
}
/**
* String 转换Date格式(yyyy-MM-dd)
*
* @param dateStr 时间格式
* @return
*/
public static Date toFormatDate(String dateStr) {
try {
DateFormatter dateFormatter = new DateFormatter("yyyy/MM/dd");
return dateFormatter.parse(dateStr, Locale.CHINA);
} catch (ParseException e) {
log.error("toFormatDate: dateStr={} cause={}", dateStr, e);
}
return null;
}
/**
* String 转换Date格式(yyyy-MM-dd)
*
* @param dateStr 时间格式
* @return
*/
public static Date toFormatDate(String dateStr, String format) {
try {
DateFormatter dateFormatter = new DateFormatter(format);
return dateFormatter.parse(dateStr, Locale.CHINA);
} catch (ParseException e) {
log.error("toFormatDate: dateStr={} cause={}", dateStr, e);
}
return null;
}
/**
* @Description: 日期转String
* @params: [date, format]
* @Return: java.lang.String
* @Author: lixin
* @Date: 2018/8/6 15:31
* @Modified:
*/
public static String format(Date date, String format) {
if (date == null) {
return null;
}
return new SimpleDateFormat(format).format(date);
}
/**
* @Description: 获得格式化
* @params: [code]
* @Return: java.lang.String
* @Author: sulijuan
* @Date: 2018/8/13 11:31
* @Modified:
*/
public static String getFormat(String code) {
switch (code) {
case "0":
return "%Y-%m";
case "1":
return "%Y-%m-%d";
default:
return "%Y-%m";
}
}
/**
* @Description: 获得某天的 前后 n 天的日期
* @params: []
* @Return: java.lang.String
* @Author: sulijuan
* @Date: 2018/8/23 16:47
* @Modified:
*/
public static String getDaysBeforeOrAfter(Date today, String resultDateFormat, int n) {
SimpleDateFormat sdf = new SimpleDateFormat(resultDateFormat);
//获取三十天前日期
Calendar theCa = Calendar.getInstance();
theCa.setTime(today);
theCa.add(theCa.DATE, n);//最后一个数字30可改,30天的意思
Date start = theCa.getTime();
return sdf.format(start);//三十天之前日期
}
/**
* @Description: String 转 Date
* @params: [dateString]
* @Return: java.util.Date
* @Author: sulijuan
* @Date: 2018/8/23 16:58
* @Modified:
*/
public static Date toDate(String dateString) {
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format1.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
} //完成字符串年月日转年月日时分秒的字符串操作
public static Date toDateMillisecond(String dateString) {
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = null;
try {
date = format1.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
} //完成字符串年月日转年月日时分秒的字符串操作
public static String getFirsetFormat(String s) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
try {
Date parse = sdf.parse(s);
date = DateUtil.toFirstTimeOfDay(parse);
} catch (ParseException e) {
e.printStackTrace();
}
return sdf2.format(date);
}
public static String getLastFormat(String s) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
try {
Date parse = sdf.parse(s);
date = DateUtil.toLastTimeOfDay(parse);
} catch (ParseException e) {
e.printStackTrace();
}
return sdf2.format(date);
}
public static String getTimeByLong(long time) {
long hour = time / 3600;
time = time % 3600;
long min = time / 60;
return hour + "小时" + min + "分";
}
/**
* @Description: 获取当前年月日时分秒,20190110175750
* @params: []
* @Return: java.lang.String
* @Author: ckx
* @Date: 2019/1/10 17:57
* @Modified:
*/
public static String getNowDateString() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
return formatter.format(currentTime);
}
/**
* @Description: 两个时间之间的月份
* @params: [minDate, maxDate]
* @Return: java.util.List<java.lang.String>
* @Author: sulijuan
* @Date: 2018/11/7 19:34
* @Modified:
*/
public static List<String> getMonthBetween(String minDate, String maxDate) throws ParseException {
ArrayList<String> result = new ArrayList<String>();
//格式化为年月
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf.format(curr.getTime()));
curr.add(Calendar.MONTH, 1);
}
return result;
}
/**
* @Description: 两个时间的日期
* @params: [startDate, endDate]
* @Return: java.util.List<java.util.Date>
* @Author: sulijuan
* @Date: 2018/11/7 19:35
* @Modified:
*/
public static List<Date> dateSplit(Date startDate, Date endDate)
throws Exception {
if (!startDate.before(endDate)) {
throw new Exception("开始时间应该在结束时间之后");
}
Long spi = endDate.getTime() - startDate.getTime();
// 相隔天数
Long step = spi / (24 * 60 * 60 * 1000);
List<Date> dateList = new ArrayList<Date>();
dateList.add(endDate);
for (int i = 1; i <= step; i++) {
// 比上一天减一
dateList.add(new Date(dateList.get(i - 1).getTime()
- (24 * 60 * 60 * 1000)));
}
return dateList;
}
/**
* @Description: String时间排序
* @params: [data]
* @Return: java.util.List<java.lang.String>
* @Author: sulijuan
* @Date: 2018/11/8 13:27
* @Modified:
*/
public static List<String> compareDateMonthString(List<String> data) {
Collections.sort(data, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String[] arr1 = o1.split("_");
String[] arr2 = o2.split("_");
int comparator = toInt(arr1[0], +1) - toInt(arr2[0], +2);
if (comparator == 0) {
comparator = toInt(arr1[1], +1) - toInt(arr2[1], +2);
if (comparator == 0) {
return toInt(arr1[2], +1) - toInt(arr2[2], +2);
}
}
return comparator;
}
});
return data;
}
private static int toInt(String str, int delVal) {
try {
return Integer.parseInt(str);
} catch (Exception e) {
return delVal;
}
}
public static int getDaysBetweenTwoDays(String startDay, String endDay) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(toDate(startDay));
long fromTime = calendar.getTimeInMillis();
calendar.setTime(toDate(endDay));
long toTime = calendar.getTimeInMillis();
long between_days = (toTime - fromTime) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
}
public static boolean checkDateFormat(String dateStr) {
if (!StringUtils.isEmpty(dateStr) && dateStr.length() != 10) return false;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = simpleDateFormat.parse(dateStr);
return dateStr.equals(simpleDateFormat.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
public static String getFirstDayOfMonth(Date date) {
return getYearMonthDay(toBeginOfMonth(date));
}
public static String getEndDayOfMonth(Date date) {
return getYearMonthDay(toEndOfMonth(date));
}
public static void main(String[] args) throws ParseException {
System.out.println(DateUtil.getYearMonthDay(DateUtil.toBeginOfMonth(DateUtil.toDate("2020-02-11"))));
System.out.println(DateUtil.getYearMonthDay(DateUtil.toEndOfMonth(DateUtil.toDate("2020-02-11"))));
System.out.println(DateUtil.getDaysBetweenTwoDays("2020-11-11", DateUtil.getYearMonthDay(new Date())));
}
}
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;
}
}
package com.hs.admin.util;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.base.Result;
import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URI;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 功能描述:
*
* @author: Mr.XIE
* @date: 2018/9/4 18:11
* @param:
* @return:
*/
public class HttpUtil {
private static final Header[] defaultHeaders = new Header[]{new BasicHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)")};
/**
* 封装HTTP POST方法
*
* @param
* @param (如JSON串)
* @return
*/
public static String post(String url, String data) {
HttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "text/json; charset=utf-8");
HttpResponse response = null;
try {
httpPost.setEntity(new StringEntity(URLEncoder.encode(data, "UTF-8")));
response = httpClient.execute(httpPost);
} catch (IOException e) {
e.printStackTrace();
}
String httpEntityContent = getHttpEntityContent(response);
httpPost.abort();
return httpEntityContent;
}
/**
* 封装HTTP POST方法
*
* @param
* @param
* @return
* @throws ClientProtocolException
* @throws IOException
*/
public static String post(String url, Map<String, Object> paramMap) {
HttpResponse response = null;
HttpPost httpPost = null;
try {
HttpClient httpClient = HttpClients.createDefault();
httpPost = new HttpPost(url);
List<NameValuePair> formparams = setHttpParams(paramMap);
UrlEncodedFormEntity param = new UrlEncodedFormEntity(formparams, "UTF-8");
httpPost.setEntity(param);
response = httpClient.execute(httpPost);
} catch (IOException e) {
e.printStackTrace();
}
String httpEntityContent = getHttpEntityContent(response);
httpPost.abort();
return httpEntityContent;
}
/**
* 封装HTTP POST方法
*
* @param
* @param (如JSON串)
* @return
*/
public static String post(String url, Map<String, Object> paramMap, Header[] headers) {
HttpResponse response = null;
HttpPost httpPost = null;
try {
HttpClient httpClient = HttpClients.createDefault();
httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "text/json; charset=utf-8");
if (!ObjectUtils.isEmpty(headers)) {
httpPost.setHeaders(headers);
}
List<NameValuePair> formparams = setHttpParams(paramMap);
UrlEncodedFormEntity param = new UrlEncodedFormEntity(formparams, "UTF-8");
httpPost.setEntity(param);
response = httpClient.execute(httpPost);
} catch (IOException e) {
e.printStackTrace();
}
String httpEntityContent = getHttpEntityContent(response);
httpPost.abort();
return httpEntityContent;
}
/**
* 封装HTTP GET方法
*
* @param
* @return
* @throws ClientProtocolException
* @throws IOException
*/
public static String get(String url) {
return getWithHeader(url, null, "UTF8");
}
public static String getWithDefaultHeader(String url) {
return getWithHeader(url, defaultHeaders, "UTF8");
}
public static String getWithHeader(String url, Header[] headers, String charset) {
HttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet();
httpGet.setHeaders(headers);
httpGet.setURI(URI.create(url));
HttpResponse response = null;
try {
response = httpClient.execute(httpGet);
} catch (IOException e) {
LogUtil.info("url 请求失败" + url);
}
String httpEntityContent = getHttpEntityContent(response, charset);
httpGet.abort();
return httpEntityContent;
}
private static String getHttpEntityContent(HttpResponse response, String charset) {
HttpEntity entity = response.getEntity();
if (entity != null) {
try {
InputStream is = entity.getContent();
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(is, charset));
String line = br.readLine();
StringBuilder sb = new StringBuilder();
while (line != null) {
sb.append(line + "\n");
line = br.readLine();
}
return sb.toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return "";
}
/**
* 封装HTTP GET方法
*
* @param
* @param
* @return
* @throws ClientProtocolException
* @throws IOException
*/
public static String get(String url, Map<String, Object> paramMap) {
HttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet();
List<NameValuePair> formparams = setHttpParams(paramMap);
String param = URLEncodedUtils.format(formparams, "UTF-8");
httpGet.setURI(URI.create(url + "?" + param));
HttpResponse response = null;
try {
response = httpClient.execute(httpGet);
} catch (IOException e) {
LogUtil.error(e, String.format("调用接口(%s)异常>>>", url));
}
String httpEntityContent = getHttpEntityContent(response);
httpGet.abort();
return httpEntityContent;
}
/**
* 封装HTTP PUT方法
*
* @param
* @param
* @return
* @throws ClientProtocolException
* @throws IOException
*/
public static String put(String url, Map<String, Object> paramMap) {
HttpClient httpClient = HttpClients.createDefault();
HttpPut httpPut = new HttpPut(url);
List<NameValuePair> formparams = setHttpParams(paramMap);
UrlEncodedFormEntity param = null;
HttpResponse response = null;
try {
param = new UrlEncodedFormEntity(formparams, "UTF-8");
httpPut.setEntity(param);
response = httpClient.execute(httpPut);
} catch (IOException e) {
e.printStackTrace();
}
String httpEntityContent = getHttpEntityContent(response);
httpPut.abort();
return httpEntityContent;
}
/**
* 封装HTTP DELETE方法
*
* @param
* @return
* @throws ClientProtocolException
* @throws IOException
*/
public static String delete(String url) {
HttpClient httpClient = HttpClients.createDefault();
HttpDelete httpDelete = new HttpDelete();
httpDelete.setURI(URI.create(url));
HttpResponse response = null;
try {
response = httpClient.execute(httpDelete);
} catch (IOException e) {
e.printStackTrace();
}
String httpEntityContent = getHttpEntityContent(response);
httpDelete.abort();
return httpEntityContent;
}
/**
* 设置请求参数
*
* @param
* @return
*/
private static List<NameValuePair> setHttpParams(Map<String, Object> paramMap) {
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
Set<Map.Entry<String, Object>> set = paramMap.entrySet();
for (Map.Entry<String, Object> entry : set) {
formparams.add(new BasicNameValuePair(entry.getKey(), String.valueOf(entry.getValue())));
}
return formparams;
}
/**
* 获得响应HTTP实体内容
*
* @param response
* @return
* @throws IOException
* @throws UnsupportedEncodingException
*/
private static String getHttpEntityContent(HttpResponse response) {
return getHttpEntityContent(response, "UTF8");
}
public static String postJson(String url, String data) {
HttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json; charset=utf-8");
HttpResponse response = null;
try {
httpPost.setEntity(new StringEntity(data, "UTF-8"));
response = httpClient.execute(httpPost);
String httpEntityContent = EntityUtils.toString(response.getEntity());
httpPost.abort();
return httpEntityContent;
} catch (Exception e) {
LogUtil.error(e, "请求失败 url:" + url + ", data:" + data);
throw new HsRuntimeException(CodeMessageEnum.SERVICE_ERROR.getCode(), "请求接口失败");
}
}
public static HttpResponse head(String url) {
return headWithHeader(url, null);
}
public static HttpResponse headWithDefaultHeader(String url) {
return headWithHeader(url, defaultHeaders);
}
public static HttpResponse headWithHeader(String url, Header[] headers) {
HttpClient httpClient = HttpClients.createDefault();
HttpHead httpHead = new HttpHead();
httpHead.setHeaders(headers);
httpHead.setURI(URI.create(url));
HttpResponse response = null;
try {
response = httpClient.execute(httpHead);
} catch (IOException e) {
LogUtil.error(e, "HttpHead 失败");
}
httpHead.abort();
return response;
}
public static HttpServletRequest getRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
public static HttpServletResponse getResponse() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
}
public static String getSchemeAndDomain(HttpServletRequest request) {
return request.getScheme() + "://" + getServerName(request)
+ (request.getServerPort() == 443 || request.getServerPort() == 80
? "" : ":" + request.getServerPort());
}
public static String getServerName(HttpServletRequest request) {
//先从attribute取
if (request.getAttribute("targetServerNameForOverride") != null) {
return request.getAttribute("targetServerNameForOverride").toString();
}
//再从param取
String targetServerName = request.getParameter("targetServerNameForOverride");
//param没有才用host的值
String serverName = StringUtils.isEmpty(targetServerName) ? request.getServerName() : targetServerName;
//写到attribute
request.setAttribute("targetServerNameForOverride", serverName);
return serverName;
}
public static String postJsonWithHead(String url, Header[] headers, String data) {
HttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setHeaders(headers);
HttpResponse response = null;
try {
httpPost.setEntity(new StringEntity(data, "UTF-8"));
response = httpClient.execute(httpPost);
String httpEntityContent = EntityUtils.toString(response.getEntity());
httpPost.abort();
return httpEntityContent;
} catch (Exception e) {
LogUtil.error(e, "请求失败 url:" + url + ", data:" + data);
}
return "";
}
public static Header[] getBaseHeader(String token) {
return new Header[]{
new BasicHeader("Content-Type", "application/json; charset=utf-8"),
new BasicHeader("token", token)
};
}
private static Pattern domainPattern = Pattern.compile("http[s]?://([^#?/]*)[/?]+\\w+");
/**
* @Description: 获取域名
* @params: [url]
* @Return: java.lang.String
* @Author: ckx
* @Date: 2020/10/29 9:10
* @Modified:
*/
public static String getDomainFromUrl(String url) {
Matcher matcher = domainPattern.matcher(url);
if (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.group(0));
System.out.println(matcher.group(1));
return matcher.group(1);
}
return null;
}
/**
* @Description: 获取content-length
* @params: [response]
* @Return: long
* @Author: ckx
* @Date: 2020/10/29 11:59
* @Modified:
*/
public static long getContentLength(HttpResponse response) {
Header firstHeader = response.getFirstHeader("content-length");
if (firstHeader == null) {
return -1;
}
try {
String sizeValue = firstHeader.getValue();
return Long.parseLong(sizeValue);
} catch (Exception e) {
return -1;
}
}
/**
* @Description: 页面相对路径
* @params: [url]
* @Return: java.lang.String
* @Author: ckx
* @Date: 2020/11/3 14:51
* @Modified:
*/
public static String getBasePath(String url) {
if (url.contains("?")) {
url = url.substring(0, url.indexOf("?"));
}
if (!url.contains("/")) {
return url;
}
return url.substring(0, url.lastIndexOf("/") + 1);
}
private static Pattern charsetPattern = Pattern.compile("charset=([a-zA-Z0-9_\\-]+)");
public static String postWithToken(String url, Map map, String token) {
String result = null;
try {
HttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
post.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + token);
post.setEntity(new StringEntity(JsonUtils.beanToJson(map), "UTF-8"));
HttpResponse httpResponse = null;
httpResponse = httpClient.execute(post);
result = EntityUtils.toString(httpResponse.getEntity());
post.abort();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* @Description: 获取编码
* @params: [response]
* @Return: java.lang.String
* @Author: ckx
* @Date: 2020/11/9 11:22
* @Modified:
*/
public static String getCharset(HttpResponse response) {
Header lastHeader = response.getFirstHeader("content-type");
if (lastHeader == null) {
return null;
}
String value = lastHeader.getValue();
Matcher matcher = charsetPattern.matcher(value);
if (matcher.find()) {
return matcher.group(1);
}
return "";
}
}
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}
<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 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="updateJobStatus">
update sys_task
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>
<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}
</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 jcb j
left join sys_task st on j.jcb_id = st.jcb_id
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}
and st.job_status != 3
group by st.cid
order by st.create_time desc
limit #{pageSize}
offset #{index}
</select>
<update id="delTaskById">
update sys_task
set job_status=3
where job_status!=3 and jcb_id = (select jcb_id from jcb where id = #{id} limit 1)
</update>
<update id="delTask">
update sys_task
set job_status=3
where id = #{taskId}
</update>
<select id="getTaskList" resultMap="BaseResultMap">
<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 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
where jcb_id = #{jcbId}
and state = 1
limit 1
from sys_task where jcb_id=#{jcbId} and cid=#{cid} limit 1
</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}
<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}
</update>
</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">
......
*{margin:0;padding:0}#app,.wrapper,body,html{width:100%;height:100%;overflow:hidden}.warning-row{background-color:#00d1b2}body{font-family:PingFang SC,Helvetica Neue,Helvetica,microsoft yahei,arial,STHeiTi,sans-serif}a{text-decoration:none}.content-box{position:absolute;left:200px;right:0;top:60px;bottom:0;padding-bottom:30px;-webkit-transition:left .3s ease-in-out;transition:left .3s ease-in-out;background:#f0f0f0}.content{width:auto;height:100%;padding:10px;overflow-y:scroll;box-sizing:border-box}.content-collapse{left:65px}.container{padding:30px;background:#fff;border:1px solid #ddd;border-radius:5px}.crumbs{margin:10px 0}.el-table th{background-color:#f5f7fa!important}.pagination{margin:20px 0;text-align:right}.plugins-tips{padding:20px 10px;margin-bottom:20px}.el-button+.el-tooltip{margin-left:10px}.el-table tr:hover{background:#f6faff}.mgb20{margin-bottom:20px}.move-enter-active,.move-leave-active{transition:opacity .5s}.move-enter,.move-leave{opacity:0}.form-box{width:600px}.form-box .line{text-align:center}.el-time-panel__content:after,.el-time-panel__content:before{margin-top:-7px}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:0}.pure-button{width:150px;height:40px;line-height:40px;text-align:center;color:#fff;border-radius:3px}.g-core-image-corp-container .info-aside{height:45px}.el-upload--text{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;cursor:pointer;position:relative;overflow:hidden}.el-upload--text .el-icon-upload{font-size:67px;color:#97a8be;margin:40px 0 16px;line-height:50px}.el-upload--text{color:#97a8be;font-size:14px;text-align:center}.el-upload--text em{font-style:normal}.ql-container{min-height:400px}.ql-snow .ql-tooltip{transform:translateX(117.5px) translateY(10px)!important}.editor-btn{margin-top:20px}.v-note-wrapper .v-note-panel{min-height:500px}.header{background-color:#242f42}.login-wrap{background:#324157}.plugins-tips{background:#eef1f6}.el-upload--text em,.plugins-tips a{color:#20a0ff}.pure-button{background:#20a0ff}.tags-li.active{border:1px solid #409eff;background-color:#409eff}.message-title{color:#20a0ff}.collapse-btn:hover{background:#283446}.el-input--small .el-input__inner{height:42px;line-height:42px}#app{font-size:14px}.cnt p{max-height:200px;word-break:break-all;overflow-y:scroll;padding:0 20px}.cnt p::-webkit-scrollbar{width:6px}.cnt p::-webkit-scrollbar-thumb{background-color:silver}.cnt{width:60%!important}@font-face{font-family:iconfont;src:url(data:application/vnd.ms-fontobject;base64,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);src:url(data:application/vnd.ms-fontobject;base64,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#iefix) format("embedded-opentype"),url("data:application/x-font-woff2;charset=utf-8;base64,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") format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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) format("truetype"),url(../../assets/img/iconfont.2601476f.svg#iconfont) format("svg")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-jiaoseguanli:before{content:"\E648"}.icon-_caidanguanli:before{content:"\E60C"}.icon-jiaoseguanli_huaban1:before{content:"\E631"}.icon-iconfront-:before{content:"\E60A"}.icon-gongneng:before{content:"\E604"}[class*=" el-icon-lx"],[class^=el-icon-lx]{font-family:lx-iconfont!important}
\ No newline at end of file
*{margin:0;padding:0}#app,.wrapper,body,html{width:100%;height:100%;overflow:hidden}.warning-row{background-color:#00d1b2}body{font-family:PingFang SC,Helvetica Neue,Helvetica,microsoft yahei,arial,STHeiTi,sans-serif}a{text-decoration:none}.content-box{position:absolute;left:200px;right:0;top:60px;bottom:0;padding-bottom:30px;-webkit-transition:left .3s ease-in-out;transition:left .3s ease-in-out;background:#f0f0f0}.content{width:auto;height:100%;padding:10px;overflow-y:scroll;box-sizing:border-box}.content-collapse{left:65px}.container{padding:30px;background:#fff;border:1px solid #ddd;border-radius:5px}.crumbs{margin:10px 0}.el-table th{background-color:#f5f7fa!important}.pagination{margin:20px 0;text-align:right}.plugins-tips{padding:20px 10px;margin-bottom:20px}.el-button+.el-tooltip{margin-left:10px}.el-table tr:hover{background:#f6faff}.mgb20{margin-bottom:20px}.move-enter-active,.move-leave-active{transition:opacity .5s}.move-enter,.move-leave{opacity:0}.form-box{width:600px}.form-box .line{text-align:center}.el-time-panel__content:after,.el-time-panel__content:before{margin-top:-7px}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:0}.pure-button{width:150px;height:40px;line-height:40px;text-align:center;color:#fff;border-radius:3px}.g-core-image-corp-container .info-aside{height:45px}.el-upload--text{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;cursor:pointer;position:relative;overflow:hidden}.el-upload--text .el-icon-upload{font-size:67px;color:#97a8be;margin:40px 0 16px;line-height:50px}.el-upload--text{color:#97a8be;font-size:14px;text-align:center}.el-upload--text em{font-style:normal}.ql-container{min-height:400px}.ql-snow .ql-tooltip{transform:translateX(117.5px) translateY(10px)!important}.editor-btn{margin-top:20px}.v-note-wrapper .v-note-panel{min-height:500px}.header{background-color:#242f42}.login-wrap{background:#324157}.plugins-tips{background:#eef1f6}.el-upload--text em,.plugins-tips a{color:#20a0ff}.pure-button{background:#20a0ff}.tags-li.active{border:1px solid #409eff;background-color:#409eff}.message-title{color:#20a0ff}.collapse-btn:hover{background:#283446}.el-input--small .el-input__inner{height:42px;line-height:42px}#app{font-size:14px}@font-face{font-family:iconfont;src:url(data:application/vnd.ms-fontobject;base64,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);src:url(data:application/vnd.ms-fontobject;base64,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#iefix) format("embedded-opentype"),url("data:application/x-font-woff2;charset=utf-8;base64,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") format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAmMAAsAAAAADzgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8e0g7Y21hcAAAAYAAAABwAAAByH/1gG1nbHlmAAAB8AAABW0AAAiMKNC0VGhlYWQAAAdgAAAALwAAADYcS3D9aGhlYQAAB5AAAAAcAAAAJAfeA4dobXR4AAAHrAAAAA4AAAAYGAAAAGxvY2EAAAe8AAAADgAAAA4IogaybWF4cAAAB8wAAAAdAAAAIAEaAR1uYW1lAAAH7AAAAUUAAAJtPlT+fXBvc3QAAAk0AAAAVgAAAHWs+QlceJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByesTzzYG7438AQw9zI0AgUZgTJAQDi5QwxeJztkdsJwzAMRY9iJRTjUfqTLULJPP3qvFoj1aMJdIdcc4zvRbZBAmagOU9HQT4IobenknmjZ6683A8eTKipdRu22nYc8O8uiVefK35Sv5mvysKtkfv+c3N0schzL2ImNgrvHrYWMTPbCuQLzmIbTnicnVZNiFtVFL7n3nfvffcl7+W95P1kkjaZJJO8YdKZMckkQUczI1iRUhg6s6j1Z0oZSouWmdKFGxmqoHRT6q5YR1xUEK2ICC5sFwV3KrjoSkFwI0JpQaQbFdqM5770Zyy0C/Me9+ec7557znnfPTdEELK9zd5ihJjEI8fJ++Qq+YEQcMAP2725hqw2BtAugejPQBOqjbi3AL3GLDSEdPR0BjKILUMYOKh3cCZ8nEWdEkQ+TkKc9PpoIozCTnsBBhA34gH0O21taC5GKzKMZCNuVKWQcQ+3iRvdOQ3sN+I+rmr3e/1IyJLexJe8i4onodeJBqBBXcSjCR/30aYCP4wqjZghCB1AwQzQr8ebzcVmc9wNICj5EFymjqLZPABQLq22QqN+zufSV10lDEohn6XKZhR/IqeBlBrCainf1DihMlJ2FDcYJEBH4+LxGMCY4Fa+mZeyZgDEZQa0rKV1bkVTecUnUDpZxl3vvEzfW3dsY+xpPz0R042VlQ0aT6SdIychY8GprP0VXR4MlmnSQhqmnp3CdyMo53LlYH/KyWc5+h3IXYyZ3HGENIzdIrAEF+irncqkC+lMpJ3jXGiYYZg8kxEW2yX9lGkmICddtOf4dDlj5bjMZrnMWZnxPdy2pUwnYsyH62Ji0nZ5mqelbb7ZPLmVpkAdT+1eml5Zp3R9ZXpptxKTHx9/znIgX6BicIDSA4NnlgGWCf4s3bDTdJscJJ+QL8k35DvyM7lO/gYDXELqyARkhuZSBpBS+CVrCYFkwipNHaHJJYPk20cy4RlyCBUlmIeEQf1ISzQjewlnupqyLaQSPkiJEa3QTA030yTLQNzv6dEsdJFY+MxCf0QyNNCJQv2gxUgKPSpDEO84CnO9dugLqKGrmoea5Mh7VhXaR+1RH/lY8x7Wj2KIOto/VEFFW+pUtC25Y8xOZUXKosAmDMvwsqFBBe9wQY0g56FkAhllpQR+LADJ70MV11CUJNAw63G1E2oq8CzGLc6tsmsow8tZlDc5tdCmMtyyVnBmZbP/BSnGm4YW7wCp7Bf1Vmtfq1UvxfF8HA8/u1KZBpiujLpf3BAgdK/c7R6tgs+Ht8102gRDtzvGf2CkLrdYXbtvidwo0pywdKR1ZnE3F4ySIkFHmiSFJYGaZpIR9lDunkKvc55Sbsmi9EGcOC65St0PM+eZCqNMICqbVSNI2TURYjGjeQJ02PtaW5MY9vwk1GFP9XJ1D9ztZkLvshcmzZ3O/aCTbnZHRnR3Lu2m8f1t1OHxSM7Ih/RPUiHTZC9W3h01LUratq6fupwlQ9The6++8REa2eUnHIxKSEKU0Hxrnm6+uvoOm28dOkHDagDszNqxd5MRPfHjoj6jiwu6BTrThdUXmnNzzaU1AB9L5Bq8WDoyv7rJ2Obq/JFS9YNjbhi6R88wduaoHq1t7YeVhUVdohYXVnjxUG//uvO8vffwXvsV940Dru+7L53TNwrZvs62mEMypExmyQJZIofJBjmNUVZmoOuNiB95DkBVBJ4f4rTX9/AIaX3sDUDrUSFQL72SnvZwWaP2iPVRBRPzmPVaP1p/aXjTLxbxNvCLAMXhT2YqZUJgpgAsBd9qJYoTNSqVlYgDDRou/N+VcAEKPt5huHh4wy/AQTR2I1GEZmr46WOUt/+6Z9FP7GvlzQemce3j1ITidzjNvmdvk4i0Mfd1LIocqaUTwrH01XVSdMnFREkR16oNzFEXaTbAgtvv4eXPLgzPR09Ew/MhXpv5EF4PWxG8Fo7B2Ef/SKUUy/i/2pYzZt+6ZY/h7Xrxmm1fs6cKw9XClH13DBcLU5fODn9PZagA/GtQYcamWSxIefaslIUiIf8CDo0iNQAAAHicY2BkYGAA4vMxTaLx/DZfGbhZGEDgzjSxBgT9v56FgbkRyOVgYAKJAgAVZQmTAHicY2BkYGBu+N/AEMPCAAJAkpEBFbABAEcMAm94nGNhYGBgwYIBAWgAGQAAAAAAAAEuAsADLgPyBEYAAHicY2BkYGBgYxRk4GIAASYg5gKz/4P5DAALlQE5AAAAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicY2BigAAuBuyAjZGJkZmRhZGVkY2RnYEnKzMxvzg1vTQxLyeTNz45MTMlMQ/CE0GWis8oTUxKzDPkykzOz0srys8r0eVIz89Lz0vNS2dgAAC8QRn5AAA=) format("woff"),url(data:font/ttf;base64,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) format("truetype"),url(../../assets/img/iconfont.2601476f.svg#iconfont) format("svg")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-jiaoseguanli:before{content:"\E648"}.icon-_caidanguanli:before{content:"\E60C"}.icon-jiaoseguanli_huaban1:before{content:"\E631"}.icon-iconfront-:before{content:"\E60A"}.icon-gongneng:before{content:"\E604"}[class*=" el-icon-lx"],[class^=el-icon-lx]{font-family:lx-iconfont!important}
\ No newline at end of file
.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
(function(e){function t(t){for(var r,o,u=t[0],c=t[1],s=t[2],d=0,f=[];d<u.length;d++)o=u[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&f.push(a[o][0]),a[o]=0;for(r in c)Object.prototype.hasOwnProperty.call(c,r)&&(e[r]=c[r]);l&&l(t);while(f.length)f.shift()();return i.push.apply(i,s||[]),n()}function n(){for(var e,t=0;t<i.length;t++){for(var n=i[t],r=!0,o=1;o<n.length;o++){var u=n[o];0!==a[u]&&(r=!1)}r&&(i.splice(t--,1),e=c(c.s=n[0]))}return e}var r={},o={app:0},a={app:0},i=[];function u(e){return c.p+"assets/js/"+({home:"home",login:"login"}[e]||e)+"."+{"chunk-28f026cb":"b6534f5c","chunk-2d0baaed":"63c807a0","chunk-43c7bfcd":"923dd2ea","chunk-4a69c5b2":"e2350b14","chunk-7eb22a7c":"b12b3968","chunk-85c5c440":"b836c6fd","chunk-960b7570":"de4bfbcb",home:"58e3c6ff",login:"4b0121a0"}[e]+".js"}function c(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,c),n.l=!0,n.exports}c.e=function(e){var t=[],n={"chunk-28f026cb":1,"chunk-43c7bfcd":1,"chunk-4a69c5b2":1,"chunk-7eb22a7c":1,"chunk-85c5c440":1,"chunk-960b7570":1,home:1,login:1};o[e]?t.push(o[e]):0!==o[e]&&n[e]&&t.push(o[e]=new Promise((function(t,n){for(var r="assets/css/"+({home:"home",login:"login"}[e]||e)+"."+{"chunk-28f026cb":"f56aee47","chunk-2d0baaed":"31d6cfe0","chunk-43c7bfcd":"7e8048d0","chunk-4a69c5b2":"96e62ea0","chunk-7eb22a7c":"cd0a3386","chunk-85c5c440":"e08b36b5","chunk-960b7570":"f7204c3c",home:"b760c1b8",login:"5d8b150e"}[e]+".css",a=c.p+r,i=document.getElementsByTagName("link"),u=0;u<i.length;u++){var s=i[u],d=s.getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(d===r||d===a))return t()}var f=document.getElementsByTagName("style");for(u=0;u<f.length;u++){s=f[u],d=s.getAttribute("data-href");if(d===r||d===a)return t()}var l=document.createElement("link");l.rel="stylesheet",l.type="text/css",l.onload=t,l.onerror=function(t){var r=t&&t.target&&t.target.src||a,i=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");i.code="CSS_CHUNK_LOAD_FAILED",i.request=r,delete o[e],l.parentNode.removeChild(l),n(i)},l.href=a;var p=document.getElementsByTagName("head")[0];p.appendChild(l)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var i=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=i);var s,d=document.createElement("script");d.charset="utf-8",d.timeout=120,c.nc&&d.setAttribute("nonce",c.nc),d.src=u(e);var f=new Error;s=function(t){d.onerror=d.onload=null,clearTimeout(l);var n=a[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",f.name="ChunkLoadError",f.type=r,f.request=o,n[1](f)}a[e]=void 0}};var l=setTimeout((function(){s({type:"timeout",target:d})}),12e4);d.onerror=d.onload=s,document.head.appendChild(d)}return Promise.all(t)},c.m=e,c.c=r,c.d=function(e,t,n){c.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},c.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.t=function(e,t){if(1&t&&(e=c(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(c.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)c.d(n,r,function(t){return e[t]}.bind(null,r));return n},c.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return c.d(t,"a",t),t},c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.p="",c.oe=function(e){throw console.error(e),e};var s=window["webpackJsonp"]=window["webpackJsonp"]||[],d=s.push.bind(s);s.push=t,s=s.slice();for(var f=0;f<s.length;f++)t(s[f]);var l=d;i.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("56d7")},"0048":function(e,t,n){},"034f":function(e,t,n){"use strict";n("0048")},4360:function(e,t,n){"use strict";var r=n("a593"),o=n("7736"),a=(n("ac67"),n("1bc78"),n("32ea"),n("6a61"),n("4833")),i=n("55ae"),u=n("7ded");function c(e){sessionStorage.token=e}function s(){return sessionStorage.token}function d(){sessionStorage.removeItem("token")}function f(e){sessionStorage.role=e}function l(){return sessionStorage.role||""}function p(){sessionStorage.removeItem("role")}function h(e){localStorage.useraccount=JSON.stringify(e)}function b(){return localStorage.useraccount&&JSON.parse(localStorage.useraccount)||""}function m(){localStorage.removeItem("useraccount")}function g(e){sessionStorage.userinfo=JSON.stringify(e)}function v(){return sessionStorage.userinfo&&JSON.parse(sessionStorage.userinfo)||""}function O(){sessionStorage.removeItem("userinfo")}function j(e){sessionStorage.root=JSON.stringify(e)}function k(){return sessionStorage.root&&JSON.parse(sessionStorage.root)||""}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach((function(t){Object(i["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var S={state:{userinfo:v()||"",token:s()||"",role:l()||"",user_account:b()||""},mutations:{set_userinfo:function(e,t){g(t),e.userinfo=t},reset_UserInfo:function(e){O(),e.token=""},set_token:function(e,t){c(t),e.token=t},reset_token:function(e){d(),e.token=""},set_role:function(e,t){f(t),e.role=t},reset_role:function(e){p(),e.role=""},set_user_account:function(e,t){e=w(w({},e),{},{user_account:t}),h(t)},reset_user_account:function(e){m(),e.user_account=""}},actions:{login:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t,n){var r,o;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r=t.commit,e.next=3,Object(u["b"])(n);case 3:if(o=e.sent,200!=o.code){e.next=10;break}return r("set_token",o.data.token),r("set_userinfo",o.data),e.abrupt("return",{success:!0,data:o});case 10:return e.abrupt("return",{success:!1});case 11:case"end":return e.stop()}}),e)})));function t(t,n){return e.apply(this,arguments)}return t}(),loginout:function(e,t){var n=e.commit;n("reset_token"),n("reset_role"),n("reset_UserInfo")}},getters:{}},x=w({namespaced:!0},S);n("b775");var P=n("c968"),R=[{name:"任务管理",route:"/schedule",type:"PAGE"},{name:"租户配置",route:"/personnel",type:"PAGE"}],B=n("a18c");function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){Object(i["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var E={state:{root:k()||{}},mutations:{setRoot:function(e,t){j(t),e.root=t}},actions:{setRoot:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t,n){var r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:r=new P["a"](R||[],"children"),r.init(),t.commit("setRoot",r);case 3:case"end":return e.stop()}}),e)})));function t(t,n){return e.apply(this,arguments)}return t}(),btnShow:function(e,t){var n=e.state,r=t.path,o=void 0===r?B["a"].currentRoute.path:r,a=t.index,i=["/add","/del","/update","/list","/distribution","/with","/orderOptions","/orderOk","/orderStop","/orderFinish","/feedback","/reminder","/forward","/resetPwd","/tenant"],u=o+i[a];return n.root&&n.root.buttonRootObj&&n.root.buttonRootObj[u]?n.root.buttonRootObj[u]:""}},getters:{}},A=_({namespaced:!0},E);r["default"].use(o["a"]);t["a"]=new o["a"].Store({modules:{user:x,root:A}})},"56d7":function(e,t,n){"use strict";n.r(t);n("25ba"),n("5f1c"),n("6ba0"),n("b47f");var r=n("a593"),o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[e.isRouterAlive?n("router-view"):e._e()],1)},a=[],i={provide:function(){return{reload:this.reload}},data:function(){return{isRouterAlive:!0}},methods:{reload:function(){this.isRouterAlive=!1,this.$nextTick((function(){this.isRouterAlive=!0}))}}},u=i,c=(n("034f"),n("b0a0"),n("5d22")),s=Object(c["a"])(u,o,a,!1,null,null,null),d=s.exports,f=n("a18c"),l=n("4360"),p=n("2763"),h=n.n(p),b=n("4d28"),m=n.n(b),g=(n("6a61"),n("4833")),v=n("38bc"),O=n.n(v),j=(n("70e7"),n("bfd3"));O.a.configure({showSpinner:!1,parent:"#app"});var k=["/login","/register"];f["a"].beforeEach(function(){var e=Object(g["a"])(regeneratorRuntime.mark((function e(t,n,r){var o,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(o=Object(j["a"])(),O.a.start(),-1!=k.indexOf(t.path)){e.next=16;break}if(o){e.next=8;break}return r("/login"),e.abrupt("return");case 8:if(a=["/userInfo","/pwd"],-1!=a.indexOf(t.path)){e.next=16;break}return e.next=12,l["a"].dispatch("root/setRoot");case 12:if(l["a"].state.root.root.pageRootObj[t.path]){e.next=16;break}return e.abrupt("return");case 16:document.title="HScloud",o?"/login"===t.path?r({path:"/"}):r():-1!==k.indexOf(t.path)?r():r("/login?redirect=".concat(t.path));case 18:case"end":return e.stop()}}),e)})));return function(t,n,r){return e.apply(this,arguments)}}()),f["a"].afterEach((function(e,t){O.a.done()})),r["default"].mixin({data:function(){return{addBtnState:!1,delBtnState:!1,updateBtnState:!1,distributionBtnState:!1,widthBtn:!1,orderOptionsBtn:!1,orderOkBtn:!1,orderStopBtn:!1,orderFinishBtn:!1,feedbackBtn:!1,reminderBtn:!1,forwardBtn:!1,resetPwdBtn:!1,tenantBtn:!1}},mounted:function(){var e=Object(g["a"])(regeneratorRuntime.mark((function e(){var t=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.setTableHeight&&setTimeout((function(){var e=document.getElementsByClassName("content")[0].offsetHeight,n=document.getElementsByClassName("container")[0].offsetHeight;t.table.height=e-n-22,document.getElementsByClassName("el-table--fit")[0].style.height=t.table.height+"px",document.getElementsByClassName("el-table")[0].style.height=t.table.height+"px"})),["/add","/del","/update","/list","/distribution","/with","/orderOptions","/orderOk","/orderStop","/orderFinish","/feedback","/reminder","/forward","/resetPwd","/tenant"],e.next=4,l["a"].dispatch("root/btnShow",{index:0});case 4:return this.addBtnState=e.sent,e.next=7,l["a"].dispatch("root/btnShow",{index:1});case 7:return this.delBtnState=e.sent,e.next=10,l["a"].dispatch("root/btnShow",{index:2});case 10:return this.updateBtnState=e.sent,e.next=13,l["a"].dispatch("root/btnShow",{index:4});case 13:return this.distributionBtnState=e.sent,e.next=16,l["a"].dispatch("root/btnShow",{index:5});case 16:return this.widthBtn=e.sent,e.next=19,l["a"].dispatch("root/btnShow",{index:6});case 19:return this.orderOptionsBtn=e.sent,e.next=22,l["a"].dispatch("root/btnShow",{index:7});case 22:return this.orderOkBtn=e.sent,e.next=25,l["a"].dispatch("root/btnShow",{index:8});case 25:return this.orderStopBtn=e.sent,e.next=28,l["a"].dispatch("root/btnShow",{index:9});case 28:return this.orderFinishBtn=e.sent,e.next=31,l["a"].dispatch("root/btnShow",{index:10});case 31:return this.feedbackBtn=e.sent,e.next=34,l["a"].dispatch("root/btnShow",{index:11});case 34:return this.reminderBtn=e.sent,e.next=37,l["a"].dispatch("root/btnShow",{index:12});case 37:return this.forwardBtn=e.sent,e.next=40,l["a"].dispatch("root/btnShow",{index:13});case 40:return this.resetPwdBtn=e.sent,e.next=43,l["a"].dispatch("root/btnShow",{index:14});case 43:this.tenantBtn=e.sent;case 44:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),methods:{btnRoot:function(e){var t=e.type,n=void 0===t?"":t,r=l["a"].state.root;return!!(r.root&&r.root.buttonRootObj&&r.root.buttonRootObj[n])}}});n("ed2c"),n("ccc1"),n("d21e"),n("9f45");r["default"].use(h.a,{size:"small"}),r["default"].prototype.$echarts=m.a,r["default"].config.productionTip=!1,new r["default"]({router:f["a"],store:l["a"],render:function(e){return e(d)}}).$mount("#app")},"6a00":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r={"/index":{icon:"el-icon-s-home",path:"/index",title:"系统首页",topbar:0},"/system":{icon:"el-icon-user-solid",path:"/system",title:"系统设置",topbar:0},"/role":{icon:"el-icon-user-solid",path:"/role",title:"用户角色",topbar:0},"/personnel":{icon:"el-icon-s-tools",path:"/personnel",title:"租户配置",topbar:0},"/schedule":{icon:"el-icon-s-tools",path:"/schedule",title:"任务管理",topbar:0,noMenu:!0}}},"7ded":function(e,t,n){"use strict";n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return a})),n.d(t,"c",(function(){return i}));var r=n("b775");function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(r["a"])({url:"/api/admin/login",method:"post",data:e})}function a(){return window.apiurl+"/AccAdmin/checkCode"}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(r["a"])({url:"/AccAdmin/register",method:"post",data:e})}},"83cd":function(e,t,n){},a18c:function(e,t,n){"use strict";var r=n("a593"),o=n("8aaf");r["default"].use(o["a"]),t["a"]=new o["a"]({routes:[{path:"/",redirect:"/index"},{path:"/",component:function(){return n.e("home").then(n.bind(null,"bfe9"))},meta:{title:""},children:[{path:"/index",component:function(){return n.e("chunk-2d0baaed").then(n.bind(null,"37f9"))},meta:{title:"首页",topbar:0}},{path:"/role",component:function(){return n.e("chunk-7eb22a7c").then(n.bind(null,"6c35"))},meta:{title:"角色管理",topbar:0}},{path:"/userInfo",component:function(){return n.e("chunk-960b7570").then(n.bind(null,"1ff4"))},meta:{title:"个人中心",topbar:0}},{path:"/pwd",component:function(){return n.e("chunk-4a69c5b2").then(n.bind(null,"1f06"))},meta:{title:"修改密码",topbar:0}},{path:"/personnel",component:function(){return n.e("chunk-28f026cb").then(n.bind(null,"2fc2"))},meta:{title:"租户配置",topbar:0}},{path:"/schedule",name:"schedule",component:function(){return n.e("chunk-43c7bfcd").then(n.bind(null,"4a5b"))},meta:{title:"任务管理",topbar:0}}]},{path:"/login",name:"login",component:function(){return n.e("login").then(n.bind(null,"ede4"))},meta:{title:"登录"}},{path:"/register",component:function(){return n.e("chunk-85c5c440").then(n.bind(null,"b953"))},meta:{title:"注册"}},{path:"*",redirect:"/"}]})},b0a0:function(e,t,n){"use strict";n("83cd")},b775:function(e,t,n){"use strict";n("4057"),n("6a61");var r,o=n("4833"),a=n("73ef"),i=n.n(a),u=n("2763"),c=n("4360"),s=n("bfd3"),d=n("a18c"),f=!0,l=i.a.create({baseURL:window.apiurl,timeout:2e4});l.interceptors.request.use((function(e){if(!e.loadingClose){var t=e.loadingOptions||{lock:!0,text:"",spinner:"el-icon-loading",background:"rgba(0, 0, 0, 0.02)"};r=u["Loading"].service(t)}if(Object(s["a"])()&&(e.headers["token"]=Object(s["a"])()),e.data){var n=JSON.parse(JSON.stringify(e)),o={pageNum:n.data.pageNum,pageSize:n.data.pageSize};o.pageNum&&o.pageSize&&(-1!=e.url.indexOf("?")?e.url=e.url+"&pageNum="+o.pageNum+"&pageSize="+o.pageSize:e.url=e.url+"?pageNum="+o.pageNum+"&pageSize="+o.pageSize)}return e}),(function(e){return r.close(),Promise.reject(e)})),l.interceptors.response.use((function(e){r.close();var t=e.data;return 200==e.status?t:Promise.reject(new Error(t.message||"Error"))}),function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(console.log(t),r.close(),f){e.next=6;break}return e.abrupt("return",Promise.reject(t));case 6:f=!1,setTimeout((function(){f=!0}),2e3);case 8:if(-1==t.toString().indexOf("401")){e.next=25;break}if(!Object(s["b"])()){e.next=15;break}return e.next=12,c["a"].dispatch("user/login",Object(s["b"])());case 12:d["a"].go(0),e.next=23;break;case 15:if(!Object(s["a"])()){e.next=22;break}return Object(u["Message"])({message:"token失效!",type:"error",duration:2e3}),e.next=19,c["a"].dispatch("user/loginout");case 19:d["a"].push("/login?redirect="+d["a"].currentRoute.path),e.next=23;break;case 22:Object(u["Message"])({message:"没有权限!",type:"error",duration:2e3});case 23:e.next=26;break;case 25:-1!=t.toString().indexOf("timeout")?Object(u["Message"])({message:"请求超时,请重新尝试!",type:"error",duration:2e3}):-1!=t.toString().indexOf("500")?Object(u["Message"])({message:"服务器错误!",type:"error",duration:2e3}):-1!=t.toString().indexOf("Network Error")&&Object(u["Message"])({message:"网络连接错误,请先检查你的网络!",type:"error",duration:2e3});case 26:return e.abrupt("return",Promise.reject(t));case 27:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),t["a"]=l},bfd3:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return a}));var r=n("4360");function o(){return r["a"].state.user.token}function a(){return r["a"].state.user.user_account}},c968:function(e,t,n){"use strict";n.d(t,"e",(function(){return c})),n.d(t,"b",(function(){return s})),n.d(t,"c",(function(){return d})),n.d(t,"d",(function(){return f})),n.d(t,"a",(function(){return p}));n("a450"),n("1bc78");var r=n("1222"),o=n("a3b6"),a=n("55ae"),i=(n("e680"),n("a18c")),u=n("6a00");function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.data,n=void 0===t?{}:t,r=e.msg,o=void 0===r?"":r;return{success:!0,data:n,msg:o}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.data,n=void 0===t?{}:t,r=e.msg,o=void 0===r?"":r;return{success:!1,data:n,msg:o}}function d(e){if(e instanceof Object){var t=c();for(var n in e)d(e[n]).success||(t=s({data:[n]}));return t}return null===e||""===e?s():c()}function f(e,t){if(""===e)return c({data:""});if(0==e.length&&"-"===e)return c({data:e});if(Number(e)||0===Number(e)){var n=Number(e);try{e.indexOf(".")===e.lastIndexOf(".")&&-1!=e.indexOf&&(n=e)}catch(o){}return c({data:n})}var r=Number(t);return s({data:r})}var l=function(){function e(t){Object(r["a"])(this,e),Object(a["a"])(this,"data",{}),this.data=t}return Object(o["a"])(e,null,[{key:"deepMap",value:function(e,t,n){var r=this;e.forEach((function(e,o){e[t]?(n(e,o),r.deepMap(e[t],t,n)):n(e,o)}))}}]),e}(),p=function(){function e(t,n){Object(r["a"])(this,e),Object(a["a"])(this,"childrenProp",""),Object(a["a"])(this,"rootData",[]),Object(a["a"])(this,"pageRootObj",{}),Object(a["a"])(this,"buttonRootObj",{}),Object(a["a"])(this,"allRootObj",{}),Object(a["a"])(this,"menus",[]),this.rootData=t,this.childrenProp=n,this.init()}return Object(o["a"])(e,[{key:"setButtonRootObj",value:function(e){var t=e.item,n=void 0===t?{}:t;"BTN"==n.type&&(this.buttonRootObj[n.route]=n)}},{key:"setPageRootObj",value:function(e){var t=e.item,n=void 0===t?{}:t;"PAGE"==n.type&&(this.pageRootObj[n.route]=n)}},{key:"setAllRootObj",value:function(e){var t=e.item,n=void 0===t?{}:t;this.allRootObj[n.route]=n}},{key:"buttonShow",value:function(e){var t=e.path,n=void 0===t?i["a"].currentRoute.path:t,r=e.index,o=["/add","/del","/update","/distribution"],a=n+o[r];return!!this.buttonRootObj[a]}},{key:"setMenus",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.iconKey,n=void 0===t?"icon":t,r=e.path,o=void 0===r?"path":r,a=e.menuName,i=void 0===a?"title":a,c=e.topBar,s=void 0===c?"topbar":c,d=e.noMenu,f=void 0===d?"noMenu":d,p=JSON.parse(JSON.stringify(this.rootData));l.deepMap(p,this.childrenProp,(function(e,t){e[n]=u["a"][e.route]&&u["a"][e.route].icon,e[o]=u["a"][e.route]&&u["a"][e.route].path,e[i]=u["a"][e.route]&&u["a"][e.route].name||e.name,e[s]=u["a"][e.route]&&u["a"][e.route].topbar,e[f]=u["a"][e.route]&&u["a"][e.route].noMenu})),this.menus=p}},{key:"init",value:function(){var e=this;(this.childrenProp||0==this.childrenProp)&&l.deepMap(this.rootData,this.childrenProp,(function(t,n){e.setAllRootObj({item:t}),e.setButtonRootObj({item:t}),e.setPageRootObj({item:t})})),this.setMenus()}}]),e}()},d21e:function(e,t,n){},ed2c:function(e,t,n){}});
\ No newline at end of file
(function(e){function t(t){for(var r,o,c=t[0],u=t[1],s=t[2],d=0,l=[];d<c.length;d++)o=c[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&l.push(a[o][0]),a[o]=0;for(r in u)Object.prototype.hasOwnProperty.call(u,r)&&(e[r]=u[r]);f&&f(t);while(l.length)l.shift()();return i.push.apply(i,s||[]),n()}function n(){for(var e,t=0;t<i.length;t++){for(var n=i[t],r=!0,o=1;o<n.length;o++){var c=n[o];0!==a[c]&&(r=!1)}r&&(i.splice(t--,1),e=u(u.s=n[0]))}return e}var r={},o={app:0},a={app:0},i=[];function c(e){return u.p+"assets/js/"+({home:"home",login:"login"}[e]||e)+"."+{"chunk-2d0baaed":"63c807a0","chunk-4a69c5b2":"e2350b14","chunk-51e7c6e2":"2af3e1c4","chunk-1e6c22d6":"283b1844","chunk-5d54dd36":"b93d1a02","chunk-7eb22a7c":"b12b3968","chunk-85c5c440":"b836c6fd","chunk-960b7570":"de4bfbcb","chunk-c45e86aa":"a4ca04a7",home:"58e3c6ff",login:"a9c970fb"}[e]+".js"}function u(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,u),n.l=!0,n.exports}u.e=function(e){var t=[],n={"chunk-4a69c5b2":1,"chunk-51e7c6e2":1,"chunk-1e6c22d6":1,"chunk-5d54dd36":1,"chunk-7eb22a7c":1,"chunk-85c5c440":1,"chunk-960b7570":1,"chunk-c45e86aa":1,home:1,login:1};o[e]?t.push(o[e]):0!==o[e]&&n[e]&&t.push(o[e]=new Promise((function(t,n){for(var r="assets/css/"+({home:"home",login:"login"}[e]||e)+"."+{"chunk-2d0baaed":"31d6cfe0","chunk-4a69c5b2":"96e62ea0","chunk-51e7c6e2":"43994efc","chunk-1e6c22d6":"88e4453f","chunk-5d54dd36":"7c756ae4","chunk-7eb22a7c":"cd0a3386","chunk-85c5c440":"e08b36b5","chunk-960b7570":"f7204c3c","chunk-c45e86aa":"f20de64c",home:"b760c1b8",login:"89f359f2"}[e]+".css",a=u.p+r,i=document.getElementsByTagName("link"),c=0;c<i.length;c++){var s=i[c],d=s.getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(d===r||d===a))return t()}var l=document.getElementsByTagName("style");for(c=0;c<l.length;c++){s=l[c],d=s.getAttribute("data-href");if(d===r||d===a)return t()}var f=document.createElement("link");f.rel="stylesheet",f.type="text/css",f.onload=t,f.onerror=function(t){var r=t&&t.target&&t.target.src||a,i=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");i.code="CSS_CHUNK_LOAD_FAILED",i.request=r,delete o[e],f.parentNode.removeChild(f),n(i)},f.href=a;var h=document.getElementsByTagName("head")[0];h.appendChild(f)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var i=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=i);var s,d=document.createElement("script");d.charset="utf-8",d.timeout=120,u.nc&&d.setAttribute("nonce",u.nc),d.src=c(e);var l=new Error;s=function(t){d.onerror=d.onload=null,clearTimeout(f);var n=a[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",l.name="ChunkLoadError",l.type=r,l.request=o,n[1](l)}a[e]=void 0}};var f=setTimeout((function(){s({type:"timeout",target:d})}),12e4);d.onerror=d.onload=s,document.head.appendChild(d)}return Promise.all(t)},u.m=e,u.c=r,u.d=function(e,t,n){u.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},u.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.t=function(e,t){if(1&t&&(e=u(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(u.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)u.d(n,r,function(t){return e[t]}.bind(null,r));return n},u.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return u.d(t,"a",t),t},u.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},u.p="",u.oe=function(e){throw console.error(e),e};var s=window["webpackJsonp"]=window["webpackJsonp"]||[],d=s.push.bind(s);s.push=t,s=s.slice();for(var l=0;l<s.length;l++)t(s[l]);var f=d;i.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("56d7")},"0048":function(e,t,n){},"034f":function(e,t,n){"use strict";n("0048")},4360:function(e,t,n){"use strict";var r=n("a593"),o=n("7736"),a=(n("ac67"),n("1bc78"),n("32ea"),n("6a61"),n("4833")),i=n("55ae"),c=n("7ded");function u(e){sessionStorage.token=e}function s(){return sessionStorage.token}function d(){sessionStorage.removeItem("token")}function l(e){sessionStorage.role=e}function f(){return sessionStorage.role||""}function h(){sessionStorage.removeItem("role")}function p(e){localStorage.useraccount=JSON.stringify(e)}function b(){return localStorage.useraccount&&JSON.parse(localStorage.useraccount)||""}function m(){localStorage.removeItem("useraccount")}function g(e){sessionStorage.userinfo=JSON.stringify(e)}function v(){return sessionStorage.userinfo&&JSON.parse(sessionStorage.userinfo)||""}function O(){sessionStorage.removeItem("userinfo")}function k(e){sessionStorage.root=JSON.stringify(e)}function j(){return sessionStorage.root&&JSON.parse(sessionStorage.root)||""}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach((function(t){Object(i["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var S={state:{userinfo:v()||"",token:s()||"",role:f()||"",user_account:b()||""},mutations:{set_userinfo:function(e,t){g(t),e.userinfo=t},reset_UserInfo:function(e){O(),e.token=""},set_token:function(e,t){u(t),e.token=t},reset_token:function(e){d(),e.token=""},set_role:function(e,t){l(t),e.role=t},reset_role:function(e){h(),e.role=""},set_user_account:function(e,t){e=w(w({},e),{},{user_account:t}),p(t)},reset_user_account:function(e){m(),e.user_account=""}},actions:{login:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t,n){var r,o;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r=t.commit,e.next=3,Object(c["b"])(n);case 3:if(o=e.sent,200!=o.code){e.next=10;break}return r("set_token",o.data.token),r("set_userinfo",o.data),e.abrupt("return",{success:!0,data:o});case 10:return e.abrupt("return",{success:!1});case 11:case"end":return e.stop()}}),e)})));function t(t,n){return e.apply(this,arguments)}return t}(),loginout:function(e,t){var n=e.commit;n("reset_token"),n("reset_role"),n("reset_UserInfo")}},getters:{}},x=w({namespaced:!0},S);n("b775");var P=n("c968"),R=[{name:"任务管理",route:"/schedule",type:"PAGE"},{name:"租户配置",route:"/personnel",type:"PAGE"},{name:"任务日志",route:"/scheduleLog",type:"PAGE"}],B=n("a18c");function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){Object(i["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var E={state:{root:j()||{}},mutations:{setRoot:function(e,t){k(t),e.root=t}},actions:{setRoot:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(t,n){var r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:r=new P["a"](R||[],"children"),r.init(),t.commit("setRoot",r);case 3:case"end":return e.stop()}}),e)})));function t(t,n){return e.apply(this,arguments)}return t}(),btnShow:function(e,t){var n=e.state,r=t.path,o=void 0===r?B["a"].currentRoute.path:r,a=t.index,i=["/add","/del","/update","/list","/distribution","/with","/orderOptions","/orderOk","/orderStop","/orderFinish","/feedback","/reminder","/forward","/resetPwd","/tenant"],c=o+i[a];return n.root&&n.root.buttonRootObj&&n.root.buttonRootObj[c]?n.root.buttonRootObj[c]:""}},getters:{}},A=_({namespaced:!0},E);r["default"].use(o["a"]);t["a"]=new o["a"].Store({modules:{user:x,root:A}})},"56d7":function(e,t,n){"use strict";n.r(t);n("25ba"),n("5f1c"),n("6ba0"),n("b47f");var r=n("a593"),o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[e.isRouterAlive?n("router-view"):e._e()],1)},a=[],i={provide:function(){return{reload:this.reload}},data:function(){return{isRouterAlive:!0}},methods:{reload:function(){this.isRouterAlive=!1,this.$nextTick((function(){this.isRouterAlive=!0}))}}},c=i,u=(n("034f"),n("b0a0"),n("5d22")),s=Object(u["a"])(c,o,a,!1,null,null,null),d=s.exports,l=n("a18c"),f=n("4360"),h=n("2763"),p=n.n(h),b=n("4d28"),m=n.n(b),g=(n("6a61"),n("4833")),v=n("38bc"),O=n.n(v),k=(n("70e7"),n("bfd3"));O.a.configure({showSpinner:!1,parent:"#app"});var j=["/login","/register"];l["a"].beforeEach(function(){var e=Object(g["a"])(regeneratorRuntime.mark((function e(t,n,r){var o,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(o=Object(k["a"])(),O.a.start(),-1!=j.indexOf(t.path)){e.next=16;break}if(o){e.next=8;break}return r("/login"),e.abrupt("return");case 8:if(a=["/userInfo","/pwd"],-1!=a.indexOf(t.path)){e.next=16;break}return e.next=12,f["a"].dispatch("root/setRoot");case 12:if(f["a"].state.root.root.pageRootObj[t.path]){e.next=16;break}return e.abrupt("return");case 16:document.title="DataAgent",o?"/login"===t.path?r({path:"/"}):r():-1!==j.indexOf(t.path)?r():r("/login?redirect=".concat(t.path));case 18:case"end":return e.stop()}}),e)})));return function(t,n,r){return e.apply(this,arguments)}}()),l["a"].afterEach((function(e,t){O.a.done()})),r["default"].mixin({data:function(){return{addBtnState:!1,delBtnState:!1,updateBtnState:!1,distributionBtnState:!1,widthBtn:!1,orderOptionsBtn:!1,orderOkBtn:!1,orderStopBtn:!1,orderFinishBtn:!1,feedbackBtn:!1,reminderBtn:!1,forwardBtn:!1,resetPwdBtn:!1,tenantBtn:!1}},mounted:function(){var e=Object(g["a"])(regeneratorRuntime.mark((function e(){var t=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.setTableHeight&&setTimeout((function(){var e=document.getElementsByClassName("content")[0].offsetHeight,n=document.getElementsByClassName("container")[0].offsetHeight;t.table.height=e-n-22,document.getElementsByClassName("el-table--fit")[0].style.height=t.table.height+"px",document.getElementsByClassName("el-table")[0].style.height=t.table.height+"px"})),["/add","/del","/update","/list","/distribution","/with","/orderOptions","/orderOk","/orderStop","/orderFinish","/feedback","/reminder","/forward","/resetPwd","/tenant"],e.next=4,f["a"].dispatch("root/btnShow",{index:0});case 4:return this.addBtnState=e.sent,e.next=7,f["a"].dispatch("root/btnShow",{index:1});case 7:return this.delBtnState=e.sent,e.next=10,f["a"].dispatch("root/btnShow",{index:2});case 10:return this.updateBtnState=e.sent,e.next=13,f["a"].dispatch("root/btnShow",{index:4});case 13:return this.distributionBtnState=e.sent,e.next=16,f["a"].dispatch("root/btnShow",{index:5});case 16:return this.widthBtn=e.sent,e.next=19,f["a"].dispatch("root/btnShow",{index:6});case 19:return this.orderOptionsBtn=e.sent,e.next=22,f["a"].dispatch("root/btnShow",{index:7});case 22:return this.orderOkBtn=e.sent,e.next=25,f["a"].dispatch("root/btnShow",{index:8});case 25:return this.orderStopBtn=e.sent,e.next=28,f["a"].dispatch("root/btnShow",{index:9});case 28:return this.orderFinishBtn=e.sent,e.next=31,f["a"].dispatch("root/btnShow",{index:10});case 31:return this.feedbackBtn=e.sent,e.next=34,f["a"].dispatch("root/btnShow",{index:11});case 34:return this.reminderBtn=e.sent,e.next=37,f["a"].dispatch("root/btnShow",{index:12});case 37:return this.forwardBtn=e.sent,e.next=40,f["a"].dispatch("root/btnShow",{index:13});case 40:return this.resetPwdBtn=e.sent,e.next=43,f["a"].dispatch("root/btnShow",{index:14});case 43:this.tenantBtn=e.sent;case 44:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),methods:{btnRoot:function(e){var t=e.type,n=void 0===t?"":t,r=f["a"].state.root;return!!(r.root&&r.root.buttonRootObj&&r.root.buttonRootObj[n])}}});n("ed2c"),n("ccc1"),n("d21e"),n("9f45");r["default"].use(p.a,{size:"small"}),r["default"].prototype.$echarts=m.a,r["default"].config.productionTip=!1,new r["default"]({router:l["a"],store:f["a"],render:function(e){return e(d)}}).$mount("#app")},"6a00":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r={"/index":{icon:"el-icon-s-home",path:"/index",title:"系统首页",topbar:0},"/system":{icon:"el-icon-user-solid",path:"/system",title:"系统设置",topbar:0},"/role":{icon:"el-icon-user-solid",path:"/role",title:"用户角色",topbar:0},"/personnel":{icon:"el-icon-s-tools",path:"/personnel",title:"租户配置",topbar:0},"/schedule":{icon:"el-icon-s-tools",path:"/schedule",title:"任务管理",topbar:0,noMenu:!0},"/scheduleLog":{icon:"el-icon-s-tools",path:"/scheduleLog",title:"任务日志",topbar:0,noMenu:!0}}},"7ded":function(e,t,n){"use strict";n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return a})),n.d(t,"c",(function(){return i}));var r=n("b775");function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(r["a"])({url:"/api/admin/login",method:"post",data:e})}function a(){return window.apiurl+"/AccAdmin/checkCode"}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(r["a"])({url:"/AccAdmin/register",method:"post",data:e})}},"83cd":function(e,t,n){},a18c:function(e,t,n){"use strict";var r=n("a593"),o=n("8aaf");r["default"].use(o["a"]),t["a"]=new o["a"]({routes:[{path:"/",redirect:"/index"},{path:"/",component:function(){return n.e("home").then(n.bind(null,"bfe9"))},meta:{title:""},children:[{path:"/index",component:function(){return n.e("chunk-2d0baaed").then(n.bind(null,"37f9"))},meta:{title:"首页",topbar:0}},{path:"/role",component:function(){return n.e("chunk-7eb22a7c").then(n.bind(null,"6c35"))},meta:{title:"角色管理",topbar:0}},{path:"/userInfo",component:function(){return n.e("chunk-960b7570").then(n.bind(null,"1ff4"))},meta:{title:"个人中心",topbar:0}},{path:"/pwd",component:function(){return n.e("chunk-4a69c5b2").then(n.bind(null,"1f06"))},meta:{title:"修改密码",topbar:0}},{path:"/personnel",component:function(){return n.e("chunk-c45e86aa").then(n.bind(null,"2fc2"))},meta:{title:"租户配置",topbar:0}},{path:"/schedule",name:"schedule",component:function(){return Promise.all([n.e("chunk-51e7c6e2"),n.e("chunk-1e6c22d6")]).then(n.bind(null,"4a5b"))},meta:{title:"任务管理",topbar:0}},{path:"/scheduleLog",name:"scheduleLog",component:function(){return Promise.all([n.e("chunk-51e7c6e2"),n.e("chunk-5d54dd36")]).then(n.bind(null,"c51b"))},meta:{title:"任务日志",topbar:0}}]},{path:"/login",name:"login",component:function(){return n.e("login").then(n.bind(null,"ede4"))},meta:{title:"登录"}},{path:"/register",component:function(){return n.e("chunk-85c5c440").then(n.bind(null,"b953"))},meta:{title:"注册"}},{path:"*",redirect:"/"}]})},b0a0:function(e,t,n){"use strict";n("83cd")},b775:function(e,t,n){"use strict";n("4057"),n("6a61");var r,o=n("4833"),a=n("73ef"),i=n.n(a),c=n("2763"),u=n("4360"),s=n("bfd3"),d=n("a18c"),l=!0,f=i.a.create({baseURL:window.apiurl,timeout:2e4});f.interceptors.request.use((function(e){if(!e.loadingClose){var t=e.loadingOptions||{lock:!0,text:"",spinner:"el-icon-loading",background:"rgba(0, 0, 0, 0.02)"};r=c["Loading"].service(t)}if(Object(s["a"])()&&(e.headers["token"]=Object(s["a"])()),e.data){var n=JSON.parse(JSON.stringify(e)),o={pageNum:n.data.pageNum,pageSize:n.data.pageSize};o.pageNum&&o.pageSize&&(-1!=e.url.indexOf("?")?e.url=e.url+"&pageNum="+o.pageNum+"&pageSize="+o.pageSize:e.url=e.url+"?pageNum="+o.pageNum+"&pageSize="+o.pageSize)}return e}),(function(e){return r.close(),Promise.reject(e)})),f.interceptors.response.use((function(e){r.close();var t=e.data;return 200==e.status?t:Promise.reject(new Error(t.message||"Error"))}),function(){var e=Object(o["a"])(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(console.log(t),r.close(),l){e.next=6;break}return e.abrupt("return",Promise.reject(t));case 6:l=!1,setTimeout((function(){l=!0}),2e3);case 8:if(-1==t.toString().indexOf("401")){e.next=25;break}if(!Object(s["b"])()){e.next=15;break}return e.next=12,u["a"].dispatch("user/login",Object(s["b"])());case 12:d["a"].go(0),e.next=23;break;case 15:if(!Object(s["a"])()){e.next=22;break}return Object(c["Message"])({message:"token失效!",type:"error",duration:2e3}),e.next=19,u["a"].dispatch("user/loginout");case 19:d["a"].push("/login?redirect="+d["a"].currentRoute.path),e.next=23;break;case 22:Object(c["Message"])({message:"没有权限!",type:"error",duration:2e3});case 23:e.next=26;break;case 25:-1!=t.toString().indexOf("timeout")?Object(c["Message"])({message:"请求超时,请重新尝试!",type:"error",duration:2e3}):-1!=t.toString().indexOf("500")?Object(c["Message"])({message:"服务器错误!",type:"error",duration:2e3}):-1!=t.toString().indexOf("Network Error")&&Object(c["Message"])({message:"网络连接错误,请先检查你的网络!",type:"error",duration:2e3});case 26:return e.abrupt("return",Promise.reject(t));case 27:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),t["a"]=f},bfd3:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return a}));var r=n("4360");function o(){return r["a"].state.user.token}function a(){return r["a"].state.user.user_account}},c968:function(e,t,n){"use strict";n.d(t,"e",(function(){return u})),n.d(t,"b",(function(){return s})),n.d(t,"c",(function(){return d})),n.d(t,"d",(function(){return l})),n.d(t,"a",(function(){return h}));n("a450"),n("1bc78");var r=n("1222"),o=n("a3b6"),a=n("55ae"),i=(n("e680"),n("a18c")),c=n("6a00");function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.data,n=void 0===t?{}:t,r=e.msg,o=void 0===r?"":r;return{success:!0,data:n,msg:o}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.data,n=void 0===t?{}:t,r=e.msg,o=void 0===r?"":r;return{success:!1,data:n,msg:o}}function d(e){if(e instanceof Object){var t=u();for(var n in e)d(e[n]).success||(t=s({data:[n]}));return t}return null===e||""===e?s():u()}function l(e,t){if(""===e)return u({data:""});if(0==e.length&&"-"===e)return u({data:e});if(Number(e)||0===Number(e)){var n=Number(e);try{e.indexOf(".")===e.lastIndexOf(".")&&-1!=e.indexOf&&(n=e)}catch(o){}return u({data:n})}var r=Number(t);return s({data:r})}var f=function(){function e(t){Object(r["a"])(this,e),Object(a["a"])(this,"data",{}),this.data=t}return Object(o["a"])(e,null,[{key:"deepMap",value:function(e,t,n){var r=this;e.forEach((function(e,o){e[t]?(n(e,o),r.deepMap(e[t],t,n)):n(e,o)}))}}]),e}(),h=function(){function e(t,n){Object(r["a"])(this,e),Object(a["a"])(this,"childrenProp",""),Object(a["a"])(this,"rootData",[]),Object(a["a"])(this,"pageRootObj",{}),Object(a["a"])(this,"buttonRootObj",{}),Object(a["a"])(this,"allRootObj",{}),Object(a["a"])(this,"menus",[]),this.rootData=t,this.childrenProp=n,this.init()}return Object(o["a"])(e,[{key:"setButtonRootObj",value:function(e){var t=e.item,n=void 0===t?{}:t;"BTN"==n.type&&(this.buttonRootObj[n.route]=n)}},{key:"setPageRootObj",value:function(e){var t=e.item,n=void 0===t?{}:t;"PAGE"==n.type&&(this.pageRootObj[n.route]=n)}},{key:"setAllRootObj",value:function(e){var t=e.item,n=void 0===t?{}:t;this.allRootObj[n.route]=n}},{key:"buttonShow",value:function(e){var t=e.path,n=void 0===t?i["a"].currentRoute.path:t,r=e.index,o=["/add","/del","/update","/distribution"],a=n+o[r];return!!this.buttonRootObj[a]}},{key:"setMenus",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.iconKey,n=void 0===t?"icon":t,r=e.path,o=void 0===r?"path":r,a=e.menuName,i=void 0===a?"title":a,u=e.topBar,s=void 0===u?"topbar":u,d=e.noMenu,l=void 0===d?"noMenu":d,h=JSON.parse(JSON.stringify(this.rootData));f.deepMap(h,this.childrenProp,(function(e,t){e[n]=c["a"][e.route]&&c["a"][e.route].icon,e[o]=c["a"][e.route]&&c["a"][e.route].path,e[i]=c["a"][e.route]&&c["a"][e.route].name||e.name,e[s]=c["a"][e.route]&&c["a"][e.route].topbar,e[l]=c["a"][e.route]&&c["a"][e.route].noMenu})),this.menus=h}},{key:"init",value:function(){var e=this;(this.childrenProp||0==this.childrenProp)&&f.deepMap(this.rootData,this.childrenProp,(function(t,n){e.setAllRootObj({item:t}),e.setButtonRootObj({item:t}),e.setPageRootObj({item:t})})),this.setMenus()}}]),e}()},d21e:function(e,t,n){},ed2c:function(e,t,n){}});
\ No newline at end of file
(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-28f026cb"],{"083f":function(t,e,a){"use strict";a("6f74")},"0e55":function(t,e,a){},"2fc2":function(t,e,a){"use strict";a.r(e);var r=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container"},[a("div",{staticClass:"tables"},[a("div",{staticClass:"handle-box"},[a("el-button",{staticClass:"handle-del mr10",attrs:{type:"primary",icon:"el-icon-add"},on:{click:t.addController}},[t._v("添加")])],1),a("div",{staticClass:"el-table el-table--fit"},[0==t.table.tableData.length?a("div",{staticStyle:{width:"100%",height:"100%",display:"flex","justify-content":"center","align-items":"center"}},[t._v("\n 暂无数据\n ")]):t._e(),t._l(t.table.tableData,(function(e,r){return a("el-card",{key:r,staticClass:"card_item"},[a("div",{staticClass:"card_title",attrs:{slot:"header"},slot:"header"},[a("span",[t._v(t._s(e.name))])]),a("div",{staticClass:"card_row"},[a("span",[t._v("编号:")]),t._v("\n "+t._s(e.jcbId)+"\n ")]),a("div",{staticClass:"card_row"},[a("span",[t._v("数据库:")]),t._v("\n "+t._s(e.dbName)+"\n ")]),a("div",{staticClass:"card_row"},[a("el-button",{attrs:{plain:"",type:"success",size:"mini"},on:{click:function(a){return t.scheduleController(r,e)}}},[t._v("\n 任务 \n ")]),a("el-button",{attrs:{size:"mini"},on:{click:function(a){return t.editController(r,e)}}},[t._v("\n 修改 \n ")]),a("el-button",{attrs:{type:"danger",size:"mini"},on:{click:function(a){return t.delController(r,e)}}},[t._v("\n 删除\n ")])],1)])}))],2),a("div",{staticClass:"pagination"},[a("el-pagination",{attrs:{background:"",layout:t.page.layout,"current-page":t.page.currentpage,"page-size":t.page.pagesize,total:t.page.pagetotal,"page-sizes":t.page.pagesizes},on:{"current-change":t.pageChange,"size-change":t.pagesizechange}})],1)]),a("el-dialog",{attrs:{width:"60%",title:t.dialog.title,visible:t.dialog.show,"before-close":t.dialogClose},on:{"update:visible":function(e){return t.$set(t.dialog,"show",e)}}},[a("addup",{attrs:{formData:t.dialog.form,dialog:t.dialog},on:{formSuccess:t.formSuccess}})],1)],1)},s=[],n=(a("ac67"),a("1bc78"),a("32ea"),a("a450"),a("55ae")),i=(a("6a61"),a("4833")),o=a("b775");function c(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/getJcbList",method:"GET",data:t})}function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/deleteJcb",method:"GET",params:t})}function d(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/saveJcb",method:"PUT",data:t})}function u(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/saveJcb",method:"PUT",data:t})}var f=a("c968"),m=a("2763"),p=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"form"},[a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("名称:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入名称"},model:{value:t.formData.data.jcbName,callback:function(e){t.$set(t.formData.data,"jcbName",e)},expression:"formData.data.jcbName"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("租户编号:")]),a("el-input",{staticClass:"inputcol",attrs:{disabled:1==t.formData.idtype,placeholder:"请输入租户编号"},model:{value:t.formData.data.jcbId,callback:function(e){t.$set(t.formData.data,"jcbId",e)},expression:"formData.data.jcbId"}})],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库IP:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库IP"},model:{value:t.formData.data.host,callback:function(e){t.$set(t.formData.data,"host",e)},expression:"formData.data.host"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库端口:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库端口"},model:{value:t.formData.data.port,callback:function(e){t.$set(t.formData.data,"port",e)},expression:"formData.data.port"}})],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库名称:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库名称"},model:{value:t.formData.data.dbName,callback:function(e){t.$set(t.formData.data,"dbName",e)},expression:"formData.data.dbName"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库类型:")]),a("el-select",{staticClass:"inputcol",attrs:{placeholder:"请选择数据库类型"},model:{value:t.formData.data.type,callback:function(e){t.$set(t.formData.data,"type",e)},expression:"formData.data.type"}},[a("el-option",{attrs:{label:"Sql server",value:1}}),a("el-option",{attrs:{label:"Mysql",value:2}}),a("el-option",{attrs:{label:"Oracle",value:3}})],1)],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库用户名:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库用户名"},model:{value:t.formData.data.dbUsername,callback:function(e){t.$set(t.formData.data,"dbUsername",e)},expression:"formData.data.dbUsername"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库密码:")]),a("el-input",{staticClass:"inputcol",attrs:{type:"password",placeholder:"请输入数据库密码"},model:{value:t.formData.data.dbPwd,callback:function(e){t.$set(t.formData.data,"dbPwd",e)},expression:"formData.data.dbPwd"}})],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable"}),a("el-button",{staticClass:"submit",attrs:{type:"primary"},on:{click:t.formsubmit}},[t._v(t._s(t.submittext))]),a("el-button",{staticClass:"formcancel",attrs:{type:"primary"},on:{click:t.formcancel}},[t._v(t._s(t.canceltext))])],1)],1)],1)},h=[],b=(a("d0f2"),{props:{formData:{type:Object},dialog:{type:Object}},data:function(){return{submittext:"确定",canceltext:"取消"}},methods:{formsubmit:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:0==this.formData.idtype?this.addService():1==this.formData.idtype&&this.updateService();case 1:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),formcancel:function(){this.dialog.show=!1},formRefresh:function(t){var e=t.msg,a=void 0===e?"":e;a&&this.$nextTick((function(){Object(m["Message"])({message:a,type:"error",duration:2e3})}))},addService:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=this.addModel(),!e.success){t.next=8;break}return t.next=4,d(e.data);case 4:a=t.sent,200==a.code?(this.$emit("formSuccess",{idtype:0}),Object(m["Message"])({message:"添加成功",type:"success",duration:2e3}),this.formcancel()):Object(m["Message"])({message:a.message||"添加失败,请从重新尝试!",type:"error",duration:2e3}),t.next=9;break;case 8:this.formRefresh({msg:e.msg});case 9:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),updateService:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=this.updateModel(),!e.success){t.next=8;break}return t.next=4,u(e.data);case 4:a=t.sent,200==a.code?(this.$emit("formSuccess",{idtype:1}),Object(m["Message"])({message:"修改成功",type:"success",duration:2e3}),this.formcancel()):Object(m["Message"])({message:a.message||"修改失败,请从重新尝试!",type:"error",duration:2e3}),t.next=9;break;case 8:this.formRefresh({msg:e.msg});case 9:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),addModel:function(){var t={jcbId:this.formData.data.jcbId,jcbName:this.formData.data.jcbName,host:this.formData.data.host,port:this.formData.data.port,dbName:this.formData.data.dbName,dbUsername:this.formData.data.dbUsername,dbPwd:this.formData.data.dbPwd,type:this.formData.data.type};return Object(f["c"])(t).success?Object(f["e"])({data:t}):Object(f["b"])({msg:"必填项不能为空"})},updateModel:function(){var t={id:this.formData.data.id,jcbId:this.formData.data.jcbId,jcbName:this.formData.data.jcbName,host:this.formData.data.host,port:this.formData.data.port,dbName:this.formData.data.dbName,dbUsername:this.formData.data.dbUsername,dbPwd:this.formData.data.dbPwd,type:this.formData.data.type};return Object(f["c"])({jcbId:this.formData.data.jcbId,jcbName:this.formData.data.jcbName,host:this.formData.data.host,port:this.formData.data.port,dbName:this.formData.data.dbName,dbUsername:this.formData.data.dbUsername,dbPwd:this.formData.data.dbPwd}).success?Object(f["e"])({data:t}):Object(f["b"])({msg:"必填项不能为空"})},valiIp:function(t,e){var a="",r=t.match(/[0-9]|[.]/g);return r instanceof Array&&r.map((function(t,e){a+=t})),Object(f["e"])({data:a})}},mounted:function(){},computed:{},watch:{"formData.data.port":function(t,e){this.formData.data.port=Object(f["d"])(t,e).data},"formData.data.host":function(t,e){this.formData.data.host=this.valiIp(t,e).data}}}),g=b,v=(a("aad0"),a("4d12"),a("5d22")),y=Object(v["a"])(g,p,h,!1,null,"4091bd11",null),w=y.exports;function j(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function D(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?j(Object(a),!0).forEach((function(e){Object(n["a"])(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):j(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}var C=c,O=l,x={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:{},setTableHeight:!0}},mounted:function(){this.init()},components:{addup:w},methods:{init:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.getlist(D({},this.pagequery()));case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),getlist:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e,a,r,s=this,n=arguments;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e=n.length>0&&void 0!==n[0]?n[0]:{},t.next=3,C(D(D({},e),this.formquery()));case 3:a=t.sent,200==a.code&&(this.table.tableData=a.data.list||[],r=a.data.length,this.page.currentpage>1&&0==r&&(this.page.currentpage=this.page.currentpage-1,this.$nextTick((function(){s.getlist(e)}))),this.page.pagetotal=a.data.total||0);case 5:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),formquery:function(){var t=this,e={};for(var a in t.query)Object(f["c"])(t.query[a]).success&&(e[a]=t.query[a]);return e},pagequery:function(){return{pageNum:this.page.currentpage,pageSize:this.page.pagesize}},querysearch:function(){this.getlist(D({},this.pagequery()))},pageChange:function(t){var e=this;this.page.currentpage=t,this.$nextTick((function(){e.getlist(e.pagequery())}))},pagesizechange:function(t){var e=this;this.page.pagesize=t,this.$nextTick((function(){e.getlist(e.pagequery())}))},dialogClose:function(t){this.getlist(this.pagequery()),t()},handleSelectionChange:function(t){console.log(t)},delAllSelection:function(){},formSuccess:function(t){this.getlist(this.pagequery())},addController:function(){var t=this.addModel();t.success&&(this.dialog.form={idtype:t.idtype,data:t.data},this.dialog.show=!0)},delController:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(e,a){var r=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:this.$confirm("此操作将删除该数据, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(Object(i["a"])(regeneratorRuntime.mark((function t(){var e,s;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=r.delOneModel(a),!e.success){t.next=6;break}return t.next=4,O(e.data);case 4:s=t.sent,200==s.code?(r.$message({message:"删除成功",type:"success"}),r.getlist(r.pagequery())):r.$message({message:s.msg||"删除失败,请从新尝试",type:"error"});case 6:case"end":return t.stop()}}),t)})))).catch((function(){}));case 1:case"end":return t.stop()}}),t,this)})));function e(e,a){return t.apply(this,arguments)}return e}(),editController:function(t,e){var a=this.updateModel(e);a.success&&(this.dialog.form={idtype:a.idtype,data:a.data},this.dialog.show=!0)},editPwdController:function(t,e){},scheduleController:function(t,e){this.$router.push({path:"schedule",query:{jcbId:e.jcbId}})},updateModel:function(t){for(var e in t.jcbName=t.name,t)t[e]||0==t[e]||(t[e]="");return{idtype:1,success:!0,data:D({},t)}},delOneModel:function(t){return{success:!0,data:{jcbId:t.jcbId}}},addModel:function(){return{idtype:0,success:!0,data:{jcbId:"",jcbName:"",host:"",port:"",dbName:"",dbUsername:"",dbPwd:"",type:1}}}}},k=x,_=(a("6d99"),a("083f"),Object(v["a"])(k,r,s,!1,null,"452ec523",null));e["default"]=_.exports},"47a0":function(t,e,a){},"4d12":function(t,e,a){"use strict";a("e719")},"6d99":function(t,e,a){"use strict";a("47a0")},"6f74":function(t,e,a){},aad0:function(t,e,a){"use strict";a("0e55")},e719:function(t,e,a){}}]);
\ 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
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-c45e86aa"],{"27f3":function(t,e,a){"use strict";a("fde1")},"2fc2":function(t,e,a){"use strict";a.r(e);var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container"},[a("div",{staticClass:"tables"},[a("div",{staticClass:"handle-box"},[a("el-button",{staticClass:"handle-del mr10",attrs:{type:"primary",icon:"el-icon-add"},on:{click:t.addController}},[t._v("添加")])],1),a("div",{staticClass:"el-table el-table--fit"},[0==t.table.tableData.length?a("div",{staticStyle:{width:"100%",height:"100%",display:"flex","justify-content":"center","align-items":"center"}},[t._v("\n 暂无数据\n ")]):t._e(),t._l(t.table.tableData,(function(e,s){return a("el-card",{key:s,staticClass:"card_item"},[a("div",{staticClass:"card_title",attrs:{slot:"header"},slot:"header"},[a("span",[t._v(t._s(e.name))])]),a("div",{staticClass:"card_row"},[a("span",[t._v("租户编号:")]),t._v("\n "+t._s(e.jcbId)+"\n ")]),a("div",{staticClass:"card_row"},[a("span",[t._v("数据库:")]),t._v("\n "+t._s(e.dbName)+"\n ")]),a("div",{staticClass:"card_row"},[a("el-button",{attrs:{plain:"",type:"success",size:"mini"},on:{click:function(a){return t.scheduleController(s,e)}}},[t._v("\n 任务 \n ")]),a("el-button",{attrs:{size:"mini"},on:{click:function(a){return t.editController(s,e)}}},[t._v("\n 修改 \n ")]),a("el-button",{attrs:{type:"danger",size:"mini"},on:{click:function(a){return t.delController(s,e)}}},[t._v("\n 删除\n ")])],1)])}))],2),a("div",{staticClass:"pagination"},[a("el-pagination",{attrs:{background:"",layout:t.page.layout,"current-page":t.page.currentpage,"page-size":t.page.pagesize,total:t.page.pagetotal,"page-sizes":t.page.pagesizes},on:{"current-change":t.pageChange,"size-change":t.pagesizechange}})],1)]),a("el-dialog",{attrs:{width:"60%",title:t.dialog.title,visible:t.dialog.show,"before-close":t.dialogClose},on:{"update:visible":function(e){return t.$set(t.dialog,"show",e)}}},[a("addup",{attrs:{formData:t.dialog.form,dialog:t.dialog},on:{formSuccess:t.formSuccess}})],1)],1)},r=[],n=(a("ac67"),a("1bc78"),a("32ea"),a("a450"),a("55ae")),i=(a("6a61"),a("4833")),o=a("b775");function c(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/getJcbList",method:"GET",data:t})}function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/deleteJcb",method:"GET",params:t})}function d(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/saveJcb",method:"PUT",data:t})}function u(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/saveJcb",method:"PUT",data:t})}function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o["a"])({url:"/api/admin/checkDataBase",method:"POST",data:t})}var p=a("c968"),f=a("2763"),h=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"form"},[a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("名称:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入名称"},model:{value:t.formData.data.jcbName,callback:function(e){t.$set(t.formData.data,"jcbName",e)},expression:"formData.data.jcbName"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("租户编号:")]),a("el-input",{staticClass:"inputcol",attrs:{disabled:1==t.formData.idtype,placeholder:"请输入租户编号"},model:{value:t.formData.data.jcbId,callback:function(e){t.$set(t.formData.data,"jcbId",e)},expression:"formData.data.jcbId"}})],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库IP:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库IP"},model:{value:t.formData.data.host,callback:function(e){t.$set(t.formData.data,"host",e)},expression:"formData.data.host"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库端口:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库端口"},model:{value:t.formData.data.port,callback:function(e){t.$set(t.formData.data,"port",e)},expression:"formData.data.port"}})],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库名称:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库名称"},model:{value:t.formData.data.dbName,callback:function(e){t.$set(t.formData.data,"dbName",e)},expression:"formData.data.dbName"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库类型:")]),a("el-select",{staticClass:"inputcol",attrs:{placeholder:"请选择数据库类型"},model:{value:t.formData.data.type,callback:function(e){t.$set(t.formData.data,"type",e)},expression:"formData.data.type"}},[a("el-option",{attrs:{label:"Sql server",value:1}}),a("el-option",{attrs:{label:"Mysql",value:2}}),a("el-option",{attrs:{label:"Oracle",value:3}})],1)],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库用户名:")]),a("el-input",{staticClass:"inputcol",attrs:{placeholder:"请输入数据库用户名"},model:{value:t.formData.data.dbUsername,callback:function(e){t.$set(t.formData.data,"dbUsername",e)},expression:"formData.data.dbUsername"}}),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",staticStyle:{position:"relative"},attrs:{span:24}},[a("div",{staticClass:"formlable required"},[t._v("数据库密码:")]),a("el-input",{staticClass:"inputcol",attrs:{type:"password",placeholder:"请输入数据库密码"},model:{value:t.formData.data.dbPwd,callback:function(e){t.$set(t.formData.data,"dbPwd",e)},expression:"formData.data.dbPwd"}}),a("el-button",{staticClass:"connection",staticStyle:{"line-height":"6px",position:"absolute",right:"0px",bottom:"-22px","z-index":"100"},attrs:{type:"primary",plain:"",size:"mini"},on:{click:t.dbConnectionService}},[t._v("连接测试")])],1)],1)],1)],1),a("el-row",{staticClass:"formrow"},[a("el-col",{staticClass:"formcol",attrs:{span:24}},[a("div",{staticClass:"formlable"}),a("el-button",{staticClass:"submit",attrs:{type:"primary"},on:{click:t.formsubmit}},[t._v(t._s(t.submittext))]),a("el-button",{staticClass:"formcancel",attrs:{type:"primary"},on:{click:t.formcancel}},[t._v(t._s(t.canceltext))])],1)],1)],1)},b=[],g=(a("d0f2"),{props:{formData:{type:Object},dialog:{type:Object}},data:function(){return{submittext:"确定",canceltext:"取消"}},methods:{formsubmit:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:0==this.formData.idtype?this.addService():1==this.formData.idtype&&this.updateService();case 1:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),formcancel:function(){this.dialog.show=!1},formRefresh:function(t){var e=t.msg,a=void 0===e?"":e;a&&this.$nextTick((function(){Object(f["Message"])({message:a,type:"error",duration:2e3})}))},addService:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=this.addModel(),!e.success){t.next=8;break}return t.next=4,d(e.data);case 4:a=t.sent,200==a.code?(this.$emit("formSuccess",{idtype:0}),Object(f["Message"])({message:"添加成功",type:"success",duration:2e3}),this.formcancel()):Object(f["Message"])({message:a.message||"添加失败,请从重新尝试!",type:"error",duration:2e3}),t.next=9;break;case 8:this.formRefresh({msg:e.msg});case 9:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),updateService:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=this.updateModel(),!e.success){t.next=8;break}return t.next=4,u(e.data);case 4:a=t.sent,200==a.code?(this.$emit("formSuccess",{idtype:1}),Object(f["Message"])({message:"修改成功",type:"success",duration:2e3}),this.formcancel()):Object(f["Message"])({message:a.message||"修改失败,请从重新尝试!",type:"error",duration:2e3}),t.next=9;break;case 8:this.formRefresh({msg:e.msg});case 9:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),dbConnectionService:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=this.dbConnectionModel(),!e.success){t.next=8;break}return t.next=4,m(e.data);case 4:a=t.sent,200==a.code?(this.$emit("formSuccess",{idtype:1}),Object(f["Message"])({message:"连接成功",type:"success",duration:2e3})):Object(f["Message"])({message:a.message||"连接失败!",type:"error",duration:2e3}),t.next=9;break;case 8:this.formRefresh({msg:e.msg});case 9:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),addModel:function(){var t={jcbId:this.formData.data.jcbId,jcbName:this.formData.data.jcbName,host:this.formData.data.host,port:this.formData.data.port,dbName:this.formData.data.dbName,dbUsername:this.formData.data.dbUsername,dbPwd:this.formData.data.dbPwd,type:this.formData.data.type};return Object(p["c"])(t).success?Object(p["e"])({data:t}):Object(p["b"])({msg:"必填项不能为空"})},updateModel:function(){var t={id:this.formData.data.id,jcbId:this.formData.data.jcbId,jcbName:this.formData.data.jcbName,host:this.formData.data.host,port:this.formData.data.port,dbName:this.formData.data.dbName,dbUsername:this.formData.data.dbUsername,dbPwd:this.formData.data.dbPwd,type:this.formData.data.type};return Object(p["c"])({jcbId:this.formData.data.jcbId,jcbName:this.formData.data.jcbName,host:this.formData.data.host,port:this.formData.data.port,dbName:this.formData.data.dbName,dbUsername:this.formData.data.dbUsername,dbPwd:this.formData.data.dbPwd}).success?Object(p["e"])({data:t}):Object(p["b"])({msg:"必填项不能为空"})},dbConnectionModel:function(){var t={host:this.formData.data.host,port:this.formData.data.port,name:this.formData.data.dbName,username:this.formData.data.dbUsername,password:this.formData.data.dbPwd,dbType:this.formData.data.type};if(Object(p["c"])({formData:t}).success)return Object(p["e"])({data:t});var e="";return Object(p["c"])({host:this.formData.data.host}).success?Object(p["c"])({port:this.formData.data.port}).success?Object(p["c"])({name:this.formData.data.dbName}).success?Object(p["c"])({dbType:this.formData.data.type}).success?Object(p["c"])({username:this.formData.data.dbUsername}).success?Object(p["c"])({password:this.formData.data.dbPwd}).success||(e="数据库密码不能为空"):e="数据库用户名不能为空":e="数据库类型不能为空":e="数据库名称不能为空":e="数据库端口不能为空":e="数据库IP不能为空",Object(p["b"])({msg:e})},valiIp:function(t,e){var a="",s=t.match(/[0-9]|[.]/g);return s instanceof Array&&s.map((function(t,e){a+=t})),Object(p["e"])({data:a})}},mounted:function(){},computed:{},watch:{"formData.data.port":function(t,e){this.formData.data.port=Object(p["d"])(t,e).data},"formData.data.host":function(t,e){this.formData.data.host=this.valiIp(t,e).data}}}),v=g,y=(a("976d"),a("c933"),a("5d22")),w=Object(y["a"])(v,h,b,!1,null,"d60aef22",null),j=w.exports;function D(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,s)}return a}function C(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?D(Object(a),!0).forEach((function(e){Object(n["a"])(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):D(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}var O=c,x=l,k={data:function(){return{table:{tableData:[],height:0},page:{currentpage:1,pagesize:12,pagetotal:0,layout:"total, prev, pager, next",pagesizes:[10,12,20,30,40,50,100]},query:{},dialog:{title:"",show:!1,form:{}},extend:{},setTableHeight:!0}},mounted:function(){this.init()},components:{addup:j},methods:{init:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.getlist(C({},this.pagequery()));case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),getlist:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(){var e,a,s,r=this,n=arguments;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e=n.length>0&&void 0!==n[0]?n[0]:{},t.next=3,O(C(C({},e),this.formquery()));case 3:a=t.sent,200==a.code&&(this.table.tableData=a.data.list||[],s=a.data.length,this.page.currentpage>1&&0==s&&(this.page.currentpage=this.page.currentpage-1,this.$nextTick((function(){r.getlist(e)}))),this.page.pagetotal=a.data.total||0);case 5:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),formquery:function(){var t=this,e={};for(var a in t.query)Object(p["c"])(t.query[a]).success&&(e[a]=t.query[a]);return e},pagequery:function(){return{pageNum:this.page.currentpage,pageSize:this.page.pagesize}},querysearch:function(){this.getlist(C({},this.pagequery()))},pageChange:function(t){var e=this;this.page.currentpage=t,this.$nextTick((function(){e.getlist(e.pagequery())}))},pagesizechange:function(t){var e=this;this.page.pagesize=t,this.$nextTick((function(){e.getlist(e.pagequery())}))},dialogClose:function(t){this.getlist(this.pagequery()),t()},handleSelectionChange:function(t){console.log(t)},delAllSelection:function(){},formSuccess:function(t){this.getlist(this.pagequery())},addController:function(){var t=this.addModel();t.success&&(this.dialog.form={idtype:t.idtype,data:t.data},this.dialog.show=!0)},delController:function(){var t=Object(i["a"])(regeneratorRuntime.mark((function t(e,a){var s=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:this.$confirm("此操作将删除该数据, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(Object(i["a"])(regeneratorRuntime.mark((function t(){var e,r;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=s.delOneModel(a),!e.success){t.next=6;break}return t.next=4,x(e.data);case 4:r=t.sent,200==r.code?(s.$message({message:"删除成功",type:"success"}),s.getlist(s.pagequery())):s.$message({message:r.msg||"删除失败,请从新尝试",type:"error"});case 6:case"end":return t.stop()}}),t)})))).catch((function(){}));case 1:case"end":return t.stop()}}),t,this)})));function e(e,a){return t.apply(this,arguments)}return e}(),editController:function(t,e){var a=this.updateModel(e);a.success&&(this.dialog.form={idtype:a.idtype,data:a.data},this.dialog.show=!0)},editPwdController:function(t,e){},scheduleController:function(t,e){this.$router.push({path:"schedule",query:{jcbId:e.jcbId}})},updateModel:function(t){for(var e in t.jcbName=t.name,t.type=t.dbType,t)t[e]||0==t[e]||(t[e]="");return{idtype:1,success:!0,data:C({},t)}},delOneModel:function(t){return{success:!0,data:{jcbId:t.jcbId}}},addModel:function(){return{idtype:0,success:!0,data:{jcbId:"",jcbName:"",host:"",port:"",dbName:"",dbUsername:"",dbPwd:"",type:1}}}}},_=k,P=(a("4925"),a("27f3"),Object(y["a"])(_,s,r,!1,null,"c6e1ee7e",null));e["default"]=P.exports},4925:function(t,e,a){"use strict";a("e3e4")},"8ea8":function(t,e,a){},"976d":function(t,e,a){"use strict";a("ebfd")},c933:function(t,e,a){"use strict";a("8ea8")},e3e4:function(t,e,a){},ebfd:function(t,e,a){},fde1:function(t,e,a){}}]);
\ No newline at end of file
(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