add:增加自动取放货功能。

This commit is contained in:
2023-11-27 11:19:27 +08:00
parent 3622baa490
commit 56e08824c8
9 changed files with 1205 additions and 798 deletions

View File

@@ -0,0 +1,41 @@
package org.nl.agv.enu;
import java.util.Arrays;
import java.util.Optional;
/**
* 任务类型
*
* @author gbx
* @since 2023-11-24
*/
public enum TaskTypeEnum {
//
COMMON("普通", "1"),
REST("返回休息点任务", "2"),
TAKE("取货", "3"),
PUT("放货", "4"),
RETURN("返程", "5"),
MULTIPLE("多机", "6");
private final String name;
private final String code;
TaskTypeEnum(String name, String code) {
this.name = name;
this.code = code;
}
public String getName() {
return name;
}
public String getCode() {
return code;
}
public static TaskStatusEnum getType(String type) {
Optional<TaskStatusEnum> first = Arrays.stream(TaskStatusEnum.values()).filter(a -> a.getCode().equals(type)).findFirst();
return first.orElse(TaskStatusEnum.OTHER);
}
}

View File

@@ -25,6 +25,10 @@ public interface HomeService {
* @return Map<String, Object>
*/
Map<String, Object> queryHomePage(Map<String, String> jsonObject);
/**
* 首页确定按钮
*

View File

@@ -24,6 +24,9 @@ public interface TaskService {
* @return Map<String, Object>
*/
Map<String, Object> confirmPoint(Map<String, String> jsonObject);
Map<String, Object> confirmPoint1(Map<String, String> jsonObject);
/**
* 查询任务列表
*

View File

@@ -30,6 +30,7 @@ import edu.wpi.rail.jrosbridge.services.ServiceResponse;
import jline.internal.Log;
import lombok.RequiredArgsConstructor;
import com.alibaba.fastjson.JSONObject;
import org.nl.agv.enu.TaskTypeEnum;
import org.nl.agv.service.DevelopService;
import org.nl.agv.service.TaskService;
import org.nl.agv.unit.sendToAgvUtil;
@@ -38,10 +39,16 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import static org.nl.agv.service.impl.HomeServiceImpl.debugInfoJson;
/**
* @author zhanghouying
@@ -49,178 +56,278 @@ import java.util.Map;
*/
@Service
@RequiredArgsConstructor
public class TaskServiceServiceImpl implements TaskService{
public static JSONObject pointJson = new JSONObject();
@EnableScheduling
public class TaskServiceServiceImpl implements TaskService {
public static JSONObject pointJson = new JSONObject();
@Override
public Map<String,Object> queryPoint(Map<String,String> jsonObject) {
JSONObject jsonObject1 = new JSONObject();
JSONObject returnjo = new JSONObject();
try {
String rest_pointcode = "";
ServiceResponse response = sendToAgvUtil.send("GetStationFloorIndexTable");
String result_info = JSONObject.parseObject(response.toString()).getString("ROS_String_Output");
String[] split = result_info.split("\\n");
for(int i = 0; i < split.length; i++) {
String row = split[i];
String[] rowArr = row.split("\\s+");
pointJson.put(rowArr[3], rowArr[4].contains("<") ? "" : rowArr[4]);
}
JSONArray arr = new JSONArray();
for(Object key : pointJson.keySet()) {
String value = (String) pointJson.get(key);
System.out.println("Key = " + key + ", Value = " + value);
JSONObject row = new JSONObject();
row.put("point_code", key);
row.put("point_name", value);
row.put("code_name", key + "-" + value);
if(StrUtil.equals("休息", value)) {
rest_pointcode = (String) key;
}
arr.add(row);
}
jsonObject1.put("result_info", result_info);
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("rest_pointcode", rest_pointcode);
returnjo.put("result", arr);
}
catch(Exception ex) {
String sfd = ex.getMessage();
}
return returnjo;
}
@Override
public Map<String, Object> queryPoint(Map<String, String> jsonObject) {
JSONObject jsonObject1 = new JSONObject();
JSONObject returnjo = new JSONObject();
try {
String rest_pointcode = "";
ServiceResponse response = sendToAgvUtil.send("GetStationFloorIndexTable");
String result_info = JSONObject.parseObject(response.toString()).getString("ROS_String_Output");
String[] split = result_info.split("\\n");
for (int i = 0; i < split.length; i++) {
String row = split[i];
String[] rowArr = row.split("\\s+");
pointJson.put(rowArr[3], rowArr[4].contains("<") ? "" : rowArr[4]);
}
JSONArray arr = new JSONArray();
for (Object key : pointJson.keySet()) {
String value = (String) pointJson.get(key);
System.out.println("Key = " + key + ", Value = " + value);
JSONObject row = new JSONObject();
row.put("point_code", key);
row.put("point_name", value);
row.put("code_name", key + "-" + value);
if (StrUtil.equals("休息", value)) {
rest_pointcode = (String) key;
}
arr.add(row);
}
jsonObject1.put("result_info", result_info);
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("rest_pointcode", rest_pointcode);
returnjo.put("result", arr);
} catch (Exception ex) {
String error = ex.getMessage();
}
return returnjo;
}
@Override
public Map<String,Object> confirmPoint(Map<String,String> jsonObject) {
String point_code = (String) jsonObject.get("point_code");
JSONObject returnjo = new JSONObject();
if(StrUtil.isEmpty(point_code)) {
throw new BadRequestException("站点不能为空!");
}
//查询未完成的指令有多少条
int num = WQL.getWO("QAGVERROR").addParam("flag", "3").process().uniqueResult(0).getInteger("num");
//查询最多的任务数量
int max_task_num = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0).getInteger("max_task_num");
if(num >= max_task_num) {
returnjo.put("code", "1");
returnjo.put("desc", "未执行的任务数量达到上限!");
return returnjo;
}
JSONObject taskjo = new JSONObject();
int seq_num = 1;
String task_status = "00";
String task_status_name = "生成未执行";
//查询未完成最大的顺序号
JSONObject taskrow = WQLObject.getWQLObject("ST_TASK_INFO").query("is_manualfinished=0", "seq_num desc").uniqueResult(0);
if(ObjectUtil.isNotEmpty(taskrow)) {
seq_num = taskrow.getInteger("seq_num") + 1;
}
if(ObjectUtil.isEmpty(taskrow)) {
//只有第一条下发给agv
String a = "HMIStepOrRTPathFollow:0;" + point_code + ";1#";
ServiceResponse send = sendToAgvUtil.send(a);
JSONObject resjo = JSONObject.parseObject(send.toString());
if(StrUtil.equals("0", resjo.getString("result"))) {
task_status_name = "执行中";
task_status = "01";
}
JSONObject change = sendToAgvUtil.change(point_code);
//sendToAgvUtil.sendtask(change.getString("first"), change.getString("last"));
}
taskjo.put("task_uuid", IdUtil.simpleUUID());
taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO"));
taskjo.put("task_status", task_status);
taskjo.put("task_status_name", task_status_name);
taskjo.put("next_point_code", point_code);
taskjo.put("task_type", "1");
taskjo.put("is_delete", "0");
taskjo.put("seq_num", seq_num);
taskjo.put("date", DateUtil.today());
taskjo.put("create_time", DateUtil.now());
taskjo.put("is_agvfinished", "0");
taskjo.put("is_manualfinished", "0");
taskjo.put("create_by", SecurityUtils.getCurrentNickName());
WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo);
returnjo.put("code", "1");
returnjo.put("desc", "新增成功!");
return returnjo;
}
@Override
public Map<String, Object> confirmPoint(Map<String, String> jsonObject) {
String pointCode = jsonObject.get("point_code");
JSONObject returnjo = new JSONObject();
if (StrUtil.isEmpty(pointCode)) {
throw new BadRequestException("站点不能为空!");
}
//查询未完成的指令有多少条
int num = WQL.getWO("QAGVERROR").addParam("flag", "3").process().uniqueResult(0).getInteger("num");
//查询最多的任务数量
int maxTaskNum = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0).getInteger("max_task_num");
if (num >= maxTaskNum) {
returnjo.put("code", "1");
returnjo.put("desc", "未执行的任务数量达到上限!");
return returnjo;
}
JSONObject taskjo = new JSONObject();
int seqNum = 1;
String task_status = "00";
String task_status_name = "生成未执行";
//查询未完成最大的顺序号
JSONObject taskrow = WQLObject.getWQLObject("ST_TASK_INFO").query("is_manualfinished=0", "seq_num desc").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskrow)) {
seqNum = taskrow.getInteger("seq_num") + 1;
}
if (ObjectUtil.isEmpty(taskrow)) {
//只有第一条下发给agv
String a = "HMIStepOrRTPathFollow:0;" + pointCode + ";1#";
ServiceResponse send = sendToAgvUtil.send(a);
JSONObject resjo = JSONObject.parseObject(send.toString());
if (StrUtil.equals("0", resjo.getString("result"))) {
task_status_name = "执行中";
task_status = "01";
}
JSONObject change = sendToAgvUtil.change(pointCode);
//sendToAgvUtil.sendtask(change.getString("first"), change.getString("last"));
}
taskjo.put("task_uuid", IdUtil.simpleUUID());
taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO"));
taskjo.put("task_status", task_status);
taskjo.put("task_status_name", task_status_name);
taskjo.put("next_point_code", pointCode);
taskjo.put("task_type", "1");
taskjo.put("is_delete", "0");
taskjo.put("seq_num", seqNum);
taskjo.put("date", DateUtil.today());
taskjo.put("create_time", DateUtil.now());
taskjo.put("is_agvfinished", "0");
taskjo.put("is_manualfinished", "0");
taskjo.put("create_by", SecurityUtils.getCurrentNickName());
WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo);
returnjo.put("code", "1");
returnjo.put("desc", "新增成功!");
return returnjo;
}
@Override
public Map<String,Object> queryTaskList(Map<String,String> jsonObject) {
JSONArray resultJSONArray = WQL.getWO("QAGVERROR").addParam("flag", "2").process().getResultJSONArray(0);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", resultJSONArray);
return returnjo;
}
@Override
public Map<String, Object> confirmPoint1(Map<String, String> jsonObject) {
String point_code = jsonObject.get("point_code");
String type = jsonObject.get("type");
if (StrUtil.isEmpty(point_code) || StrUtil.isEmpty(type)) {
throw new BadRequestException("站点或操作类型不能为空!");
}
String instruct = "";
int seq_num = 1;
String task_status = "00";
String task_status_name = "生成未执行";
JSONObject returnjo = new JSONObject();
//查询未完成的指令有多少条
int num = WQL.getWO("QAGVERROR").addParam("flag", "3").process().uniqueResult(0).getInteger("num");
//查询最多的任务数量
int max_task_num = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0).getInteger("max_task_num");
if (num >= max_task_num) {
returnjo.put("code", "1");
returnjo.put("desc", "未执行的任务数量达到上限!");
return returnjo;
}
//查询未完成最大的顺序号
JSONObject taskrow = WQLObject.getWQLObject("ST_TASK_INFO").query("is_manualfinished=0", "seq_num desc").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskrow)) {
seq_num = taskrow.getInteger("seq_num") + 1;
}
JSONObject taskjo = new JSONObject();
taskjo.put("task_type", type.equals(TaskTypeEnum.RETURN.getCode()) ? TaskTypeEnum.COMMON.getCode() : type);
taskjo.put("seq_num", type.equals(TaskTypeEnum.RETURN.getCode()) ? getSeqNum() : seq_num);
taskjo.put("task_uuid", IdUtil.simpleUUID());
taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO"));
taskjo.put("next_point_code", point_code);
taskjo.put("is_delete", "0");
taskjo.put("date", DateUtil.today());
taskjo.put("create_time", DateUtil.now());
taskjo.put("is_agvfinished", "0");
taskjo.put("is_manualfinished", "0");
taskjo.put("create_by", SecurityUtils.getCurrentNickName());
//只有一条且是第一条下发给agv
if (ObjectUtil.isEmpty(taskrow)) {
if (type.equals(TaskTypeEnum.COMMON.getCode())) {
instruct = "HMIStepOrRTPathFollow:0;" + point_code + ";1#";
} else if (type.equals(TaskTypeEnum.TAKE.getCode()) || type.equals(TaskTypeEnum.PUT.getCode())) {
instruct = "HMIStepOrRTPathFollow:0;" + point_code + ";1#";
//获取返程点
//ServiceResponse send = sendToAgvUtil.send("HMIRouter:" + debugInfoJson.getString("CurNodeID") + ";" + point_code + ";#");
// JSONObject resjo = JSONObject.parseObject(send.toString());
//todo 需要改回检查返回的路由信息resjo
String v2 = "HMIRouter:0;2;#\nExport_NodeIDPath:\n1 2 \nExport_NodeIDPath_End";
String pointCode2 = v2.substring(v2.indexOf("Export_NodeIDPath:\n") + "Export_NodeIDPath:\n".length(), v2.indexOf(" \nExport_NodeIDPath_End"));
taskjo.put("next_point_code2", pointCode2);
} else if (type.equals(TaskTypeEnum.RETURN.getCode())) {
instruct = "HMIStepOrRTPathFollow:0;" + point_code + ";1#";
taskjo.put("task_type", TaskTypeEnum.COMMON.getCode());
}
//ServiceResponse send = sendToAgvUtil.send(instruct);
//JSONObject resjo = JSONObject.parseObject(send.toString());
//
// if (StrUtil.equals("0", resjo.getString("result"))) {
// task_status_name = "执行中";
// task_status = "01";
// }
if (true) {
task_status_name = "执行中";
task_status = "01";
}
//JSONObject change = sendToAgvUtil.change(point_code);
//sendToAgvUtil.sendtask(change.getString("first"), change.getString("last"));
}
taskjo.put("task_status", task_status);
taskjo.put("task_status_name", task_status_name);
WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo);
returnjo.put("code", "1");
returnjo.put("desc", "新增成功!");
return returnjo;
}
@Override
public Map<String,Object> deleteTask(Map<String,String> jsonObject) {
String task_num = (String) jsonObject.get("task_num");
if(StrUtil.isEmpty(task_num)) {
throw new BadRequestException("任务号不能为空");
}
WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO");
JSONObject taskjo = taskTable.query("task_code='" + task_num + "'").uniqueResult(0);
taskjo.put("is_delete", "1");
taskjo.put("update_by", SecurityUtils.getCurrentNickName());
taskTable.update(taskjo);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "删除成功!");
return returnjo;
}
private static Integer getSeqNum() {
WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO");
JSONArray taskrows = taskTable.query("task_status='00' or task_status='01'").getResultJSONArray(0);
//存在多条未完成任务,则重新排序,返程任务最优先
if (taskrows.size() > 0) {
//获取序号最小值
int minSeqNum = taskrows.stream().mapToInt(o -> ((JSONObject) o).getIntValue("seq_num")).min().orElse(0);
//更新现有数据的序号
taskrows.forEach(taskObj -> ((JSONObject) taskObj).put("seq_num", ((JSONObject) taskObj).getIntValue("seq_num") + 1));
//返程任务顺序号为最小
int seq_num = minSeqNum;
//taskrows.add(0, taskjo); //插入到最前面
for (int i = 0; i < taskrows.size(); i++) {
JSONObject task = taskrows.getJSONObject(i);
taskTable.update(task);
}
return seq_num;
}
return 1;
}
@Override
public Map<String, Object> queryTaskList(Map<String, String> jsonObject) {
JSONArray resultJSONArray = WQL.getWO("QAGVERROR").addParam("flag", "2").process().getResultJSONArray(0);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", resultJSONArray);
return returnjo;
}
@Override
public Map<String, Object> deleteTask(Map<String, String> jsonObject) {
String task_num = (String) jsonObject.get("task_num");
if (StrUtil.isEmpty(task_num)) {
throw new BadRequestException("任务号不能为空");
}
WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO");
JSONObject taskjo = taskTable.query("task_code='" + task_num + "'").uniqueResult(0);
taskjo.put("is_delete", "1");
taskjo.put("update_by", SecurityUtils.getCurrentNickName());
taskTable.update(taskjo);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "删除成功!");
return returnjo;
}
@Override
public Map<String, Object> updateTask(Map<String, String> jsonObject) {
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(jsonObject.get("param")));
WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO");
//更新之前删除之前的所有未完成任务
JSONArray taskrows = taskTable.query("task_status='00' or task_status='01'").getResultJSONArray(0);
for (int i = 0; i < taskrows.size(); i++) {
JSONObject taskrow = taskrows.getJSONObject(i);
taskrow.put("is_delete", "1");
taskTable.update(taskrow);
}
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject taskjo = jsonArray.getJSONObject(i);
String taskNum = taskjo.getString("task_code");
JSONObject taskrow = taskTable.query("task_code='" + taskNum + "'").uniqueResult(0);
taskrow.put("seq_num", i + 1);
taskrow.put("is_delete", "0");
taskrow.put("update_by", SecurityUtils.getCurrentNickName());
taskTable.update(taskrow);
}
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "更新成功!");
return returnjo;
}
@Override
public Map<String, Object> check(Map<String, String> jsonObject) {
String password = (String) jsonObject.get("password");
if (StrUtil.isEmpty(password)) {
throw new BadRequestException("密码不能空!");
}
//1代表正确2 代表不正确
String is_correct;
JSONObject paramjo = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0);
String super_password = paramjo.getString("super_password");
String passworddb = paramjo.getString("password");
JSONObject returnjo = new JSONObject();
if (StrUtil.equals(password, super_password) || StrUtil.equals(passworddb, password)) {
is_correct = "1";
returnjo.put("code", "1");
returnjo.put("desc", "密码校验成功!");
} else {
returnjo.put("code", "0");
returnjo.put("desc", "密码不正确!");
}
return returnjo;
}
@Override
public Map<String,Object> updateTask(Map<String,String> jsonObject) {
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(jsonObject.get("param")));
WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO");
//更新之前删除之前的所有未完成任务
JSONArray taskrows = taskTable.query("task_status='00' or task_status='01'").getResultJSONArray(0);
for(int i = 0; i < taskrows.size(); i++) {
JSONObject taskrow = taskrows.getJSONObject(i);
taskrow.put("is_delete", "1");
taskTable.update(taskrow);
}
for(int i = 0; i < jsonArray.size(); i++) {
JSONObject taskjo = jsonArray.getJSONObject(i);
String taskNum = taskjo.getString("task_code");
JSONObject taskrow = taskTable.query("task_code='" + taskNum + "'").uniqueResult(0);
taskrow.put("seq_num", i + 1);
taskrow.put("is_delete", "0");
taskrow.put("update_by", SecurityUtils.getCurrentNickName());
taskTable.update(taskrow);
}
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "更新成功!");
return returnjo;
}
@Override
public Map<String,Object> check(Map<String,String> jsonObject) {
String password = (String) jsonObject.get("password");
if(StrUtil.isEmpty(password)) {
throw new BadRequestException("密码不能空!");
}
//1代表正确2 代表不正确
String is_correct;
JSONObject paramjo = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0);
String super_password = paramjo.getString("super_password");
String passworddb = paramjo.getString("password");
JSONObject returnjo = new JSONObject();
if(StrUtil.equals(password, super_password) || StrUtil.equals(passworddb, password)) {
is_correct = "1";
returnjo.put("code", "1");
returnjo.put("desc", "密码校验成功!");
}
else{
returnjo.put("code", "0");
returnjo.put("desc", "密码不正确!");
}
return returnjo;
}
}

View File

@@ -1,5 +1,5 @@
server:
port: 8018
port: 8019
##配置数据源
spring:
datasource:

View File

@@ -0,0 +1,185 @@
server:
port: 8018
#配置数据源
spring:
datasource:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
#192.168.137.41
url: jdbc:g4lojdbc:mysql://${DB_HOST:192.168.137.41}:${DB_PORT:3306}/${DB_NAME:nl_agv}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
#url: jdbc:log4jdbc:mysql://${DB_HOST:43.139.166.161}:${DB_PORT:3310}/${DB_NAME:nl_agv}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
#url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
username: ${DB_USER:generallu}
#password: ${DB_PWD:P@ssw0rd}
password: ${DB_PWD:123456}
#password: ${DB_PWD:Root.123456}
# 初始连接数
initial-size: 15
# 最小连接数
min-idle: 45
# 最大连接数
max-active: 90
# 是否自动回收超时连接
remove-abandoned: true
# 超时时间(以秒数为单位)
remove-abandoned-timeout: 180
# 获取连接超时时间
max-wait: 3000
# 连接有效性检测时间
time-between-eviction-runs-millis: 60000
# 连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
# 连接在池中最大生存的时间
max-evictable-idle-time-millis: 900000
# 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除
test-while-idle: true
# 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个
test-on-borrow: true
# 是否在归还到池中前进行检验
test-on-return: false
# 检测连接是否有效
validation-query: select 1
# 配置监控统计
webStatFilter:
enabled: true
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: false
filters:
DruidFilter,stat
redis:
#数据库索引
database: ${REDIS_DB:6}
host: ${REDIS_HOST:127.0.0.1}
#host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:}
#连接超时时间
timeout: 5000
redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置
login:
# 登录缓存
cache-enable: true
# 是否限制单用户登录
single-login: false
# 验证码
login-code:
# 验证码类型配置 查看 LoginProperties 类
code-type: arithmetic
# 登录图形验证码有效时间/分钟
expiration: 2
# 验证码高度
width: 111
# 验证码宽度
heigth: 36
# 内容长度
length: 2
# 字体名称,为空则使用默认字体
font-name:
# 字体大小
font-size: 25
#jwt
jwt:
header: Authorization
# 令牌前缀
token-start-with: Bearer
# 必须使用最少88位的Base64对该令牌进行编码
base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
# 令牌过期时间 此处单位/毫秒 默认4小时可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
token-validity-in-seconds: 14400000
# 在线用户key
online-key: online-token-
# 验证码
code-key: code-key-
# token 续期检查时间范围默认30分钟单位毫秒在token即将过期的一段时间内用户操作了则给用户的token续期
detect: 1800000
# 续期时间范围默认1小时单位毫秒
renew: 3600000
#是否允许生成代码生产环境设置为false
generator:
enabled: true
#是否开启 swagger-ui
swagger:
enabled: true
# IP 本地解析
ip:
local-parsing: true
# 文件存储路径
file:
mac:
path: ~/file/
avatar: ~/avatar/
linux:
path: /home/eladmin/file/
avatar: /home/eladmin/avatar/
windows:
path: C:\eladmin\file\
avatar: C:\eladmin\avatar\
# 文件大小 /M
maxSize: 100
avatarMaxSize: 5
sa-token:
# token 名称 (同时也是cookie名称)
token-name: Authorization
# token 有效期单位s 默认30天, -1代表永不过期
timeout: 2592000
# token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# token风格
token-style: random-128
# 是否输出操作日志
is-log: false
jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq
# token 前缀
token-prefix:
cookie:
# 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com
domain:
jetcache:
defaultCacheType: LOCAL
statIntervalMinutes: 15
areaInCacheName: false
hiddenPackages: com.yb
local:
default:
type: caffeine
limit: 100
keyConvertor: fastjson
expireAfterWriteInMillis: 60000
remote:
default:
type: redis.lettuce
keyConvertor: fastjson
valueEncoder: kryo
valueDecoder: kryo
poolConfig:
minIdle: 5
maxIdle: 200
maxTotal: 1000
uri:
- redis://127.0.0.1:6379
es:
index: mes_log

View File

@@ -2,7 +2,7 @@ spring:
freemarker:
check-template-location: false
profiles:
active: prod
active: dev
jackson:
time-zone: GMT+8
data: