#init commit

This commit is contained in:
ycl
2025-10-27 16:59:33 +08:00
parent a478ba8e61
commit 50ae0fd5b3
189 changed files with 18288 additions and 0 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

35
template/.gitignore vendored Normal file
View File

@@ -0,0 +1,35 @@
## java
bin/
classes/
## eclipse
.settings/
.classpath
.project
## idea
*.iml
.idea/*
!.idea/codeStyles/
!.idea/dataSources.xml
HELP.md
## vscode
.vscode/
.factorypath
## maven:
target/
test-output/
## system
.DS_Store
logs/
*.log
## vs
.vs
!modules/.gitkeep
.gitattributes
.toco/config.local.yml

1
template/.mvn/jvm.config Normal file
View File

@@ -0,0 +1 @@
-Xmx1536m

BIN
template/.mvn/wrapper/maven-wrapper.jar vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,20 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://maven.aliyun.com/repository/public/org/apache/maven/apache-maven/3.8.8/apache-maven-3.8.8-bin.zip
distributionSha256Sum=2e181515ce8ae14b7a904c40bb4794831f5fd1d9641107a13b916af15af4001a
wrapperUrl=https://maven.aliyun.com/repository/public/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
wrapperUrlSha256Sum=e63a53cfb9c4d291ebe3c2b0edacb7622bbc480326beaa5a0456e412f52f066a

8
template/.toco/README Normal file
View File

@@ -0,0 +1,8 @@
Directory Structure for Rules (.md files only):
global: Directory for storing common rules applicable to all agents
toco: Directory for storing Toco Agent-specific rules, used for overall control of the outer workflow
modeling: Directory for storing Modeling Agent-specific rules, used during the domain modeling phase
plan: Directory for storing Plan Agent-specific rules, used during the overall planning phase
design: Directory for storing Design Agent-specific rules, used for TOCO design element creation
coding: Directory for storing Coding Agent-specific rules, used during the coding phase

View File

@@ -0,0 +1 @@
The directory is used to store dedicated rules for Coding Agent, intended for the coding phase, and only supports .md files.

View File

@@ -0,0 +1 @@
The directory is used to store dedicated rules for Design Agent, intended for the coding phase, and only supports .md files.

View File

@@ -0,0 +1 @@
The directory is used to store common rules for all agents and only supports .md files.

View File

@@ -0,0 +1 @@
The directory is used to store dedicated rules for Modeling Agent, intended for the domain modeling phase, and only supports .md files.

View File

@@ -0,0 +1 @@
The directory is used to store dedicated rules for the Plan Agent, intended for the overall planning phase, and only supports .md files.

View File

@@ -0,0 +1 @@
The directory is used to store dedicated rules for the Toco Agent, intended for overall control of the outer workflow, and only supports .md files.

20
template/Dockerfile Normal file
View File

@@ -0,0 +1,20 @@
FROM maven:3.8.8 AS builder
WORKDIR source
COPY ./ ./
ARG JAR_FILE=entrance/web/target/*.jar
RUN mvn clean package -Dmaven.test.skip=true
RUN cp ${JAR_FILE} app.jar
RUN java -Djarmode=layertools -jar ./app.jar extract
FROM openjdk:11.0.14
WORKDIR /application
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
COPY --from=builder source/dependencies/ ./
COPY --from=builder source/snapshot-dependencies/ ./
COPY --from=builder source/spring-boot-loader/ ./
COPY --from=builder source/application/ ./
ENV JAVA_OPTS="-Xms512m -Xmx512m"
ENV MAIN_CLASS="org.springframework.boot.loader.JarLauncher"
ENTRYPOINT ["sh", "-c", "exec java ${JAVA_OPTS} -Djava.security.egd=file:dev/./urandom ${MAIN_CLASS}"]

20
template/LICENSE Normal file
View File

@@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2019 RuoYi-Vue-Plus
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,5 @@
> 本模块存放公共组件
``` \-- *.utils(工具类; package)
\-- *.enums(公共枚举; package)
\-- *.constants(公共常量; package)
```

17
template/common/pom.xml Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>{{ .groupId }}</groupId>
<artifactId>{{ .artifactId }}</artifactId>
<version>${revision}</version>
</parent>
<groupId>{{ .groupId }}</groupId>
<artifactId>{{ .artifactId }}-common</artifactId>
<dependencies>
</dependencies>
</project>

View File

@@ -0,0 +1,14 @@
package {{ .package }}.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "rocketmq")
public class MqConfig {
private String nameServer;
private String topic;
private String consumerGroup;
}

View File

@@ -0,0 +1,19 @@
package {{ .package }}.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.Resource;
import {{ .package }}.common.config.MqConfig;
import {{ .package }}.common.rocketmq.RocketMQService;
import {{ .package }}.common.rocketmq.RocketMQServiceImpl;
@Configuration
public class RocketMqAutoConfiguration {
@Resource
private MqConfig mqConfig;
@Bean
RocketMQService createRocketMQService() {
RocketMQServiceImpl instance = new RocketMQServiceImpl(mqConfig.getNameServer());
return instance;
}
}

View File

@@ -0,0 +1,2 @@
> 本模块存放公共常量
``` \-- *Constant.java

View File

@@ -0,0 +1,2 @@
> 本模块存放公共枚举
``` \-- *Enum.java

View File

@@ -0,0 +1,25 @@
package {{ .package }}.common.mybatisplus;
import com.baomidou.mybatisplus.extension.ddl.IDdl;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.function.Consumer;
import javax.sql.DataSource;
@Component
public class EmptyDdl implements IDdl {
public void execute() {
// 空实现
}
@Override
public void runScript(Consumer<DataSource> consumer) {}
@Override
public List<String> getSqlFiles() {
return null;
}
}

View File

@@ -0,0 +1,116 @@
package {{ .package }}.common.redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.HostAndPort;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Value;
import java.util.HashSet;
import java.util.Set;
@Configuration
@EnableConfigurationProperties({RedisPoolProperties.class})
public class RedisPoolConfig {
@Autowired
private RedisPoolProperties redisPoolProperties;
@Value("${redis-config.pool.password:}")
private String password;
/**
* 连接池的基本配置
*
* @return JedisPoolConfig
*/
@Bean
@ConditionalOnProperty(prefix = "redis-config.pool",name = "hostAndPort")
public JedisPoolConfig initPoolConfig() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 设置最大连接数默认值为8.如果赋值为-1则表示不限制
poolConfig.setMaxTotal(redisPoolProperties.getMaxTotal());
// 最大空闲连接数
poolConfig.setMaxIdle(redisPoolProperties.getMaxIdle());
// 最小空闲连接数
poolConfig.setMinIdle(redisPoolProperties.getMinIdle());
// 获取Jedis连接的最大等待时间单位毫秒默认值为-1表示永不超时。如果超过等待时间则直接抛出JedisConnectionException
poolConfig.setMaxWaitMillis(redisPoolProperties.getMaxWaitMillis());
// 每次释放连接的最大数目
poolConfig.setNumTestsPerEvictionRun(redisPoolProperties.getNumTestsPerEvictionRun());
// 释放连接的扫描间隔(毫秒),如果为负数,则不运行逐出线程, 默认-1
poolConfig.setTimeBetweenEvictionRunsMillis(redisPoolProperties.getTimeBetweenEvictionRunsMillis());
// 连接最小空闲时间
poolConfig.setMinEvictableIdleTimeMillis(redisPoolProperties.getMinEvictableIdleTimeMillis());
// 连接空闲多久后释放, 当空闲时间&gt;该值 且 空闲连接&gt;最大空闲连接数 时直接释放
poolConfig.setSoftMinEvictableIdleTimeMillis(redisPoolProperties.getSoftMinEvictableIdleTimeMillis());
// 在获取Jedis连接时自动检验连接是否可用
poolConfig.setTestOnBorrow(redisPoolProperties.isTestOnBorrow());
// 在将连接放回池中前,自动检验连接是否有效
poolConfig.setTestOnReturn(redisPoolProperties.isTestOnReturn());
// 自动测试池中的空闲连接是否都是可用连接
poolConfig.setTestWhileIdle(redisPoolProperties.isTestWhileIdle());
// 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
poolConfig.setBlockWhenExhausted(redisPoolProperties.isBlockWhenExhausted());
// 是否启用pool的jmx管理功能, 默认true
poolConfig.setJmxEnabled(redisPoolProperties.isJmxEnabled());
// 是否启用后进先出, 默认true
poolConfig.setLifo(redisPoolProperties.isLifo());
// 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
poolConfig.setNumTestsPerEvictionRun(redisPoolProperties.getNumTestsPerEvictionRun());
poolConfig.setTestOnBorrow(false);
return poolConfig;
}
/**
* 创建JedisCluster客户端 将redis客户端放到容器中 连接redis集群
* Jedis 连接集群
*
* @return JedisCluster 使用完成后不需要手动释放连接,返回客户端, 使用完成后不需要手动释放连接, 客户端会自动释放连接
*/
// @Bean
// @Qualifier("JedisCluster")
// public JedisCluster getJedisCluster() {
// return new JedisCluster(getSet(), initPoolConfig());
// }
/**
* 单例版 需要手动获取jedis实例用完后需要手动释放
*
* @return 返回redis连接池
*/
@Bean
@ConditionalOnProperty(prefix = "redis-config.pool",name = "hostAndPort")
public JedisPool getRedisPool() {
String host = StrUtil.subBefore(redisPoolProperties.getHostAndPort(), ":", false);
int port = Integer.parseInt(StrUtil.subAfter(redisPoolProperties.getHostAndPort(), ":", false));
if(StrUtil.isNotEmpty(this.password)) {
return new JedisPool(initPoolConfig(),host,port ,1000, password);
}else{
return new JedisPool(initPoolConfig(),host,port);
}
}
/**
* 获取集群对象集合
*
* @return Set
*/
public Set<HostAndPort> getSet() {
String hostAndPortStr = redisPoolProperties.getHostAndPort();
String[] hostAndPortArrays = hostAndPortStr.trim().split(",");
Set<HostAndPort> hostAndPorts = new HashSet<>();
for (String hostAndPort : hostAndPortArrays) {
hostAndPorts.add(new HostAndPort(hostAndPort.split(":")[0], Integer.parseInt(hostAndPort.split(":")[1])));
}
return hostAndPorts;
}
}

View File

@@ -0,0 +1,145 @@
package {{ .package }}.common.redis;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@ConfigurationProperties(prefix = "redis-config.pool")
public class RedisPoolProperties {
private String hostAndPort;
private int maxTotal;
private int maxIdle;
private int minIdle;
private Long maxWaitMillis;
private Long timeBetweenEvictionRunsMillis;
private Long minEvictableIdleTimeMillis;
private Long softMinEvictableIdleTimeMillis;
private boolean testOnBorrow;
private boolean testOnReturn;
private boolean testWhileIdle;
private boolean blockWhenExhausted;
private boolean jmxEnabled;
private boolean lifo;
private int numTestsPerEvictionRun;
public String getHostAndPort() {
return hostAndPort;
}
public void setHostAndPort(String hostAndPort) {
this.hostAndPort = hostAndPort;
}
public int getMaxTotal() {
return maxTotal;
}
public void setMaxTotal(int maxTotal) {
this.maxTotal = maxTotal;
}
public int getMaxIdle() {
return maxIdle;
}
public void setMaxIdle(int maxIdle) {
this.maxIdle = maxIdle;
}
public int getMinIdle() {
return minIdle;
}
public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}
public Long getMaxWaitMillis() {
return maxWaitMillis;
}
public void setMaxWaitMillis(Long maxWaitMillis) {
this.maxWaitMillis = maxWaitMillis;
}
public Long getTimeBetweenEvictionRunsMillis() {
return timeBetweenEvictionRunsMillis;
}
public void setTimeBetweenEvictionRunsMillis(Long timeBetweenEvictionRunsMillis) {
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}
public Long getMinEvictableIdleTimeMillis() {
return minEvictableIdleTimeMillis;
}
public void setMinEvictableIdleTimeMillis(Long minEvictableIdleTimeMillis) {
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}
public Long getSoftMinEvictableIdleTimeMillis() {
return softMinEvictableIdleTimeMillis;
}
public void setSoftMinEvictableIdleTimeMillis(Long softMinEvictableIdleTimeMillis) {
this.softMinEvictableIdleTimeMillis = softMinEvictableIdleTimeMillis;
}
public boolean isTestOnBorrow() {
return testOnBorrow;
}
public void setTestOnBorrow(boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}
public boolean isTestOnReturn() {
return testOnReturn;
}
public void setTestOnReturn(boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}
public boolean isTestWhileIdle() {
return testWhileIdle;
}
public void setTestWhileIdle(boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}
public boolean isBlockWhenExhausted() {
return blockWhenExhausted;
}
public void setBlockWhenExhausted(boolean blockWhenExhausted) {
this.blockWhenExhausted = blockWhenExhausted;
}
public boolean isJmxEnabled() {
return jmxEnabled;
}
public void setJmxEnabled(boolean jmxEnabled) {
this.jmxEnabled = jmxEnabled;
}
public boolean isLifo() {
return lifo;
}
public void setLifo(boolean lifo) {
this.lifo = lifo;
}
public int getNumTestsPerEvictionRun() {
return numTestsPerEvictionRun;
}
public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) {
this.numTestsPerEvictionRun = numTestsPerEvictionRun;
}
}

View File

@@ -0,0 +1,48 @@
package {{ .package }}.common.response;
import java.text.*;
import java.util.Calendar;
import java.util.Date;
public class MyDateFormat extends DateFormat {
private static final long serialVersionUID = -4580955831439573829L;
private static final String customDateFormat = "yyyy-MM-dd HH:mm:ss";
private DateFormat dateFormat;
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public MyDateFormat(DateFormat dateFormat) {
this.calendar = Calendar.getInstance();
this.dateFormat = dateFormat;
}
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
return this.dateFormat.format(date, toAppendTo, fieldPosition);
}
public Date parse(String source, ParsePosition pos) {
Date date = null;
if (source.length() == "yyyy-MM-dd HH:mm:ss".length()) {
date = this.simpleDateFormat.parse(source, pos);
} else {
date = this.dateFormat.parse(source, pos);
}
return date;
}
public Date parse(String source) throws ParseException {
Date date = null;
if (source.length() == "yyyy-MM-dd HH:mm:ss".length()) {
date = this.simpleDateFormat.parse(source);
} else {
date = this.dateFormat.parse(source);
}
return date;
}
public Object clone() {
Object format = this.dateFormat.clone();
return new MyDateFormat((DateFormat)format);
}
}

View File

@@ -0,0 +1,118 @@
package {{ .package }}.common.response;
import com.vs.common.util.rpc.pub.FailData;
import com.vs.ox.common.exception.ErrorCode;
import com.vs.ox.common.exception.IgnoredException;
import com.vs.ox.common.utils.ObjectMapperFactory;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Path;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.Ordered;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@Slf4j
public class ResponseJsonExceptionResolver extends AbstractHandlerExceptionResolver
implements InitializingBean {
private HttpMessageConverter messageConverter;
public ResponseJsonExceptionResolver() {}
@Override
public void afterPropertiesSet() throws Exception {
if (messageConverter == null) {
messageConverter =
new MappingJackson2HttpMessageConverter(
ObjectMapperFactory.getDefaultObjectMapper());
}
}
public static String getErrorInfoFromException(Exception e) {
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
return "\r\n" + sw.toString() + "\r\n";
} catch (Exception e2) {
return "bad getErrorInfoFromException";
}
}
@Override
protected ModelAndView doResolveException(
HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) {
/** web请求分页单独处理应对antd框架 */
FailData failData = new FailData();
failData.setMessage(ex.getMessage());
if (ex instanceof IgnoredException) {
IgnoredException realEx = (IgnoredException) ex;
failData.setCode(realEx.getErrorCode());
failData.setData(realEx.getData());
log.error("execute {} failed with exception", request.getRequestURL(), ex);
} else if (ex instanceof ConstraintViolationException) {
failData.setCode(ErrorCode.WRONG_PARAMETER);
failData.setMessage(getMessage((ConstraintViolationException) ex));
} else if (ex instanceof ErrorCode) {
failData.setCode(((ErrorCode) ex).getErrorCode());
} else {
log.error("execute {} failed with exception", request.getRequestURL(), ex);
}
try {
response.setCharacterEncoding("utf-8");
messageConverter.write(
failData, MediaType.APPLICATION_JSON, new ServletServerHttpResponse(response));
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
return new ModelAndView();
}
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
public static String getMessage(ConstraintViolationException e) {
List<String> msgList = new ArrayList<>();
for (ConstraintViolation<?> constraintViolation : e.getConstraintViolations()) {
int i = 0;
StringBuilder param = new StringBuilder();
for (Iterator<Path.Node> iterator = constraintViolation.getPropertyPath().iterator();
iterator.hasNext();
i++) {
Path.Node node = iterator.next();
if (i == 0) {
continue;
}
if (!param.toString().isBlank()) {
param.append(".");
}
param.append(node.getName());
}
msgList.add("参数 [ " + param + " ] " + constraintViolation.getMessage());
}
return StringUtils.join(msgList.toArray(), ";");
}
}

View File

@@ -0,0 +1,62 @@
package {{ .package }}.common.response;
import com.vs.common.util.rpc.pub.SuccessData;
import com.vs.ox.common.utils.ObjectMapperFactory;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.method.support.ModelAndViewContainer;
import java.util.Collections;
/** 处理 Controller 里的返回值,从 Object转为Json */
public class ResponseJsonMethodReturnValueHandler
implements HandlerMethodReturnValueHandler, InitializingBean {
private HttpMessageConverter messageConverter;
@Override
public void afterPropertiesSet() {
if (messageConverter == null) {
messageConverter =
new MappingJackson2HttpMessageConverter(
ObjectMapperFactory.getDefaultObjectMapper());
}
}
@Override
public boolean supportsReturnType(MethodParameter returnType) {
return true;
}
@Override
public void handleReturnValue(
Object returnValue,
MethodParameter returnType,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest)
throws Exception {
mavContainer.setRequestHandled(true);
Object result = returnValue;
/** Web分页请求的返回按照antd框架要求的格式不转为SuccessData */
result =
result == null
? new SuccessData(Collections.emptyMap())
: new SuccessData(returnValue);
ServletServerHttpResponse response =
new ServletServerHttpResponse(
webRequest.getNativeResponse(HttpServletResponse.class));
messageConverter.write(
result,
new MediaType(
MediaType.APPLICATION_JSON, Collections.singletonMap("charset", "utf-8")),
response);
}
}

View File

@@ -0,0 +1,104 @@
package {{ .package }}.common.response;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.method.annotation.MapMethodProcessor;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.ViewNameMethodReturnValueHandler;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@Configuration
@ComponentScan("com.vs.ox")
public class WebMvcConfiguration implements WebMvcConfigurer, ApplicationContextAware {
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
private ApplicationContext applicationContext;
// 删除 init 方法,在 setRequestMappingHandlerAdapter 中调用
private void init() {
List<HandlerMethodReturnValueHandler> returnValueHandlers =
this.requestMappingHandlerAdapter.getReturnValueHandlers();
if (returnValueHandlers == null) {
return; // 避免空指针异常
}
Iterator<HandlerMethodReturnValueHandler> iterator = returnValueHandlers.iterator();
List<HandlerMethodReturnValueHandler> newProcessors = new ArrayList<>();
while (iterator.hasNext()) {
HandlerMethodReturnValueHandler next = iterator.next();
// 为了能在controller中直接返回map不被默认的MapMethodProcessor拦截
if (next instanceof MapMethodProcessor
||
// 为了能在controller中直接返回String不被默认的ViewNameMethodReturnValueHandler拦截
next instanceof ViewNameMethodReturnValueHandler) {
continue;
} else {
newProcessors.add(next);
}
}
this.requestMappingHandlerAdapter.setReturnValueHandlers(newProcessors);
}
// 使用 configureHandlerExceptionResolvers 方法
@Override
public void configureHandlerExceptionResolvers(
List<HandlerExceptionResolver> exceptionResolvers) {
ResponseJsonExceptionResolver responseJsonExceptionResolver =
new ResponseJsonExceptionResolver();
try {
responseJsonExceptionResolver.afterPropertiesSet();
} catch (Exception e) {
e.printStackTrace();
}
exceptionResolvers.add(responseJsonExceptionResolver);
}
// 使用 addReturnValueHandlers 方法
@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
ResponseJsonMethodReturnValueHandler responseJsonMethodReturnValueHandler =
new ResponseJsonMethodReturnValueHandler();
responseJsonMethodReturnValueHandler.afterPropertiesSet();
returnValueHandlers.add(responseJsonMethodReturnValueHandler);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Autowired private Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder;
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
ObjectMapper mapper = jackson2ObjectMapperBuilder.build();
DateFormat dateFormat = mapper.getDateFormat();
mapper.setDateFormat(new MyDateFormat(dateFormat));
MappingJackson2HttpMessageConverter mappingJsonpHttpMessageConverter =
new MappingJackson2HttpMessageConverter(mapper);
return mappingJsonpHttpMessageConverter;
}
// 删除 ServletContextListener使用 ApplicationListener 或 BeanPostProcessor
// 或者直接注入 RequestMappingHandlerAdapter
@Autowired
public void setRequestMappingHandlerAdapter(
RequestMappingHandlerAdapter requestMappingHandlerAdapter) {
this.requestMappingHandlerAdapter = requestMappingHandlerAdapter;
init(); // 在这里调用 init 方法
}
}

View File

@@ -0,0 +1,7 @@
package {{ .package }}.common.rocketmq;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
public interface RocketMQService {
DefaultMQPushConsumer getConsumer(String consumerGroup);
}

View File

@@ -0,0 +1,34 @@
package {{ .package }}.common.rocketmq;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.exception.MQClientException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
public class RocketMQServiceImpl implements RocketMQService {
private String serverAddr = null;
public RocketMQServiceImpl(String serverAddr) {
this.serverAddr = serverAddr;
}
Map<String, DefaultMQPushConsumer> consumerMap = new ConcurrentHashMap<>();
@Override
@Synchronized
public DefaultMQPushConsumer getConsumer(String consumerGroup) {
DefaultMQPushConsumer defaultMQPushConsumer = consumerMap.get(consumerGroup);
if (defaultMQPushConsumer != null) {
return defaultMQPushConsumer;
}
DefaultMQPushConsumer instance = new DefaultMQPushConsumer(consumerGroup);
instance.setNamesrvAddr(this.serverAddr);
this.consumerMap.put(consumerGroup, instance);
return instance;
}
}

View File

@@ -0,0 +1,3 @@
> 本模块存放公共工具类
``` \-- *Util.java
```

View File

@@ -0,0 +1 @@

308
template/mvnw vendored Executable file
View File

@@ -0,0 +1,308 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.2.0
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "$(uname)" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
else
JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=$(java-config --jre-home)
fi
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="$(which javac)"
if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=$(which readlink)
if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
if $darwin ; then
javaHome="$(dirname "\"$javaExecutable\"")"
javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
else
javaExecutable="$(readlink -f "\"$javaExecutable\"")"
fi
javaHome="$(dirname "\"$javaExecutable\"")"
javaHome=$(expr "$javaHome" : '\(.*\)/bin')
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=$(cd "$wdir/.." || exit 1; pwd)
fi
# end of workaround
done
printf '%s' "$(cd "$basedir" || exit 1; pwd)"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
# Remove \r in case we run on Windows within Git Bash
# and check out the repository with auto CRLF management
# enabled. Otherwise, we may read lines that are delimited with
# \r\n and produce $'-Xarg\r' rather than -Xarg due to word
# splitting rules.
tr -s '\r\n' ' ' < "$1"
fi
}
log() {
if [ "$MVNW_VERBOSE" = true ]; then
printf '%s\n' "$1"
fi
}
BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
log "$MAVEN_PROJECTBASEDIR"
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
if [ -r "$wrapperJarPath" ]; then
log "Found $wrapperJarPath"
else
log "Couldn't find $wrapperJarPath, downloading it ..."
if [ -n "$MVNW_REPOURL" ]; then
wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
else
wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
fi
while IFS="=" read -r key value; do
# Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
safeValue=$(echo "$value" | tr -d '\r')
case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
log "Downloading from: $wrapperUrl"
if $cygwin; then
wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
fi
if command -v wget > /dev/null; then
log "Found wget ... using wget"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
log "Found curl ... using curl"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
else
curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
fi
else
log "Falling back to using Java to download"
javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaSource=$(cygpath --path --windows "$javaSource")
javaClass=$(cygpath --path --windows "$javaClass")
fi
if [ -e "$javaSource" ]; then
if [ ! -e "$javaClass" ]; then
log " - Compiling MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/javac" "$javaSource")
fi
if [ -e "$javaClass" ]; then
log " - Running MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
# If specified, validate the SHA-256 sum of the Maven wrapper jar file
wrapperSha256Sum=""
while IFS="=" read -r key value; do
case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
if [ -n "$wrapperSha256Sum" ]; then
wrapperSha256Result=false
if command -v sha256sum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
elif command -v shasum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
exit 1
fi
if [ $wrapperSha256Result = false ]; then
echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
exit 1
fi
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
# shellcheck disable=SC2086 # safe args
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

205
template/mvnw.cmd vendored Executable file
View File

@@ -0,0 +1,205 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.2.0
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %WRAPPER_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
SET WRAPPER_SHA_256_SUM=""
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
)
IF NOT %WRAPPER_SHA_256_SUM%=="" (
powershell -Command "&{"^
"$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
"If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
" Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
" Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
" Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
" exit 1;"^
"}"^
"}"
if ERRORLEVEL 1 goto error
)
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %WRAPPER_JAR% ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%"=="on" pause
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
cmd /C exit /B %ERROR_CODE%

View File

@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.insigma_oracle</groupId>
<artifactId>insigma_oracle</artifactId>
<version>4.1.0-SNAPSHOT</version>
</parent>
<groupId>com.insigma_oracle</groupId>
<artifactId>odin-web</artifactId>
<version>4.1.0-SNAPSHOT</version>
<licenses>
<license>
<name>odin-base</name>
</license>
</licenses>
<properties>
<maven.compiler.target>17</maven.compiler.target>
<odin-est.version>2.0.0</odin-est.version>
<maven.compiler.source>17</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-core</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-security-web</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-security-firewall</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-security-jasypt</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-file-storage-mongo</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-scheduler-quartz</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-redis-session</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-web-support-ep-dev</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-web-support-excel</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-web-support-module</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-log-core</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-est</artifactId>
<version>${odin-est.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.insigma_oracle</groupId>
<artifactId>account-entrance-web</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.insigma_oracle</groupId>
<artifactId>account-entrance-rpc</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
<build>
<finalName>odin-web</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project>

118
template/odin-web/pom.xml Normal file
View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>{{.groupId}}</groupId>
<artifactId>{{.artifactId}}</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>odin-web</artifactId>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<odin-est.version>2.0.0</odin-est.version>
</properties>
<dependencies>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-core</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-security-web</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-security-firewall</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-security-jasypt</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-file-storage-mongo</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-scheduler-quartz</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-redis-session</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-web-support-ep-dev</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-web-support-excel</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-web-support-module</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-log-core</artifactId>
</dependency>
<dependency>
<groupId>com.insigma</groupId>
<artifactId>odin-est</artifactId>
<version>${odin-est.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>odin-web</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,19 @@
package com.insigma;
import com.vs.sqlmapper.spring.DataSourceConfig;
import com.vs.sqlmapper.spring.scan.VSDaoBeanScan;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;
@SpringBootApplication(scanBasePackages = {"com.insigma", "com.vs","{{.groupId}}"})
@VSDaoBeanScan(basePackages = {"com.vs","{{.groupId}}"})
@Import(DataSourceConfig.class)
@MapperScan(value ={"{{.groupId}}.**.persist.mapper.mybatis","com.insigma.**.mapper","com.insigma.**.dao"})
public class OdinWebApplication {
public static void main(String[] args) {
SpringApplication.run(OdinWebApplication.class, args);
}
}

View File

@@ -0,0 +1,139 @@
package com.insigma.business.demo.controller;
import com.insigma.business.demo.dto.DemoPersonDTO;
import com.insigma.business.demo.service.DemoPersonService;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.log.core.annotation.OpLog;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequest;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequestParam;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 人员增删改查demo
* <p>
* 实体类传参开发方式需继承BaseController并且需要实体类传参的方法上加上@OdinRequest
* 在doInit方法上需要加上注解@OdinRequest(init = true)init = true为初始化字典数据和模块信息其他方法上只需加@OdinRequest即可不需要参数
* 方法参数如果不指定@OdinRequestParam注解则按照参数名去取前端传过来的数据并将其转化成实体类
* 如果指定了@OdinRequestParam注解并且设定了value值则根据value值去取前端传过来的数据
* 其中@OdinRequestParam参数required默认为true即如果找不到对应的数据则返回错误当设置成false则不会
* 如果需要接收前端传过来的表格数据则可以通过定义PageInfo<T>来接收数据
*
* @author yinjh
*/
@RestController
@RequestMapping("/business/demo/DemoPerson")
public class DemoPersonController extends BaseController {
@Autowired
private DemoPersonService demoPersonService;
@OdinRequest(init = true)
@PostMapping("/doInit")
public ResponseMessage doInit(DemoPersonDTO f_form, Integer t_tableData_size) {
tableDataQuery(f_form, 1, t_tableData_size);
return this.ok();
}
@OdinRequest
@PostMapping("/query")
public ResponseMessage query(@OdinRequestParam("f_form") DemoPersonDTO queryDTO,
//@OdinRequestParam("t_tableData") PageInfo<DemoPersonDTO> pageInfo, // 没用到,只作如何取表格数据的演示
Integer t_tableData_size) {
tableDataQuery(queryDTO, 1, t_tableData_size);
// this.set("page", 1); // 需要将前端表格中:currentPage定义的值设置成1
return this.ok();
}
@OdinRequest
@PostMapping("/doGridQuery/{name}")
public ResponseMessage doGridQuery(@OdinRequestParam("f_form") DemoPersonDTO queryDTO,
@OdinRequestParam("t_tableData_page") Integer page,
@OdinRequestParam("t_tableData_size") Integer size,
@PathVariable String name) {
tableDataQuery(queryDTO, page, size);
// this.set("page", page); // 需要将t_tableData_page的值赋值到前端表格:currentPage的值中
return this.ok();
}
@OdinRequest
@PostMapping("/add")
public ResponseMessage add() {
this.clearForm("f_personForm");
this.set("dialogFormVisible", true);
this.set("dialogFormTitle", "新增人员");
return this.ok();
}
@OdinRequest
@PostMapping("/update")
public ResponseMessage update(String id) {
DemoPersonDTO dto = demoPersonService.queryPerson(id);
this.toForm("f_personForm", dto);
this.set("dialogFormVisible", true);
this.set("dialogFormTitle", "修改人员");
return this.ok();
}
@OdinRequest(refresh = true)
@PostMapping("/batchDelete")
public ResponseMessage batchDelete() {
List<DemoPersonDTO> list = this.getCheckedTableData("t_tableData", DemoPersonDTO.class);
if (list.size() == 0) {
return this.error("请勾选需要删除的人员!");
}
List<String> ids = list.stream().map(o -> o.getId()).collect(Collectors.toList());
demoPersonService.deletePersons(ids);
// this.refresh();
return this.ok("删除成功!");
}
@OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面
@PostMapping("/delete")
public ResponseMessage delete(String id) {
List<String> ids = Arrays.asList(id);
demoPersonService.deletePersons(ids);
// this.refresh();
return this.ok("删除成功!");
}
@OpLog
@OdinRequest(refresh = true)
@PostMapping("/doSave/{name}")
public ResponseMessage doSave(@OdinRequestParam("f_personForm") DemoPersonDTO demoPersonDTO, @PathVariable String name) {
if (ObjectUtils.isEmpty(demoPersonDTO.getId())) {
DemoPersonDTO dto = demoPersonService.selectOne(demoPersonDTO);
if (dto != null) {
return this.error("不可添加重复数据!");
}
}
demoPersonService.savePerson(demoPersonDTO);
this.set("dialogFormVisible", false);
//this.refresh();
return this.ok("保存成功!");
}
public void tableDataQuery(DemoPersonDTO queryDTO, Integer t_tableData_page, Integer t_tableData_size) {
this.pageQuery("t_tableData", () -> {
this.set("page", t_tableData_page); // 需要将前端表格中:currentPage定义的值设置成page的值
return demoPersonService.queryPersonListByExport(queryDTO, t_tableData_page, t_tableData_size);
}, (demoPersonDTO, checkbox) -> {
if ("1".equals(demoPersonDTO.getSex())) {
// checkbox.setDisabled(true); // 设置行复选框不可编辑
} else {
// checkbox.setChecked(true); // 设置行复选框已选中
}
});
}
}

View File

@@ -0,0 +1,19 @@
package com.insigma.business.demo.dao;
import com.insigma.business.demo.entity.DemoPerson;
import com.insigma.framework.persistence.mybatis.plus.BaseDAO;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yinjh
*/
@Mapper
public interface DemoPersonDAO extends BaseDAO<DemoPerson> {
DemoPerson selectDemoPersonById(String id);
}

View File

@@ -0,0 +1,37 @@
package com.insigma.business.demo.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 人员信息DTO
*
* @author yinjh
*/
@Data
public class DemoPersonDTO implements Serializable {
private Boolean checked;//用于设置复选框是否选中
private Boolean disabled;//用于设置复选框是否可编辑
private String id;
private String name;
private String sex;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date birthday;
private String mobile;
private String address;
private String startTime;
private Date create_time;
}

View File

@@ -0,0 +1,51 @@
package com.insigma.business.demo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 人员信息
*
* @author yinjh
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("DEMO_PERSON")
public class DemoPerson implements Serializable {
private static final long serialVersionUID = 1L;
@TableId("ID")
private String id;
@TableField("NAME")
private String name;
@TableField("SEX")
private String sex;
@TableField("BIRTHDAY")
private Date birthday;
@TableField("MOBILE")
private String mobile;
@TableField("ADDRESS")
private String address;
@TableField("PRSENO")
private Long prseno;
@TableField("CREATE_TIME")
private Date create_time;
}

View File

@@ -0,0 +1,26 @@
package com.insigma.business.demo.service;
import com.insigma.business.demo.dto.DemoPersonDTO;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import java.util.List;
/**
* 人员管理服务接口
*
* @author yinjh
*/
public interface DemoPersonService {
DemoPersonDTO queryPerson(String id);
void deletePersons(List<String> ids);
void savePerson(DemoPersonDTO demoPersonDTO);
PageInfo<DemoPersonDTO> queryPersonList(DemoPersonDTO queryDTO, Integer page, Integer size);
DemoPersonDTO selectOne(DemoPersonDTO demoPersonDTO);
PageInfo<DemoPersonDTO> queryPersonListByExport(DemoPersonDTO queryDTO, Integer page, Integer size);
}

View File

@@ -0,0 +1,152 @@
package com.insigma.business.demo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.insigma.business.demo.dao.DemoPersonDAO;
import com.insigma.business.demo.dto.DemoPersonDTO;
import com.insigma.business.demo.entity.DemoPerson;
import com.insigma.business.demo.service.DemoPersonService;
import com.insigma.framework.core.util.DtoEntityUtil;
import com.insigma.framework.core.util.IDUtil;
import com.insigma.framework.persistence.core.jdbc.JdbcPageHelper;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.framework.web.support.ep.dev.util.SysFunctionManager;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 人员管理业务实现类
*
* @author yinjh
*/
@Service
public class DemoPersonServiceImpl implements DemoPersonService {
@Autowired
private DemoPersonDAO demoPersonDAO;
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public DemoPersonDTO queryPerson(String id) {
DemoPerson dp = demoPersonDAO.selectDemoPersonById(id);
// DemoPerson dp = demoPersonDAO.sqlSession().selectOne("selectDemoPersonById", id);
// DemoPerson dp = demoPersonDAO.getById(id);
DemoPersonDTO dto = DtoEntityUtil.trans(dp, DemoPersonDTO.class);
return dto;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deletePersons(List<String> ids) {
demoPersonDAO.deleteByIds(ids);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void savePerson(DemoPersonDTO demoPersonDTO) {
DemoPerson dp = DtoEntityUtil.trans(demoPersonDTO, DemoPerson.class);
String id = null;
if (ObjectUtils.isEmpty(demoPersonDTO.getId())) { // 新增
id = IDUtil.generateUUID();
dp.setCreate_time(new Date());
} else {
id = demoPersonDTO.getId();
}
dp.setId(id);
demoPersonDAO.insertOrUpdate(dp);
// OpLogUtil.saveOpLog(SecurityUserUtil.getCurrentUser().getUsername(), "000000");
// demoPersonDTO = DtoEntityUtil.trans(dp, DemoPersonDTO.class);
// HUtil.insert("demo_person", JSONObject.parseObject(JSONObject.toJSONString(demoPersonDTO)), false, true);
}
@SneakyThrows
@Override
public PageInfo<DemoPersonDTO> queryPersonList(DemoPersonDTO queryDTO, Integer page, Integer size) {
//查询条件为时间段选项
SimpleDateFormat st = new SimpleDateFormat("yyyy-MM-dd");
Date oTime = null;
Date pTime = null;
if (!ObjectUtils.isEmpty(queryDTO.getStartTime())) {
oTime = st.parse(queryDTO.getStartTime().split(",")[0]);
pTime = st.parse(queryDTO.getStartTime().split(",")[1]);
}
LambdaQueryWrapper<DemoPerson> wrapper = new QueryWrapper<DemoPerson>().lambda();
wrapper.like(!ObjectUtils.isEmpty(queryDTO.getName()), DemoPerson::getName, "%" + queryDTO.getName() + "%")
.eq(!ObjectUtils.isEmpty(queryDTO.getSex()), DemoPerson::getSex, queryDTO.getSex())
.ge(!ObjectUtils.isEmpty(queryDTO.getStartTime()), DemoPerson::getBirthday, oTime)
.le(!ObjectUtils.isEmpty(queryDTO.getStartTime()), DemoPerson::getBirthday, pTime)
.orderByDesc(DemoPerson::getCreate_time);
Page<DemoPerson> dpPage = new Page<>(page, size);
IPage<DemoPerson> mapIPage = demoPersonDAO.selectPage(dpPage, wrapper);
List<DemoPerson> records = mapIPage.getRecords();
List<DemoPersonDTO> list = DtoEntityUtil.trans(records, DemoPersonDTO.class);
PageInfo<DemoPersonDTO> pageInfo = new PageInfo<>();
pageInfo.setTotal(mapIPage.getTotal());
pageInfo.setData(list);
return pageInfo;
}
@Override
public DemoPersonDTO selectOne(DemoPersonDTO demoPersonDTO) {
LambdaQueryWrapper<DemoPerson> wrapper = new QueryWrapper<DemoPerson>().lambda();
wrapper.eq(!ObjectUtils.isEmpty(demoPersonDTO.getName()), DemoPerson::getName, demoPersonDTO.getName())
.eq(!ObjectUtils.isEmpty(demoPersonDTO.getSex()), DemoPerson::getSex, demoPersonDTO.getSex())
.eq(!ObjectUtils.isEmpty(demoPersonDTO.getBirthday()), DemoPerson::getBirthday, demoPersonDTO.getBirthday())
.eq(!ObjectUtils.isEmpty(demoPersonDTO.getMobile()), DemoPerson::getMobile, demoPersonDTO.getAddress())
.eq(!ObjectUtils.isEmpty(demoPersonDTO.getAddress()), DemoPerson::getAddress, demoPersonDTO.getAddress());
//查询有没有相同的数据
DemoPerson demoPerson = demoPersonDAO.selectOne(wrapper);
DemoPersonDTO personDTO = DtoEntityUtil.trans(demoPerson, DemoPersonDTO.class);
return personDTO;
}
@SneakyThrows
@Override
public PageInfo<DemoPersonDTO> queryPersonListByExport(DemoPersonDTO queryDTO, Integer page, Integer size) {
Map<String, Object> params = new HashMap<>();
StringBuffer sql = new StringBuffer("select * from demo_person");
boolean hasWhere = false;
if (!ObjectUtils.isEmpty(queryDTO.getName())) {
sql.append(hasWhere ? " and" : " where").append(" name like :name");
params.put("name", "%" + queryDTO.getName() + "%");
hasWhere = true;
}
if (!ObjectUtils.isEmpty(queryDTO.getSex())) {
sql.append(hasWhere ? " and" : " where").append(" sex = :sex");
params.put("sex", queryDTO.getSex());
hasWhere = true;
}
if (!ObjectUtils.isEmpty(queryDTO.getStartTime())) {
SimpleDateFormat st = new SimpleDateFormat("yyyy-MM-dd");
Date oTime = st.parse(queryDTO.getStartTime().split(",")[0]);
Date pTime = st.parse(queryDTO.getStartTime().split(",")[1]);
sql.append(hasWhere ? " and" : " where").append(" birthday > :startTime and birthday < :endTime");
params.put("startTime", oTime);
params.put("endTime", pTime);
}
JdbcPageHelper jdbcPageHelper = new JdbcPageHelper(jdbcTemplate, page, size, "grid", SysFunctionManager.getFunctionId());
return jdbcPageHelper.queryPagination(sql.toString(), params, DemoPersonDTO.class);
}
}

View File

@@ -0,0 +1,39 @@
package com.insigma.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
/**
* RestTemplate配置
*
* @author yinjh
*/
@Configuration
public class RestTemplateConfig {
@Value("${sys.rest-template.connect-timeout:30000}")
private int connectTimeout;
@Value("${sys.rest-template.read-timeout:30000}")
private int readTimeout;
@Bean
@Primary
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(connectTimeout);
factory.setReadTimeout(readTimeout);
return factory;
}
}

View File

@@ -0,0 +1,138 @@
package com.insigma.sys.common;
import com.insigma.framework.core.exception.AppException;
import com.insigma.framework.domain.core.entity.Aa26;
import com.insigma.framework.domain.core.entity.SysOrg;
import com.insigma.framework.domain.core.entity.SysRole;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.sys.service.Aa26Service;
import com.insigma.sys.service.SysOrgService;
import com.insigma.sys.service.SysRoleService;
import com.insigma.sys.service.SysUserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 统一验证器
*
* @author yinjh
*/
@Component
public class CommonValidator {
@Resource
private CurrentUserService currentUserService;
@Resource
private SysUserService sysUserService;
@Resource
private SysRoleService sysRoleService;
@Resource
private Aa26Service aa26Service;
@Resource
private SysOrgService sysOrgService;
/**
* 校验当前登录用户是否有相应角色的操作权限
* @param roleId 角色ID
* @return true有权限false无权限
*/
public boolean validateRole(String roleId) {
SysUser sysUser = currentUserService.getCurrentUser();
SysRole sysRole = sysRoleService.getByRoleId(roleId);
if (sysRole == null) {
throw new AppException("角色不存在!");
}
if ("1".equals(sysUser.getUserType())) {
return true;
} else if ("2".equals(sysUser.getUserType())) {
return sysUser.getAreaId() != null && sysUser.getAreaId().equals(sysRole.getAreaId());
} else if ("3".equals(sysUser.getUserType())) {
return sysUser.getOrgId() != null && sysUser.getOrgId().equals(sysRole.getOrgId());
}
return false;
}
/**
* 校验角色列表
* @param roleIds 角色ID列表
* @return true有权限false无权限
*/
public boolean validateRoleIds(List<String> roleIds) {
for (String roleId : roleIds) {
if (!validateRole(roleId)) {
return false;
}
}
return true;
}
/**
* 校验当前登录用户是否有相应行政区划的操作权限
* @param areaId 区域ID
* @return true有权限false无权限
*/
public boolean validateArea(String areaId, String userType) {
SysUser sysUser = currentUserService.getCurrentUser();
if ("1".equals(sysUser.getUserType()) && "1".equals(userType)) {
return true;
}
Aa26 aa26 = aa26Service.getByAab301(areaId);
if (aa26 == null) {
throw new AppException("行政区划不存在!");
}
if ("1".equals(sysUser.getUserType())) {
return true;
} else if ("2".equals(sysUser.getUserType())) {
List<Aa26> list = aa26Service.getByAab301AndIdPath(sysUser.getAreaId() + "", aa26.getIdPath());
return !list.isEmpty();
} else if ("3".equals(sysUser.getUserType())) {
return aa26.getAab301().equals(sysUser.getAreaId() + "");
}
return false;
}
/**
* 校验当前登录用户是否有相应机构的操作权限
* @param orgId 机构ID
* @return true有权限false无权限
*/
public boolean validateOrg(Long orgId, String userType) {
SysUser sysUser = currentUserService.getCurrentUser();
if ("1".equals(userType)) {
return "1".equals(sysUser.getUserType());
}
SysOrg sysOrg = sysOrgService.getByOrgId(orgId);
if (sysOrg == null) {
throw new AppException("机构不存在!");
}
if ("1".equals(sysUser.getUserType())) {
return true;
} else if ("2".equals(sysUser.getUserType())) {
List<SysOrg> list = sysOrgService.getByRegionCodeAndIdPath(sysUser.getAreaId() + "", sysOrg.getIdPath());
return !list.isEmpty();
} else if ("3".equals(sysUser.getUserType())) {
return sysOrg.getOrgId().equals(orgId);
}
return false;
}
/**
* 校验当前登录用户是否有相应用户的操作权限
* @param userId 用户ID
* @return true有权限false无权限
*/
public boolean validateUser(String userId) {
SysUser sysUser = sysUserService.getByUserId(userId);
if (sysUser == null) {
throw new AppException("用户不存在!");
}
return validateOrg(sysUser.getOrgId(), sysUser.getUserType());
}
}

View File

@@ -0,0 +1,16 @@
package com.insigma.sys.common;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.security.web.dto.SysUserDetails;
/**
* 获取当前用户信息的接口
*
* @author yinjh
*/
public interface CurrentUserService {
SysUser getCurrentUser();
SysUserDetails getCurrentUserDetails();
}

View File

@@ -0,0 +1,60 @@
package com.insigma.sys.common;
import com.insigma.framework.core.util.SpringContextUtil;
import com.insigma.odin.framework.est.EstException;
import com.insigma.odin.framework.est.auth.ClientAuth;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.context.ApplicationContext;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.authentication.WebAuthenticationDetails;
import org.springframework.security.web.authentication.logout.LogoutHandler;
import org.springframework.web.context.support.WebApplicationContextUtils;
/**
* 登录认证
*
* @author jinw
*/
public class OdinClientAuth implements ClientAuth {
@Override
public boolean syslogon(String loginName, HttpServletRequest request) throws EstException {
UserDetailsService userDetailsService;
ApplicationContext applicationContext = WebApplicationContextUtils.findWebApplicationContext(request.getServletContext());
if (SpringContextUtil.getAppContext() != null) {
userDetailsService = SpringContextUtil.getBean(UserDetailsService.class);
} else {
userDetailsService = applicationContext.getBean(UserDetailsService.class);
}
UserDetails userDetails = userDetailsService.loadUserByUsername(loginName);
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities());
token.setDetails(new WebAuthenticationDetails(request));
SecurityContextHolder.getContext().setAuthentication(token);
request.getSession().setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext());
request.getSession().setAttribute(OdinClientAuthExtendFilter.IS_SAVE_LOGONLOG_SESSION_KEY, Boolean.TRUE);
return true;
}
@Override
public boolean syslogout(String loginName, HttpServletRequest request, HttpServletResponse response) throws EstException {
LogoutHandler logoutHandler;
if (SpringContextUtil.getAppContext() != null) {
logoutHandler = SpringContextUtil.getBean("myLogoutHandler", LogoutHandler.class);;
} else {
logoutHandler = WebApplicationContextUtils.findWebApplicationContext(request.getServletContext()).getBean("myLogoutHandler",LogoutHandler.class);
}
SecurityContext securityContext = (SecurityContext) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");
if (securityContext != null) {
logoutHandler.logout(request, response, securityContext.getAuthentication());
request.getSession().removeAttribute("SPRING_SECURITY_CONTEXT");
}
request.getSession().invalidate();
return true;
}
}

View File

@@ -0,0 +1,54 @@
package com.insigma.sys.common;
import com.insigma.framework.security.core.consts.SecurityConst;
import com.insigma.framework.security.web.dto.SysUserDetails;
import com.insigma.framework.security.web.handler.SysLoginHandler;
import jakarta.annotation.Resource;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
/**
* 单点登录扩展过滤器,用于记录登录日志
*
* @author jinw
*/
@Slf4j
@Component
@WebFilter(filterName = "odinClientExtendFilter",urlPatterns = "/*")
public class OdinClientAuthExtendFilter extends OncePerRequestFilter {
public static final String IS_SAVE_LOGONLOG_SESSION_KEY = "save_logonlog_flag";
@Resource
private SysLoginHandler sysLoginHandler;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpSession session = request.getSession();
Boolean isSaveLogonlog = null;
try {
isSaveLogonlog = (Boolean) session.getAttribute(IS_SAVE_LOGONLOG_SESSION_KEY);
if (isSaveLogonlog != null && isSaveLogonlog) {
SysUserDetails userDetails = (SysUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
sysLoginHandler.innerLoginSuccess(userDetails, SecurityConst.LoginType.SSO_EST, request);
}
} catch (Exception e) {
log.error("记录登录日志失败!", e);
} finally {
if (isSaveLogonlog != null) {
session.removeAttribute(IS_SAVE_LOGONLOG_SESSION_KEY);
}
}
chain.doFilter(request, response);
}
}

View File

@@ -0,0 +1,49 @@
package com.insigma.sys.common;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.function.Supplier;
/**
* 系统管理模式
*
* @author jinw
*/
@Component
public final class SysManageMode {
@Value("${odin.sys.configure.triple-mode:false}")
private boolean tripleMode;
private static boolean TRIPLE_MODE = false;
@PostConstruct
public void init() {
TRIPLE_MODE = tripleMode;
}
public static boolean isTripleMode() {
return TRIPLE_MODE;
}
public static <T> T doActionInTripleMode(Supplier<T> tripleModeAction) {
if (TRIPLE_MODE)
return tripleModeAction.get();
return null;
}
public static void doActionInTripleMode(Runnable tripleModeRun) {
if (TRIPLE_MODE)
tripleModeRun.run();
}
public static void doAction(Runnable tripleModeRun, Runnable notTripleModeRun) {
if (TRIPLE_MODE) {
tripleModeRun.run();
} else {
notTripleModeRun.run();
}
}
}

View File

@@ -0,0 +1,58 @@
package com.insigma.sys.common.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.domain.core.mapper.SysUserBaseMapper;
import com.insigma.framework.security.web.dto.SysUserDetails;
import com.insigma.framework.security.core.util.SecurityUserUtil;
import com.insigma.sys.common.CurrentUserService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.Objects;
/**
* 获取当前登录人
*
* @author yinjh
*/
@Service
public class CurrentUserServiceImpl implements CurrentUserService {
@Resource
private SysUserBaseMapper sysUserBaseMapper;
@Override
public SysUser getCurrentUser() {
return currentUserFromSecurityContext();
}
@Override
public SysUserDetails getCurrentUserDetails() {
return (SysUserDetails) SecurityUserUtil.getCurrentUser();
}
/**
* 从SpringSecurity中获取当前用户信息 jinw
*
* @return 当前登录用户
*/
private SysUser currentUserFromSecurityContext() {
SysUser sysUser = null;
SysUserDetails userDetails = (SysUserDetails) SecurityUserUtil.getCurrentUser();
if (userDetails != null) {
sysUser = (SysUser) userDetails.getOthers().get("sysUser");
if (sysUser == null) {
sysUser = sysUserBaseMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getLogonName, userDetails.getUsername()));
userDetails.getOthers().put("sysUser", sysUser);
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
request.getSession().setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext());
}
}
return sysUser;
}
}

View File

@@ -0,0 +1,29 @@
package com.insigma.sys.common.impl;//package com.insigma.sys.common.impl;
import com.insigma.odin.framework.est.EstException;
import com.insigma.odin.framework.est.auth.LogoutOrFailedExceptionHandler;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
/**
* 登出或失败异常处理器
*
* @author yinjh
*/
@Slf4j
public class MyLogoutOrFailedExceptionHandler extends LogoutOrFailedExceptionHandler {
@Override
public void handle(EstException ex, HttpServletRequest request, HttpServletResponse response) {
try {
log.debug("异常处理:", ex);
response.sendError(401, "登录已失效,请重新登录!");
} catch (IOException e) {
log.error("返回异常码时失败!", e);
}
}
}

View File

@@ -0,0 +1,34 @@
package com.insigma.sys.common.impl;
import com.insigma.framework.security.core.dto.BaseUserInfo;
import com.insigma.framework.security.web.dto.SysUserDetails;
import com.insigma.framework.security.web.handler.SysLoginHandler;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Service;
/**
* 登录处理器
*
* @author yinjh
*/
@Slf4j
@Service
public class MySysLoginHandler extends SysLoginHandler {
@Override
public BaseUserInfo success(SysUserDetails sysUserDetails, String loginType, HttpServletRequest request) {
request.getSession().setAttribute("auth_filter_ignored",Boolean.TRUE);
BaseUserInfo baseUserInfo = new BaseUserInfo();
baseUserInfo.setUserid(sysUserDetails.getUserId());
baseUserInfo.setUsername(sysUserDetails.getUsername());
baseUserInfo.setNickname(sysUserDetails.getNickname());
return baseUserInfo;
}
@Override
public void failure(String username, String loginType, HttpServletRequest request, AuthenticationException exception) {
log.info("{} 登录失败,原因: {}", username, exception.getMessage());
}
}

View File

@@ -0,0 +1,37 @@
package com.insigma.sys.common.impl;
import com.insigma.framework.security.web.handler.SysLogoutHandler;
import com.insigma.odin.framework.est.service.SSOServiceFactory;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
/**
* 登出处理器
*
* @author yinjh
*/
@Slf4j
@Component
@ConditionalOnProperty(prefix = "sso", name = "app-name", matchIfMissing = false)
public class MySysLogoutHandler extends SysLogoutHandler {
@Value("${sso.app-name:}")
private String appName;
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
String est = (String) request.getSession().getAttribute("est");
if (est != null) {
log.info("存在est令牌执行注销操作est: {}, appName: {}", est, appName);
SSOServiceFactory.logoutService().logout(est, appName, request);
} else {
log.info("无est令牌不执行注销操作");
}
}
}

View File

@@ -0,0 +1,55 @@
package com.insigma.sys.config;//package com.insigma.sys.config;
import com.insigma.framework.security.core.config.SysSecurityConfig;
import com.insigma.framework.security.core.config.SysSecurityNoopConfig;
import com.insigma.odin.framework.est.auth.GenericAuthFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ObjectUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 单点登录配置类
*
* @author jinw
*/
@Configuration
@EnableConfigurationProperties(SSOConfigProperties.class)
@AutoConfigureAfter({SysSecurityConfig.class, SysSecurityNoopConfig.class})
@ConditionalOnProperty(prefix = "sso", name = "app-name", matchIfMissing = false)
public class SSOConfig {
@Autowired
private SSOConfigProperties configProperties;
@Bean
public FilterRegistrationBean genericAuth() {
FilterRegistrationBean<GenericAuthFilter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new GenericAuthFilter());
Map<String, String> initParameters = new HashMap<>();
initParameters.put("app-name", configProperties.getAppName());
initParameters.put("auth-service-root-url", configProperties.getAuthServiceRootUrl());
initParameters.put("auth-logon-page-root-url", configProperties.getAuthLogonPageRootUrl());
initParameters.put("client-auth-class", configProperties.getClientAuthClass());
initParameters.put("free-urls", configProperties.getFreeUrls());
initParameters.put("auth-mode", configProperties.getAuthMode());
if (!ObjectUtils.isEmpty(configProperties.getAuthServiceContextPath())) {
initParameters.put("auth-service-context-path", configProperties.getAuthServiceContextPath());
}
if (!ObjectUtils.isEmpty(configProperties.getLogoutOrFailedExceptionHandler())) {
initParameters.put("logout-or-failed-exception-handler", configProperties.getLogoutOrFailedExceptionHandler());
}
filterRegistrationBean.setInitParameters(initParameters);
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setOrder(-100);
return filterRegistrationBean;
}
}

View File

@@ -0,0 +1,24 @@
package com.insigma.sys.config;//package com.insigma.sys.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 单点登录参数配置类
*
* @author jinw
*/
@ConfigurationProperties(prefix = "sso")
@Data
public class SSOConfigProperties {
private String appName;
private String authServiceRootUrl;
private String authLogonPageRootUrl;
private String clientAuthClass = "com.insigma.sys.common.OdinClientAuth";
private String freeUrls;
private String authMode;
private String authServiceContextPath;
private String logoutOrFailedExceptionHandler;
}

View File

@@ -0,0 +1,22 @@
package com.insigma.sys.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 系统配置参数类
*
* @author yinjh
*/
@Component
@ConfigurationProperties(prefix = "odin.sys.configure")
@Data
public class SysConfigProperties {
/**
* 重置默认密码
*/
private String defaultPassword;
private Boolean ipAndUserAgentControl = false;
}

View File

@@ -0,0 +1,51 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.encryption.util.SM3Utils;
import com.insigma.framework.core.util.IpUtil;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.sys.common.CurrentUserService;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @author yinjh
*/
@RestController
@RequestMapping("/auth")
public class AuthController {
@Autowired
private CurrentUserService currentUserService;
@Autowired(required = false)
private RedisTemplate redisTemplate;
@GetMapping("/getToken")
public ResponseMessage getToken(HttpServletRequest request) {
SysUser sysUser = currentUserService.getCurrentUser();
Date date = new Date();
long timetamp = date.getTime();
String token = SM3Utils.digest(IpUtil.getClientIp(request) + ";" + sysUser.getLogonName() + ";" + timetamp); // 生成token
redisTemplate.opsForValue().set(token, sysUser);
redisTemplate.expire(token, 300, TimeUnit.SECONDS);
return ResponseMessage.ok("", token);
}
@PostMapping("/getUserInfo")
public ResponseMessage getUserInfo(@RequestBody JSONObject jsonObject) {
String token = jsonObject.getString("token");
SysUser sysUser = (SysUser) redisTemplate.opsForValue().get(token);
if(sysUser == null) {
return ResponseMessage.error("获取用户信息失败!");
}
return ResponseMessage.ok("", sysUser);
}
}

View File

@@ -0,0 +1,55 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.domain.core.entity.SysHoliday;
import com.insigma.sys.service.HolidayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author yinjh
*/
@RestController
@RequestMapping("/sys/holiday")
public class HolidayController {
@Autowired
private HolidayService holidayService;
@GetMapping("/query")
public ResponseMessage getHolidayList(int year){
List<SysHoliday> holidayList = holidayService.getHolidaysByYear(year);
if (holidayList == null || holidayList.isEmpty()) {
holidayList = holidayService.getWeekdays(year);
holidayService.updateHolidaysByYear(year, holidayList);
}
List<String> dates = holidayToDate(holidayList);
return ResponseMessage.ok("", dates);
}
@PostMapping("/{year}/update")
public ResponseMessage updateHolidays(@PathVariable int year, @RequestBody JSONObject jsonObject){
List<String> holidays = jsonObject.getJSONArray("holidays").toJavaList(String.class);
holidayService.updateHolidaysByYear(year, dateToHoliday(holidays));
return ResponseMessage.ok("保存成功!");
}
private List<String> holidayToDate(List<SysHoliday> holidays) {
return holidays.stream().map(s -> s.getYear() + "-" + (s.getMonth() < 10 ? "0" : "") + s.getMonth() + "-" + (s.getDay() < 10 ? "0" : "") + s.getDay()).collect(Collectors.toList());
}
private List<SysHoliday> dateToHoliday(List<String> dates) {
return dates.stream().map(s -> {
String[] date = s.split("-");
SysHoliday sysHoliday = new SysHoliday();
sysHoliday.setYear(Integer.parseInt(date[0]));
sysHoliday.setMonth(Integer.parseInt(date[1]));
sysHoliday.setDay(Integer.parseInt(date[2]));
return sysHoliday;
}).collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,147 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.encryption.util.SM3Utils;
import com.insigma.framework.core.exception.AppException;
import com.insigma.framework.domain.core.entity.Aa01;
import com.insigma.framework.domain.core.entity.SysLogonLog;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.security.core.password.SM3PasswordEncoder;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.config.SysConfigProperties;
import com.insigma.sys.service.Aa01Service;
import com.insigma.sys.service.SysLogonLogService;
import com.insigma.sys.service.SysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 首页面公共Controller密码修改等在首页面的请求处理可统一放到这里来
* @author jinw
* @version 2019/4/2
* <p>epsoft - insiis7</p>
*/
@RestController
@Slf4j
public class HomeController {
@Autowired
private SysUserService sysUserService;
@Autowired
private CurrentUserService currentUserService;
@Autowired
private SysConfigProperties sysConfigProperties;
@Autowired
private Aa01Service aa01Service;
@Autowired
private SysLogonLogService syslogonLogService;
@PostMapping("/sys/modifypd")
public ResponseMessage modifyPasswd(@RequestBody JSONObject data) {
SysUser currentUser = currentUserService.getCurrentUser();
try {
String oldPass=data.getString("opasswd");
String newPass=data.getString("npasswd");
String confirmPass = data.getString("rpasswd");
if (ObjectUtils.isEmpty(newPass) || !newPass.equals(confirmPass)){
throw new AppException("新密码为空或两次输入不等!");
}
String sm3LogonName = SM3Utils.digest(currentUser.getLogonName());
String sm3ReverseLogonName = SM3Utils.digest(new StringBuffer(currentUser.getLogonName()).reverse().toString());
if (sm3LogonName.equals(newPass) || sm3ReverseLogonName.equals(newPass)) {
throw new AppException("新密码不能与登录名(包含逆序)相同!");
}
sysUserService.updataPassWD(oldPass,newPass);
return ResponseMessage.ok("修改密码成功");
} catch (Exception e) {
log.error(e.getMessage(),e);
return ResponseMessage.error("修改密码失败,失败原因:" + e.getMessage());
}
}
@PostMapping("/sys/checkDefaultPasswd")
public ResponseMessage checkDefaultPasswd() {
SysUser sysUser = currentUserService.getCurrentUser();
sysUser = sysUserService.getByLogonName(sysUser.getLogonName());
Date date = sysUser.getPwEditDate();
if(date==null){
return ResponseMessage.ok("", true);
}
String passwd = sysUser.getPassWD();
String defaultPasswd = sysConfigProperties.getDefaultPassword();
if(ObjectUtils.isEmpty(defaultPasswd)) {
return ResponseMessage.ok("", false);
}
return ResponseMessage.ok("", new SM3PasswordEncoder().matches(SM3Utils.digest(defaultPasswd), passwd));
}
@PostMapping("/sys/checkPasswordDisabled")
public ResponseMessage checkPasswordDisabled() {
SysUser sysUser = currentUserService.getCurrentUser();
sysUser = sysUserService.getByLogonName(sysUser.getLogonName());
if ("1".equals(sysUser.getPwExpireType())) {
// 密码周期过期
Aa01 aa01 = aa01Service.getByAaa001("PASSWORD_EXPIRED_PERIOD");
if (aa01 != null) {
Long period = Long.valueOf(aa01.getAaa005());
if (sysUser.getPwEditDate() != null) {
// 密码修改过,以修改之后的周期计算
if (sysUser.getPwEditDate().getTime() + period * 24 * 60 * 60 * 1000 <= System.currentTimeMillis()) {
return ResponseMessage.ok("", true);
}
} else {
// 密码没有修改过,以新建用户之后的周期计算
if (sysUser.getCreateTime().getTime() + period * 24 * 60 * 60 * 1000 <= System.currentTimeMillis()) {
return ResponseMessage.ok("", true);
}
}
}
} else if ("3".equals(sysUser.getPwExpireType())) {
// 指定日期过期
if (sysUser.getPwExpireDate() != null && sysUser.getPwExpireDate().getTime() <= System.currentTimeMillis()) {
return ResponseMessage.ok("", true);
}
}
return ResponseMessage.ok("", false);
}
@GetMapping("/sys/getLastLoginTime")
public ResponseMessage getLastLoginTime() {
SysUser sysUser = currentUserService.getCurrentUser();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<SysLogonLog> list = syslogonLogService.getLast(sysUser.getUserId(), 2);
String lastLoginTime = "首次登录";
if(list != null&& list.size() > 1){
lastLoginTime = sdf.format(list.get(1).getLogonTime());
}
return ResponseMessage.ok("", lastLoginTime);
}
@GetMapping("/sys/getUserInfo")
public ResponseMessage getUserInfo(){
SysUser sysUser = currentUserService.getCurrentUser();
// SysUser sysUser = sysUserService.queryOneUser(currentUserService.getCurrentUser().getUserId());
return ResponseMessage.ok("", sysUser);
}
@PostMapping("/sys/updateUserInfo")
public ResponseMessage updateUserInfo(@RequestBody SysUser sysUser){
sysUserService.update(sysUser);
return ResponseMessage.ok("修改成功");
}
}

View File

@@ -0,0 +1,95 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.exception.AppException;
import com.insigma.framework.core.util.TreeUtil;
import com.insigma.framework.web.support.excel.ExcelFactory;
import com.insigma.framework.web.support.module.dto.ImportConfigDTO;
import com.insigma.framework.web.support.module.dto.ImportConfigDetailDTO;
import com.insigma.framework.web.support.module.service.ImportConfigService;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.ImportConfigReDTO;
import com.insigma.sys.dto.MenuDTO;
import com.insigma.sys.service.SysFunctionService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
/**
* 通用导入配置
*
* @author yinjh
*/
@RestController
@RequestMapping("/sys/import/config")
public class ImportConfigController {
@Resource
private ImportConfigService importConfigService;
@Autowired
private SysFunctionService sysFunctionService;
@Autowired
private CurrentUserService currentUserService;
@GetMapping("/queryMenuList")
public ResponseMessage queryMenuList() {
List<MenuDTO> menuDTOS = sysFunctionService.getMenuList(currentUserService.getCurrentUser());
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children", "0");
return ResponseMessage.ok("查询成功", jsonArray);
}
@GetMapping("/query")
public ResponseMessage query(String configCode, String configName) {
List<ImportConfigDTO> list = importConfigService.queryConfigList(configCode, configName);
return ResponseMessage.ok(list);
}
@GetMapping("/queryConfig")
public ResponseMessage queryConfig(String configId) {
ImportConfigDTO config = importConfigService.queryConfig(configId);
List<ImportConfigDetailDTO> details = importConfigService.queryConfigDetails(configId);
ImportConfigReDTO reDTO = new ImportConfigReDTO();
reDTO.setConfig(config);
reDTO.setDetails(details);
return ResponseMessage.ok(reDTO);
}
@PostMapping("/importExcelTemplate")
public ResponseMessage importExcelTemplate(MultipartFile file, String sheetNameOrIndex, Integer headerRowIndex) {
try {
List<ImportConfigDetailDTO> list = new ArrayList<>();
ExcelFactory.readSax(file.getInputStream(), sheetNameOrIndex, (sheetIndexOrName, rowIndex, rowList) -> {
if (rowIndex == headerRowIndex) {
for (Object field : rowList) {
ImportConfigDetailDTO detailDTO = new ImportConfigDetailDTO();
detailDTO.setOriginFieldName(String.valueOf(field));
detailDTO.setFieldType("0");
list.add(detailDTO);
}
}
});
return ResponseMessage.ok(list);
} catch (Exception e) {
throw new AppException("读取模板失败:" + e.getMessage());
}
}
@PostMapping("/save")
public ResponseMessage save(@RequestBody ImportConfigReDTO reqDTO) {
importConfigService.saveConfig(reqDTO.getConfig(), reqDTO.getDetails());
return ResponseMessage.ok("保存成功");
}
@PostMapping("/delete/{configId}")
public ResponseMessage delete(@PathVariable String configId) {
importConfigService.deleteConfig(configId);
return ResponseMessage.ok("删除成功");
}
}

View File

@@ -0,0 +1,238 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.util.DtoEntityUtil;
import com.insigma.framework.core.util.TreeUtil;
import com.insigma.framework.domain.core.entity.SysFunction;
import com.insigma.framework.web.support.core.service.CodeTypeService;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.MenuDTO;
import com.insigma.sys.dto.SysAppDTO;
import com.insigma.sys.dto.SysFunctionDTO;
import com.insigma.sys.service.SysAppService;
import com.insigma.sys.service.SysFunctionService;
import com.insigma.sys.service.SysRoleFunctionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 菜单管理
*/
@Slf4j
@RestController
@RequestMapping("/sys/menu")
public class MenuController {
@Autowired
private SysFunctionService sysFunctionService;
@Autowired
private CodeTypeService codeTypeService;
@Autowired
private CurrentUserService currentUserService;
@Autowired
private SysAppService sysAppService;
@Autowired
private SysRoleFunctionService sysRoleFunctionService;
/**
* 初始化页面数据
* @return
*/
@PostMapping("/initCodeTypes")
public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) {
try {
JSONObject codeTypes = codeTypeService.getCodeTypes(jsonObject);
List<SysAppDTO> list = sysAppService.querySysAppDTO();
JSONArray jsonArray = new JSONArray();
for (SysAppDTO sysAppDTO : list) {
JSONObject j = new JSONObject();
j.put("value",sysAppDTO.getAppName());
j.put("key",sysAppDTO.getAppId());
jsonArray.add(j);
}
codeTypes.put("APPID",jsonArray);
return ResponseMessage.ok("", codeTypes);
} catch (Exception e) {
return ResponseMessage.error(e.getMessage());
}
}
@GetMapping("/queryTree")
public ResponseMessage queryTable(){
List<MenuDTO> menuDTOS = sysFunctionService.queryAllMenu();
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children");
return ResponseMessage.ok("查询成功", jsonArray);
}
/**
* 拖拽成功完成时触发
* @param jsonObject
* @return
*/
@PostMapping("/nodeDrop")
public ResponseMessage nodeDrop(@RequestBody JSONObject jsonObject){
System.out.println(jsonObject);
JSONArray jsonArray = jsonObject.getJSONArray("data");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject oneMenu = jsonArray.getJSONObject(i);
SysFunction sysFunction = new SysFunction();
sysFunction.setFunctionId(oneMenu.getLong("functionid"));
sysFunction.setFunOrder(oneMenu.getInteger("funorder"));
sysFunction.setParentId(oneMenu.getLong("parentid"));
sysFunction.setTitle(oneMenu.getString("title"));
sysFunctionService.update(sysFunction);
}
return ResponseMessage.ok();
}
/**
* 点击左侧菜单后
*/
@PostMapping("/nodeClick")
public ResponseMessage nodeClick(@RequestBody() JSONObject jsonObject) {
String a = jsonObject.get("functionid").toString();
if (a != null){
long functionId = Long.parseLong(a);
SysFunction sysFunction = sysFunctionService.getByFunctionId(functionId);
List<SysFunction> menulist= sysFunctionService.getByParentId(sysFunction.getFunctionId());
SysFunctionDTO sysFunctionDTO = DtoEntityUtil.trans(sysFunction, SysFunctionDTO.class, true);
if (!menulist.isEmpty()){
//有子类
return ResponseMessage.ok("", sysFunctionDTO);
}else {
//没有子类
return ResponseMessage.ok("重复", sysFunctionDTO);
}
}else {
return ResponseMessage.error();
}
}
/**
* 根据id查找对象
* @param jsonObject
* @return
*/
@PostMapping("/queryById")
public ResponseMessage queryById(@RequestBody JSONObject jsonObject) {
String id=jsonObject.get("functionid").toString();
String funtype=jsonObject.get("funtype").toString();
List<MenuDTO> menuDTOS= sysFunctionService.queryMenuByFuntypeAndActive(funtype);
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children");
jsonObject.put("treedata",jsonArray);
long fId=Integer.parseInt(id);
SysFunction menu= sysFunctionService.getByFunctionId(fId);
List list=new ArrayList();
if(menu!=null){
String [] ms=menu.getIdPath().split("/");
if (ms.length>0){
for (String s:ms){
if(s.equals("0")){
continue;
}
list.add(Long.valueOf(s));
}
}}
jsonObject.put("pname",list);
return ResponseMessage.ok("", jsonObject);
}
/**
* 查询是否多于三层
* @param jsonObject
* @return
*/
@PostMapping("/querySumIsThree")
public ResponseMessage querySumIsThree(@RequestBody JSONObject jsonObject) {
try {
String id=jsonObject.get("functionid").toString();
Map<String,List> list= (Map<String, List>) jsonObject.get("pname");
long fId=Integer.parseInt(id);
SysFunction sysFunction= sysFunctionService.getByFunctionId(fId);
List<SysFunction> menu= sysFunctionService.getByIdPath(sysFunction.getIdPath());//查询当前子节点
for(int i=0;i<list.get("value").size();i++){
for (SysFunction menu1:menu){
if(String.valueOf(menu1.getFunctionId()).equals(list.get("value").get(i).toString())){
return ResponseMessage.error("上级菜单无法选择本身及下级菜单");
}
}
}
return ResponseMessage.ok();
}catch (Exception e){
return ResponseMessage.error(e.getMessage());
}
}
@PostMapping("/saveMenu")
public ResponseMessage saveMenu(@RequestBody JSONObject pageData){
Map<String,Object> map= (Map<String, Object>) pageData.get("form");
SysFunction sysFunction = sysFunctionService.getSysFunctionBean(map);
boolean flag = sysFunctionService.isManyLocations(sysFunction);
if (flag) {
return ResponseMessage.error("路径重复");
}
try {
sysFunctionService.save(sysFunction);
return ResponseMessage.ok("保存成功", sysFunction);
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("保存失败,失败原因:" +e.getMessage());
}
}
@PostMapping("/deleteMenu")
public ResponseMessage deleteMenu(@RequestBody JSONObject pageData){
if (!"1".equals(currentUserService.getCurrentUser().getUserType())) {
return ResponseMessage.error("无权操作!");
}
Long node=Long.valueOf(pageData.get("node").toString());
try {
// 根据ID删除会级联删除子节点和对应角色菜单关系
SysFunction sysFunction = sysFunctionService.getByFunctionId(node);
sysFunctionService.delete(sysFunction);
return ResponseMessage.ok("删除成功");
}catch (Exception e){
log.error(e.getMessage(), e);
return ResponseMessage.error("删除失败,失败原因:" +e.getMessage());
}
}
/**
* 查找是否有角色关系
*/
@PostMapping("/queryRoleBy")
public ResponseMessage queryRoleBy(@RequestBody JSONObject pageData){
Map<String,Object> map= (Map<String, Object>) pageData.get("form");
SysFunction sysFunction = sysFunctionService.getSysFunctionBean(map);
boolean f = sysFunctionService.findFunctionRoles(sysFunction);
if (f==true){
return ResponseMessage.error("有权限");
}else if (f==false){
return ResponseMessage.ok("没有权限");
}else {
return ResponseMessage.error();
}
}
//判断是否三级
@PostMapping("queryMenuByPid")
public ResponseMessage queryMenuByPid(@RequestBody JSONObject pageData) {
ResponseMessage rm=new ResponseMessage();
String a=pageData.get("parentid").toString();
if (a!=null){
long parentId = Long.parseLong(a);
SysFunction menu= sysFunctionService.getByFunctionId(parentId);
if (menu!=null){
SysFunction menu1= sysFunctionService.getByFunctionId(menu.getParentId());
if (menu1!=null){
rm= ResponseMessage.error("最多添加三级");
}
}
}else {
rm= ResponseMessage.error("没取到父节点");
}
return rm;
}
}

View File

@@ -0,0 +1,136 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.domain.core.entity.SysFunction;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.MonitorCentersDTO;
import com.insigma.sys.service.MonitorCentersService;
import com.insigma.sys.service.SysFunctionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author GH
* @ClassName: MonitorCentersController
* @Description: 监控中心
* @version 2021/12/7 14:53
*/
@Slf4j
@RestController
@RequestMapping("/sys/monitoringcenter/MonitoringDetails")
public class MonitorCentersController extends BaseController {
@Autowired
private MonitorCentersService monitorCentersService;
@Autowired
private SysFunctionService sysFunctionService;
@Autowired
private CurrentUserService currentUserService;
/**
* 查询应用数据源信息
*
* @return
*/
@PostMapping("/querServiceDataSouce")
public JSONObject querServiceDataSouce(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.querServiceDataSouce(monitorCentersDTO);
}
/**
* 查询应用SQL监控列表
*
* @return
*/
@PostMapping("/querServiceDataSqlList")
public JSONObject querServiceDataSqlList(@RequestBody MonitorCentersDTO MonitorCentersDTO) {
return monitorCentersService.querServiceDataSqlList(MonitorCentersDTO);
}
/**
* 查询WBEAPP监控信息
*
* @return
*/
@PostMapping("/querServiceWebApp")
public JSONObject querServiceWebApp(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.querServiceWebApp(monitorCentersDTO);
}
/**
* 查询应用URI监控列表
*
* @return
*/
@PostMapping("/querServiceDataUriList")
public JSONObject querServiceDataUriList(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.querServiceDataUriList(monitorCentersDTO);
}
/**
* 查询应用Session监控列表
*
* @return
*/
@PostMapping("/querServiceDataSessionList")
public JSONObject querServiceDataSessionList(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.querServiceDataSessionList(monitorCentersDTO);
}
/**
* 查询每个应用下对应的实例IP
*
* @return
*/
@PostMapping("/querServiceIp")
public JSONObject querServiceIp(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.querServiceIp(monitorCentersDTO);
}
//获取菜单名称和id实体
@PostMapping("/queryEntity")
public ResponseMessage queryEntity(@RequestBody JSONObject jsonObject) {
String url = jsonObject.getString("url");
SysFunction sysFunction = sysFunctionService.getByLocation(url);
return ResponseMessage.ok("", sysFunction);
}
/**
* 清理全部监控数据
*
* @return
*/
@PostMapping("/clearAllMonitorData")
public JSONObject clearAllMonitorData() {
return monitorCentersService.clearAllMonitorData();
}
/**
* 清理对应的监控数据
*
* @return
*/
@PostMapping("/clearOneServiceData")
public JSONObject clearOneServiceData(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.clearOneServiceData(monitorCentersDTO);
}
//查询用户是否为超级管理员
@GetMapping("/queryUser")
public ResponseMessage queryUser() {
SysUser sysUser = currentUserService.getCurrentUser();
//超级管理员
if ("1".equals(sysUser.getUserType())) {
return ResponseMessage.ok("", true);
} else {
return ResponseMessage.ok("", false);
}
}
}

View File

@@ -0,0 +1,160 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.web.support.excel.ExcelFactory;
import com.insigma.framework.web.support.excel.ExcelWriter;
import com.insigma.framework.web.support.excel.config.ExcelColConfig;
import com.insigma.framework.web.support.excel.config.ExcelConfig;
import com.insigma.framework.web.support.excel.enums.ExcelTypeEnum;
import com.insigma.sys.dto.MonitorCentersDTO;
import com.insigma.sys.service.MonitorCentersService;
import com.insigma.sys.util.WordUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
* @author GH
* @version 2022/3/8 16:46
* @ClassName: MonitorDataController
* @Description:
*/
@Slf4j
@RestController
@RequestMapping("/sys/monitoringcenter/index")
public class MonitorDataController {
@Autowired
MonitorCentersService monitorCentersService;
@Value("${spring.application.name}")
private String appName;
/**
* 获取报告数据
*
* @return
*/
@PostMapping("/getReportData")
public JSONObject getReportData(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.getReportData(monitorCentersDTO);
}
//导出监控大屏数据
@GetMapping("/dataExport")
public void dataExport(@RequestParam("excelName") String excelName, HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(excelName, "utf-8"));
ExcelTypeEnum excelType = excelName.endsWith(".xls") ? ExcelTypeEnum.XLS : ExcelTypeEnum.XLSX;
ExcelWriter writer = ExcelFactory.getWriter(response.getOutputStream(), new ExcelConfig(excelType, true,
ExcelColConfig.of("CREATE_TIME", "创建时间"),
ExcelColConfig.of("START_TIME", "统计开始时间"),
ExcelColConfig.of("END_TIME", "统计结束时间"),
ExcelColConfig.of("SQL_EXECUTE_COUNT", "SQL执行总数"),
ExcelColConfig.of("SQL_TOTAL_TIME", "SQL耗时总数"),
ExcelColConfig.of("SQL_AVG_TIME", "SQL执行平均耗时"),
ExcelColConfig.of("SQL_SLOWEST_TIME", "SQL执行最慢耗时"),
ExcelColConfig.of("SQL_AVG_READ_ROWS", "SQL单次平均读取行数"),
ExcelColConfig.of("URL_EXECUTE_COUNT", "URL执行总数"),
ExcelColConfig.of("URL_TOTAL_TIME", "URL耗时总数"),
ExcelColConfig.of("URL_AVG_TIME", "URL执行平均耗时"),
ExcelColConfig.of("URL_SLOWEST_TIME", "URL执行最慢耗时"),
ExcelColConfig.of("URL_AVG_JDBC_COUNT", "URL单次平均JDBC执行数"),
ExcelColConfig.of("SLOW_SQL_ONE", "慢SQL最慢第一段个数"),
ExcelColConfig.of("SLOW_SQL_TWO", "慢SQL最慢第二段个数"),
ExcelColConfig.of("SLOW_SQL_THREE", "慢SQL最慢第三段个数"),
ExcelColConfig.of("SLOW_SQL_AVG_ONE", "慢SQL平均第一段个数"),
ExcelColConfig.of("SLOW_SQL_AVG_TWO", "慢SQL平均第二段个数"),
ExcelColConfig.of("SLOW_SQL_AVG_THREE", "慢SQL平均第三段个数"),
ExcelColConfig.of("SQL_ERROR_COUNT", "SQL执行错误数"),
ExcelColConfig.of("URL_JDBC_ERROR_COUNT", "URLJDBC执行错误数"),
ExcelColConfig.of("SCORE", "得分"),
ExcelColConfig.of("SCORE_SLOW_SQL", "慢SQL影响分"),
ExcelColConfig.of("SCORE_ERROR_SQL", "错误SQL影响分"),
ExcelColConfig.of("SCORE_SLOW_URL", "慢URL影响分"),
ExcelColConfig.of("SCORE_JDBC_ERROR_URL", "JDBC错误URL影响分"),
ExcelColConfig.of("INSTANCE_COUNT", "集群实例数"),
ExcelColConfig.of("DS_MAX_ACTIVE", "数据库最大连接数")
));
final int[] index = {0};
List<Map> mapList = monitorCentersService.getDataExport(appName);
for (Map map : mapList) {
writer.writeRow(map, ++index[0]);
}
writer.finish();
}
//获取word文档数据
@PostMapping("/getWrodData")
public Map<String, Object> getWrodData(@RequestBody MonitorCentersDTO monitorCentersDTO) {
return monitorCentersService.getReportDetailedData(monitorCentersDTO);
}
//导出word文档
@GetMapping("/word")
public void generateWord(HttpServletRequest request, HttpServletResponse response) throws IOException {
MonitorCentersDTO dto = new MonitorCentersDTO();
dto.setAppName(appName);
// 要填入模本的数据文件
Map<String, Object> dataMap = monitorCentersService.getReportDetailedData(dto);
//提示在调用工具类生成Word文档之前应当检查所有字段是否完整
//否则Freemarker的模板殷勤在处理时可能会因为找不到值而报错这里暂时忽略这个步骤
File file = null;
InputStream in = null;
OutputStream out = null;
try {
//调用工具类WordGenerator的createDoc方法生成Word文档
file = WordUtil.createDoc(dataMap, "monReportTemplet");
in = new FileInputStream(file);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/msword");
out = response.getOutputStream();
//缓冲区
byte[] bytes = new byte[2048];
int len;
// 通过循环将读入的Word文件的内容输出到浏览器中
while ((len = in.read(bytes)) > 0) {
out.write(bytes, 0, len);
}
out.flush();
} catch (Exception ex) {
ex.printStackTrace();
log.error("报告导出异常", ex);
} finally {
//释放资源
if (out != null) {
try {
out.close();
} catch (IOException e) {
log.error("IO close error!", e);
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
log.error("IO close error!", e);
}
}
if (file != null) {
// 删除临时文件
file.delete();
}
}
}
}

View File

@@ -0,0 +1,103 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.domain.core.entity.SbdsUserLog;
import com.insigma.framework.domain.core.entity.SysFunction;
import com.insigma.framework.log.core.util.OpLogUtil;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.framework.web.support.ep.dev.service.PageInitService;
import com.insigma.framework.web.support.module.dto.UserLogDTO;
import com.insigma.framework.web.support.module.service.SbdsUserLogService;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.MenuDTO;
import com.insigma.sys.service.SysFunctionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.List;
/**
* Created by yinjh on 2019/1/29.
*/
@Slf4j
@RestController
@RequestMapping("/sys/oplog")
public class OpLogController {
@Autowired
private SbdsUserLogService sbdsUserLogService;
@Autowired
private CurrentUserService currentUserService;
@Autowired
private PageInitService pageInitService;
@Autowired
private SysFunctionService sysFunctionService;
@PostMapping("/initSysFunctions")
public ResponseMessage initSysFuntions(@RequestBody JSONObject jsonObject) {
List<MenuDTO> menuList = sysFunctionService.queryAllMenu();
menuList = menuList.stream().filter(menu -> "2".equals(menu.getNodetype())).toList();
jsonObject = pageInitService.loadCustomCodeType(jsonObject, menuList, "functionid", "title", "SYSFUNCTIONS");
return ResponseMessage.ok(jsonObject.getJSONObject("codeTypes"));
}
@PostMapping("/query")
public ResponseMessage query(@RequestBody JSONObject jsonObject) throws SQLException {
Integer page = jsonObject.getInteger("page");
Integer size = jsonObject.getInteger("size");
UserLogDTO queryParam = jsonObject.toJavaObject(UserLogDTO.class);
Boolean more = jsonObject.getBoolean("more");
if (more != null && !more) {
if (queryParam.getAae036() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String aae036 = sdf.format(queryParam.getAae036());
queryParam.setStartTime(aae036 + " 00:00:00");
queryParam.setEndTime(aae036 + " 23:59:59");
}
}
PageInfo<UserLogDTO> pageInfo = sbdsUserLogService.queryUserLogList(queryParam, page, size);
return ResponseMessage.ok(pageInfo);
}
@GetMapping("/location")
public ResponseMessage getLocation(Long opseno) {
SbdsUserLog log = sbdsUserLogService.getByOpseno(opseno);
if (log != null) {
Long functionId = log.getFunctionId();
SysFunction sysFunction = sysFunctionService.getByFunctionId(functionId);
return ResponseMessage.ok("", sysFunction.getLocation());
}
return ResponseMessage.ok();
}
@GetMapping("/orisource")
public ResponseMessage getOriSource(Long opseno) {
String oriSource = OpLogUtil.getOriSource(opseno);
return ResponseMessage.ok("", oriSource);
}
@GetMapping("/oridata")
public ResponseMessage getOriData(Long opseno) {
String oriData = OpLogUtil.getOriData(opseno);
return ResponseMessage.ok("", oriData);
}
@GetMapping("/rollback")
public ResponseMessage rollback(Long opseno) {
try {
String logonName = currentUserService.getCurrentUser().getLogonName();
OpLogUtil.rollBack(opseno, logonName);
} catch (Exception e) {
log.error("回退失败!", e);
return ResponseMessage.error("回退失败:" + e.getMessage());
}
return ResponseMessage.ok("回退成功!");
}
}

View File

@@ -0,0 +1,185 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.util.DtoEntityUtil;
import com.insigma.framework.core.util.TreeUtil;
import com.insigma.framework.domain.core.entity.Aa26;
import com.insigma.framework.domain.core.entity.SysOrg;
import com.insigma.framework.web.support.core.service.CodeTypeService;
import com.insigma.sys.dto.Aa26DTO;
import com.insigma.sys.dto.SysOrgDTO;
import com.insigma.sys.service.Aa26Service;
import com.insigma.sys.service.SysOrgService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 菜单管理
*/
@Slf4j
@RestController
@RequestMapping("/sys/org")
public class OrgController {
@Autowired
private SysOrgService sysOrgService;
@Autowired
private Aa26Service aa26Service;
@Autowired
private CodeTypeService codeTypeService;
/**
* 初始化页面数据
* @return
*/
@PostMapping("/doInit")
public ResponseMessage doInit(@RequestBody JSONObject jsonObject) {
List<SysOrg> orgs=sysOrgService.getAll();
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(DtoEntityUtil.trans(orgs, SysOrgDTO.class, true))), "orgid", "parentid", "children");
return ResponseMessage.ok("查询成功", jsonArray);
}
/**
* 根据id查找org对象
* @return
*/
@PostMapping("/findOrgById")
public ResponseMessage findOrgById(@RequestBody JSONObject jsonObject) {
ResponseMessage rm;
String a=jsonObject.get("orgid").toString();
SysOrg sysOrg;
if (a!=null){
int orgid= Integer.parseInt(a) ;
sysOrg=sysOrgService.getByOrgId((long) orgid);
rm= ResponseMessage.ok(null, DtoEntityUtil.trans(sysOrg, SysOrgDTO.class, true));
}else {
rm= ResponseMessage.error();
}
return rm;
}
/**
* 保存机构
* @return
*/
@PostMapping("/saveOrg")
public ResponseMessage saveOrg(@RequestBody JSONObject jsonObject) {
ResponseMessage rm=null;
//List checkedCities= (List) jsonObject.get("checkedCities");
Map<String,Object> map= (Map<String, Object>) jsonObject.get("form");
SysOrg sysOrg=sysOrgService.getSysOrgBean(map);
Boolean flag=sysOrgService.isMany(sysOrg);
try {
if (flag==false){
//没有重复
if (sysOrg!=null){
sysOrgService.saveOrg(sysOrg);
rm= ResponseMessage.ok("保存成功");
}
}else {
//重复
rm= ResponseMessage.error("重复");
}
}catch (Exception e){
log.error(e.getMessage(), e);
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
/**
* 初始化页面aa26
* @return
*/
@PostMapping("/initAA26")
public ResponseMessage initAA26() {
ResponseMessage rm;
try {
List<Aa26> aa26s = aa26Service.getAll();
JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(DtoEntityUtil.trans(aa26s, Aa26DTO.class, true))), "aab301", "aaa148", "children");
rm= ResponseMessage.ok(null, orgNodes);
} catch (Exception e) {
log.error(e.getMessage(), e);
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
/**
根据id查找aa26
*/
@PostMapping("/queryAa26By301/{id}")
public ResponseMessage queryAa26By301(@PathVariable("id") String aab301) {
ResponseMessage rm;
try {
Aa26 aa26s = aa26Service.getByAab301(aab301);
rm= ResponseMessage.ok(null, DtoEntityUtil.trans(aa26s, Aa26DTO.class, true));
} catch (Exception e) {
log.error(e.getMessage(), e);
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
/**
* 初始化页面数据
* @return
*/
@PostMapping("/initCodeTypes")
public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) {
ResponseMessage rm;
try {
JSONObject codeTypes = codeTypeService.getCodeTypes(jsonObject);
rm = ResponseMessage.ok(null, codeTypes);
} catch (Exception e) {
log.error(e.getMessage(), e);
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
/**
*
* @return
*/
@PostMapping("/queryUserOrg")
public ResponseMessage queryUserOrg(@RequestBody JSONObject jsonObject) {
ResponseMessage rm;
String regioncode="";
long node=Long.valueOf(jsonObject.get("node").toString());
Map<String,Object> form= (Map<String, Object>) jsonObject.get("form");
// JSONArray orgTreeData=jsonObject.getJSONArray("orgTreeData"); // 首先转成 JSONArray 对象
// String trees=orgTreeData.toJSONString();
List<SysOrg> list=sysOrgService.findNodes(node);
boolean s =sysOrgService.findByArea(list);
if (s==true){
rm= ResponseMessage.ok("有联系");
}else {
rm= ResponseMessage.error("没联系");
}
return rm;
}
/**
* 删除机构
*/
@PostMapping("/deleteOrg")
public ResponseMessage deleteMenu(@RequestBody JSONObject pageData){
ResponseMessage rm;
long node=Long.valueOf(pageData.get("node").toString());
boolean withUser= (boolean) pageData.get("withUser");
List<SysOrg> list=sysOrgService.findNodes(node);
try {
if (list.size()>0){
//withUser为true则和用户有关
sysOrgService.delOrg(list,withUser);
rm= ResponseMessage.ok("删除成功");
}else {
rm= ResponseMessage.error("数据不存在");
}
}catch (Exception e){
log.error(e.getMessage(), e);
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
}

View File

@@ -0,0 +1,49 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.exception.AppException;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.sys.dto.Aa01DTO;
import com.insigma.sys.service.Aa01Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author yinjh
* @version 2022/10/17
* @since 2.7.0
*/
@RestController
@RequestMapping("/sys/param/config")
public class ParamConfigController {
@Autowired
private Aa01Service aa01Service;
@GetMapping("/query")
public ResponseMessage query(String aaa001, String aaa002, Integer page, Integer size) {
PageInfo<Aa01DTO> pageInfo = aa01Service.query(aaa001, aaa002, page, size);
return ResponseMessage.ok(null, pageInfo);
}
@PostMapping("/insert")
public ResponseMessage insert(@RequestBody Aa01DTO aa01) {
aa01Service.save(aa01, false);
return ResponseMessage.ok("保存成功");
}
@PostMapping("/update")
public ResponseMessage update(@RequestBody Aa01DTO aa01) {
aa01Service.save(aa01, true);
return ResponseMessage.ok("修改成功");
}
@PostMapping("/delete")
public ResponseMessage delete(@RequestBody JSONObject jsonObject) throws AppException {
String aaa001 = jsonObject.getString("aaa001");
aa01Service.deleteByAaa001(aaa001);
return ResponseMessage.ok("删除成功");
}
}

View File

@@ -0,0 +1,222 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.util.TreeUtil;
import com.insigma.framework.domain.core.entity.SysRole;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.framework.web.support.core.service.CodeTypeService;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.common.SysManageMode;
import com.insigma.sys.dto.MenuDTO;
import com.insigma.sys.dto.SysRoleDTO;
import com.insigma.sys.dto.SysUserDTO;
import com.insigma.sys.service.SysFunctionService;
import com.insigma.sys.service.SysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
* Created by zhangxy on 2019/1/4.
*/
@RestController
@RequestMapping("/sys/role")
public class RoleController {
@Autowired
private CodeTypeService codeTypeService;
@Autowired
private SysRoleService sysRoleService;
@Autowired
private SysFunctionService sysFunctionService;
@Autowired
private CurrentUserService currentUserService;
/**
* 初始化页面数据
*
* @return
*/
@PostMapping("/doInit")
public ResponseMessage initPageDate(@RequestBody JSONObject jsonObject) {
JSONObject codeTypes = jsonObject.getJSONObject("codeTypes");
JSONObject codeTypesRes = codeTypeService.getCodeTypes(codeTypes);
jsonObject.put("codeTypes", codeTypesRes);
return ResponseMessage.ok(null, jsonObject);
}
@PostMapping("/initCodeTypes")
public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) {
ResponseMessage rm;
try {
JSONObject codeTypes = codeTypeService.getCodeTypes(jsonObject);
rm = ResponseMessage.ok(null, codeTypes);
} catch (Exception e) {
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
@PostMapping("/save")
public ResponseMessage saveRole(@RequestBody SysRoleDTO sysRoleDTO) {
ResponseMessage rm = null;
String roleid = sysRoleDTO.getRoleid();
String rolename = sysRoleDTO.getRolename();
boolean flag = sysRoleService.checkRoleByRolename(rolename);
if (!"".equals(roleid) && roleid != null) {//说明是更新
flag = sysRoleService.checkRoleByRolenameAndRoleid(rolename, roleid);
}
if (flag) {
try {
SysUser sysUser = currentUserService.getCurrentUser();
Long areaid = sysUser.getAreaId();
Long orgid = sysUser.getOrgId();
String userid = sysUser.getUserId();
sysRoleDTO.setAreaid(areaid);
sysRoleDTO.setOrgid(orgid);
sysRoleDTO.setCreatorid(userid);
sysRoleService.save(sysRoleDTO);
rm = ResponseMessage.ok("保存成功");
} catch (Exception e) {
rm = ResponseMessage.error(e.getMessage());
}
} else {
rm = ResponseMessage.error("该角色名称已被其他行政区或机构占用!");
}
return rm;
}
@GetMapping("/queryRole")
public ResponseMessage queryRole(@RequestParam(name = "rolename") String rolename,
@RequestParam(name = "roledesc") String roledesc,
@RequestParam(name = "roletype") String roletype,
@RequestParam(name = "page") Integer page,
@RequestParam(name = "size") Integer size) {
SysUser sysUser = currentUserService.getCurrentUser();
Long areaid = sysUser.getAreaId();
Long orgid = sysUser.getOrgId();
String usertype = sysUser.getUserType();
if (SysManageMode.isTripleMode()) {//三员制
if ("5".equals(usertype)) {//安全管理员
usertype = "1";//按照超级管理员处理,可以查询所有的角色
}
}
ResponseMessage rm;
if (!"".equals(usertype) && usertype != null) {
PageInfo<SysRoleDTO> pageInfo = sysRoleService.query(rolename, roledesc, roletype, page, size, areaid, orgid, usertype);
rm = ResponseMessage.ok(null, pageInfo);
} else {//非管理员角色,不能看到任何角色
rm = ResponseMessage.ok();
}
return rm;
}
@PostMapping("/delete")
public ResponseMessage delete(@RequestBody SysRoleDTO sysRoleDTO) {
SysRole role = sysRoleService.getByRoleId(sysRoleDTO.getRoleid());
if (role == null) {
return ResponseMessage.error("角色不存在");
}
SysUser sysUser = currentUserService.getCurrentUser();
if (!sysRoleService.roleCanOperate(sysUser, role)) {
return ResponseMessage.error("无权操作");
}
sysRoleService.deleteRoleRef(role);
return ResponseMessage.ok("删除成功");
}
@GetMapping("/queryTree")
public ResponseMessage queryTable(String roletype) {
String funtype = "";
if (roletype != null && !"".equals(roletype)) {
if ("1".equals(roletype)) {//管理员角色
funtype = "1";
} else if ("2".equals(roletype)) {
funtype = "2";
} else if ("3".equals(roletype)) {
funtype = "3";
} else if ("4".equals(roletype)) {
funtype = "4";
}
}
List<MenuDTO> menuDTOS = sysFunctionService.queryMenuByFuntypeAndActive(funtype);
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid"
, "parentid", "children", "0");
return ResponseMessage.ok("查询成功", jsonArray);
}
@GetMapping("/getCheckedTree")
public ResponseMessage getCheckedTree(String roleId) {
List<Long> list = sysRoleService.queryFuncitonidByRoleid(roleId);
return ResponseMessage.ok("查询成功", list);
}
@PostMapping("/addRoleRef")
public ResponseMessage addRoleRef(@RequestBody JSONObject jsonObject) {
String roleid = (String) jsonObject.get("roleId");
SysRole role = sysRoleService.getByRoleId(roleid);
if (role == null) {
return ResponseMessage.error("角色不存在");
}
SysUser sysUser = currentUserService.getCurrentUser();
if (!sysRoleService.roleCanOperate(sysUser, role)) {
return ResponseMessage.error("无权操作");
}
sysRoleService.saveGrant(currentUserService.getCurrentUser(), role, jsonObject);
return ResponseMessage.ok("授权成功");
}
@GetMapping("getRoleTypeCode")
public ResponseMessage getUserTypeCode() {
List<Map<String, Object>> list = sysRoleService.findRoleTypesCode();
return ResponseMessage.ok(null, list);
}
@GetMapping("/queryToGrantUser")
public ResponseMessage queryToGrantUser(
@RequestParam(name = "roleId") String roleId,
@RequestParam(name = "roleType") String roleType,
@RequestParam(name = "logonname") String logonname,
@RequestParam(name = "displayname") String displayname,
@RequestParam(name = "page") Integer page,
@RequestParam(name = "size") Integer size) throws SQLException {
SysUser sysUser = currentUserService.getCurrentUser();
PageInfo<SysUserDTO> list = sysRoleService.queryToGrantUser(roleId, roleType, logonname, displayname, page, size);
return ResponseMessage.ok("查询成功", list);
}
@GetMapping("/queryGrantedUser")
public ResponseMessage queryGrantedUser(@RequestParam(name = "roleId") String roleId) throws SQLException {
SysUser sysUser = currentUserService.getCurrentUser();
SysRole sysRole = sysRoleService.getByRoleId(roleId);
if (!sysRoleService.roleCanOperate(sysUser, sysRole)) {
return ResponseMessage.error("无权访问");
}
List<SysUserDTO> list = sysRoleService.queryGrantedUser(roleId);
return ResponseMessage.ok("查询成功", list);
}
@GetMapping("/removeGrantUserRole")
public ResponseMessage removeGrantUserRole(@RequestParam(name = "roleId") String roleId,
@RequestParam(name = "userId") String userId) throws SQLException {
sysRoleService.removeGrantUserRole(roleId, userId);
return ResponseMessage.ok();
}
@PostMapping("/saveGrantUser")
public ResponseMessage saveGrantUser(@RequestBody JSONObject jsonObject) {
sysRoleService.saveGrantUser(jsonObject);
return ResponseMessage.ok("保存成功");
}
}

View File

@@ -0,0 +1,42 @@
package com.insigma.sys.controller;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.security.core.dto.BaseUserInfo;
import com.insigma.framework.security.core.exception.UnauthorizedException;
import com.insigma.framework.security.web.handler.SysLoginHandler;
import com.insigma.sys.common.CurrentUserService;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 单点登录控制器
*/
@RestController
@RequestMapping({"/sso", "/check"})
public class SSOController {
@Autowired
private CurrentUserService currentUserService;
@Autowired
private SysLoginHandler sysLoginHandler;
@PostMapping("/login")
public ResponseMessage login(HttpServletRequest request) {
try {
BaseUserInfo userInfo = sysLoginHandler.success(currentUserService.getCurrentUserDetails(), null, request);
return ResponseMessage.ok("", userInfo);
} catch (UnauthorizedException e) {
ResponseMessage rm = new ResponseMessage();
rm.setStatus("401");
rm.setMessage(e.getMessage());
return rm;
}
}
}

View File

@@ -0,0 +1,31 @@
package com.insigma.sys.controller;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.sys.dto.SafetyFilterLogDTO;
import com.insigma.sys.service.SafetyFilterLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author yinjh
* @version 2022/9/15
* @since 2.7.0
*/
@RestController
@RequestMapping("/safety/filter/log")
public class SafetyFilterLogController {
@Autowired
private SafetyFilterLogService safetyFilterLogService;
@PostMapping("/query")
public ResponseMessage query(@RequestBody SafetyFilterLogDTO safetyFilterLogDTO) {
PageInfo<SafetyFilterLogDTO> pageInfo = safetyFilterLogService.query(safetyFilterLogDTO);
return ResponseMessage.ok(null, pageInfo);
}
}

View File

@@ -0,0 +1,323 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.encryption.util.SM3Utils;
import com.insigma.framework.core.util.ByteUtil;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.security.core.password.SM3PasswordEncoder;
import com.insigma.framework.web.support.core.service.CodeTypeService;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequest;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequestParam;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import com.insigma.framework.web.support.ep.dev.util.pe.PageTable;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.SysAppAddressDTO;
import com.insigma.sys.dto.SysAppDTO;
import com.insigma.sys.service.SysAppService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.security.SecureRandom;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* 应用系统管理接口
*
* @author GH
* @version 2022/3/28
* @since 2.6.5
*/
@Slf4j
@RestController
@RequestMapping("/sys/sysapp/sysApp")
public class SysAppController extends BaseController {
@Autowired
private CurrentUserService currentUserService;
@Autowired
private SysAppService sysAppService;
@Autowired
private CodeTypeService codeTypeService;
@OdinRequest(init = true)
@PostMapping("/doInit")
public ResponseMessage doInit(@OdinRequestParam("f_form") SysAppDTO queryDTO, Integer size) throws SQLException {
tableDataQuery(queryDTO, 1, size);
return this.ok();
}
@OdinRequest
@PostMapping("/query")
public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysAppDTO queryDTO,
Integer size) {
tableDataQuery(queryDTO, 1, size);
return this.ok();
}
@OdinRequest
@PostMapping("/doGridQuery/{name}")
public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysAppDTO queryDTO,
@OdinRequestParam("t_tableData_page") Integer page,
@OdinRequestParam("t_tableData_size") Integer size,
@PathVariable String name) {
tableDataQuery(queryDTO, page, size);
this.set("page", page);
return this.ok();
}
public void tableDataQuery(SysAppDTO queryDTO, Integer page, Integer size) {
this.pageQuery("t_tableData", () -> {
this.set("page", page); // 需要将前端表格中:currentPage定义的值设置成page的值
return sysAppService.pageQuery(queryDTO, page, size);
});
}
@OdinRequest
@PostMapping("/add")
public ResponseMessage add() {
this.set("dialogFormVisible", true);
this.set("dialogFormTitle", "新增应用");
this.clearForm("f_sysAppForm");
this.getTable("t_tableData1").setData(new ArrayList<>());
this.getTable("t_tableData1").setTotal(0L);
return this.ok();
}
@OdinRequest
@PostMapping("/doSave/{name}")
public ResponseMessage doSave(@OdinRequestParam("f_sysAppForm") SysAppDTO sysAppDTO) {
PageTable t_tableData1 = this.getTable("t_tableData1");
List<SysAppAddressDTO> listsysAppAddressDTO = t_tableData1.getData(SysAppAddressDTO.class);
String portalurl = null;
String appurl = null;
for (int i = 0; i < listsysAppAddressDTO.size(); i++) {
portalurl = listsysAppAddressDTO.get(i).getPortalUrl();
if (portalurl == null || "".equals(portalurl)) {
return this.error("门户名称不能为空");
}
appurl = listsysAppAddressDTO.get(i).getAppUrl();
if (appurl == null || "".equals(appurl)) {
return this.error("应用地址不能为空");
} else {
if (appurl.indexOf("http://") == 0 || appurl.indexOf("https://") == 0) {
} else {
return this.error("门户名称为" + portalurl + "的应用地址不合法,请检查!");
}
}
}
if (ObjectUtils.isEmpty(sysAppDTO.getAppId())) {
boolean flag = sysAppService.selectAppCode(sysAppDTO.getAppCode());
if (flag) {
return ResponseMessage.error("异常应用编码重复!");
}
}
if (ObjectUtils.isEmpty(sysAppDTO.getAppId())) {
String secretKey = generateSecretKey();
sysAppDTO.setSecretKey(secretKey);
}
sysAppService.saveSysApp(sysAppDTO, listsysAppAddressDTO);
this.set("dialogFormVisible", false);
this.clearForm("f_sysAppForm");
this.getTable("t_tableData1").setData(new ArrayList<>());
this.getTable("t_tableData1").setTotal(0L);
this.refresh();
return this.ok("保存成功!");
}
@OdinRequest
@PostMapping("/update")
public ResponseMessage update(String appId) {
SysAppDTO sysAppDTO = sysAppService.querySysApp(appId);
this.toForm("f_sysAppForm", sysAppDTO);
List<SysAppAddressDTO> list = sysAppService.querySysAddressDTO(appId);
this.getTable("t_tableData1").setData(list);
this.set("dialogFormVisible", true);
this.set("dialogFormTitle", "修改应用");
return this.ok();
}
@OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面
@PostMapping("/delete")
public ResponseMessage delete(String appId) {
sysAppService.deleteSysApp(appId);
return this.ok("删除成功!");
}
@PostMapping("/deleteSysAppAddress")
public ResponseMessage deleteSysAppAddress(@RequestBody SysAppAddressDTO sysAppAddressDTO) {
if (sysAppAddressDTO.getAddressId() == null || "".equals(sysAppAddressDTO.getAddressId())) {
return this.ok("删除成功!");
}
sysAppService.deleteSysAppAddress(sysAppAddressDTO.getAddressId());
return this.ok("删除成功!");
}
@GetMapping("/toActiveSysApp")
public ResponseMessage toActiveSysApp(@RequestParam(name = "appId") String appId) {
sysAppService.toActiveSysApp(appId);
return this.ok("启用成功!");
}
@GetMapping("/toNotActiveSysApp")
public ResponseMessage toNotActiveSysApp(@RequestParam(name = "appId") String appId) {
sysAppService.toNotActiveSysApp(appId);
return this.ok("禁用成功!");
}
@PostMapping("/verify")
public ResponseMessage verify(@RequestBody JSONObject jsonObject) {
//获取当前登录人去验证密码是否正确
SysUser sysUser = currentUserService.getCurrentUser();
String password = jsonObject.getString("password");
String id = jsonObject.getString("id");
SM3PasswordEncoder sm3PasswordEncoder = new SM3PasswordEncoder();
boolean b = sm3PasswordEncoder.matches(SM3Utils.digest(password), sysUser.getPassWD());
HashMap<String, Object> map = new HashMap<>();
if(b){
//查询安全key
SysAppDTO sysAppDTO = sysAppService.querySysApp(id);
map.put("appId",sysAppDTO.getAppId());
map.put("secretKey",sysAppDTO.getSecretKey());
map.put("verify",b);
}
map.put("verify",b);
return ResponseMessage.ok(null, map);
}
/**
* 以下都是vue3的请求
*/
@PostMapping("/new/initCodeTypes")
public ResponseMessage initCodeTypesVue3(@RequestBody JSONObject jsonObject) {
ResponseMessage rm;
try {
JSONObject codeTypes = codeTypeService.getCodeTypes(jsonObject);
rm = ResponseMessage.ok(codeTypes);
} catch (Exception e) {
log.error(e.getMessage(), e);
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
@PostMapping("/new/queryApp")
public ResponseMessage queryAppVue3(@RequestBody SysAppDTO sysAppDTO) {
return ResponseMessage.ok(sysAppService.pageQuery(sysAppDTO,sysAppDTO.getPage(),sysAppDTO.getSize()));
}
@GetMapping("/new/toActiveSysApp")
public ResponseMessage toActiveSysAppVue3(@RequestParam(name = "appId") String appId) {
sysAppService.toActiveSysApp(appId);
return ResponseMessage.ok("启用成功!");
}
@GetMapping("/new/toNotActiveSysApp")
public ResponseMessage toNotActiveSysAppVue3(@RequestParam(name = "appId") String appId) {
sysAppService.toNotActiveSysApp(appId);
return ResponseMessage.ok("禁用成功!");
}
@PostMapping("/new/verify")
public ResponseMessage verifyVue3(@RequestBody JSONObject jsonObject) {
//获取当前登录人去验证密码是否正确
SysUser sysUser = currentUserService.getCurrentUser();
String password = jsonObject.getString("password");
String id = jsonObject.getString("id");
SM3PasswordEncoder sm3PasswordEncoder = new SM3PasswordEncoder();
boolean b = sm3PasswordEncoder.matches(SM3Utils.digest(password), sysUser.getPassWD());
HashMap<String, Object> map = new HashMap<>();
if(b){
//查询安全key
SysAppDTO sysAppDTO = sysAppService.querySysApp(id);
map.put("appId",sysAppDTO.getAppId());
map.put("secretKey",sysAppDTO.getSecretKey());
map.put("verify",b);
}
map.put("verify",b);
return ResponseMessage.ok(map);
}
@GetMapping("/new/delete")
public ResponseMessage deleteVue3(@RequestParam(name = "appId") String appId) {
sysAppService.deleteSysApp(appId);
return ResponseMessage.ok("删除成功!");
}
@PostMapping("/new/save")
public ResponseMessage doSaveVue3(@RequestBody JSONObject jsonObject) throws Exception {
JSONArray jsonArray =jsonObject.getJSONArray("tableData1");
List<SysAppAddressDTO> listsysAppAddressDTO=jsonArray.toList(SysAppAddressDTO.class);
String portalurl = null;
String appurl = null;
for (int i = 0; i < listsysAppAddressDTO.size(); i++) {
portalurl = listsysAppAddressDTO.get(i).getPortalUrl();
if (portalurl == null || "".equals(portalurl)) {
return ResponseMessage.error("门户地址不能为空");
}
appurl = listsysAppAddressDTO.get(i).getAppUrl();
if (appurl == null || "".equals(appurl)) {
return ResponseMessage.error("应用地址不能为空");
} else {
if (appurl.indexOf("http://") == 0 || appurl.indexOf("https://") == 0) {
} else {
return ResponseMessage.error("门户地址为" + portalurl + "的应用地址不合法,请检查!");
}
}
}
JSONObject jsonObject1=jsonObject.getJSONObject("sysAppDTO");
SysAppDTO sysAppDTO=new SysAppDTO();
sysAppDTO.setAppId(jsonObject1.getString("appId"));
sysAppDTO.setAppCode(jsonObject1.getString("appCode"));
sysAppDTO.setAppName(jsonObject1.getString("appName"));
if (ObjectUtils.isEmpty(jsonObject.getString("appId"))) {
boolean flag = sysAppService.selectAppCode(jsonObject.getString("appCode"));
if (flag) {
return ResponseMessage.error("异常应用编码重复!");
}
}
if (ObjectUtils.isEmpty(sysAppDTO.getAppId())) {
String secretKey = generateSecretKey();
sysAppDTO.setSecretKey(secretKey);
}
sysAppService.saveSysApp(sysAppDTO, listsysAppAddressDTO);
return ResponseMessage.ok("保存成功!");
}
@GetMapping("/new/update")
public ResponseMessage updateVue3(String appId) {
List<SysAppAddressDTO> list = sysAppService.querySysAddressDTO(appId);
return ResponseMessage.ok(list);
}
@GetMapping("/new/deleteSysAppAddress")
public ResponseMessage deleteSysAppAddressVue3(String addressId) {
if (addressId == null || "".equals(addressId)) {
return ResponseMessage.ok("删除成功!");
}
sysAppService.deleteSysAppAddress(addressId);
return ResponseMessage.ok("删除成功!");
}
private String generateSecretKey() {
byte[] bytes = new byte[8];
SecureRandom random = new SecureRandom();
random.nextBytes(bytes);
return ByteUtil.byteToHex(bytes);
}
}

View File

@@ -0,0 +1,56 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.exception.AppException;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.framework.web.support.core.service.CodeTypeService;
import com.insigma.sys.dto.Aa10DTO;
import com.insigma.sys.service.Aa10Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 字典管理模块
*
* @author yinjh
*/
@RestController
@RequestMapping("/sys/code")
public class SysCodeController {
@Autowired
private Aa10Service aa10Service;
@Autowired
private CodeTypeService codeTypeService;
@PostMapping("/initCodeTypes")
public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) {
JSONObject codeTypes = codeTypeService.getCodeTypes(jsonObject);
return ResponseMessage.ok(null, codeTypes);
}
@GetMapping("/query")
public ResponseMessage query(String aaa100, String aaa103, Integer page, Integer size) {
PageInfo<Aa10DTO> pageInfo = aa10Service.query(aaa100, aaa103, page, size);
return ResponseMessage.ok(null, pageInfo);
}
@PostMapping("/save")
public ResponseMessage save(@RequestBody Aa10DTO aa10DTO) {
aa10Service.saveCode(aa10DTO);
return ResponseMessage.ok("保存成功");
}
@PostMapping("/delete")
public ResponseMessage delete(@RequestBody JSONObject jsonObject) {
try {
Long aaz093=Long.valueOf(jsonObject.get("aaz093").toString());
aa10Service.deleteCode(aaz093);
}catch (Exception e){
throw new AppException("数据转换异常!");
}
return ResponseMessage.ok("删除成功");
}
}

View File

@@ -0,0 +1,575 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.exception.AppException;
import com.insigma.framework.core.util.StringUtil;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.file.storage.core.FSObject;
import com.insigma.framework.file.storage.core.FSService;
import com.insigma.framework.web.support.core.service.CodeTypeService;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequest;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequestParam;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.SysDownloadCenterDTO;
import com.insigma.sys.service.SysDownloadCenterService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @author GH
* @ClassName: SysDownloadCenterController
* @Description:
* @version 2021/8/4 10:13
*/
@Slf4j
@RestController
@RequestMapping("/sys/downloadcenter/DownloadCenter")
public class SysDownloadCenterController extends BaseController {
@Autowired
private SysDownloadCenterService sysDownloadCenterService;
@Autowired(required = false)
private FSService fsService;
@Autowired
private CurrentUserService currentUserService;
@Autowired
private CodeTypeService codeTypeService;
/**
* 初始化
*
* @param f_form
* @param size
* @return
*/
@OdinRequest(init = true)
@PostMapping("/doInit")
public ResponseMessage doInit(SysDownloadCenterDTO f_form, Integer size) {
tableDataQuery(f_form, 1, size);
return this.ok();
}
/**
* 查询
*
* @param queryDTO
* @param size
* @return
*/
@OdinRequest
@PostMapping("/query")
public ResponseMessage query(@OdinRequestParam("f_form") SysDownloadCenterDTO queryDTO,
Integer size) {
tableDataQuery(queryDTO, 1, size);
return this.ok();
}
/**
* @return
* @Description: 分页查询
* @author GH
* @version 2021/8/4 13:29
*/
@OdinRequest
@PostMapping("/doGridQuery/{name}")
public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysDownloadCenterDTO queryDTO,
@OdinRequestParam("t_tableData_page") Integer page,
@OdinRequestParam("t_tableData_size") Integer size,
@PathVariable String name) {
tableDataQuery(queryDTO, page, size);
return this.ok();
}
private void tableDataQuery(SysDownloadCenterDTO queryDTO, Integer page, Integer size) {
this.pageQuery("t_tableData", () -> {
this.set("page", page); // 需要将前端表格中:currentPage定义的值设置成page的值
return sysDownloadCenterService.queryDownloadCenterList(queryDTO, page, size);
});
}
/**
* 新增
*
* @return
*/
@OdinRequest
@PostMapping("/add")
public ResponseMessage add() {
this.clearForm("f_downloadCenterForm");
this.set("sysDownloadCenterDTO", new Object[]{});
this.set("fileList", new Object[]{});
this.set("dialogFormVisible", true);
this.set("dialogFormTitle", "材料新增");
return this.ok();
}
/**
* 保存
*
* @param sysDownloadCenterDTO
* @return
*/
@OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面
@PostMapping("/doSave/{name}")
public ResponseMessage doSave(@OdinRequestParam("f_downloadCenterForm") SysDownloadCenterDTO sysDownloadCenterDTO,
@PathVariable String name) {
if(sysDownloadCenterDTO.getMaterial_type()==null|| "".equals(sysDownloadCenterDTO.getMaterial_type())){
return this.error("请选择文件类型!");
}
//设置保留位数
DecimalFormat df = new DecimalFormat("0.00");
JSONArray array = this.getPageData().getJSONArray("sysDownloadCenterDTO");
List<SysDownloadCenterDTO> list = array.toJavaList(SysDownloadCenterDTO.class);
if (list.isEmpty()) {
return ResponseMessage.error("请上传附件!");
} else {
for (SysDownloadCenterDTO downloadCenterDTO : list) {
//录入数据库
SysDownloadCenterDTO dto = new SysDownloadCenterDTO();
dto.setId(downloadCenterDTO.getId());
dto.setMaterial_name(downloadCenterDTO.getMaterial_name());
String size;
//字节
long baty = Long.parseLong(downloadCenterDTO.getMaterial_size());
//小于M用kb
if (baty < 1048576 && baty > 0) {
String kb = df.format((double) baty / 1024);
size = kb + "KB";
} else if (baty >= 1048576 && baty < 1073741824) { //用m表示
String m = df.format((double) baty / 1048576);
size = m + "M";
} else { //G表示
String g = df.format((double) baty / 1073741824);
size = g + "G";
}
dto.setMaterial_size(size);
dto.setMaterial_type(sysDownloadCenterDTO.getMaterial_type());
dto.setUpload_time(new Date());
sysDownloadCenterService.saveDownloadCenter(dto);
}
this.set("dialogFormVisible", false);
return this.ok("保存成功!!!");
}
}
/**
* 删除
*
* @param id
* @return
*/
@OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面
@PostMapping("/delete")
public ResponseMessage delete(String id) {
sysDownloadCenterService.deleteById(id);
fsService.deleteObject(id);
return this.ok("删除成功!");
}
//移除文件
@GetMapping("/del/{id}")
public ResponseMessage del(@PathVariable String id) {
fsService.deleteObject(id);
return this.ok("文件移除成功!");
}
//批量下载
@GetMapping("/batchDownload/{ids}")
public void batchDownload(@PathVariable String ids, HttpServletResponse response) {
String[] s = ids.split(",");
String zipFileName = "batchDownload.zip";
// response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(response.getOutputStream());
for (String fileId : s) {
FSObject fsObject;
try {
fsObject = fsService.getObject(fileId);
} catch (Exception e) {
log.error("{}文件不存在!", fileId);
continue;
}
InputStream is = fsObject.getInputStream();
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(is);
//将文件写入zip内即将文件进行打包
zos.putNextEntry(new ZipEntry(fsObject.getName()));
//写入文件的方法,同上
int size = 0;
byte[] buffer = new byte[1024];
//设置读取数据缓存大小
while ((size = bis.read(buffer)) > 0) {
zos.write(buffer, 0, size);
}
//关闭输入输出流
zos.closeEntry();
} catch (Exception e) {
throw e;
} finally {
if (bis != null) {
bis.close();
}
}
}
} catch (Exception e) {
throw new AppException("批量下载失败");
} finally {
if (zos != null) {
try {
zos.close();
} catch (IOException e) {
}
}
}
}
/**
* 下载
*
* @return
*/
@GetMapping("/download/{id}")
public void download(@PathVariable String id, HttpServletResponse response) throws IOException {
FSObject fsObject = null;
try {
fsObject = fsService.getObject(id);
} catch (Exception e) {
response.sendError(404, "文件不存在!");
return;
}
sysDownloadCenterService.saveDownloadLog(id, currentUserService.getCurrentUser().getLogonName());
OutputStream out = null;
InputStream in = fsObject.getInputStream();
try {
response.addHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fsObject.getName().getBytes("UTF-8"), "ISO8859-1"));
out = response.getOutputStream();
byte[] bytes = new byte[2048];
int len;
while ((len = in.read(bytes)) > 0) {
out.write(bytes, 0, len);
}
} catch (Exception e) {
log.error("文件下载异常", e);
} finally {
//释放资源
if (out != null) {
try {
out.close();
} catch (IOException e) {
log.error("IO close error!", e);
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
log.error("IO close error!", e);
}
}
}
}
//上传
@PostMapping("/upload")
public ResponseMessage upload(@RequestParam MultipartFile file, HttpServletRequest request) throws IOException {
SysUser sysUser = currentUserService.getCurrentUser();
if (!"1".equals(sysUser.getUserType())) {
return ResponseMessage.error("只允许超级管理员上传附件!");
}
ResponseMessage rm;
String originalFilename = file.getOriginalFilename();
String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
/*if (!".zip".equals(fileType)) {
rm = ResponseMessage.ok("文件类型不对!!!");
return rm;
}*/
//创建文件存储对象
FSObject fsObject = new FSObject();
fsObject.setName(file.getOriginalFilename());
fsObject.setContentType(file.getContentType());
fsObject.setInputStream(file.getInputStream());
fsObject.setSize(file.getSize());
//该id在文件存入后由mongodb返回
String id = fsService.pubObject(fsObject);
if (!ObjectUtils.isEmpty(id)) {
SysDownloadCenterDTO dto = new SysDownloadCenterDTO();
dto.setId(id);
dto.setMaterial_size(Long.toString(fsObject.getSize()));
dto.setMaterial_name(fsObject.getName());
rm = ResponseMessage.ok("文件上传成功!!!", dto);
} else {
rm = ResponseMessage.ok("文件上传失败!!!");
}
return rm;
}
//查询用户是否为超级管理员
@GetMapping("/queryUser")
public ResponseMessage queryUser() {
SysUser sysUser = currentUserService.getCurrentUser();
//超级管理员
if ("1".equals(sysUser.getUserType())) {
return ResponseMessage.ok(null, true);
} else {
return ResponseMessage.ok(null, false);
}
}
/**
*
* 以下都是vue3
*/
@PostMapping("/new/initCodeTypes")
public ResponseMessage initCodeTypesVue3(@RequestBody JSONObject jsonObject) {
ResponseMessage rm;
try {
JSONObject codeTypes = codeTypeService.getCodeTypes(jsonObject);
rm = ResponseMessage.ok(codeTypes);
} catch (Exception e) {
rm = ResponseMessage.error(e.getMessage());
}
return rm;
}
@PostMapping("/new/query")
public ResponseMessage queryVue3(@RequestBody SysDownloadCenterDTO queryDTO) {
return ResponseMessage.ok(sysDownloadCenterService.queryDownloadCenterList(queryDTO, queryDTO.getPage(), queryDTO.getSize()));
}
@GetMapping("/new/delete")
public ResponseMessage deleteVue3(String id) {
sysDownloadCenterService.deleteById(id);
fsService.deleteObject(id);
return ResponseMessage.ok("删除成功!");
}
@GetMapping("/new/queryUser")
public ResponseMessage queryUserVue3() {
SysUser sysUser = currentUserService.getCurrentUser();
//超级管理员
if ("1".equals(sysUser.getUserType())) {
return ResponseMessage.ok(true);
} else {
return ResponseMessage.ok(false);
}
}
//上传
@PostMapping("/new/upload")
public ResponseMessage uploadVue3(@RequestParam MultipartFile file, HttpServletRequest request) throws IOException {
SysUser sysUser = currentUserService.getCurrentUser();
if (!"1".equals(sysUser.getUserType())) {
return ResponseMessage.error("只允许超级管理员上传附件!");
}
ResponseMessage rm;
String originalFilename = file.getOriginalFilename();
String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
/*if (!".zip".equals(fileType)) {
rm = ResponseMessage.ok("文件类型不对!!!");
return rm;
}*/
//创建文件存储对象
FSObject fsObject = new FSObject();
fsObject.setName(file.getOriginalFilename());
fsObject.setContentType(file.getContentType());
fsObject.setInputStream(file.getInputStream());
fsObject.setSize(file.getSize());
//该id在文件存入后由mongodb返回
String id = fsService.pubObject(fsObject);
if (StringUtil.isNotEmpty(id)) {
SysDownloadCenterDTO dto = new SysDownloadCenterDTO();
dto.setId(id);
dto.setMaterial_size(Long.toString(fsObject.getSize()));
dto.setMaterial_name(fsObject.getName());
rm = ResponseMessage.ok("文件上传成功!!!", dto);
} else {
rm = ResponseMessage.ok("文件上传失败!!!");
}
return rm;
}
@PostMapping("/new/save")
public ResponseMessage doSaveVue3(@RequestBody JSONObject jsonObjecte) {
if(jsonObjecte.get("material_type")==null|| "".equals(jsonObjecte.get("material_type"))){
return ResponseMessage.error("请选择文件类型!");
}
//设置保留位数
DecimalFormat df = new DecimalFormat("0.00");
JSONArray array = jsonObjecte.getJSONArray("sysDownloadCenterDTO");
List<SysDownloadCenterDTO> list = array.toJavaList(SysDownloadCenterDTO.class);
if (list.size() < 1) {
return ResponseMessage.error("请上传附件!");
} else {
for (SysDownloadCenterDTO downloadCenterDTO : list) {
//录入数据库
SysDownloadCenterDTO dto = new SysDownloadCenterDTO();
dto.setId(downloadCenterDTO.getId());
dto.setMaterial_name(downloadCenterDTO.getMaterial_name());
String size;
//字节
long baty = Long.parseLong(downloadCenterDTO.getMaterial_size());
//小于M用kb
if (baty < 1048576 && baty > 0) {
String kb = df.format((double) baty / 1024);
size = kb + "KB";
} else if (baty >= 1048576 && baty < 1073741824) { //用m表示
String m = df.format((double) baty / 1048576);
size = m + "M";
} else { //G表示
String g = df.format((double) baty / 1073741824);
size = g + "G";
}
dto.setMaterial_size(size);
dto.setMaterial_type((String) jsonObjecte.get("material_type"));
dto.setUpload_time(new Date());
sysDownloadCenterService.saveDownloadCenter(dto);
}
//this.set("dialogFormVisible", false);
return ResponseMessage.ok("保存成功!!!");
}
}
/**
* 下载
*
* @return
*/
@GetMapping("/new/download/{id}")
public void downloadVue3(@PathVariable String id, HttpServletResponse response) throws IOException {
FSObject fsObject = null;
try {
fsObject = fsService.getObject(id);
} catch (Exception e) {
response.sendError(404, "文件不存在!");
return;
}
sysDownloadCenterService.saveDownloadLog(id, currentUserService.getCurrentUser().getLogonName());
OutputStream out = null;
InputStream in = fsObject.getInputStream();
try {
response.addHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fsObject.getName().getBytes("UTF-8"), "ISO8859-1"));
out = response.getOutputStream();
byte[] bytes = new byte[2048];
int len;
while ((len = in.read(bytes)) > 0) {
out.write(bytes, 0, len);
}
} catch (Exception e) {
log.error("文件下载异常", e);
} finally {
//释放资源
if (out != null) {
try {
out.close();
} catch (IOException e) {
log.error("IO close error!", e);
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
log.error("IO close error!", e);
}
}
}
}
//批量下载
@GetMapping("/new/batchDownload/{ids}")
public void batchDownloadVue3(@PathVariable String ids, HttpServletResponse response) {
String[] s = ids.split(",");
String zipFileName = "batchDownload.zip";
// response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(response.getOutputStream());
for (String fileId : s) {
FSObject fsObject;
try {
fsObject = fsService.getObject(fileId);
} catch (Exception e) {
log.error("{}文件不存在!", fileId);
continue;
}
InputStream is = fsObject.getInputStream();
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(is);
//将文件写入zip内即将文件进行打包
zos.putNextEntry(new ZipEntry(fsObject.getName()));
//写入文件的方法,同上
int size = 0;
byte[] buffer = new byte[1024];
//设置读取数据缓存大小
while ((size = bis.read(buffer)) > 0) {
zos.write(buffer, 0, size);
}
//关闭输入输出流
zos.closeEntry();
} catch (Exception e) {
throw e;
} finally {
if (bis != null) {
bis.close();
}
}
}
} catch (Exception e) {
throw new AppException("批量下载失败");
} finally {
if (zos != null) {
try {
zos.close();
} catch (IOException e) {
}
}
}
}
}

View File

@@ -0,0 +1,162 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.domain.core.entity.SysError;
import com.insigma.framework.persistence.core.jdbc.JdbcPageHelper;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.sys.service.SysErrorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 异常信息维护
*/
@RestController
@RequestMapping("/sys/error")
public class SysErrorController {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private SysErrorService sysErrorService;
@PostMapping("/doInit")
public ResponseMessage doInit(@RequestBody JSONObject pageData) throws SQLException {
Integer size = pageData.getInteger("size");
HashMap<String, Object> tableData = tableDataQuery(pageData, 1, size);
pageData.put("t_tableData", tableData);
/* List<SysError> errors=sysErrorService.queryAllErrors();
// JSONArray array1=new JSONArray();
JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors));
JSONObject tableData = new JSONObject();
tableData.put("Data",array);
tableData.put("total",errors.size());*/
pageData.put("t_tableData", tableData);
return ResponseMessage.ok(null, pageData);
}
@PostMapping("/doQuery/goIt")
public ResponseMessage queryBySome(@RequestBody JSONObject pageData){
Map<String, HashMap<String,String>> map= (Map<String, HashMap<String, String>>) pageData.get("f_form1_n");
String serviceName=map.get("serviceName").get("value");
String functionName=map.get("functionName").get("value");
String errorCode= map.get("errorCode").get("value");
List<SysError> errors=sysErrorService.findAllBySome(serviceName,functionName,errorCode);
JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors));
JSONObject tableData = new JSONObject();
tableData.put("Data",array);
tableData.put("total",errors.size());
pageData.put("t_tableData", tableData);
return ResponseMessage.ok(null, pageData);
}
@PostMapping("/doGridQuery/{id}")
public ResponseMessage doGridQuery(@RequestBody JSONObject jsonObject, @PathVariable String id) throws SQLException {
Integer page = jsonObject.getInteger("t_tableData_page");
Integer size = jsonObject.getInteger("t_tableData_size");
HashMap<String, Object> tableData = tableDataQuery(jsonObject, page, size);
jsonObject.put("t_tableData", tableData);
return ResponseMessage.ok(null, jsonObject);
}
@PostMapping("/delete")
public ResponseMessage deleteError(@RequestBody JSONObject pageData){
Map<String,String> map= (Map<String,String>) pageData.get("data");
try {
SysError sysError=sysErrorService.getSysErrorBean2(map);
sysErrorService.deleteError(sysError);
List<SysError> errors=sysErrorService.queryAllErrors();
JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors));
JSONObject tableData = new JSONObject();
tableData.put("Data",array);
tableData.put("total",errors.size());
return ResponseMessage.ok("删除成功",tableData);
}catch (Exception e){
return ResponseMessage.error("删除失败");
}
}
@PostMapping("/doSave/addError")
public ResponseMessage addError(@RequestBody JSONObject pageData){
try {
Map<String,HashMap<String,String>> map= (Map<String,HashMap<String,String>>) pageData.get("f_errorForm_n");
SysError sysError=sysErrorService.getSysErrorBean1(map);
sysErrorService.save(sysError);
List<SysError> errors=sysErrorService.queryAllErrors();
JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors));
JSONObject tableData = new JSONObject();
tableData.put("Data",array);
tableData.put("total",errors.size());
//将table装载到pageData
pageData.put("t_tableData", tableData);
pageData.put("dialogFormVisible",false);
return ResponseMessage.ok("增加成功",pageData);
}catch (Exception e){
pageData.put("dialogFormVisible",false);
return ResponseMessage.error("异常编码重复");
}
}
@PostMapping("/doCheck/{checkname}")
public ResponseMessage updateError(@RequestBody JSONObject pageData){
try {
int index=Integer.parseInt(pageData.get("index").toString());
HashMap<String,Object> maps= (HashMap<String,Object>) pageData.get("t_tableData_n");
// String datas=maps.get("Data").toString();
String datas=JSONObject.toJSONString(maps.get("Data"));
JSONArray jsonArray = JSON.parseArray(datas);
SysError sysError=JSON.toJavaObject(jsonArray.getJSONObject(index),SysError.class);
sysErrorService.save(sysError);
List<SysError> errors=sysErrorService.queryAllErrors();
JSONArray array=JSONArray.parseArray(JSONArray.toJSONString(errors));
JSONObject tableData = new JSONObject();
tableData.put("Data",array);
tableData.put("total",errors.size());
//将table装载到pageData
pageData.put("t_tableData_n", tableData);
return ResponseMessage.ok("修改成功",pageData);
}catch (Exception e){
return ResponseMessage.error(e.getMessage());
}
}
@PostMapping("/queryIsMany")
public ResponseMessage queryIsMany(@RequestBody JSONObject pageData){
Map<String,HashMap<String,String>> map= (Map<String,HashMap<String,String>>) pageData.get("f_errorForm_n");
String errCode=map.get("errorCode1").get("value");
boolean flag=sysErrorService.queryByErrCode(errCode);
if (flag==true){
map.get("errorCode1").put("value","");
pageData.put("f_errorForm",map);
return ResponseMessage.error("异常编码重复");
}
return ResponseMessage.ok(null, pageData);
}
public HashMap<String, Object> tableDataQuery(JSONObject jsonObject, Integer page, Integer size) throws SQLException {
StringBuffer querySQL = new StringBuffer("select * from syserror where 1=1 ");
JdbcPageHelper helper = new JdbcPageHelper(jdbcTemplate, page, size);
PageInfo<Map<String, Object>> data = helper.queryPagination(querySQL.toString(), new ArrayList<>(), rs -> {
Map<String, Object> map = new HashMap<>();
map.put("id", rs.getString("id"));
map.put("serviceName", rs.getString("servicename"));
map.put("functionName", rs.getString("functionname"));
map.put("errorCode", rs.getString("errorcode"));
map.put("message", rs.getString("message"));
map.put("createTime", rs.getDate("createtime"));
return map;
});
HashMap<String, Object> gridData = new HashMap<>();
gridData.put("total", data.getTotal());
gridData.put("Data", data.getData());
return gridData;
}
}

View File

@@ -0,0 +1,134 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.file.storage.core.FSObject;
import com.insigma.framework.file.storage.core.FSService;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.sys.dto.FeedbackAnswerDTO;
import com.insigma.sys.dto.FeedbackDTO;
import com.insigma.sys.service.SysFeedbackService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author yinjh
* @version 2022/2/23
*/
@RestController
@RequestMapping("/sys/feedback")
public class SysFeedbackController {
@Autowired
private SysFeedbackService sysFeedbackService;
@Autowired(required = false)
private FSService fsService;
@PostMapping("/query")
public ResponseMessage query(@RequestBody JSONObject jsonObject) throws SQLException {
FeedbackDTO queryDTO = jsonObject.toJavaObject(FeedbackDTO.class);
Integer page = jsonObject.getInteger("page");
Integer size = jsonObject.getInteger("size");
PageInfo<FeedbackDTO> pageInfo = sysFeedbackService.page(queryDTO, page, size);
return ResponseMessage.ok(null, pageInfo);
}
@PostMapping("/save")
public ResponseMessage save(@RequestBody FeedbackDTO feedbackDTO) {
if (ObjectUtils.isEmpty(feedbackDTO.getTitle())) {
return ResponseMessage.error("意见标题不能为空!");
}
if (ObjectUtils.isEmpty(feedbackDTO.getContent())) {
return ResponseMessage.error("意见内容不能为空!");
}
sysFeedbackService.save(feedbackDTO);
return ResponseMessage.ok("提交成功!");
}
@PostMapping("/get/{id}")
public ResponseMessage get(@PathVariable String id) {
if (ObjectUtils.isEmpty(id)) {
return ResponseMessage.error("意见ID不能为空");
}
FeedbackDTO feedbackDTO = sysFeedbackService.get(id);
return ResponseMessage.ok(null, feedbackDTO);
}
@PostMapping("/saveAnswer")
public ResponseMessage saveAnswer(@RequestBody FeedbackAnswerDTO feedbackAnswerDTO) {
if (ObjectUtils.isEmpty(feedbackAnswerDTO.getFeedbackId())) {
return ResponseMessage.error("意见ID不能为空");
}
if (ObjectUtils.isEmpty(feedbackAnswerDTO.getContent())) {
return ResponseMessage.error("回复内容不能为空!");
}
sysFeedbackService.saveAnswer(feedbackAnswerDTO);
return ResponseMessage.ok("提交成功!");
}
@PostMapping("/images")
public ResponseMessage upload(MultipartFile file) {
try {
if (fsService == null) {
return ResponseMessage.error("未启用FS");
}
if (ObjectUtils.isEmpty(file.getContentType())) {
return ResponseMessage.error("content-type不能为空");
}
if (!file.getContentType().toLowerCase().contains("image")) {
return ResponseMessage.error("图片格式不正确");
}
FSObject fsObject = new FSObject();
fsObject.setName(file.getOriginalFilename());
fsObject.setUploadDate(new Date());
fsObject.setInputStream(file.getInputStream());
fsObject.setContentType(file.getContentType());
fsObject.setSize(file.getSize());
Map<String, String> result = new HashMap<>();
result.put("location", "/sys/feedback/static/images/" + fsService.pubObject(fsObject) + file.getContentType().substring(file.getContentType().lastIndexOf("/")).toLowerCase().replace("/", "."));
return ResponseMessage.ok(null, result);
} catch (Exception e) {
return ResponseMessage.error(e.getMessage());
}
}
@GetMapping("/static/images/{prefix}.{suffix}")
public ResponseEntity view(@PathVariable String prefix, @PathVariable String suffix) {
try {
if (fsService == null) {
return ResponseEntity.notFound().build();
}
FSObject fsObject;
try {
fsObject = fsService.getObject(prefix);
} catch (Exception e) {
fsObject = null;
}
if (fsObject == null || !fsObject.getContentType().toLowerCase().contains(suffix.toLowerCase())) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok()
.header("Pragma", "no-cache")
.header("Cache-Control", "no-cache")
.header("Expires", "0")
.header("Content-Type", fsObject.getContentType())
.header("Content-Length", String.valueOf(fsObject.getSize()))
.body(new InputStreamResource(fsObject.getInputStream()));
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
}

View File

@@ -0,0 +1,217 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.util.TreeUtil;
import com.insigma.framework.domain.core.entity.SysFunction;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.file.storage.core.FSObject;
import com.insigma.framework.file.storage.core.FSService;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequest;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.MenuDTO;
import com.insigma.sys.dto.SysFunctionDocDTO;
import com.insigma.sys.service.SysFunctionDocService;
import com.insigma.sys.service.SysFunctionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
@Slf4j
@RestController
@RequestMapping("/sys/sysFunctionDoc")
public class SysFunctionDocController extends BaseController {
@Autowired
private SysFunctionDocService sysFunctionDocService;
@Autowired(required = false)
private FSService fsService;
@Autowired
private CurrentUserService currentUserService;
@Autowired
private SysFunctionService sysFunctionService;
@GetMapping("/queryTree")
public ResponseMessage queryTable(){
List<MenuDTO> menuDTOS = sysFunctionService.queryAllMenu();
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children");
return ResponseMessage.ok("查询成功", jsonArray);
}
@PostMapping("/nodeClick")
public ResponseMessage nodeClick(@RequestBody JSONObject jsonObject) {
SysFunction sysFunction;
String a=jsonObject.get("functionid").toString();
if (a!=null){
long functionid =(long)Integer.parseInt(a);
sysFunction = sysFunctionService.getByFunctionId(functionid);
List<SysFunction> menulist= sysFunctionService.getByParentId(sysFunction.getFunctionId());
if (menulist.size()>0){
//有子类
return ResponseMessage.ok(null, sysFunction);
}else {
//没有子类
return ResponseMessage.ok("重复", sysFunction);
}
}else {
return ResponseMessage.error();
}
}
/**
* 根据id查找对象
* @param jsonObject
* @return
*/
@PostMapping("/queryById")
public ResponseMessage queryById(@RequestBody JSONObject jsonObject) {
try {
String id=jsonObject.get("functionid").toString();
String funtype=jsonObject.get("funtype").toString();
List<MenuDTO> menuDTOS= sysFunctionService.queryMenuByFuntypeAndActive(funtype);
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children");
jsonObject.put("treedata",jsonArray);
long fId=Integer.parseInt(id);
SysFunction menu= sysFunctionService.getByFunctionId(fId);
List list=new ArrayList();
if(menu!=null){
String [] ms=menu.getIdPath().split("/");
if (ms.length>0){
for (String s:ms){
if(s.equals("0")){
continue;
}
list.add(Long.valueOf(s));
}
}}
jsonObject.put("pname",list);
return ResponseMessage.ok(null, jsonObject);
}catch (Exception e){
return ResponseMessage.error(e.getMessage());
}
}
@PostMapping("/doQuery")
public ResponseMessage doQuery(@RequestBody JSONObject jsonObject) {
String tmp = jsonObject.getString("functionid");
Long functionid;
if (ObjectUtils.isEmpty(tmp)) {
String location = jsonObject.getString("location");
if (ObjectUtils.isEmpty(location)) {
return ResponseMessage.error("传入菜单ID为空");
}
SysFunction sysFunction = sysFunctionService.getByLocation(location);
if (sysFunction == null) {
return ResponseMessage.error("模块不存在");
}
functionid = sysFunction.getFunctionId();
} else {
functionid = Long.parseLong(tmp);
}
SysFunctionDocDTO aysFunctionDocDTO = sysFunctionDocService.queryByFunctionID(functionid);
if (aysFunctionDocDTO == null) {
return ResponseMessage.error("未配置该模块的功能介绍");
}
return ResponseMessage.ok(null, aysFunctionDocDTO);
}
@PostMapping("/doSave")
public ResponseMessage doSave(@RequestBody SysFunctionDocDTO sysFunctionDocDTO ) {
try {
sysFunctionDocService.saveDoc(sysFunctionDocDTO);
return ResponseMessage.ok();
} catch (Exception e) {
return ResponseMessage.error(e.getMessage());
}
}
@OdinRequest
@PostMapping("/deleteMenu")
public ResponseMessage delete(@RequestBody JSONObject jsonObject) {
try {
String tmp = jsonObject.get("functionid").toString();
Long functionid = Long.parseLong(tmp);
if(functionid==0){
return ResponseMessage.error("传入菜单ID为空");
}
sysFunctionDocService.deleteByFunctionid(functionid);
return ResponseMessage.ok();
} catch (Exception e) {
return ResponseMessage.error(e.getMessage());
}
}
@PostMapping("/images")
public ResponseMessage upload(MultipartFile file, String messageId) {
try {
if (fsService == null) {
return ResponseMessage.error("未启用FS");
}
if (ObjectUtils.isEmpty(file.getContentType())) {
return ResponseMessage.error("content-type不能为空");
}
if (!file.getContentType().toLowerCase().contains("image")) {
return ResponseMessage.error("图片格式不正确");
}
FSObject fsObject = new FSObject();
fsObject.setName(file.getOriginalFilename());
fsObject.setUploadDate(new Date());
fsObject.setInputStream(file.getInputStream());
fsObject.setContentType(file.getContentType());
fsObject.setSize(file.getSize());
Map<String, String> result = new HashMap<>();
result.put("location", "/sys/sysFunctionDoc/static/images/" + fsService.pubObject(fsObject) + file.getContentType().substring(file.getContentType().lastIndexOf("/")).toLowerCase().replace("/", ".") + "?messageId=" + messageId);
return ResponseMessage.ok(null, result);
} catch (Exception e) {
return ResponseMessage.error(e.getMessage());
}
}
@GetMapping("/static/images/{prefix}.{suffix}")
public ResponseEntity view(@PathVariable String prefix, @PathVariable String suffix, String messageId) {
try {
SysUser sysUser = currentUserService.getCurrentUser();
SysFunctionDocDTO sysFunctionDocDTO = sysFunctionDocService.queryByFunctionID(Long.parseLong(messageId));
if (sysFunctionDocDTO != null ) {
if (sysFunctionDocDTO == null) {
return ResponseEntity.status(403).build();
}
}
if (fsService == null) {
return ResponseEntity.notFound().build();
}
FSObject fsObject;
try {
fsObject = fsService.getObject(prefix);
} catch (Exception e) {
fsObject = null;
}
if (fsObject == null || !fsObject.getContentType().toLowerCase().contains(suffix.toLowerCase())) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok()
.header("Pragma", "no-cache")
.header("Cache-Control", "no-cache")
.header("Expires", "0")
.header("Content-Type", fsObject.getContentType())
.header("Content-Length", String.valueOf(fsObject.getSize()))
.body(new InputStreamResource(fsObject.getInputStream()));
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
}

View File

@@ -0,0 +1,212 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequest;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequestParam;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import com.insigma.sys.dto.SysGuideDTO;
import com.insigma.sys.service.SysGuideService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
@RestController
@RequestMapping("/sys/guide/Guide")
public class SysGuideController extends BaseController {
@Autowired
private SysGuideService sysGuideService;
/**
* 初始化
*
* @param f_form
* @param size
* @return
*/
@OdinRequest(init = true)
@PostMapping("/doInit")
public ResponseMessage doInit(SysGuideDTO f_form, Integer size) {
tableDataQuery(f_form, 1, size);
return this.ok();
}
/**
* 分页查询
*
* @param queryDTO
* @param page
* @param size
* @param name
* @return
*/
@OdinRequest
@PostMapping("/doGridQuery/{name}")
public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysGuideDTO queryDTO,
@OdinRequestParam("t_tableData_page") Integer page,
@OdinRequestParam("t_tableData_size") Integer size,
@PathVariable String name) {
tableDataQuery(queryDTO, page, size);
return this.ok();
}
/**
* 查询
*
* @param queryDTO
* @param size
* @return
*/
@OdinRequest
@PostMapping("/query")
public ResponseMessage query(@OdinRequestParam("f_form") SysGuideDTO queryDTO,
Integer size) {
tableDataQuery(queryDTO, 1, size);
return this.ok();
}
private void tableDataQuery(SysGuideDTO queryDTO, Integer page, Integer size) {
this.pageQuery("t_tableData", () -> {
this.set("page", page); // 需要将前端表格中:currentPage定义的值设置成page的值
return sysGuideService.queryGuideList(queryDTO, page, size);
});
}
/**
* 新增
*
* @return
*/
@OdinRequest
@PostMapping("/add")
public ResponseMessage add() {
this.clearForm("f_guideForm");
this.set("dialogFormVisible", true);
this.set("dialogFormTitle", "新增");
return this.ok();
}
/**
* 修改
*
* @param id
* @return
*/
@OdinRequest
@PostMapping("/update")
public ResponseMessage update(String id) {
SysGuideDTO dto = sysGuideService.queryGuide(id);
if(!ObjectUtils.isEmpty(dto.getAnswer_content())){
String s = dto.getAnswer_content().replaceAll("<br/>", "\n");
dto.setAnswer_content(s);
}
this.toForm("f_guideForm", dto);
this.set("dialogFormVisible", true);
this.set("dialogFormTitle", "修改");
return this.ok();
}
/**
* 批量删除
*
* @return
*/
@OdinRequest(refresh = true)
@PostMapping("/batchDelete")
public ResponseMessage batchDelete() {
List<SysGuideDTO> list = this.getCheckedTableData("t_tableData", SysGuideDTO.class);
if (list.size() == 0) {
return this.error("请勾选需要删除的内容!");
}
sysGuideService.deleteGuides(list);
return this.ok("删除成功!");
}
/**
* 删除
*
* @param id
* @return
*/
@OdinRequest
@PostMapping("/delete")
public ResponseMessage delete(String id) {
sysGuideService.delete(id);
this.setBackFunType("rQuery");
return this.ok("删除成功!");
}
/**
* 保存
*
* @param sysGuideDTO
* @param name
* @return
*/
@OdinRequest
@PostMapping("/doSave/{name}")
public ResponseMessage doSave(@OdinRequestParam("f_guideForm") SysGuideDTO sysGuideDTO, @PathVariable String name) {
sysGuideService.saveGuide(sysGuideDTO);
this.set("dialogFormVisible", false);
// doInit(new SysGuideDTO(),size);
this.setBackFunType("rQuery");
return this.ok("保存成功!");
}
/**
* 点击问题名称触发热度+1
*/
@GetMapping("/hot/{id}")
public ResponseMessage hot(@PathVariable String id) {
sysGuideService.hot(id);
return this.ok();
}
/**
* @Description: 根据不同选择进行详细的查询数据
* @author GH
* @version 2021/7/23 14:53
* @return
*/
@PostMapping("/findByQuestion_type")
public ResponseMessage findByQuestion_type(@RequestBody JSONObject jsonObjecte) {
Integer page = jsonObjecte.getInteger("page");
Integer size = jsonObjecte.getInteger("size");
String question_type = jsonObjecte.getString("question_type");
String sort = jsonObjecte.getString("sort");
String str = jsonObjecte.getString("str");
return ResponseMessage.ok(null, sysGuideService.findByQuestion_type(question_type,sort,str,page,size));
}
/**
* @Description: 查询首页引导信息
* @author GH
* @version 2021/7/30 13:09
* @return
*/
@GetMapping("/findFrontPage")
public ResponseMessage findFrontPage() {
List<HashMap<String, Object>> map = sysGuideService.findFrontPage();
return ResponseMessage.ok(null, map);
}
/**
* @Description: 更多详情页面
* @author GH
* @version 2021/7/30 13:09
* @return
*/
@PostMapping("/findDetailsPage/{id}")
public ResponseMessage findDetailsPage(@PathVariable String id) {
sysGuideService.hot(id);
return ResponseMessage.ok(null, sysGuideService.findDetailsPage(id));
}
}

View File

@@ -0,0 +1,62 @@
package com.insigma.sys.controller;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequest;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequestParam;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import com.insigma.sys.dto.SysLogonLogDTO;
import com.insigma.sys.service.SysLogonLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* fukq 2020/6/2
*/
@RestController
@RequestMapping("/sys/syslogonlog")
public class SysLogonLogController extends BaseController {
@Autowired
private SysLogonLogService syslogonLogService;
@OdinRequest(init = true)
@PostMapping("/doInit")
public ResponseMessage doInit(SysLogonLogDTO f_form, Integer page, Integer size) {
tableDataQuery(f_form, page, size);
return this.ok();
}
@OdinRequest
@PostMapping("/doGridQuery/{name}")
public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysLogonLogDTO queryDTO,
@OdinRequestParam("t_tableData_page") Integer page,
@OdinRequestParam("t_tableData_size") Integer size,
@PathVariable String name) {
tableDataQuery(queryDTO, page, size);
this.set("page", page);
return this.ok();
}
@OdinRequest
@PostMapping("/query")
public ResponseMessage query(@OdinRequestParam("f_form") SysLogonLogDTO queryDTO,
@OdinRequestParam("t_tableData") PageInfo<SysLogonLogDTO> pageInfo,
Integer size) {
tableDataQuery(queryDTO, 1, size);
this.set("page", 1);
return this.ok();
}
public void tableDataQuery(SysLogonLogDTO queryDTO, Integer page, Integer size) {
this.pageQuery("t_tableData", () -> syslogonLogService.querySysLogonList(queryDTO, page, size));
}
@PostMapping("/new/query")
public ResponseMessage doGridQueryVue3(@RequestBody SysLogonLogDTO queryDTO) {
return ResponseMessage.ok(syslogonLogService.querySysLogonList(queryDTO, queryDTO.getPage(), queryDTO.getSize()));
}
}

View File

@@ -0,0 +1,119 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.file.storage.core.FSObject;
import com.insigma.framework.file.storage.core.FSService;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.MessageDTO;
import com.insigma.sys.service.SysMessageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
/**
* Created by yinjh on 2020/6/16.
*/
@Slf4j
@RestController
@RequestMapping("/sys/message")
public class SysMessageController {
@Autowired
private SysMessageService sysMessageService;
@Autowired
private CurrentUserService currentUserService;
@Autowired(required = false)
private FSService fsService;
@PostMapping("/list")
public ResponseMessage list(@RequestBody JSONObject jsonObject) throws SQLException {
SysUser sysUser = currentUserService.getCurrentUser();
MessageDTO queryDTO = jsonObject.toJavaObject(MessageDTO.class);
Integer page = jsonObject.getInteger("page");
Integer size = jsonObject.getInteger("size");
PageInfo<MessageDTO> pageInfo = sysMessageService.getSysMessageList(sysUser, queryDTO, page, size, false);
return ResponseMessage.ok(null, pageInfo);
}
@PostMapping("/save")
public ResponseMessage save(@RequestBody MessageDTO messageDTO) {
String userId = currentUserService.getCurrentUser().getUserId();
if (ObjectUtils.isEmpty(messageDTO.getTitle())) {
return ResponseMessage.error("消息标题不能为空!");
}
if (ObjectUtils.isEmpty(messageDTO.getContent())) {
return ResponseMessage.error("消息内容不能为空!");
}
if (ObjectUtils.isEmpty(messageDTO.getType())) {
return ResponseMessage.error("消息类型不能为空!");
}
if ("1".equals(messageDTO.getType())) {
if (messageDTO.getUserIds() == null || messageDTO.getUserIds().size() == 0) {
return ResponseMessage.error("消息通知目标不能为空!");
}
}
sysMessageService.save(userId, messageDTO);
return ResponseMessage.ok("保存成功!");
}
@GetMapping("/read")
public ResponseMessage read(String messageId) {
String userId = currentUserService.getCurrentUser().getUserId();
MessageDTO messageDTO = sysMessageService.getSysMessage(userId, messageId);
if ("1".equals(messageDTO.getType()) && "-1".equals(messageDTO.getFlag())) {
return ResponseMessage.error("无权查看!");
}
if (!"1".equals(messageDTO.getFlag())) {
sysMessageService.updateFlag(userId, messageId);
}
return ResponseMessage.ok(null, messageDTO);
}
@GetMapping("/static/images/{prefix}.{suffix}")
public ResponseEntity view(@PathVariable String prefix, @PathVariable String suffix, String messageId) {
try {
SysUser sysUser = currentUserService.getCurrentUser();
MessageDTO messageDTO = sysMessageService.getSysMessage(messageId);
if (messageDTO != null && "1".equals(messageDTO.getType()) && !"1".equals(sysUser.getUserType())) {
messageDTO = sysMessageService.getSysUserMessage(sysUser.getUserId(), messageId);
if (messageDTO == null) {
return ResponseEntity.status(403).build();
}
}
if (fsService == null) {
return ResponseEntity.notFound().build();
}
FSObject fsObject;
try {
fsObject = fsService.getObject(prefix);
} catch (Exception e) {
fsObject = null;
}
if (fsObject == null || !fsObject.getContentType().toLowerCase().contains(suffix.toLowerCase())) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok()
.header("Pragma", "no-cache")
.header("Cache-Control", "no-cache")
.header("Expires", "0")
.header("Content-Type", fsObject.getContentType())
.header("Content-Length", String.valueOf(fsObject.getSize()))
.body(new InputStreamResource(fsObject.getInputStream()));
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
}

View File

@@ -0,0 +1,130 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.util.IDUtil;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.framework.file.storage.core.FSObject;
import com.insigma.framework.file.storage.core.FSService;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.LazyTreeNode;
import com.insigma.sys.dto.MessageDTO;
import com.insigma.sys.service.SysMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author yinjh
* @version 2021/8/23
*/
@RestController
@RequestMapping("/sys/message/manage")
public class SysMessageManageController {
@Autowired
private SysMessageService sysMessageService;
@Autowired
private CurrentUserService currentUserService;
@Autowired(required = false)
private FSService fsService;
@PostMapping("/init")
public ResponseMessage init() {
return ResponseMessage.ok("", IDUtil.generateUUID());
}
@PostMapping("/list")
public ResponseMessage list(@RequestBody JSONObject jsonObject) throws SQLException {
SysUser sysUser = currentUserService.getCurrentUser();
MessageDTO queryDTO = jsonObject.toJavaObject(MessageDTO.class);
Integer page = jsonObject.getInteger("page");
Integer size = jsonObject.getInteger("size");
PageInfo<MessageDTO> pageInfo = sysMessageService.getSysMessageList(sysUser, queryDTO, page, size, true);
return ResponseMessage.ok(null, pageInfo);
}
@PostMapping("/save")
public ResponseMessage save(@RequestBody MessageDTO messageDTO) {
String userId = currentUserService.getCurrentUser().getUserId();
if (ObjectUtils.isEmpty(messageDTO.getTitle())) {
return ResponseMessage.error("消息标题不能为空!");
}
if (ObjectUtils.isEmpty(messageDTO.getContent())) {
return ResponseMessage.error("消息内容不能为空!");
}
if (ObjectUtils.isEmpty(messageDTO.getType())) {
return ResponseMessage.error("消息类型不能为空!");
}
if ("1".equals(messageDTO.getType())) {
if (messageDTO.getUserIds() == null || messageDTO.getUserIds().size() == 0) {
return ResponseMessage.error("消息通知目标不能为空!");
}
}
MessageDTO message = sysMessageService.getSysMessage(messageDTO.getMessageId());
if (message == null) {
sysMessageService.save(userId, messageDTO);
} else {
sysMessageService.update(userId, messageDTO);
}
return ResponseMessage.ok("保存成功!");
}
@GetMapping("/read")
public ResponseMessage read(String messageId) {
MessageDTO messageDTO = sysMessageService.getSysMessage(messageId);
return ResponseMessage.ok(null, messageDTO);
}
@PostMapping("/delete")
public ResponseMessage delete(@RequestBody MessageDTO messageDTO) {
if (ObjectUtils.isEmpty(messageDTO.getMessageId())) {
return ResponseMessage.error("消息ID不能为空");
}
sysMessageService.deleteSysMessage(messageDTO.getMessageId());
return ResponseMessage.ok("删除成功!");
}
@GetMapping("/userOrgTree")
public ResponseMessage getUserOrgTree(String parentId) {
List<LazyTreeNode<String>> list = sysMessageService.getUserOrgTree(parentId);
return ResponseMessage.ok(null, list);
}
@PostMapping("/images")
public ResponseMessage upload(MultipartFile file, String messageId) {
try {
if (fsService == null) {
return ResponseMessage.error("未启用FS");
}
if (ObjectUtils.isEmpty(file.getContentType())) {
return ResponseMessage.error("content-type不能为空");
}
if (!file.getContentType().toLowerCase().contains("image")) {
return ResponseMessage.error("图片格式不正确");
}
FSObject fsObject = new FSObject();
fsObject.setName(file.getOriginalFilename());
fsObject.setUploadDate(new Date());
fsObject.setInputStream(file.getInputStream());
fsObject.setContentType(file.getContentType());
fsObject.setSize(file.getSize());
Map<String, String> result = new HashMap<>();
result.put("location", "/sys/message/static/images/" + fsService.pubObject(fsObject) + file.getContentType().substring(file.getContentType().lastIndexOf("/")).toLowerCase().replace("/", ".") + "?messageId=" + messageId);
return ResponseMessage.ok(null, result);
} catch (Exception e) {
return ResponseMessage.error(e.getMessage());
}
}
}

View File

@@ -0,0 +1,64 @@
package com.insigma.sys.controller;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequest;
import com.insigma.framework.web.support.ep.dev.annotation.OdinRequestParam;
import com.insigma.framework.web.support.ep.dev.controller.BaseController;
import com.insigma.sys.dto.SysOperateLogDTO;
import com.insigma.sys.service.SysOperateLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
/**
* fukq 2020/6/1
*/
@RestController
@RequestMapping("/sys/sysoplog")
public class SysOpLogController extends BaseController {
@Autowired
SysOperateLogService sysOperateLogService;
@OdinRequest(init = true)
@PostMapping("/doInit")
public ResponseMessage doInit(SysOperateLogDTO f_form, Integer page, Integer size) {
tableDataQuery(f_form, page, size);
return this.ok();
}
@OdinRequest
@PostMapping("/doGridQuery/{name}")
public ResponseMessage doGridQuery(@OdinRequestParam("f_form") SysOperateLogDTO queryDTO,
@OdinRequestParam("t_tableData_page") Integer page,
@OdinRequestParam("t_tableData_size") Integer size,
@PathVariable String name) {
tableDataQuery(queryDTO, page, size);
this.set("page", page);
return this.ok();
}
@OdinRequest
@PostMapping("/query")
public ResponseMessage query(@OdinRequestParam("f_form") SysOperateLogDTO queryDTO,
@OdinRequestParam("t_tableData") PageInfo<SysOperateLogDTO> pageInfo,
Integer size) {
tableDataQuery(queryDTO, 1, size);
this.set("page", 1);
return this.ok();
}
public void tableDataQuery(SysOperateLogDTO queryDTO, Integer page, Integer size) {
this.pageQuery("t_tableData", () -> sysOperateLogService.querySysOperateLogList(queryDTO, page, size));
}
@PostMapping("/new/query")
public ResponseMessage query(@RequestBody SysOperateLogDTO queryDTO) throws SQLException {
return ResponseMessage.ok(sysOperateLogService.querySysOperateLogList(queryDTO, queryDTO.getPage(), queryDTO.getSize()));
}
}

View File

@@ -0,0 +1,495 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.encryption.util.SM3Utils;
import com.insigma.framework.core.exception.AppException;
import com.insigma.framework.core.util.DtoEntityUtil;
import com.insigma.framework.core.util.IdCardUtil;
import com.insigma.framework.core.util.TreeUtil;
import com.insigma.framework.domain.core.entity.*;
import com.insigma.framework.persistence.core.jdbc.PageInfo;
import com.insigma.framework.security.core.dto.BaseUserInfo;
import com.insigma.framework.web.support.core.service.CodeTypeService;
import com.insigma.framework.web.support.ep.dev.util.pe.PageForm;
import com.insigma.sys.common.CommonValidator;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.*;
import com.insigma.sys.service.Aa26Service;
import com.insigma.sys.service.SysOrgService;
import com.insigma.sys.service.SysUserService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
/**
* @Author: caic
* @version: 10:40 2019/1/7
* @Description:
*/
@Data
@RestController
@RequestMapping("/sys/user")
@Slf4j
public class SysUserController {
@Autowired
private CodeTypeService codeTypeService;
@Autowired
private SysUserService sysUserService;
@Autowired
private CurrentUserService currentUserService;
@Autowired
private SysOrgService sysOrgService;
@Autowired
private Aa26Service aa26Service;
@Autowired
private CommonValidator validator;
Pattern patternCn = Pattern.compile("^[\u4E00-\u9FA5]+$");
Pattern patternEn = Pattern.compile("^[A-Za-z]+$");
Pattern patternEnCn = Pattern.compile("^[0-9a-zA-Z]+$");
/**
* 初始化页面数据
*
* @return
*/
@PostMapping("/doInit")
public ResponseMessage initPageDate(@RequestBody JSONObject jsonObject) {
String userType = currentUserService.getCurrentUser().getUserType();//获取当前登录用户类型
JSONObject codeTypes = jsonObject.getJSONObject("codeTypes");
JSONObject codeTypesRes = codeTypeService.getCodeTypes(codeTypes);
jsonObject.put("codeTypes", codeTypesRes);
jsonObject.put("currentUserType", userType);//设置当前登录用户类型
return ResponseMessage.ok(null, jsonObject);
}
/**
* 保存用户
*
* @param pageData
* @return
*/
@PostMapping("/doSave")
public ResponseMessage save(@RequestBody JSONObject pageData) {
try {
PageForm pageForm = new PageForm(pageData);
SysUserDTO sysUser = toUser(pageForm);
if (!patternEnCn.matcher(sysUser.getLogonName()).matches()) {
throw new AppException("登录名必须是英文或数字");
}
if (!patternCn.matcher(sysUser.getDisplayName()).matches() && !patternEn.matcher(sysUser.getDisplayName()).matches()) {
throw new AppException("姓名必须是中文或英文");
}
if ("1".equals(sysUser.getCardType()) && !IdCardUtil.verify(sysUser.getCardId())) {
throw new AppException("身份证号码格式不正确");
}
if ("1".equals(sysUser.getUserType()) && !"1".equals(currentUserService.getCurrentUser().getUserType())) {
throw new AppException("非超级管理员不能创建超级管理员");
}
String sm3LogonName = SM3Utils.digest(sysUser.getLogonName());
String sm3ReverseLogonName = SM3Utils.digest(new StringBuffer(sysUser.getLogonName()).reverse().toString());
if (sm3LogonName.equals(sysUser.getPassWD()) || sm3ReverseLogonName.equals(sysUser.getPassWD())) {
throw new AppException("新密码不能与登录名(包含逆序)相同!");
}
sysUser.setUserState("1");
JSONArray orgIds = pageData.getJSONObject("orgId").getJSONArray("value");
if (orgIds.size() > 0)
sysUser.setOrgId(Long.parseLong(orgIds.get(orgIds.size() - 1) + ""));
JSONArray aa26Ids = pageData.getJSONObject("aa26").getJSONArray("value");
if (aa26Ids.size() > 0)
sysUser.setAreaId(Long.parseLong(aa26Ids.get(aa26Ids.size() - 1) + ""));
JSONArray roleIds = pageData.getJSONObject("roleIds").getJSONArray("value");
List<SysUserRoleDTO> list = new ArrayList<>();
for (Object roleId : roleIds) {
if (roleId != null) {
SysUserRoleDTO sysUserRole = new SysUserRoleDTO();
sysUserRole.setRoleId(roleId.toString());
list.add(sysUserRole);
}
}
sysUser.setUserRoles(list);
sysUser.setCreateTime(new Date());
// 设定用户过期时间
sysUser.setUserExpireDate(pageData.getJSONObject("userExpireDate").getDate("value"));
// 获取密码过期策略
String pwExpireType = (String) pageData.getJSONObject("pwExpireType").get("value");
if (!ObjectUtils.isEmpty(pwExpireType) && pwExpireType.equals("1")) {
// 系统配置周期
long l = new Date().getTime() + 7 * 24 * 3600 * 1000;
sysUser.setPwExpireDate(new Date(l));
} else if (ObjectUtils.isEmpty(pwExpireType) || pwExpireType.equals("2")) {
// 永不过期
sysUser.setPwExpireDate(null);
} else if (!ObjectUtils.isEmpty(pwExpireType) && pwExpireType.equals("3")) {
// 指定日期
sysUser.setPwExpireDate(pageData.getJSONObject("pwExpireDate").getDate("value"));
}
JSONArray areaIds = pageData.getJSONObject("aa26Tree").getJSONArray("value");
List<String> addAreaIds = new ArrayList<>();
for (int i = 0; i < areaIds.size(); i++) {
JSONObject obj = areaIds.getJSONObject(i);
addAreaIds.add(obj.get("key").toString());
}
Map<String, List<String>> map = new ConcurrentHashMap<>();
map.put("addAreaIds", addAreaIds);
if (!validator.validateArea(sysUser.getAreaId() + "", sysUser.getUserType())
|| !validator.validateOrg(sysUser.getOrgId(), sysUser.getUserType())
|| !validator.validateRoleIds(roleIds.toJavaList(String.class))) {
throw new AppException("无权操作");
}
sysUserService.saveUser(sysUser, map);
return ResponseMessage.ok("保存成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("保存失败,失败原因:" + e.getMessage());
}
}
@GetMapping("/queryOneUser/{userId}")
public ResponseMessage queryOneUser(@PathVariable String userId) throws AppException {
SysUser sysUser = sysUserService.getByUserId(userId);
if (!validator.validateUser(sysUser.getUserId())) {
throw new AppException("无权查看");
}
//sysUser.setPassWD(null);
List<SysUserRole> roleList = sysUserService.queryUserRole(userId);
List<SysUserArea> areaList = sysUserService.queryUserArea(userId);
SysOrg sysOrg = sysOrgService.getByOrgId(sysUser.getOrgId());
Aa26 aa26 = aa26Service.getByAab301(sysUser.getAreaId() + "");
Map<String, Object> map = new ConcurrentHashMap<>();
map.put("sysUser", DtoEntityUtil.trans(sysUser, SysUserDTO.class, true));
map.put("roleList", DtoEntityUtil.trans(roleList, SysUserRoleDTO.class, true));
map.put("areaList", DtoEntityUtil.trans(areaList, SysUserAreaDTO.class, true));
if (sysOrg != null) {
map.put("orgId", sysUser.getOrgId());
map.put("sysOrgs", DtoEntityUtil.trans(sysOrg, SysOrgDTO.class, true));
//sysOrgService.findByRegioncode(sysUser.getAreaId()+"")
}
if (aa26 != null)
map.put("aa26", DtoEntityUtil.trans(aa26, Aa26DTO.class, true));
return ResponseMessage.ok(null, map);
}
@GetMapping("/queryTable")
public ResponseMessage queryTable(@RequestParam(name = "logonName") String logonName,
@RequestParam(name = "displayName") String displayName,
@RequestParam(name = "orgId") String orgId,
@RequestParam(name = "userState") String userState,
@RequestParam(name = "userType") String userType,
@RequestParam(name = "aa26") String aa26,
@RequestParam(name = "cardId") String cardId,
@RequestParam(name = "page") Integer page,
@RequestParam(name = "size") Integer size) {
PageInfo<SysUserDTO> pageInfo = sysUserService.findAll(logonName, displayName, orgId, userState,userType,aa26,cardId, page, size,"1");
JSONObject jsonObject=new JSONObject();
JSONArray jsonArray=JSONArray.parseArray(JSONArray.toJSONString(pageInfo.getData()));
for(int i=0; i < jsonArray.size(); i++){
if(jsonArray.getJSONObject(i).getString("orgId") != null) {
SysOrg sysOrg = sysOrgService.getByOrgId(Long.valueOf(jsonArray.getJSONObject(i).getString("orgId")));
if(sysOrg != null){
jsonArray.getJSONObject(i).put("orgId", sysOrg.getOrgName());
}else{
jsonArray.getJSONObject(i).put("orgId", "");
}
}
if(jsonArray.getJSONObject(i).getString("areaId") != null) {
Aa26 a=aa26Service.getByAab301(jsonArray.getJSONObject(i).getString("areaId"));
if(a != null) {
jsonArray.getJSONObject(i).put("areaId", a.getAaa146());
}else{
jsonArray.getJSONObject(i).put("areaId", "");
}
}
}
jsonObject.put("totalElements",pageInfo.getTotal());
jsonObject.put("content",jsonArray);
return ResponseMessage.ok(null, jsonObject);
}
/**
* 复制用户
* @param data
* @return
*/
@PostMapping(value = "/copyUser")
public ResponseMessage copyUser(@RequestBody JSONObject data){
try {
if (!validator.validateUser(currentUserService.getCurrentUser().getUserId())) {
throw new AppException("无权操作");
}
sysUserService.copyUser(data);
return ResponseMessage.ok("复制成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("复制失败原因:" + e.getMessage());
}
}
/**
* 注销用户
*
* @param data
* @return
*/
@PostMapping(value = "/logoutUser")
public ResponseMessage logoutUser(@RequestBody(required = true) JSONObject data) {
try {
String userId = data.getString("userId");
if (!validator.validateUser(userId)) {
throw new AppException("无权操作");
}
sysUserService.logoutUser(userId);
sysUserService.clearSessions(userId);
return ResponseMessage.ok("注销成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("注销失败,失败原因:" + e.getMessage());
}
}
/**
* 解锁用户
*
* @param data
* @return
*/
@PostMapping(value = "/unlockUser")
public ResponseMessage unlockUser(@RequestBody(required = true) JSONObject data) {
try {
String userId = data.getString("userId");
if (!validator.validateUser(userId)) {
throw new AppException("无权操作");
}
sysUserService.unlockUser(userId);
return ResponseMessage.ok("解锁成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("解锁失败,失败原因:" + e.getMessage());
}
}
/**
* 锁定用户
*
* @param data
* @return
*/
@PostMapping(value = "/lockUser")
public ResponseMessage lockUser(@RequestBody(required = true) JSONObject data) {
try {
String userId = data.getString("userId");
if (!validator.validateUser(userId)) {
throw new AppException("无权操作");
}
sysUserService.lockUser(userId);
sysUserService.clearSessions(userId);
return ResponseMessage.ok("锁定成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("锁定失败,失败原因:" + e.getMessage());
}
}
/**
* 重置密码
*
* @param data
* @return
*/
@PostMapping("/resetPassWD")
public ResponseMessage resetPassWD(@RequestBody(required = true) JSONObject data) {
try {
String userId = data.getString("userId");
if (!validator.validateUser(userId)) {
throw new AppException("无权操作");
}
sysUserService.resetPassWD(userId);
// return ResponseMessage.ok("重置密码成功,默认密码为:" + resetPassWD);
return ResponseMessage.ok("重置密码成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("重置密码失败,失败原因:" + e.getMessage());
}
}
@PostMapping("/editPass")
public ResponseMessage editPassWD(@RequestBody(required = true) JSONObject data){
try {
String oldPass=data.getString("oldPass");
String newPass=data.getString("newPass");
sysUserService.updataPassWD(oldPass,newPass);
return ResponseMessage.ok("修改密码成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResponseMessage.error("修改密码失败,失败原因:" + e.getMessage());
}
}
@GetMapping("/getOrgTreeNodes/{areaId}")
public ResponseMessage getOrgTreeNodes(@PathVariable String areaId) {
JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryOrgNodes(areaId))), "orgid", "parentid", "children");
return ResponseMessage.ok(null, orgNodes);
}
@GetMapping("/getAa26TreeNodes/{userType}")
public ResponseMessage getAa26TreeNodes(@PathVariable String userType) {
JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(sysUserService.queryAa26Nodes())), "aab301", "aaa148", "children");
//orgNodes= JSONArray.parseArray(JSONArray.toJSONString(orgNodes).replace("aab301","id"));
return ResponseMessage.ok(null, orgNodes);
}
@GetMapping("/getOrgTreeNodes1/{userType}")
public ResponseMessage getOrgTreeNodes1(@PathVariable String userType) {
List<SysOrg> list = sysOrgService.getAll();
JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(DtoEntityUtil.trans(list, SysOrgDTO.class, true))), "orgid", "parentid", "children");
return ResponseMessage.ok(null, orgNodes);
}
@GetMapping("/getUserTypeCode")
public ResponseMessage getUserTypeCode() {
List<Map<String, Object>> list = sysUserService.findUsetTypeCode();
return ResponseMessage.ok(null, list);
}
@GetMapping("/getUserStateCode")
public ResponseMessage getUserStateCode() {
return ResponseMessage.ok(null, sysUserService.getUserStateCode());
}
@GetMapping("/getRoleList/{userType}")
public ResponseMessage getRoleList(@PathVariable("userType") String userType) {
List<SysRole> list = sysUserService.findByRoleType(userType);
return ResponseMessage.ok(null, DtoEntityUtil.trans(list, SysRoleDTO.class, true));
}
@PostMapping("/doCheck/{id}")
public ResponseMessage doCheck(@PathVariable("id") String id, @RequestBody JSONObject data) {
boolean bool = true;//校验是否通过
if ("logonName".equals(id)) {
String logonName = data.getJSONObject("logonName").getString("value");
String userId=data.getJSONObject("userId").getString("value");
bool = sysUserService.checkLogonName(logonName,userId);
}
if (bool) {
ResponseMessage rm = ResponseMessage.error("存在相同登录名");
return rm;
} else {
return ResponseMessage.ok();
}
}
/**
* 获取所有机构
* @return
*/
@GetMapping("/findAllOrg")
private ResponseMessage findAllOrg() {
List<SysOrg> list = sysOrgService.getAll();
return ResponseMessage.ok(null, DtoEntityUtil.trans(list, SysOrgDTO.class, true));
}
/**
* 获取所有区域
* @return
*/
@GetMapping("/findAllAa26")
private ResponseMessage findAllAa26() {
List<Aa26> list = aa26Service.getAll();
return ResponseMessage.ok(null, DtoEntityUtil.trans(list, Aa26DTO.class, true));
}
/**
* 获取所有机构,返回格式为树结构
* @return
*/
@GetMapping("/findAllOrgTree")
private ResponseMessage findAllOrgTree() {
List<SysOrg> list = sysOrgService.getAll();
JSONArray orgNodes = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(DtoEntityUtil.trans(list, SysOrgDTO.class, true))), "orgid", "parentid", "children");
return ResponseMessage.ok(null, orgNodes);
}
/**
* 通用获取下拉框选项
* @param codeType
* @return
*/
@GetMapping("/getAa10Code/{codeType}")
public ResponseMessage getAa10Code(@PathVariable String codeType){
List<Map<String, Object>> list = sysUserService.getAa10Code(codeType);
return ResponseMessage.ok(null, list);
}
/**
* 获取当前登录用户
* @return
*/
@GetMapping("/getCurrentUser")
public ResponseMessage getCurrentUser(){
SysUser currentUser = currentUserService.getCurrentUser();
BaseUserInfo baseUserInfo = new BaseUserInfo();
baseUserInfo.setUserid(currentUser.getUserId());
baseUserInfo.setUsername(currentUser.getLogonName());
baseUserInfo.setNickname(currentUser.getUserType());
return ResponseMessage.ok(null, baseUserInfo);
}
/**
* 获取当前登录用户
* @return
*/
@GetMapping("/getUserSlevel")
public ResponseMessage getUserSlevel(){
/*return ResponseMessage.ok(sysUserService.getUserSlevel());*/
ResponseMessage t = new ResponseMessage();
t.setStatus("0");
t.setData(sysUserService.getUserSlevel());
return t;
}
private SysUserDTO toUser(PageForm pageForm) {
SysUserDTO sysUserDTO = new SysUserDTO();
sysUserDTO.setUserId(pageForm.getValue("userId", String.class));
sysUserDTO.setLogonName(pageForm.getValue("logonName", String.class));
sysUserDTO.setDisplayName(pageForm.getValue("displayName", String.class));
sysUserDTO.setUserType(pageForm.getValue("userType", String.class));
sysUserDTO.setPassWD(pageForm.getValue("passWD", String.class));
sysUserDTO.setUserExpireDate(pageForm.getValue("userExpireDate", Date.class));
sysUserDTO.setPwExpireType(pageForm.getValue("pwExpireType", String.class));
sysUserDTO.setPwExpireDate(pageForm.getValue("pwExpireDate", Date.class));
sysUserDTO.setPwEditDate(pageForm.getValue("pwEditDate", Date.class));
sysUserDTO.setCardType(pageForm.getValue("cardType", String.class));
sysUserDTO.setCardId(pageForm.getValue("cardId", String.class));
sysUserDTO.setTel(pageForm.getValue("tel", String.class));
sysUserDTO.setDepartment(pageForm.getValue("department", String.class));
return sysUserDTO;
}
}

View File

@@ -0,0 +1,49 @@
package com.insigma.sys.controller;
import com.alibaba.fastjson2.JSONArray;
import com.insigma.framework.core.ResponseMessage;
import com.insigma.framework.core.util.TreeUtil;
import com.insigma.framework.domain.core.entity.SysUser;
import com.insigma.sys.common.CurrentUserService;
import com.insigma.sys.dto.MenuDTO;
import com.insigma.sys.service.SysFunctionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Created by yinjh on 2019/3/15.
*/
@RestController
@RequestMapping("/sys/usermenu")
public class UserMenuController {
@Autowired
private SysFunctionService sysFunctionService;
@Autowired
private CurrentUserService currentUserService;
@GetMapping("/getMenuList")
public ResponseMessage getMenuList() {
SysUser sysUser = currentUserService.getCurrentUser();
List<MenuDTO> menuDTOS = sysFunctionService.getMenuList(sysUser);
JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children", "0");
return ResponseMessage.ok("查询成功", jsonArray);
}
@GetMapping("/getButtonAuthList")
public ResponseMessage getButtonList(String location) {
if (ObjectUtils.isEmpty(location)) {
return ResponseMessage.error("location不能为空");
}
SysUser sysUser = currentUserService.getCurrentUser();
List<String> buttonAuthList = sysFunctionService.getButtonAuthList(sysUser, location);
return ResponseMessage.ok(null, buttonAuthList);
}
}

View File

@@ -0,0 +1,23 @@
package com.insigma.sys.controller;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.IOException;
/**
* @author yinjh
* @since 2025/2/8
*/
@Controller
public class ValidateCodeForwardController {
@RequestMapping("/validateCodeEnabled")
public void forward(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.getRequestDispatcher("/validateCode/enabled").forward(request, response);
}
}

View File

@@ -0,0 +1,44 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 系统参数 DTO
*
* @author yinjh
*/
@Data
public class Aa01DTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 参数类别代码
*/
private String aaa001;
/**
* 参数类别名称
*/
private String aaa002;
/**
* 参数值
*/
private String aaa005;
/**
* 参数值域说明
*/
private String aaa105;
/**
* 代码可维护标志1-可维护、0-不可维护
*/
private String aaa104;
}

View File

@@ -0,0 +1,54 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 字典代码 DTO
*
* @author yinjh
*/
@Data
public class Aa10DTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 代码ID
*/
private Long aaz093;
/**
* 代码类型
*/
private String aaa100;
/**
* 代码值
*/
private String aaa102;
/**
* 代码名称
*/
private String aaa103;
/**
* 参数分类
*/
private String aaa105;
/**
* 有效标志1-有效、0-无效
*/
private String aae100;
/**
* 可维护标志1-可维护、0-不可维护
*/
private String aaa104;
}

View File

@@ -0,0 +1,49 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 行政区划 DTO
*
* @author yinjh
*/
@Data
public class Aa26DTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 行政区划代码
*/
private String aab301;
/**
* 行政区划名称
*/
private String aaa146;
/**
* 行政区划级别
*/
private String aaa147;
/**
* 行政区划父级代码
*/
private String aaa148;
/**
* 是否统筹区01
*/
private String eae037;
/**
* id路径
*/
private String idpath;
}

View File

@@ -0,0 +1,51 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 系统反馈答复 DTO
*
* @author yinjh
*/
@Data
public class FeedbackAnswerDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 反馈答复内容
*/
private String content;
/**
* 用户ID
*/
private String userId;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 反馈ID
*/
private String feedbackId;
/**
* 回复类型0-问、1-答
*/
private String type;
}

View File

@@ -0,0 +1,71 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 问题反馈 DTO
*
* @author yinjh
*/
@Data
public class FeedbackDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* 用户ID
*/
private String userId;
/**
* 显示名称
*/
private String displayName;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 最近应答0-无、1-有
*/
private String answered;
/**
* 日期范围
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private List<Date> dateRange;
/**
* 答复列表
*/
List<FeedbackAnswerDTO> answerList;
}

View File

@@ -0,0 +1,27 @@
package com.insigma.sys.dto;
import com.insigma.framework.web.support.module.dto.ImportConfigDTO;
import com.insigma.framework.web.support.module.dto.ImportConfigDetailDTO;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 导入配置返回 DTO
*
* @author yinjh
*/
@Data
public class ImportConfigReDTO implements Serializable {
/**
* 导入配置
*/
private ImportConfigDTO config;
/**
* 导入配置明细
*/
private List<ImportConfigDetailDTO> details;
}

View File

@@ -0,0 +1,40 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 懒加载树节点对象
*
* @author yinjh
*/
@Data
public class LazyTreeNode<T> implements Serializable {
/**
* 节点ID
*/
private T id;
/**
* 节点名称
*/
private String label;
/**
* 节点父ID
*/
private T parent;
/**
* 是否是叶子节点
*/
private Boolean isLeaf;
/**
* 扩展属性
*/
private Object extra;
}

View File

@@ -0,0 +1,68 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 菜单 DTO
*
* @author yinjh
*/
@Data
public class MenuDTO implements Serializable {
/**
* 功能ID
*/
private long functionid;
/**
* 链接
*/
private String path;
/**
* 标题
*/
private String title;
/**
* 功能分类0-通用、1-系统管理、2-业务功能(扩展:个人、单位、机构)
*/
private String funtype;
/**
* 父功能ID
*/
private long parentid;
/**
* 节点图标
*/
private String icon;
/**
* 排序号
*/
private int funorder;
/**
* 节点类型1-菜单节点2-菜单叶子
*/
private String nodetype;
/**
* 功能描述
*/
private String description;
/**
* 所属应用系统
*/
private String appid;
/**
* 打开模式1-tab页打开2-浏览器tab页打开
*/
private String openmode;
}

View File

@@ -0,0 +1,69 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 消息 DTO
*
* @author yinjh
*/
@Data
public class MessageDTO implements Serializable {
/**
* 消息ID
*/
private String messageId;
/**
* 消息标题
*/
private String title;
/**
* 消息内容
*/
private String content;
/**
* 消息创建人
*/
private String creator;
/**
* 消息创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 消息状态0未读1已读
*/
private String flag;
/**
* 消息接收人列表
*/
private List<String> userIds;
/**
* 开始时间
*/
private Date startDate;
/**
* 结束时间
*/
private Date endDate;
/**
* 消息类型0全员消息1局部消息
*/
private String type;
}

View File

@@ -0,0 +1,27 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author GH
*/
@Data
public class MonitorCentersDTO implements Serializable {
private String ip;
private String appName;
private String timeStart;
private String timeEnd;
private String start;
private String rows;
private String uriFieldName;
private String sessionFieldName;
private String sqlFieldName;
private String sort;
private String appId;
private String title;
private String company;
private Date ctime;
}

View File

@@ -0,0 +1,78 @@
package com.insigma.sys.dto;
import com.insigma.framework.domain.core.entity.ScmSafetyFilterLog;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author yinjh
* @since 2025/1/21
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class SafetyFilterLogDTO extends ScmSafetyFilterLog implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 日志ID
*/
private String logId;
/**
* 请求URL
*/
private String requestUrl;
/**
* 请求时间
*/
private Date requestTime;
/**
* 登录名
*/
private String loginName;
/**
* 过滤内容
*/
private String filterContent;
/**
* 过滤类型
*/
private String filterType;
/**
* 功能ID
*/
private Long functionId;
/**
* 功能名称
*/
private String functionName;
/**
* 请求来源IP
*/
private String requestOriginIp;
/**
* 分页
*/
private Integer page;
/**
* 每页显示数量
*/
private Integer size;
}

View File

@@ -0,0 +1,43 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 应用地址配置 DTO
*
* @author yinjh
*/
@Data
public class SysAppAddressDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 应用地址ID
*/
private String addressId;
/**
* 门户地址
*/
private String portalUrl;
/**
* 应用地址
*/
private String appUrl;
/**
* 应用登录地址
*/
private String appLogoutUrl;
/**
* 应用ID
*/
private String appId;
}

View File

@@ -0,0 +1,66 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 应用 DTO
*
* @author yinjh
*/
@Data
public class SysAppDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 应用ID
*/
private String appId;
/**
* 应用编码
*/
private String appCode;
/**
* 应用名称
*/
private String appName;
/**
* 排序号
*/
private Long orderNo;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 修改时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 是否有效1-有效、0-无效
*/
private String active;
/**
* 应用安全key
*/
private String secretKey;
public Integer page;
private Integer size;
}

View File

@@ -0,0 +1,58 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 审核配置 DTO
*
* @author yinjh
*/
@Data
public class SysAuditConfigDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 模块ID
*/
private Long functionId;
/**
* 审核总级别
*/
private Integer auditTotalLevel;
/**
* 服务名SpringBean的名称实现AuditResultHandler接口
*/
private String serviceName;
/**
* 是否允许回退到上一级
*/
private String allowRollback;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 修改时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}

View File

@@ -0,0 +1,50 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 下载中心 DTO
*
* @author yinjh
*/
@Data
public class SysDownloadCenterDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 材料ID
*/
private String id;
/**
* 材料名称
*/
private String material_name;
/**
* 材料类型
*/
private String material_type;
/**
* 材料大小
*/
private String material_size;
/**
* 上传时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date upload_time;
private Integer page;
private Integer size;
}

View File

@@ -0,0 +1,51 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 系统错误信息 DTO
*
* @author yinjh
*/
@Data
public class SysErrorDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 服务编码
*/
private String serviceName;
/**
* 模块编码
*/
private String functionName;
/**
* 错误编码
*/
private String errorCode;
/**
* 错误信息
*/
private String message;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}

View File

@@ -0,0 +1,119 @@
package com.insigma.sys.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 功能菜单 DTO
*
* @author yinjh
*/
@Data
public class SysFunctionDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 功能ID
*/
private Long functionid;
/**
* 链接
*/
private String location;
/**
* 标题
*/
private String title;
/**
* 父功能ID
*/
private Long parentid;
/**
* 排序号
*/
private int funorder;
/**
* 节点类型1-菜单节点2-菜单叶子
*/
private String nodetype;
/**
* 是否记录日志 1-记,0-不记
*/
private String islog;
/**
* 开发人员
*/
private String developer;
/**
* 节点图标
*/
private String icon;
/**
* 功能的中文描述
*/
private String description;
/**
* 功能分类,0通用1系统管理2业务功能扩展个人、单位、机构
*/
private String funtype;
/**
* 是否有效
*/
private String active;
/**
* 功能编号
*/
private String funcode;
/**
* 审核标志0-不自动审核1-自动审核
*/
private String auflag;
/**
* 操作日志回退标志0-不可以1-可以
*/
private String rbflag;
/**
* ID路径
*/
private String idpath;
/**
* 摘要字段
*/
private String digest;
/**
* 密级字段 0-普通1-秘密2-机密
*/
private String slevel;
/**
* 所属应用系统
*/
private String appId;
/**
* 打开模式1-tab页打开2-浏览器tab页打开
*/
private String openmode;
}

View File

@@ -0,0 +1,47 @@
package com.insigma.sys.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 功能文档 DTO
*
* @author yinjh
*/
@Data
public class SysFunctionDocDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
private Long functionid;
/**
* 概述
*/
private String overview;
/**
* 详细说明
*/
private String detailed_view;
/**
* 更新时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date update_time;
/**
* 更新人
*/
private String update_name;
}

Some files were not shown because too many files have changed in this diff Show More