Commit 75761ba1 authored by 竹天卫's avatar 竹天卫

富平数据采集项目 后台代码 start。。。。。。。。。。。

parents
Pipeline #279 failed with stages
# Created by .ignore support plugin (hsz.mobi)
### Example user template template
### Example user template
# IntelliJ project files
.idea
.idea/*
*.iml
out
gen
/rebel.xml
/logs/*
/target
### Java template
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
/mybatis-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/mybatis-generator/target/maven-archiver/pom.properties
/cement-common/common-swagger/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/cement-common/common-swagger/target/maven-archiver/pom.properties
/cement-common/common-swagger/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
/cement-common/common-swagger/target/maven-archiver/pom.properties
/cement-common/common-swagger/target/
This diff is collapsed.
package cn.wise.sc.cement.business;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.client.RestTemplate;
import java.util.TimeZone;
/**
* 启动类
*
* @author zhutianwei
*/
@SpringBootApplication
@EnableScheduling
@MapperScan("cn.wise.sc.cement.business.mapper")
public class AcquisitionApplication {
public static void main(String[] args) {
// 系统默认的时区
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
SpringApplication.run(AcquisitionApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
package cn.wise.sc.cement.business.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
@Configuration
public class DateConfig {
/**
* 默认日期时间格式
*/
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 默认日期格式
*/
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
* 默认时间格式
*/
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
/**
* LocalDate转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public Converter<String, LocalDate> localDateConverter() {
return new Converter<String, LocalDate>() {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
}
};
}
/**
* LocalDateTime转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public Converter<String, LocalDateTime> localDateTimeConverter() {
return new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String source) {
return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT));
}
};
}
/**
* LocalTime转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public Converter<String, LocalTime> localTimeConverter() {
return new Converter<String, LocalTime>() {
@Override
public LocalTime convert(String source) {
return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
}
};
}
/**
* Date转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public Converter<String, Date> dateConverter() {
return new Converter<String, Date>() {
@Override
public Date convert(String source) {
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
try {
return format.parse(source);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
};
}
/**
* Json序列化和反序列化转换器,用于转换Post请求体中的json以及将我们的对象序列化为返回响应的json
*/
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
//ObjectMapper忽略多余字段
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//LocalDateTime系列序列化和反序列化模块,继承自jsr310,我们在这里修改了日期格式
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
//Date序列化和反序列化
javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
String formattedDate = formatter.format(date);
jsonGenerator.writeString(formattedDate);
}
});
javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
});
// 注册新的模块到objectMapper
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
/**
* @date :Created in 2019-03-21 10:21
* @description:用途:
*/
public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
private ObjectMapper objectMapper = new ObjectMapper();
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private Class<T> clazz;
static {
//解决fastJson autoType is not support错误
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
}
public FastJsonRedisSerializer(Class<T> clazz) {
super();
this.clazz = clazz;
}
@Override
public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
}
@Override
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
return JSON.parseObject(str, clazz);
}
public void setObjectMapper(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
protected JavaType getJavaType(Class<?> clazz) {
return TypeFactory.defaultInstance().constructType(clazz);
}
}
package cn.wise.sc.cement.business.config;
import cn.wise.sc.cement.business.exception.BusinessOldException;
import cn.wise.sc.cement.business.wrapper.WrapMapper;
import cn.wise.sc.cement.business.wrapper.Wrapper;
import org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.context.request.WebRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
@ControllerAdvice
@RestController
public class GlobalDefaultExceptionHandler extends AbstractErrorController {
@ExceptionHandler(value = RuntimeException.class)
@ResponseBody
public Wrapper defaultErrorHandler(HttpServletResponse response, BusinessOldException e) {
response.setStatus(e.getStatusCode().value());
return WrapMapper.error(e.getMessage());
}
public GlobalDefaultExceptionHandler(ErrorAttributes errorAttributes) {
super(errorAttributes);
}
private static final String ERROR_PATH = "/error";
@Override
public String getErrorPath() {
return ERROR_PATH;
}
@RequestMapping(value = ERROR_PATH)
public Wrapper error(HttpServletRequest request) {
WebRequest webRequest = new ServletWebRequest(request);
Throwable e = getError(webRequest);
if (e == null) {
Map<String, Object> attributes = getErrorAttributes(request, false);
Object timestamp = attributes.get("timestamp");
Object status = attributes.get("status");
String error = attributes.get("error").toString();
String message = attributes.get("message").toString();
Object path = attributes.get("path");
//todo 上线后更改为error
return WrapMapper.wrap(Integer.parseInt(status.toString()), message);
} else {
return WrapMapper.error(e.getMessage());
}
}
private Throwable getError(WebRequest webRequest) {
return (Throwable) this.getAttribute(webRequest, "javax.servlet.error.exception");
}
private Object getAttribute(RequestAttributes requestAttributes, String name) {
return requestAttributes.getAttribute(name, 0);
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
public class MapStringTypeHandler<T> extends BaseTypeHandler<Map<String, T>> {
private Class<T> clazz;
//private static final TypeReference<HashMap<String, String>> mapStrStrTypeRef = new TypeReference<HashMap<String, String>>(){};
private final TypeReference<HashMap<String, T>> typeRef = new TypeReference<HashMap<String, T>>() {
};
public MapStringTypeHandler(Class<T> clazz) {
this.clazz = clazz;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Map<String, T> parameter, JdbcType jdbcType) throws SQLException {
String json = JSON.toJSONString(parameter);
ps.setString(i, json);
}
@Override
public Map<String, T> getNullableResult(ResultSet rs, String columnName) throws SQLException {
return parseJson(rs.getString(columnName));
}
@Override
public Map<String, T> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return parseJson(rs.getString(columnIndex));
}
@Override
public Map<String, T> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return parseJson(cs.getString(columnIndex));
}
private Map<String, T> parseJson(String json) {
if (String.class == clazz || Integer.class == clazz || Boolean.class == clazz) {
return JSON.parseObject(json, typeRef);
}
Map<String, T> result = new HashMap<>();
JSON.parseObject(json).forEach((k, v) -> result.put(k, JSON.parseObject(JSON.toJSONString(v), clazz)));
return result;
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author miemie
* @since 2018-08-10
*/
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
// 开启 count 的 join 优化,只针对 left join !!!
return new PaginationInterceptor().setCountSqlParser(new JsqlParserCountOptimize(true));
}
}
package cn.wise.sc.cement.business.config;
import com.alibaba.fastjson.parser.ParserConfig;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.redisson.config.TransportMode;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
/**
* @description:用途: @EnableCaching 开启声明式缓存支持. 之后就可以使用 @Cacheable/@CachePut/@CacheEvict 注解缓存数据.
*/
@Configuration
@EnableCaching
public class RedisCacheConfig {
private RedisConnectionFactory redisConnectionFactory;
public RedisCacheConfig(RedisConnectionFactory redisConnectionFactory) {
this.redisConnectionFactory = redisConnectionFactory;
}
// @Bean
// public Jedis jedis() {
// JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// jedisPoolConfig.setMaxTotal(80);
// jedisPoolConfig.setMinIdle(20);
// jedisPoolConfig.setMaxIdle(80);
// JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
// return jedisPool.getResource();
// }
/**
* 覆盖默认的配置
*
* @return RedisTemplate
*/
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
// 设置value的序列化规则和key的序列化规则
template.setKeySerializer(stringRedisSerializer);
template.setValueSerializer(fastJsonRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(fastJsonRedisSerializer);
template.setDefaultSerializer(fastJsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
/**
* 解决注解方式存放到redis中的值是乱码的情况
*
* @param factory
* @return CacheManager
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
// 配置注解方式的序列化
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
RedisCacheConfiguration redisCacheConfiguration =
config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer))
//配置注解默认的过期时间
.entryTtl(Duration.ofDays(1));
// 加入白名单 https://github.com/alibaba/fastjson/wiki/enable_autotype
ParserConfig.getGlobalInstance().addAccept("cn.wise");
return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build();
}
// @Bean
// public RedissonClient redissonClient() {
// Config config = new Config();
// config.useSingleServer()
// .setAddress("redis://127.0.0.1:6379")
// .setConnectionMinimumIdleSize(10)
// .setConnectionPoolSize(50)
// .setPingConnectionInterval(60)
// .setIdleConnectionTimeout(6000)
// .setConnectTimeout(10000)
// .setTimeout(3000);
// return Redisson.create(config);
// }
}
package cn.wise.sc.cement.business.config;
import cn.wise.sc.cement.business.util.GlobalHolder;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 上下文初始化
* 以及跨域的支持
*/
public class RequestInterceptor extends HandlerInterceptorAdapter {
/**
* 拦截request和response并放到上下文中
*
* @param request 要拦截的request
* @param response 要拦截的response
* @param handler spring 机制传递过来的
* @return 不中断,继续执行,返回为true
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//request 和response存到 上下文中
GlobalHolder.setHttpResponse(response);
GlobalHolder.setHttpRequest(request);
return super.preHandle(request, response, handler);
}
/**
* 处理完成 从上下文中移除 request 和respseon
*
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
GlobalHolder.remove();
super.afterCompletion(request, response, handler, ex);
}
}
package cn.wise.sc.cement.business.config;
import cn.wise.sc.cement.business.filter.SwaggerInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.handler.MappedInterceptor;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@Configuration
@EnableSwagger2
public class Swagger2Configuration {
//api接口包扫描路径
public static final String SWAGGER_SCAN_BASE_PACKAGE = "cn.wise.sc.cement.business.controller";
public static final String VERSION = "1.0.0";
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2).groupName("swagger接口文档")
.apiInfo(new ApiInfoBuilder().title("swagger接口文档")
.contact(new Contact("Wisenergy", "http://www.wisenergy.cn/", "service@wisenergy.cn"))
.description("天津院项目")
.version(VERSION).build())
.select()
.apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
.paths(PathSelectors.any()).build()
.securitySchemes(newArrayList(apiKey()))
.securityContexts(newArrayList(securityContext()))
.enableUrlTemplating(false)
;
}
private ApiKey apiKey() {
return new ApiKey("BearerToken", "Authorization", "header");
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("/.*"))
.build();
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return newArrayList(new SecurityReference("BearerToken", authorizationScopes));
}
@Value("${swagger.basic.username}")
private String username;
@Value("${swagger.basic.password}")
private String password;
/* 必须在此处配置拦截器,要不然拦不到swagger的静态资源 */
@Bean
@ConditionalOnProperty(name = "swagger.basic.enable", havingValue = "true")
public MappedInterceptor getMappedInterceptor() {
return new MappedInterceptor(new String[]{"/swagger-ui.html", "/webjars/**"}, new SwaggerInterceptor(username, password));
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.config;
/**
* top地址相关配置
*
* @author openapi@dingtalk
* @date 2020/2/4
*/
public class UrlConstant {
private static final String HOST = "https://oapi.dingtalk.com";
/**
* 钉钉网关 gettoken 地址
*/
public static final String URL_GET_TOKEN = HOST + "/gettoken";
/**
* 获取 jsapi_ticket 地址
*/
public static final String URL_GET_JSTICKET = HOST + "/get_jsapi_ticket";
/**
* 获取用户在企业内 userId 的接口URL
*/
public static final String URL_GET_USER_INFO = HOST + "/user/getuserinfo";
/**
* 获取用户姓名的接口URL
*/
public static final String URL_USER_GET = HOST + "/user/get";
/**
* 获取部门列表接口URL
*/
public static final String URL_DEPARTMENT_LIST = HOST + "/department/list";
/**
* 获取部门用户接口URL
*/
public static final String URL_USER_SIMPLELIST = HOST + "/user/simplelist";
}
package cn.wise.sc.cement.business.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 加载自定义的 拦截器
*/
@Configuration
public class WebInterceptorConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/**");
}
}
package cn.wise.sc.cement.business.config;
import org.apache.catalina.session.StandardSessionFacade;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
@Configuration
public class WebSocketConfig extends ServerEndpointConfig.Configurator {
private static final Logger log = LoggerFactory.getLogger(WebSocketConfig.class);
/**
* 修改握手信息
*/
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
StandardSessionFacade ssf = (StandardSessionFacade) request.getHttpSession();
if (ssf != null) {
HttpSession httpSession = (HttpSession) request.getHttpSession();
//关键操作
sec.getUserProperties().put("sessionId", httpSession.getId());
log.info("获取到的SessionID:" + httpSession.getId());
}
super.modifyHandshake(sec, request, response);
}
/**
* WebSocket的支持 b
*
* @return
*/
@Bean
public ServerEndpointExporter serverEndpointExporter() {
//这个对象说一下,貌似只有服务器是tomcat的时候才需要配置,具体我没有研究
return new ServerEndpointExporter();
}
}
package cn.wise.sc.cement.business.config.lock;
import org.redisson.api.RLock;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
public interface DistributedLocker {
RLock lock(String lockKey);
RLock lock(String lockKey, int timeout);
RLock lock(String lockKey, TimeUnit unit, int timeout);
boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime);
void unlock(String lockKey);
void unlock(RLock lock);
<T> T executeLock(String key, Function<String, T> consumer, String t);
<T> void executeLock(String lockKey, Consumer<T> consumer, T t);
}
\ No newline at end of file
package cn.wise.sc.cement.business.config.lock;
import org.redisson.api.RLock;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
public class RedissLockUtil {
private static DistributedLocker redissLock;
public static void setLocker(DistributedLocker locker) {
redissLock = locker;
}
public static RLock lock(String lockKey) {
return redissLock.lock(lockKey);
}
public static <T> T readWriteLock(String lockKey, Function<String, T> function) {
return redissLock.executeLock(lockKey, function, null);
}
public static <T> void playersLock(String lockKey, Consumer<T> consumer, T t) {
redissLock.executeLock(lockKey, consumer, null);
}
public static void unlock(String lockKey) {
redissLock.unlock(lockKey);
}
public static void unlock(RLock lock) {
redissLock.unlock(lock);
}
public static RLock lock(String lockKey, int timeout) {
return redissLock.lock(lockKey, timeout);
}
public static RLock lock(String lockKey, TimeUnit unit, int timeout) {
return redissLock.lock(lockKey, unit, timeout);
}
public static boolean tryLock(String lockKey, int waitTime, int leaseTime) {
return redissLock.tryLock(lockKey, TimeUnit.SECONDS, waitTime, leaseTime);
}
public static boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime) {
return redissLock.tryLock(lockKey, unit, waitTime, leaseTime);
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.config.lock;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
@Slf4j
public class RedissonDistributedLocker implements DistributedLocker {
private RedissonClient redissonClient;
@Override
public RLock lock(String lockKey) {
RLock lock = redissonClient.getLock(lockKey);
lock.lock();
return lock;
}
@Override
public RLock lock(String lockKey, int leaseTime) {
RLock lock = redissonClient.getLock(lockKey);
lock.lock(leaseTime, TimeUnit.SECONDS);
return lock;
}
@Override
public RLock lock(String lockKey, TimeUnit unit, int timeout) {
RLock lock = redissonClient.getLock(lockKey);
lock.lock(timeout, unit);
return lock;
}
@Override
public boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime) {
RLock lock = redissonClient.getLock(lockKey);
try {
return lock.tryLock(waitTime, leaseTime, unit);
} catch (InterruptedException e) {
return false;
}
}
public static void realeaseLock(RLock fairLock) {
fairLock.unlock();
}
@Override
public void unlock(String lockKey) {
RLock lock = redissonClient.getLock(lockKey);
lock.unlock();
}
@Override
public void unlock(RLock lock) {
lock.unlock();
}
@Override
public <T> T executeLock(String key, Function<String, T> function, String t) {
RLock lock = redissonClient.getLock(key);
boolean locked = false;
try {
lock.lock();
return (T) function.apply(t);
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
return null;
}
@Override
public <T> void executeLock(String lockKey, Consumer<T> consumer, T t) {
RLock lock = redissonClient.getLock(lockKey);
boolean locked = false;
try {
while (true) {
locked = lock.tryLock();
if (locked) break;
}
if (locked) {
consumer.accept(t);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (locked) {
lock.unlock();
}
}
}
public void setRedissonClient(RedissonClient redissonClient) {
this.redissonClient = redissonClient;
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.controller;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.service.ISysLogsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-08-24
*/
@Api(tags = "系统管理-日志管理")
@RestController
@RequestMapping("/business/sys-logs")
public class SysLogsController {
private static final Logger log = LoggerFactory.getLogger("SysLogsController");
@Autowired
private ISysLogsService logsService;
@ApiOperation(value = "日志分页列表")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "startDate", value = "开始日期", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "endDate", value = "结束日期", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "objType", value = "日志类型(0系统日志, 1委托管理)", paramType = "query", dataType = "Integer"),
@ApiImplicitParam(name = "objId", value = "对象表id", paramType = "query", dataType = "Integer")
})
@GetMapping("/getPage")
public BaseResponse getPage(PageQuery pageQuery, String startDate, String endDate, Integer objType, Integer objId) {
try {
return logsService.getPage(pageQuery, startDate, endDate, objType, objId);
} catch (Exception e) {
log.debug("日志分页列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
}
package cn.wise.sc.cement.business.controller;
import cn.wise.sc.cement.business.entity.SysPermission;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.service.ISysPermissionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-08-20
*/
@Api(tags = "系统管理-权限管理")
@RestController
@RequestMapping("/business/sys-permission")
public class SysPermissionController {
private static final Logger log = LoggerFactory.getLogger("SysPermissionController");
@Autowired
private ISysPermissionService permissionService;
@ApiOperation(value = "当前登录用户拥有的权限")
@GetMapping("/current")
public BaseResponse permissionsCurrent() {
try {
return permissionService.current();
} catch (Exception e) {
log.debug("当前登录用户拥有的权限{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "菜单列表")
@GetMapping("/permissionsList")
public BaseResponse permissionsList() {
try {
return permissionService.permissionsList();
} catch (Exception e) {
log.debug("菜单列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "一级菜单")
@GetMapping("/parents")
public BaseResponse parentMenu() {
try {
return permissionService.parents();
} catch (Exception e) {
log.debug("一级菜单{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "菜单树")
@GetMapping("/tree")
public BaseResponse tree() {
try {
return permissionService.tree();
} catch (Exception e) {
log.debug("菜单树{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "根据角色id获取权限")
@GetMapping("/listByRoleId")
public BaseResponse listByRoleId(Integer roleId) {
try {
return permissionService.listByRoleId(roleId);
} catch (Exception e) {
log.debug("根据角色id获取权限{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "保存菜单")
@PostMapping("/create")
public BaseResponse create(@RequestBody SysPermission permission) {
try {
return permissionService.create(permission);
} catch (Exception e) {
log.debug("保存菜单{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "修改菜单")
@PostMapping("/update")
public BaseResponse update(@RequestBody SysPermission permission) {
try {
return permissionService.update(permission);
} catch (Exception e) {
log.debug("修改菜单{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@GetMapping("/{id}")
@ApiOperation(value = "菜单详情")
public BaseResponse get(@PathVariable Integer id) {
try {
SysPermission permission = permissionService.getById(id);
return BaseResponse.okData(permission);
} catch (Exception e) {
log.debug("根据菜单id获取菜单{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@PostMapping("/delete/{id}")
@ApiOperation(value = "删除菜单")
@Transactional
public BaseResponse delete(@PathVariable Integer id) {
try {
permissionService.removeById(id);
return BaseResponse.okMsg("成功");
} catch (Exception e) {
log.debug("删除菜单{}", e);
}
return BaseResponse.errorMsg("失败!");
}
}
package cn.wise.sc.cement.business.controller;
import cn.wise.sc.cement.business.entity.SysPost;
import cn.wise.sc.cement.business.entity.SysUser;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.query.PostQuery;
import cn.wise.sc.cement.business.service.ISysPostService;
import cn.wise.sc.cement.business.service.ISysUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-08-25
*/
@Api(tags = "系统管理-职务管理")
@RestController
@RequestMapping("/business/sys-post")
public class SysPostController {
private static final Logger log = LoggerFactory.getLogger("SysPostController");
@Autowired
private ISysPostService postService;
@Autowired
private ISysUserService userService;
@ApiOperation(value = "职务分页列表")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "name", value = "职务名称", paramType = "query", dataType = "String")
})
@GetMapping("/getPage")
public BaseResponse getPage(PageQuery pageQuery, String name) {
try {
return postService.getPage(pageQuery, name);
} catch (Exception e) {
log.debug("职务分页列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "新增职务")
@PostMapping("/create")
public BaseResponse create(@RequestBody PostQuery query) {
try {
return postService.create(query);
} catch (Exception e) {
log.debug("新增职务{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "修改职务")
@PostMapping("/update")
public BaseResponse update(@RequestBody PostQuery query) {
try {
return postService.update(query);
} catch (Exception e) {
log.debug("修改职务{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "职务详情")
@GetMapping("/{id}")
public BaseResponse getById(@PathVariable Integer id) {
try {
SysPost post = postService.getById(id);
if (post == null) {
return BaseResponse.errorMsg("信息错误!");
}
return BaseResponse.okData(post);
} catch (Exception e) {
log.debug("职务详情{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "职务列表")
@GetMapping("/getList")
public BaseResponse getList() {
try {
List<SysPost> list = postService.list();
return BaseResponse.okData(list);
} catch (Exception e) {
log.debug("职务列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "删除职务")
@PostMapping("/delete/{id}")
public BaseResponse delete(@PathVariable Integer id) {
try {
if(id == 1 || id == 2){
return BaseResponse.errorMsg("职务不允许删除!");
}
QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
sysUserQueryWrapper.eq("post_id", id);
Integer conunts = userService.count(sysUserQueryWrapper);
if (conunts != 0 && conunts > 0) {
return BaseResponse.errorMsg(conunts + "个用户正在使用!");
}
postService.removeById(id);
return BaseResponse.okData("删除成功");
} catch (Exception e) {
log.debug("删除职务{}", e);
}
return BaseResponse.errorMsg("失败!");
}
}
package cn.wise.sc.cement.business.controller;
import cn.wise.sc.cement.business.entity.SysRole;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.query.RoleQuery;
import cn.wise.sc.cement.business.service.ISysRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-08-20
*/
@Api(tags = "系统管理-角色管理")
@RestController
@RequestMapping("/business/sys-role")
public class SysRoleController {
private static final Logger log = LoggerFactory.getLogger("SysRoleController");
@Autowired
private ISysRoleService roleService;
@ApiOperation(value = "角色分页列表")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "name", value = "角色名称", paramType = "query", dataType = "String")
})
@GetMapping("/getPage")
public BaseResponse getPage(PageQuery pageQuery, String name) {
try {
return roleService.getPage(pageQuery, name);
} catch (Exception e) {
log.debug("角色分页列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "新增角色")
@PostMapping("/create")
public BaseResponse create(@RequestBody RoleQuery query) {
try {
return roleService.create(query);
} catch (Exception e) {
log.debug("新增角色{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "修改角色")
@PostMapping("/update")
public BaseResponse update(@RequestBody RoleQuery query) {
try {
return roleService.update(query);
} catch (Exception e) {
log.debug("修改角色{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "角色详情")
@GetMapping("/{id}")
public BaseResponse getById(@PathVariable Integer id) {
try {
SysRole role = roleService.getById(id);
if (role == null) {
return BaseResponse.errorMsg("信息错误!");
}
return BaseResponse.okData(role);
} catch (Exception e) {
log.debug("角色详情{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "所有角色")
@GetMapping("/getAll")
public BaseResponse getAll() {
try {
List<SysRole> list = roleService.list();
return BaseResponse.okData(list);
} catch (Exception e) {
log.debug("所有角色{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "根据用户id获取拥有的角色")
@GetMapping("/byUserId")
public BaseResponse byUserId(Integer userId) {
try {
return roleService.byUserId(userId);
} catch (Exception e) {
log.debug("根据用户id获取拥有的角色{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "删除角色")
@PostMapping("/delete/{id}")
public BaseResponse delete(@PathVariable Integer id) {
try {
return roleService.delete(id);
} catch (Exception e) {
log.debug("删除角色{}", e);
}
return BaseResponse.errorMsg("失败!");
}
}
package cn.wise.sc.cement.business.controller;
import cn.wise.sc.cement.business.entity.SysUser;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.LoginUser;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.query.SysUserEnclosureQuery;
import cn.wise.sc.cement.business.model.query.UserQuery;
import cn.wise.sc.cement.business.service.ISysUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-08-14
*/
@Api(tags = "系统管理-人员管理")
@RestController
@RequestMapping("/tcdri/sys-user")
public class SysUserController {
private static final Logger log = LoggerFactory.getLogger("SysUserController");
@Autowired
private ISysUserService userService;
@ApiOperation(value = "人员分页列表")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "status", value = "状态0:禁用 1:启用", paramType = "query", dataType = "Integer"),
@ApiImplicitParam(name = "groupId", value = "工作组id", paramType = "query", dataType = "Integer"),
@ApiImplicitParam(name = "name", value = "姓名", paramType = "query", dataType = "String")
})
@GetMapping("/getPage")
public BaseResponse getPage(PageQuery pageQuery, Integer status, Integer groupId, String name) {
try {
return userService.getPage(pageQuery, status, groupId, name);
} catch (Exception e) {
log.debug("人员分页列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "新增人员")
@PostMapping("/create")
public BaseResponse create(@RequestBody UserQuery query) {
try {
return userService.create(query);
} catch (Exception e) {
log.debug("新增人员{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "更新人员")
@PostMapping("/update")
public BaseResponse update(@RequestBody UserQuery query) {
try {
return userService.update(query);
} catch (Exception e) {
log.debug("更新人员{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "启用禁用")
@PostMapping("/status")
public BaseResponse status(Integer status, Integer id) {
try {
return userService.status(status, id);
} catch (Exception e) {
log.debug("启用禁用{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "人员详情")
@GetMapping("/{id}")
public BaseResponse getById(@PathVariable Integer id) {
try {
return userService.findById(id);
} catch (Exception e) {
log.debug("人员详情{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "人员列表")
@GetMapping("/getList")
public BaseResponse getList() {
try {
LoginUser loginUser = userService.getLoginUser();
QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
if(loginUser != null && loginUser.getGroupId() != null){
queryWrapper.eq("group_id", loginUser.getGroupId());
}
List<SysUser> list = userService.list(queryWrapper);
return BaseResponse.okData(list);
} catch (Exception e) {
log.debug("人员列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "上传附件")
@PostMapping("/uploadPeoplePF")
public BaseResponse uploadPeoplePF(@RequestBody SysUserEnclosureQuery query){
try {
return userService.uploadPeoplePF(query);
}catch (Exception e){
log.debug("上传附件{}",e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "附件分页列表")
@GetMapping("/getUserEnclosurePage")
public BaseResponse getUserEnclosurePage(PageQuery pageQuery, Integer userId) {
try {
return userService.getUserEnclosurePage(pageQuery, userId);
} catch (Exception e) {
log.debug("附件分页列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "删除人员附件")
@PostMapping("/deleteUserEnclosure")
public BaseResponse deleteUserEnclosure(Integer id) {
try {
return userService.deleteUserEnclosure(id);
} catch (Exception e) {
log.debug("删除人员附件{}", e);
}
return BaseResponse.errorMsg("失败!");
}
// @ApiOperation("人员详情导出列表")
// @PostMapping("/exportList")
// public void exportList(Integer status,String filename,String name, HttpServletResponse response) {
// try {
// userService.exportList(status, filename,name, response);
// } catch (Exception e) {
// log.debug("人员详情导出列表{}", e);
// }
// }
}
package cn.wise.sc.cement.business.controller;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.service.ISysUserMessageService;
import cn.wise.sc.cement.business.wrapper.WrapMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-10-13
*/
@Api(tags = "企业微信移动端-消息管理")
@RestController
@RequestMapping("/business/sys-user-message")
public class SysUserMessageController {
private static final Logger log = LoggerFactory.getLogger("SysUserMessageController");
@Autowired
private ISysUserMessageService userMessageService;
@ApiOperation(value = "消息通知列表")
@GetMapping("/getMessages")
public BaseResponse getMessages() {
try {
return userMessageService.getMessages();
} catch (Exception e) {
log.debug("消息通知列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
}
package cn.wise.sc.cement.business.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.service.impl.WeiXinService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Api(tags = "登录接口")
@RestController
@RequestMapping("/tcdri/weixin")
public class WeiXinController {
//
private static final Logger log = LoggerFactory.getLogger("WeiXinController");
@Autowired
private WeiXinService weiXinService;
@Value("${spring.profiles.active}")
private String active;
@ApiOperation(value = "获取登录token-小程序端")
@GetMapping("/getToken")
public BaseResponse getToken(String code) {
log.debug("============================================");
log.debug("code: {}", code);
log.debug("=============================================");
try {
if(active.equals("dev")){
//测试服务器
return weiXinService.getTestToken(code);
}else{
//正式服务器
// return weiXinService.getToken(code, "APP");
}
} catch (Exception e) {
log.debug("获取登录token{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "获取登录token-管理端")
@GetMapping("/getPCToken")
public BaseResponse getPCToken(String code) {
try {
if(active.equals("dev")){
//测试服务器
return weiXinService.getTestToken(code);
}else{
//正式服务器
// return weiXinService.getToken(code, "PC");
}
} catch (Exception e) {
log.debug("获取登录token{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation(value = "当前登录用户")
@GetMapping("/getLoginUser")
public BaseResponse getLoginUser() {
try {
return weiXinService.getLoginUser();
} catch (Exception e) {
log.debug("当前登录用户{}", e);
}
return BaseResponse.errorMsg("失败!");
}
/**
* 将字节数组转换为十六进制字符串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 将字节转换为十六进制字符串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-09-02
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class EntityEnclosure implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("实体id")
private Integer entityId;
/**
* 实体类型(0:用户(头像),
* 3设备校核附件,4标样材料)
*/
@ApiModelProperty("实体类型")
private Integer entityType;
@ApiModelProperty("附件地址")
private String enclosureUrl;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
@ApiModelProperty("是否删除(0:已经删除,1:未删除)")
private Integer isDeleted;
@ApiModelProperty("文件名")
private String alias;
@ApiModelProperty("扩展名")
private String extName;
@ApiModelProperty("pdf路径")
private String pdfUrl;
public interface EntityType {
int HEAD = 0;
int EQUIPMENT_TEST = 3;
int STANDARD_SAMPLE = 4;
int ENTRUST_REPORT = 5;
}
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-08-24
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysLogs implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("操作用户")
private Integer userId;
@ApiModelProperty("日志类型(1委托详情)")
private Integer objType;
@ApiModelProperty("对象表id(委托表id)")
private Integer objId;
@ApiModelProperty("操作内容")
private String module;
@ApiModelProperty("操作状态1成功,0失败")
private Integer flag;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("备注")
private String remark;
public interface ObjType {
int SYSTEM_LOG = 0;
int ENTRUST_LOG = 1;
}
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-08-20
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysPermission implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("上级ID(如果是一级为0)")
private Integer parentId;
@ApiModelProperty("名字")
private String name;
@ApiModelProperty("菜单图标")
private String css;
@ApiModelProperty("链接")
private String href;
@ApiModelProperty("1菜单权限,2按钮权限")
private Integer type;
@ApiModelProperty("接口权限")
private String permission;
@ApiModelProperty("排序")
private Integer sort;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("子元素")
@TableField(exist = false)
private List<SysPermission> child;
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-08-25
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysPost implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("职务名称")
private String name;
@ApiModelProperty("审批级别")
private Integer level;
@ApiModelProperty("状态(0禁用,1启用)")
private Integer status;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("备注")
private String remark;
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-08-20
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysRole implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("角色名称")
private String name;
@ApiModelProperty("(0禁用,1启用)")
private Integer status;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("备注")
private String remark;
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-08-14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("用户账号")
private String username;
@ApiModelProperty("真实姓名")
private String name;
@ApiModelProperty("性别0女1男")
private Integer sex;
@ApiModelProperty("部门id")
private Integer groupId;
@ApiModelProperty("职务id")
private Integer postId;
@ApiModelProperty("微信号")
private String wxId;
@ApiModelProperty("职称")
private String qualifications;
@ApiModelProperty("状态(0禁用,1启用")
private Integer status;
@ApiModelProperty("工作年限")
private Double workYear;
@ApiModelProperty("手机号")
private String phone;
@ApiModelProperty("传真")
private String fax;
@ApiModelProperty("专业")
private String major;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("从事本技术领域日期")
private LocalDate technologyDate;
@ApiModelProperty("从事本技术领域年限")
private Double technologyYear;
@ApiModelProperty("文化程度")
private String education;
@ApiModelProperty("(0删除,1正常)")
private Integer isDelete;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("修改时间")
private LocalDateTime updateTime;
@ApiModelProperty("备注")
private String remark;
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(value = "sys_user_enclosure")
public class SysUserEnclosure implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private static final long serialVersionUID = 42L;
private Integer userId;
@ApiModelProperty("附件地址")
private String enclosureUrl;
@ApiModelProperty("状态(0未上传,1成功,2上传失败)")
private Integer FlStatus;
@ApiModelProperty("文件名")
private String alias;
@ApiModelProperty("扩展名")
private String extName;
@ApiModelProperty("上传时间")
private LocalDateTime uploadTime;
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-10-13
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysUserMessage implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 接收人id
*/
private Integer userId;
/**
* 接收信息
*/
private String message;
/**
* 相关内容(委托表id)
*/
private Integer appId;
/**
* 是否查看(0:否,1:是)
*/
private Integer isCheck;
/**
* 消息类型(1委托管理)
*/
private Integer messageType;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 是否处理(0:未处理,1:已处理)
*/
private Integer isDeal;
public interface MessageType {
int ENTRUST = 1; //委托
int EQUIPMENT = 2; //设备检定
}
}
package cn.wise.sc.cement.business.enumation;
import com.alibaba.fastjson.annotation.JSONType;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description: 文件扩展名
* @author: qh
* @create: 2020-10-16 13:40
**/
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@JSONType(serializeEnumAsJavaBean = true)
@Getter
@AllArgsConstructor
public enum FileExt {
//office后缀名
DOC(".doc"),
DOCX(".docx"),
EXCL(".xls"),
PDF("pdf"),
EXCLX(".xlsx");
@EnumValue
private String name;
}
package cn.wise.sc.cement.business.enumation;
import com.alibaba.fastjson.annotation.JSONType;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author neo.shu
* @since 2020/4/22 17:40
*/
@JSONType(serializeEnumAsJavaBean = true)
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@AllArgsConstructor
@Getter
public enum ProjectRole {
PM("PM", "项目经理", true),
PD("PD", "产品设计", false),
UD("UD", "UI设计", false),
FD("FD", "前端开发", false),
BD("BD", "后端开发", false),
TD("TD", "测试经理", false),
QA("QA", "质量管理", true),
;
@EnumValue
private String dbName;
private String label;
private boolean isManage;
public int getValue() {
return this.ordinal();
}
}
package cn.wise.sc.cement.business.exception;
import cn.hutool.core.util.StrUtil;
import java.util.Collection;
/**
* @description: 断言接口 公共断言方法放这里
* @author: qh
* @create: 2020-05-15 15:32
**/
public interface Assert {
/**
* 创建异常
*
* @param args
* @return
*/
BaseException newException(Object... args);
/**
* 创建异常
*
* @param t
* @param args
* @return
*/
BaseException newException(Throwable t, Object... args);
/**
* 断言对象 obj 非空。如果对象 obj 为空,则抛出异常
*
* @param obj 待判断对象
*/
default void assertNotNull(Object obj) {
if (obj == null) {
throw newException(obj);
}
}
default void assertNotEmpty(String str) {
if (StrUtil.isEmpty(str)) {
throw newException(str);
}
}
/**
* 断言对象obj非空。如果对象为空,则抛出异常
* 异常信息message支持传递参数方式,避免在判断之前进行字符串拼接操作
*
* @param obj 待判断对象
* @param args message占位符对应的参数列表
*/
default void assertNotNull(Object obj, Object... args) {
if (obj == null) {
throw newException(args);
}
}
/**
* 断言是个异常 直接抛出这个异常
*
* @param e
*/
default void assertIsException(Throwable e) {
if (e != null) {
throw newException(e, null);
}
}
/**
* 断言 字符串参数不能为空
*
* @param params 字符串参数
*/
default void assertNotEmpty(String... params) {
for (String str : params) {
if (StrUtil.isEmpty(str)) {
throw newException(params);
}
}
}
/**
* 断言 集合不为空和长度不为0
*
* @param list
*/
default void assertCollectionNotILLEGAL(Collection list) {
if (list == null || list.size() == 0) {
throw newException(list);
}
}
/**
* 断言数值参数 不为0和空
*
* @param obj 待判断的参数
*/
default void assertNotDefaultOrNull(Object obj) {
double tmp;
try {
tmp = (double) obj;
} catch (ClassCastException e) {
throw newException(obj);
}
if ((obj == null) || (tmp == 0D)) {
throw newException(obj);
}
}
}
package cn.wise.sc.cement.business.exception;
/**
* @description: 基础异常
* @author: qh
* @create: 2020-05-15 15:27
**/
public class BaseException extends RuntimeException {
protected static final long serialVersionUID = 1L;
private int code;
private String message;
private Object[] args;
public BaseException(IResponseEnum responseEnum, Object[] args, String message) {
super(responseEnum.getMessage());
this.code = responseEnum.getCode();
this.message = message;
this.args = args;
}
public BaseException(IResponseEnum responseEnum, Object[] args, String message, Throwable cause) {
super(message, cause);
this.code = responseEnum.getCode();
this.message = message;
this.args = args;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package cn.wise.sc.cement.business.exception;
/**
* @description: 业务方面的异常
* @author: qh
* @create: 2020-05-15 15:28
**/
public class BusinessException extends BaseException {
private static final long serialVersionUID = 1L;
public BusinessException(IResponseEnum responseEnum, Object[] args, String message) {
super(responseEnum, args, message);
}
public BusinessException(IResponseEnum responseEnum, Object[] args, String message, Throwable cause) {
super(responseEnum, args, message, cause);
}
}
package cn.wise.sc.cement.business.exception;
import java.text.MessageFormat;
import java.util.Date;
/**
* @description: 业务异常与断言结合的接口 适配器
* @author: qh
* @create: 2020-05-15 15:36
**/
public interface BusinessExceptionAssert extends IResponseEnum, Assert {
@Override
default BaseException newException(Object... args) {
String msg = MessageFormat.format(this.getMessage(), args);
return new BusinessException(this, args, msg);
}
@Override
default BaseException newException(Throwable t, Object... args) {
String msg = MessageFormat.format(this.getMessage(), args);
return new BusinessException(this, args, msg, t);
}
/**
* 断言对象 时间段合法
*
* @param start 开始时间
* @param end 结束时间
*/
default void assertTimeVail(Long start, Long end) {
if (end == null || start == null) {
throw newException(start, end);
}
if (end == 0 && start == 0) {
throw newException(start, end);
}
if (start > end) {
throw newException(start, end);
}
if (start < 0 || end < 0) {
throw newException(start, end);
}
}
/**
* 断言对象 时间段合法
*
* @param startDate 开始时间
* @param endDate 结束时间
*/
default void assertTimeVail(Date startDate, Date endDate) {
Long start = startDate.getTime();
Long end = endDate.getTime();
assertTimeVail(start, end);
}
}
package cn.wise.sc.cement.business.exception;
import lombok.Getter;
/**
* @description: 最终业务异常实现
* @author: qh
* @create: 2020-05-15 15:37
*/
@Getter
public enum BusinessExceptionEnum implements BusinessExceptionAssert {
/**
* Bad licence type
*/
BAD_LICENCE_TYPE(7001, "字段不能为空!"),
/**
* Licence not found
*/
LICENCE_NOT_FOUND(7002, "Licence not found."),
/**
* 成功
*/
SUCCESS(200, "Success."),
BAD_TIME(400, "时间段无效! 开始时间>结束时间&&不能为NUll"),
COLLECTION_NOT_ILLEGAL(400, "参数集合无效!"),
CACHE_NOT_FOUND(7002, "缓存未找到!"),
OPEN_TS_DB_CONNECTION_ERROR(7003, "请求OpenTSDB失败"),
/**
* 业务异常
*/
BUSINESS_ERROR(400, "Business not pass."),
/**
* 用户未登录
*/
NO_LOGIN(401, "Please login.");
BusinessExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
/**
* 返回码
*/
private int code;
/**
* 返回消息
*/
private String message;
}
package cn.wise.sc.cement.business.exception;
import org.springframework.http.HttpStatus;
/**
* @author shulidong
* @since 2019/2/19/0019 16:48
**/
public abstract class BusinessOldException extends RuntimeException {
protected HttpStatus statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
private String errorCode;
public HttpStatus getStatusCode() {
return statusCode;
}
public void setStatusCode(HttpStatus statusCode) {
this.statusCode = statusCode;
}
public BusinessOldException(String errorCode, String message) {
super(message);
this.errorCode = errorCode;
}
public BusinessOldException(String message, Throwable e) {
super(message, e);
}
public BusinessOldException(String message) {
super(message);
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
}
package cn.wise.sc.cement.business.exception;
/**
* @description: 代码错误
* @author: qh
* @create: 2020-07-09 16:07
**/
public class CodeException extends BaseException {
private static final long serialVersionUID = 1L;
public CodeException(IResponseEnum responseEnum, Object[] args, String message) {
super(responseEnum, args, message);
}
public CodeException(IResponseEnum responseEnum, Object[] args, String message, Throwable cause) {
super(responseEnum, args, message, cause);
}
}
package cn.wise.sc.cement.business.exception;
import java.text.MessageFormat;
/**
* @description: 代码逻辑错误断言接口
* @author: qh
* @create: 2020-07-09 16:05
**/
public interface CodeExceptionAssert extends Assert, IResponseEnum {
@Override
default BaseException newException(Object... args) {
String msg = MessageFormat.format(this.getMessage(), args);
return new BusinessException(this, args, msg);
}
@Override
default BaseException newException(Throwable t, Object... args) {
String msg = MessageFormat.format(this.getMessage(), args);
return new BusinessException(this, args, msg, t);
}
}
package cn.wise.sc.cement.business.exception;
import lombok.Getter;
/**
* @description: 代码逻辑错误枚举
* @author: qh
* @create: 2020-07-09 16:09
**/
@Getter
public enum CodeExceptionEnum implements CodeExceptionAssert {
OBJECT_NOT_EMPTY(6001, "{0} is NULL!"),
STRING_NOT_EMPTY(6001, "{0} is Empty!");
CodeExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
/**
* 返回码
*/
private int code;
/**
* 返回消息
*/
private String message;
}
package cn.wise.sc.cement.business.exception;
/**
* 封装fastdfs的异常,使用运行时异常
*
* @author yuqih
* @author tobato
*/
public abstract class FdfsException extends RuntimeException {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
protected FdfsException(String message) {
super(message);
}
/**
* @param message
* @param cause
*/
protected FdfsException(String message, Throwable cause) {
super(message, cause);
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.exception;
/**
* 从Url解析StorePath文件路径对象错误
*
* @author wuyf
*/
public class FdfsUnsupportStorePathException extends FdfsException {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 8116336411011152869L;
public FdfsUnsupportStorePathException(String message) {
super(message);
}
}
\ No newline at end of file
package cn.wise.sc.cement.business.exception;
/**
* @description: 公共属性接口 提供公共属性
* @author: qh
* @create: 2020-05-15 15:28
**/
public interface IResponseEnum {
int getCode();
String getMessage();
}
package cn.wise.sc.cement.business.exception;
/**
* redis 操作异常
*/
public class RedisHandleException extends RuntimeException {
public RedisHandleException(String msg) {
super(msg);
}
public RedisHandleException(String message, Throwable throwable) {
super(message, throwable);
}
public RedisHandleException(Throwable throwable) {
super(throwable);
}
}
package cn.wise.sc.cement.business.filter;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import sun.misc.BASE64Decoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class SwaggerInterceptor extends HandlerInterceptorAdapter {
private String username;
private String password;
public SwaggerInterceptor(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String authorization = request.getHeader("Authorization");
boolean isAuthSuccess = httpBasicAuth(authorization);
if (!isAuthSuccess) {
response.setCharacterEncoding("utf-8");
response.setStatus(401);
// response.setStatus(401,"Unauthorized");
response.setHeader("WWW-authenticate", "Basic realm=\"Realm\"");
try (PrintWriter writer = response.getWriter()) {
writer.print("Forbidden, unauthorized user");
}
}
return isAuthSuccess;
}
public boolean httpBasicAuth(String authorization) throws IOException {
if (authorization != null && authorization.split(" ").length == 2) {
String userAndPass = new String(new BASE64Decoder().decodeBuffer(authorization.split(" ")[1]));
String username = userAndPass.split(":").length == 2 ? userAndPass.split(":")[0] : null;
String password = userAndPass.split(":").length == 2 ? userAndPass.split(":")[1] : null;
if (this.username.equals(username) && this.password.equals(password)) {
return true;
}
}
return false;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
String uri = request.getRequestURI();
AntPathMatcher pathMatcher = new AntPathMatcher();
if (!pathMatcher.match("/swagger-ui.html", uri) && !pathMatcher.match("/webjars/**", uri)) {
response.setStatus(404);
return;
}
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath:/META-INF/resources" + uri);
if (resources != null && resources.length > 0) {
FileCopyUtils.copy(resources[0].getInputStream(), response.getOutputStream());
} else {
response.setStatus(404);
}
}
}
package cn.wise.sc.cement.business.filter;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.wise.sc.cement.business.exception.BusinessException;
import cn.wise.sc.cement.business.util.JwtUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
/**
* Token过滤器
*
* @author zhutianwei
*/
@Component
public class TokenFilter extends OncePerRequestFilter {
private static final Logger log = LoggerFactory.getLogger("TokenFilter");
public static final String TOKEN_KEY = "Authorization";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String token = getToken(request);
if (StringUtils.isNotBlank(token)) {
Map map = null;
try {
map = JwtUtil.parserToken(token);
//过期时间
Long gqTime = Long.valueOf(map.get("timeStamp").toString()) + 60 * 60 * 1000;
long nowTime = (new Date()).getTime();
if (nowTime > gqTime) {
log.error("token过期");
}
} catch (Exception e) {
e.printStackTrace();
}
}
filterChain.doFilter(request, response);
}
/**
* 根据参数或者header获取token
*
* @param request
* @return
*/
public static String getToken(HttpServletRequest request) {
String token = request.getParameter(TOKEN_KEY);
if (StringUtils.isBlank(token)) {
token = request.getHeader(TOKEN_KEY);
}
return token;
}
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.EntityEnclosure;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-09-02
*/
public interface EntityEnclosureMapper extends BaseMapper<EntityEnclosure> {
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysLogs;
import cn.wise.sc.cement.business.model.vo.LogVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-08-24
*/
public interface SysLogsMapper extends BaseMapper<SysLogs> {
IPage<LogVo> getPage(@Param("page") Page page, @Param("params") Map<String, Object> params);
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysPermission;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
import java.util.Set;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-08-20
*/
public interface SysPermissionMapper extends BaseMapper<SysPermission> {
@Select("select distinct sp.* from sys_permission sp " +
"inner join sys_role_permission rp on sp.id = rp.permission_id " +
"inner join sys_role_user ru on ru.role_id = rp.role_id " +
"where ru.user_id = #{userId} order by sp.parent_id,sp.sort")
List<SysPermission> listByUserId(Integer userId);
@Select("select p.* from sys_permission p inner join sys_role_permission rp on p.id = rp.permission_id where rp.role_id = #{roleId} order by p.parent_id, p.sort")
List<SysPermission> listByRoleId(Integer roleId);
@Select("select * from sys_permission t where t.id = #{id}")
SysPermission getById(Integer id);
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysPost;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-08-25
*/
public interface SysPostMapper extends BaseMapper<SysPost> {
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-08-20
*/
public interface SysRoleMapper extends BaseMapper<SysRole> {
int saveRolePermission(@Param("roleId") Integer roleId, @Param("permissionIds") List<Integer> permissionIds);
@Delete("delete from sys_role_permission where role_id = #{roleId}")
int deleteRolePermission(Integer roleId);
@Select("select * from sys_role r inner join sys_role_user ru on r.id = ru.role_id where ru.user_id = #{userId}")
SysRole byUserId(Integer userId);
@Select("select count(*) from sys_role_user t where t.role_id = #{id}")
Integer getUserByRoleId(@Param("id") Integer id);
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysUserEnclosure;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wlb
* @since 2020-11-9
*/
public interface SysUserEnclosureMapper extends BaseMapper<SysUserEnclosure> {
IPage<SysUserEnclosure> getPage(@Param("page") Page page, @Param("params") Map<String, Object> params);
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysUser;
import cn.wise.sc.cement.business.model.vo.UserVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-08-14
*/
public interface SysUserMapper extends BaseMapper<SysUser> {
IPage<UserVo> getPage(@Param("page") Page page, @Param("params") Map<String, Object> params);
UserVo getById(Integer id);
// List<Map<String,Object>> exportList(@Param("params") Map<String,Object> params);
@Delete("delete from sys_role_user where user_id = #{userId}")
int deleteUserRole(Integer userId);
int saveUserRoles(@Param("userId") Integer userId, @Param("roleId") Integer roleId);
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysUserMessage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-10-13
*/
public interface SysUserMessageMapper extends BaseMapper<SysUserMessage> {
List<SysUserMessage> getNoCheck(@Param(value = "userId") Integer userId,
@Param(value = "appId") Integer appId,
@Param(value = "messageType") Integer messageType);
List<SysUserMessage> getNoDeal(@Param(value = "userId") Integer userId,
@Param(value = "appId") Integer appId,
@Param(value = "messageType") Integer messageType);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.EntityEnclosureMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysLogsMapper">
<sql id="where">
<where>
<if test="params.startDate != null and params.startDate != ''">
and DATE(t.create_time) &gt;= #{params.startDate}
</if>
<if test="params.endDate != null and params.endDate != ''">
and DATE(t.create_time) &lt;= #{params.endDate}
</if>
<if test="params.objType != null">
and t.obj_type = #{params.objType}
</if>
<if test="params.objId != null">
and t.obj_id = #{params.objId}
</if>
</where>
</sql>
<select id="getPage" resultType="cn.wise.sc.cement.business.model.vo.LogVo">
select t.*,su.name as userName
from sys_logs t
left join sys_user su on su.id = t.user_id
<include refid="where"/>
order by t.create_time desc
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysPermissionMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysPostMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysRoleMapper">
<insert id="saveRolePermission">
insert into sys_role_permission(role_id, permission_id) values
<foreach collection="permissionIds" item="permissionId"
separator=",">
(#{roleId}, #{permissionId})
</foreach>
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysUserEnclosureMapper">
<select id="getPage" resultType="cn.wise.sc.cement.business.entity.SysUserEnclosure">
select sue.*
from sys_user_enclosure sue
<if test="params.userId != null">
where sue.user_id = #{params.userId}
</if>
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysUserMapper">
<sql id="where">
<where>
<if test="params.status != null ">
and su.status = #{params.status}
</if>
<if test="params.groupId != null">
and su.group_id = #{params.groupId}
</if>
<if test="params.name != null and params.name != ''">
and su.name like concat('%', #{params.name}, '%')
</if>
</where>
</sql>
<select id="getPage" resultType="cn.wise.sc.cement.business.model.vo.UserVo">
SELECT su.*, sg.name as groupName, sp.name as postName
FROM sys_user su
left join sys_group sg on sg.id = su.group_id
left join sys_post sp on sp.id = su.post_id
<include refid="where"/>
ORDER BY su.create_time DESC
</select>
<select id="getById" resultType="cn.wise.sc.cement.business.model.vo.UserVo">
SELECT su.*, sg.name as groupName, sp.name as postName,
sr.id as roleId, sr.name as roleName
FROM sys_user su
left join sys_group sg on sg.id = su.group_id
left join sys_post sp on sp.id = su.post_id
left join sys_role_user sru on sru.user_id = su.id
left join sys_role sr on sr.id = sru.role_id
where su.id = #{id}
</select>
<insert id="saveUserRoles">
insert into sys_role_user(role_id, user_id) values
(#{roleId}, #{userId})
</insert>
<!-- <select id="exportList" resultType="java.util.HashMap">-->
<!-- SELECT-->
<!-- su.id as 序号,-->
<!-- su.username as 用户账号,-->
<!-- su.name as 真实姓名,-->
<!-- (-->
<!-- CASE su.sex-->
<!-- WHEN 0 THEN '女'-->
<!-- ELSE '男'-->
<!-- END-->
<!-- )as 性别,-->
<!-- su.group_id as 组别id,-->
<!-- su.post_id as 职务id,-->
<!-- su.wx_id as 微信号,-->
<!-- su.qualifications as 职称,-->
<!-- (-->
<!-- CASE su.status-->
<!-- WHEN 0 THEN '禁用'-->
<!-- ELSE '启用'-->
<!-- END-->
<!-- )as 状态,-->
<!-- su.work_year as 工作年限,-->
<!-- su.phone as 手机号,-->
<!-- su.fax as 传真,-->
<!-- su.major as 专业,-->
<!-- su.email as 邮箱,-->
<!-- su.technology_date as 从事本技术领域日期,-->
<!-- su.technology_year as 从事本技术领域年限,-->
<!-- su.education as 文化程度,-->
<!-- su.create_time as 创建时间,-->
<!-- su.update_time as 修改时间,-->
<!-- su.remark as 备注-->
<!-- FROM sys_user su-->
<!-- <include refid="where" />-->
<!-- ORDER BY su.id ASC-->
<!-- </select>-->
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysUserMessageMapper">
<!-- 未查看消息 -->
<select id="getNoCheck" resultType="cn.wise.sc.cement.business.entity.SysUserMessage">
select *
FROM sys_user_message rum
where rum.is_check=0
<if test="userId != null and userId !=''">
and rum.user_id = #{userId}
</if>
<if test="appId != null and appId !=''">
and rum.app_id = #{appId}
</if>
<if test="messageType != null and messageType !=''">
and rum.message_type = #{messageType}
</if>
</select>
<!-- 未处理消息记录 -->
<select id="getNoDeal" resultType="cn.wise.sc.cement.business.entity.SysUserMessage">
select *
FROM sys_user_message rum
where rum.is_deal=0
<if test="userId != null and userId !=''">
and rum.user_id = #{userId}
</if>
<if test="appId != null and appId !=''">
and rum.app_id = #{appId}
</if>
<if test="messageType != null and messageType !=''">
and rum.message_type = #{messageType}
</if>
</select>
</mapper>
package cn.wise.sc.cement.business.model;
import cn.wise.sc.cement.business.model.vo.BaseVo;
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.baomidou.mybatisplus.extension.service.IService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 封装公共的接口
*
* @param <T> service对象
* @param <M> 实体对象
* @author 秦虎
*/
@Slf4j
public class BaseController<T extends IService<M>, M extends BaseEntity> {
T iService;
public BaseController(T iService) {
this.iService = iService;
}
@PostMapping("/list")
public BaseResponse<List<M>> list(@RequestBody WrapperQuery wrapperQuery) {
QueryWrapper queryWrapper = PageWrapperQueryMyBatisResolver.getQueryWrapper(wrapperQuery);
try {
List<M> list = iService.list(queryWrapper);
return BaseResponse.okData(list);
} catch (Exception ex) {
log.error("查询操作失败 ===== " + iService.toString() + ".list() ====== 异常: {}", ex.getMessage());
return BaseResponse.errorMsg("查询失败");
}
}
@PostMapping("/page")
public BaseResponse<IPage<M>> page(@RequestBody WrapperQuery pageQuery) {
QueryWrapper queryWrapper = PageWrapperQueryMyBatisResolver.getQueryWrapper(pageQuery);
IPage<M> page = new Page(pageQuery.getPageQuery().getPageNo(), pageQuery.getPageQuery().getPageSize());
try {
page = iService.page(page, queryWrapper);
return BaseResponse.okData(page);
} catch (Exception ex) {
log.error("查询操作失败 ===== " + iService.toString() + ".page() ====== 异常: {}", ex.getMessage());
return BaseResponse.errorMsg("分页查询失败");
}
}
@GetMapping("/{id}")
public BaseResponse<BaseVo> getById(@PathVariable("id") long id) {
try {
M model = iService.getById(id);
return BaseResponse.okData(model.toVo());
} catch (Exception ex) {
log.error("查询操作失败 ===== " + iService.toString() + ".create() ====== 异常: {}", ex.getMessage());
return BaseResponse.errorMsg("获取详情信息失败");
}
}
@PostMapping
public BaseResponse<BaseVo> create(@RequestBody M model) {
try {
iService.save(model);
return BaseResponse.okData(model.toVo());
} catch (Exception ex) {
log.error("查询操作失败 ===== " + iService.toString() + ".create() ====== 异常: {}", ex.getMessage());
return BaseResponse.errorMsg("添加失败");
}
}
@PutMapping
public BaseResponse<Boolean> update(@RequestBody M model) {
try {
boolean update = iService.updateById(model);
return BaseResponse.okData(update);
} catch (Exception ex) {
log.error("查询操作失败 ===== " + iService.toString() + ".create() ====== 异常: {}", ex.getMessage());
return BaseResponse.errorMsg("更新记录失败");
}
}
@DeleteMapping("/{id}")
public BaseResponse<Boolean> delById(@PathVariable("id") long id) {
try {
boolean removeById = iService.removeById(id);
return BaseResponse.okData(removeById);
} catch (Exception ex) {
log.error("查询操作失败 ===== " + iService.toString() + ".create() ====== 异常: {}", ex.getMessage());
return BaseResponse.errorMsg("获取详情信息失败");
}
}
}
package cn.wise.sc.cement.business.model;
import cn.wise.sc.cement.business.model.vo.BaseVo;
/**
* @description:
* @author: qh
* @create: 2020-08-07 15:58
**/
public abstract class BaseEntity {
public BaseVo toVo() {
return new BaseVo();
}
}
package cn.wise.sc.cement.business.model;
import cn.wise.sc.cement.business.exception.BusinessExceptionEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @description: 统一返回参数实体
* @author: qh
* @create: 2020-05-18 10:49
**/
@Data
@AllArgsConstructor
public class BaseResponse<T> {
/**
* 响应状态码
*/
private int code;
/**
* 响应数据
*/
private T data;
/**
* 响应提示信息
*/
private String msg;
BaseResponse() {
}
/**
* 200,带提示信息
*
* @param msg 提示信息
* @param <T> 响应数据
* @return BaseResponse
*/
public static <T> BaseResponse<T> okMsg(String msg) {
BaseResponse<T> baseResponse = new BaseResponse<>();
baseResponse.setMsg(msg);
baseResponse.setCode(BusinessExceptionEnum.SUCCESS.getCode());
baseResponse.setData(null);
return baseResponse;
}
/**
* 200,带默认提示信息
*
* @param <T> 响应数据
* @return BaseResponse
*/
public static <T> BaseResponse<T> okData(T t) {
BaseResponse<T> baseResponse = new BaseResponse<>();
baseResponse.setMsg("操作成功!");
baseResponse.setCode(BusinessExceptionEnum.SUCCESS.getCode());
baseResponse.setData(t);
return baseResponse;
}
/**
* 200,带默认提示信息和响应数据
*
* @param t 响应数据
* @param msg 提示信息
* @param <T> 响应数据类型
* @return BaseResponse
*/
public static <T> BaseResponse<T> okDataMsg(T t, String msg) {
BaseResponse<T> baseResponse = new BaseResponse<>();
baseResponse.setMsg(msg);
baseResponse.setCode(BusinessExceptionEnum.SUCCESS.getCode());
baseResponse.setData(t);
return baseResponse;
}
/**
* 400,带提示信息
*
* @param msg 提示信息
* @param <T> 响应数据类型
* @return BaseResponse
*/
public static <T> BaseResponse<T> errorMsg(String msg) {
BaseResponse<T> baseResponse = new BaseResponse<>();
baseResponse.setMsg(msg);
baseResponse.setCode(BusinessExceptionEnum.BUSINESS_ERROR.getCode());
baseResponse.setData(null);
return baseResponse;
}
/**
* 401,用户未登录
*
* @param msg 提示信息
* @param <T> 响应数据类型
* @return BaseResponse
*/
public static <T> BaseResponse<T> noLogin(String msg) {
BaseResponse<T> baseResponse = new BaseResponse<>();
baseResponse.setMsg(msg);
baseResponse.setCode(BusinessExceptionEnum.NO_LOGIN.getCode());
baseResponse.setData(null);
return baseResponse;
}
}
package cn.wise.sc.cement.business.model;
import java.util.List;
import cn.wise.sc.cement.business.entity.SysPermission;
import cn.wise.sc.cement.business.entity.SysRole;
import cn.wise.sc.cement.business.entity.SysUser;
import lombok.Data;
@Data
public class LoginUser extends SysUser {
private List<SysPermission> permissions;
private String token;
/**
* 登陆时间戳(毫秒)
*/
private Long loginTime;
/**
* 过期时间戳
*/
private Long expireTime;
private String postName;
SysRole roleList;
}
package cn.wise.sc.cement.business.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Message implements Serializable {
private static final long serialVersionUID = 8508882582940066562L;
@ApiModelProperty("接收人id")
private String userId;
@ApiModelProperty("接收信息")
private String message;
@ApiModelProperty("消息类型: 1个人报销,2对公收付款")
private Integer messageType;
@ApiModelProperty("相关对象表id(个人报销表或对公收付款表)")
private Integer appId;
@ApiModelProperty("发送时间")
private LocalDateTime createTime;
}
package cn.wise.sc.cement.business.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NonNull;
import java.io.Serializable;
/**
* @description: 分页查询页大小的Query对象
* @author: qinhu
* @create: 2019-11-05 15:40
**/
@Data
@ApiModel
public class PageQuery implements Serializable {
private static final long serialVersionUID = 3979320797076183357L;
@ApiModelProperty(value = "当前所在页码")
@NonNull
private Integer pageNo = 1;
@ApiModelProperty(value = "每页显示数量")
@NonNull
private Integer pageSize = 20;
}
package cn.wise.sc.cement.business.model;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
/**
* 分页查询参数
*
* @author zhutianwei
* <p>
* 说明: 页码start 每页返回数量 length 其他筛选字段按照对象传入 sql:limit start*length length
* 时间筛选 beginTime endTime
* 排序 orderBy 例如order by payTime desc
*/
public class PageTableRequest implements Serializable {
private static final long serialVersionUID = 7328071045193618467L;
@ApiModelProperty("当前页数(从1开始)")
private Long current;
@ApiModelProperty("当前每页显示数")
private Long size;
public Long getCurrent() {
return current;
}
public void setCurrent(Long current) {
this.current = current;
}
public Long getSize() {
return size;
}
public void setSize(Long size) {
this.size = size;
}
}
package cn.wise.sc.cement.business.model;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
/**
* @description: 分页条件查询 mybatis解析
* @author: qh
* @create: 2020-01-08 22:11
**/
public class PageWrapperQueryMyBatisResolver {
public static WrapperQuery create() {
return new WrapperQuery();
}
/**
* 组装查询条件
*
* @param query
* @return
*/
public static QueryWrapper getQueryWrapper(WrapperQuery query) {
QueryWrapper queryWrapper = Wrappers.query();
//拼装等于条件
if (query.getEq() != null) {
for (String key : query.getEq().keySet()) {
queryWrapper.eq(key, query.getEq().get(key));
}
}
//拼装小于条件
if (query.getLt() != null) {
for (String key : query.getLt().keySet()) {
queryWrapper.lt(key, query.getLt().get(key));
}
}
//拼装小于等于条件
if (query.getLe() != null) {
for (String key : query.getLe().keySet()) {
queryWrapper.le(key, query.getLe().get(key));
}
}
//拼装大于于条件
if (query.getGt() != null) {
for (String key : query.getGt().keySet()) {
queryWrapper.gt(key, query.getGt().get(key));
}
}
//拼装大于等于条件
if (query.getGe() != null) {
for (String key : query.getGe().keySet()) {
queryWrapper.ge(key, query.getGe().get(key));
}
}
//in条件
if (query.getIn() != null) {
for (String key : query.getIn().keySet()) {
queryWrapper.in(key, query.getIn().get(key));
}
}
//拼装like条件
if (query.getLike() != null) {
for (String key : query.getLike().keySet()) {
queryWrapper.like(key, query.getLike().get(key));
}
}
if (query.getOr() != null) {
for (String key : query.getOr().keySet()) {
queryWrapper.or(true).eq(key, query.getLike().get(key));
}
}
if (StrUtil.isNotEmpty(query.getSql())) {
queryWrapper.last(query.getSql());
}
return queryWrapper;
}
}
package cn.wise.sc.cement.business.model;
/**
* @author: Seven.wk
* @description: 数据返回类
* @create: 2018/07/04
*/
public class ResultVO<T> {
private Integer code;
private String message;
private T data;
public ResultVO() {
}
public ResultVO(Integer code, String message) {
this.code = code;
this.message = message;
}
public ResultVO(Integer code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
package cn.wise.sc.cement.business.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* @description: 分页条件查询
* @author: qh
* @create: 2019-12-16 15:26
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WrapperQuery {
/**
* 分页
*/
private PageQuery pageQuery;
/**
* 等于
*/
private Map<String, Object> eq;
/**
* 小于
*/
private Map<String, Object> lt;
/**
* 小于等于
*/
private Map<String, Object> le;
/**
* 大于
*/
private Map<String, Object> gt;
/**
* 大于等于
*/
private Map<String, Object> ge;
/**
* like
*/
private Map<String, Object> like;
/**
* 或者
*/
private Map<String, Object> or;
/**
* sql条件
*/
private String sql;
/**
* in条件
*/
private Map<String, List<Long>> in;
}
package cn.wise.sc.cement.business.model.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* @description:
* @author: ztw
* @create: 2020-08-07 14:58
**/
@Data
@ApiModel("职务请求")
public class PostQuery {
private Integer id;
@ApiModelProperty("职务名称")
private String name;
@ApiModelProperty("审批级别")
private Integer level;
@ApiModelProperty("备注")
private String remark;
}
package cn.wise.sc.cement.business.model.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* @description:
* @author: qh
* @create: 2020-08-07 14:58
**/
@Data
@ApiModel("角色请求")
public class RoleQuery {
private Integer id;
@ApiModelProperty("角色名称")
private String name;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("权限id数组")
private List<Integer> permissionIds;
}
package cn.wise.sc.cement.business.model.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description: 人员管理附件
* @author: wlb
* @create: 2020-10-19
**/
@Data
@ApiModel("人员管理附件")
public class SysUserEnclosureQuery {
@ApiModelProperty("用户id")
private Integer userId;
@ApiModelProperty("文件名")
private String alias;
@ApiModelProperty("扩展名")
private String extName;
@ApiModelProperty("路径")
private String enclosureUrl;
}
package cn.wise.sc.cement.business.model.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @description: 用户请求
* @author: qh
* @create: 2020-08-07 14:58
**/
@Data
@ApiModel("用户请求")
public class UserQuery {
private Integer id;
@ApiModelProperty("用户账号")
private String username;
@ApiModelProperty("真实姓名")
private String name;
@ApiModelProperty("性别0女1男")
private Integer sex;
@ApiModelProperty("部门id")
private Integer groupId;
@ApiModelProperty("职务id")
private Integer postId;
@ApiModelProperty("微信号")
private String wxId;
@ApiModelProperty("职称")
private String qualifications;
@ApiModelProperty("工作年限")
private Double workYear;
@ApiModelProperty("手机号")
private String phone;
@ApiModelProperty("传真")
private String fax;
@ApiModelProperty("专业")
private String major;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("从事本技术领域日期")
private LocalDate technologyDate;
@ApiModelProperty("从事本技术领域年限")
private Double technologyYear;
@ApiModelProperty("文化程度")
private String education;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("角色id")
private Integer roleId;
}
package cn.wise.sc.cement.business.model.vo;
/**
* @description:
* @author: qh
* @create: 2020-08-07 15:59
**/
public class BaseVo {
}
package cn.wise.sc.cement.business.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* @description:
* @author: ztw
* @create: 2020-08-07 14:58
**/
@Data
@ApiModel("日志Vo")
public class LogVo {
private Integer id;
/**
* 操作用户
*/
@ApiModelProperty("操作用户id")
private Integer userId;
@ApiModelProperty("操作用户姓名")
private String userName;
@ApiModelProperty("日志类型(1委托详情)")
private Integer objType;
@ApiModelProperty("对象表id(委托表id)")
private Integer objId;
@ApiModelProperty("操作内容")
private String module;
@ApiModelProperty("操作状态1成功,0失败")
private Integer flag;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("备注")
private String remark;
}
package cn.wise.sc.cement.business.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @description:
* @author: ztw
* @create: 2020-08-07 14:58
**/
@Data
@ApiModel("用户Vo")
public class UserVo {
private Integer id;
@ApiModelProperty("用户账号")
private String username;
@ApiModelProperty("真实姓名")
private String name;
@ApiModelProperty("性别0女1男")
private Integer sex;
@ApiModelProperty("部门id")
private Integer groupId;
@ApiModelProperty("职务id")
private Integer postId;
@ApiModelProperty("微信号")
private String wxId;
@ApiModelProperty("职称")
private String qualifications;
@ApiModelProperty("状态(0禁用,1启用)")
private Integer status;
@ApiModelProperty("工作年限")
private Double workYear;
@ApiModelProperty("手机号")
private String phone;
@ApiModelProperty("传真")
private String fax;
@ApiModelProperty("专业")
private String major;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("从事本技术领域日期")
private LocalDate technologyDate;
@ApiModelProperty("从事本技术领域年限")
private Double technologyYear;
@ApiModelProperty("文化程度")
private String education;
@ApiModelProperty("(0删除,1正常)")
private Integer isDelete;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("修改时间")
private LocalDateTime updateTime;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("组名称")
private String groupName;
@ApiModelProperty("职务名称")
private String postName;
@ApiModelProperty("角色id")
private Integer roleId;
@ApiModelProperty("角色名称")
private String roleName;
}
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.EntityEnclosure;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-09-02
*/
public interface IEntityEnclosureService extends IService<EntityEnclosure> {
}
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.SysLogs;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.vo.LogVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-08-24
*/
public interface ISysLogsService extends IService<SysLogs> {
BaseResponse<IPage<LogVo>> getPage(PageQuery pageQuery, String startDate, String endDate, Integer objType, Integer objId);
void saveLog(Integer objType, Integer objId, String module, String remark);
}
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.SysPermission;
import cn.wise.sc.cement.business.model.BaseResponse;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-08-20
*/
public interface ISysPermissionService extends IService<SysPermission> {
BaseResponse<List<SysPermission>> current();
BaseResponse<List<SysPermission>> permissionsList();
BaseResponse<List<SysPermission>> parents();
BaseResponse<JSONArray> tree();
BaseResponse<List<SysPermission>> listByRoleId(Integer roleId);
BaseResponse<SysPermission> create(SysPermission permission);
BaseResponse<SysPermission> update(SysPermission permission);
}
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.SysPost;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.query.PostQuery;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-08-25
*/
public interface ISysPostService extends IService<SysPost> {
BaseResponse<IPage<SysPost>> getPage(PageQuery pageQuery, String name);
BaseResponse<SysPost> create(PostQuery query);
BaseResponse<SysPost> update(PostQuery query);
}
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.SysRole;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.query.RoleQuery;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-08-20
*/
public interface ISysRoleService extends IService<SysRole> {
BaseResponse<IPage<SysRole>> getPage(PageQuery pageQuery, String name);
BaseResponse<SysRole> create(RoleQuery query);
BaseResponse<SysRole> update(RoleQuery query);
BaseResponse<SysRole> byUserId(Integer userId);
BaseResponse<String> delete(Integer id);
}
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.SysUserMessage;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.util.WebSocketServer;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-10-13
*/
public interface ISysUserMessageService extends IService<SysUserMessage> {
BaseResponse<String> sendMessage(Integer userId, String message, Integer appId, Integer messageType);
BaseResponse<String> checkMessage(Integer userId, Integer appId, Integer messageType);
BaseResponse<String> dealMessage(Integer userId, Integer appId, Integer messageType);
BaseResponse<List<SysUserMessage>> getMessages();
}
package cn.wise.sc.cement.business.service.impl;
import cn.wise.sc.cement.business.entity.EntityEnclosure;
import cn.wise.sc.cement.business.mapper.EntityEnclosureMapper;
import cn.wise.sc.cement.business.service.IEntityEnclosureService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author ztw
* @since 2020-09-02
*/
@Service
public class EntityEnclosureServiceImpl extends ServiceImpl<EntityEnclosureMapper, EntityEnclosure> implements IEntityEnclosureService {
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment