Commit 8dd06647 authored by 廖鑫's avatar 廖鑫

提交办件处理中心模块

parent f64ec825
**/target/
.idea
*.iml
/log
.svn/
#*.yml
/history
......@@ -22,7 +22,6 @@
<dependency>
<groupId>com.mortals.framework</groupId>
<artifactId>mortals-framework-springcloud</artifactId>
</dependency>
......
package com.mortals.xhx.feign;
import com.alibaba.fastjson.JSONObject;
import lombok.SneakyThrows;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author liaozimu
* @Date: 2021-09-2021/9/7-16:52
* @Description:
*/
@FeignClient(value = "elasticsearch-manager")
public interface ElasticsearchClient {
@RequestMapping(value = "/elasticsearch/queryEla", method = RequestMethod.GET)
public JSONObject queryEla(@RequestParam(required = false) int currPage, @RequestParam(required = false) int prePageResult);
}
package elasticsearch.module;
import lombok.Data;
import lombok.ToString;
import java.util.List;
import java.util.Map;
/**
* @author Wz
* @Date: 2021-09-2021/9/2-17:31
* @Description:
*/
@Data
@ToString
public class EsPage {
/**
* 当前页
*/
private int currentPage;
/**
* 每页显示多少条
*/
private int pageSize;
/**
* 总记录数
*/
private int recordCount;
/**
* 本页的数据列表
*/
private List<Map<String, Object>> recordList;
/**
* 总页数
*/
private int pageCount;
/**
* 页码列表的开始索引(包含)
*/
private int beginPageIndex;
/**
* 页码列表的结束索引(包含)
*/
private int endPageIndex;
/**
* 只接受前4个必要的属性,会自动的计算出其他3个属性的值
*
* @param currentPage
* @param pageSize
* @param recordCount
* @param recordList
*/
public EsPage(int currentPage, int pageSize, int recordCount, List<Map<String, Object>> recordList) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.recordCount = recordCount;
this.recordList = recordList;
// 计算总页码
pageCount = (recordCount + pageSize - 1) / pageSize;
// 计算 beginPageIndex 和 endPageIndex
// >> 总页数不多于10页,则全部显示
if (pageCount <= 10) {
beginPageIndex = 1;
endPageIndex = pageCount;
}
// 总页数多于10页,则显示当前页附近的共10个页码
else {
// 当前页附近的共10个页码(前4个 + 当前页 + 后5个)
beginPageIndex = currentPage - 4;
endPageIndex = currentPage + 5;
// 当前面的页码不足4个时,则显示前10个页码
if (beginPageIndex < 1) {
beginPageIndex = 1;
endPageIndex = 10;
}
// 当后面的页码不足5个时,则显示后10个页码
if (endPageIndex > pageCount) {
endPageIndex = pageCount;
beginPageIndex = pageCount - 10 + 1;
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default-lazy-init="false" default-autowire="byType">
<!-- 事务管理对象 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 拦截模式 -->
<aop:config proxy-target-class="false">
<aop:advisor pointcut="execution(* com.mortals..*Service.*(..))" advice-ref="txAdvice" />
</aop:config>
<!-- 事务传播方式 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--tx:method name="get*" read-only="true"/ -->
<!--<tx:method name="*" read-only="false" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException,Exception" />-->
<tx:method name="remove*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="delete*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="change*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="create*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="update*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="modify*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="execute*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="excute*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="start*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="increment*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="do*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="audit*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="notify*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="send*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="save*" propagation="REQUIRED" rollback-for="com.mortals.framework.exception.AppException" />
<tx:method name="doForce*" propagation="REQUIRES_NEW" rollback-for="com.mortals.framework.exception.AppException" />
<!--<tx:method name="*" read-only="true" />-->
</tx:attributes>
</tx:advice>
</beans>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
default-autowire="byType">
<import resource="spring-config-core.xml" />
</beans>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>dataCenter-handler</artifactId>
<packaging>jar</packaging>
<description>handler服务</description>
<parent>
<groupId>com.mortals.xhx</groupId>
<artifactId>xhx-base</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.mortals.xhx</groupId>
<artifactId>dataCenter-common-lib</artifactId>
</dependency>
<!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
#!/bin/sh
RETVAL=$?
. /etc/profile #加载环境变量(Jenkins远程启动程序报找不到Java文件问题,需加载环境变量)
export CATALINA_BASE="$PWD"
case "$1" in
start)
if [ -f $CATALINA_BASE/start.sh ];then
$CATALINA_BASE/start.sh 17022 &
fi
;;
stop)
if [ -f $CATALINA_BASE/stop.sh ];then
$CATALINA_BASE/stop.sh 17022
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
\ No newline at end of file
#!/bin/sh
PORT=$1
BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`
PROJECT_NAME="@project.artifactId@";
MAIN_CLASS="$PROJECT_NAME-@project.version@.jar";
ENCRYPT_KEY="foobar";
LOG_PATH="@profiles.log.path@/$PROJECT_NAME"
GC_PATH=$LOG_PATH/$PORT"-gc.log"
HS_ERR_PATH=$LOG_PATH/$PORT"-hs_err.log"
HEAP_DUMP_PATH=$LOG_PATH/$PORT"-heap_dump.hprof"
TEMP_PATH=$LOG_PATH/temp/
SUCCESS=0
FAIL=9
if [ ! -n "$PORT" ]; then
echo $"Usage: $0 {port}"
exit $FAIL
fi
if [ ! -d $LOG_PATH ];
then
mkdir -p $LOG_PATH;
fi
if [ ! -d $TEMP_PATH ];
then
mkdir -p $TEMP_PATH;
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD=`which java > /dev/null 2>&1`
echo "Error: JAVA_HOME is not defined correctly."
exit $ERR_NO_JAVA
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "We cannot execute $JAVACMD"
exit $ERR_NO_JAVA
fi
if [ -e "$BASEDIR" ]
then
JAVA_OPTS="-Xms512M -Xmx1024M -Xss256K -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:GCTimeRatio=39 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$GC_PATH -XX:+HeapDumpOnOutOfMemoryError -XX:ErrorFile=$HS_ERR_PATH -XX:HeapDumpPath=$HEAP_DUMP_PATH"
fi
CLASSPATH=$CLASSPATH_PREFIX:
EXTRA_JVM_ARGUMENTS=""
cd "$BASEDIR/boot";
echo "starting application $PROJECT_NAME......"
exec "$JAVACMD" $JAVA_OPTS \
$EXTRA_JVM_ARGUMENTS \
-Dapp.name="$PROJECT_NAME" \
-Dapp.port="$PORT" \
-Dbasedir="$BASEDIR" \
-Djava.io.tmpdir=$TEMP_PATH \
-Dloader.path="file://$BASEDIR/conf,file://$BASEDIR/lib" \
-jar $MAIN_CLASS \
--server.port="$PORT" \
--encrypt.key="$ENCRYPT_KEY" \
> /dev/null &
for i in {1..60}
do
jcpid=`ps -ef | grep -v "grep" | grep "$MAIN_CLASS" | grep "app.port=$PORT" | sed -n '1P' | awk '{print $2}'`
if [ $jcpid ]; then
echo "The $PROJECT_NAME start finished, PID is $jcpid"
exit $SUCCESS
else
echo "starting the application .. $i"
sleep 1
fi
done
echo "$PROJECT_NAME start failure!"
\ No newline at end of file
#! /bin/sh
PORT=$1
BASEDIR=`dirname $0`
BASEDIR=`(cd "$BASEDIR"; pwd)`
PROJECT_NAME="@project.artifactId@"
MAIN_CLASS="$PROJECT_NAME";
SECURITY_USERNAME="admin";
SECURITY_PASSWORD="1";
if [ ! -n "$PORT" ]; then
echo $"Usage: $0 {port}"
exit $FAIL
fi
echo "stoping application $PROJECT_NAME......"
jcpid=`ps -ef | grep -v "grep" | grep "$MAIN_CLASS" | grep "app.port=$PORT" | sed -n '1P' | awk '{print $2}'`
if [ -z $jcpid ]; then
echo "$PROJECT_NAME is not started or has been stopped!"
else
curl -X POST -i -u $SECURITY_USERNAME:$SECURITY_PASSWORD http://127.0.0.1:$PORT/xxx_manager/shutdown
for i in {1..60}
do
jcpid=`ps -ef | grep -v "grep" | grep "$MAIN_CLASS" | grep "app.port=$PORT" | sed -n '1P' | awk '{print $2}'`
if [ -z $jcpid ]; then
echo "$PROJECT_NAME has been stopped!"
break
else
echo "stoping the application .. $i"
sleep 1
fi
done
jcpid=`ps -ef | grep -v "grep" | grep "$MAIN_CLASS" | grep "app.port=$PORT" | sed -n '1P' | awk '{print $2}'`
if [ $jcpid ]; then
[ -z $jcpid ] || kill -15 $jcpid
for i in {1..30}
do
jcpid=`ps -ef | grep -v "grep" | grep "$MAIN_CLASS" | grep "app.port=$PORT" | sed -n '1P' | awk '{print $2}'`
if [ -z $jcpid ]; then
echo "$PROJECT_NAME has been stopped!"
break
else
echo "stoping the application .. $i"
sleep 1
fi
done
fi
jcpid=`ps -ef | grep -v "grep" | grep "$MAIN_CLASS" | grep "app.port=$PORT" | sed -n '1P' | awk '{print $2}'`
if [ $jcpid ]; then
[ -z $jcpid ] || kill -9 $jcpid
[ $? -eq 0 ] && echo "Stop $PROJECT_NAME OK!" || echo "Stop $PROJECT_NAME Fail!"
fi
fi
\ No newline at end of file
package com.mortals.xhx;
import com.mortals.framework.springcloud.boot.BaseWebApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ImportResource;
@EnableFeignClients
@SpringBootApplication(scanBasePackages = { "com.mortals" })
@ServletComponentScan("com.mortals")
@ImportResource(locations = { "classpath:config/spring-config.xml" })
public class HandlerApplication extends BaseWebApplication {
public static void main(String[] args) {
SpringApplication.run(HandlerApplication.class, args);
}
}
package com.mortals.xhx.base.framework.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by chendilin on 2018/3/8.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Operlog {
String msg() default "";
String params() default "";
}
package com.mortals.xhx.base.framework.aspect;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import com.mortals.xhx.base.system.oper.service.OperLogService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.mortals.framework.service.ILogService;
import com.mortals.framework.service.impl.FileLogServiceImpl;
/**
* 操作日志记录 Created by chendilin on 2018/3/8.
*/
@Component
// @Aspect
// @Component
public class OperlogAspect extends FileLogServiceImpl implements ILogService {
private final static Logger logger = LoggerFactory.getLogger(OperlogAspect.class);
@Autowired
private OperLogService operLogService;
@Override
public void doHandlerLog(String platformMark, Long userId, String userName, String loginName, String requestUrl,
String content, String ip, Date logDate) {
super.doHandlerLog(platformMark, userId, userName, loginName, requestUrl, content, ip, logDate);
operLogService.insertOperLog(ip, requestUrl, userId, userName, loginName, content);
}
@Override
public void doHandlerLog(String platformMark, String loginName, String requestUrl, String content, String ip) {
// operLogService.insertOperLog(ip, requestUrl, null, "", loginName,
// content);
this.doHandlerLog(platformMark, null, "", loginName, requestUrl, content, ip, new Date());
}
@Pointcut("execution(public * com.mortals.iot.module..*Controller.*(..))")
public void accessLog() {
}
@Before("accessLog()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// url
logger.info("ip[{}]url[{}]", request.getRemoteAddr(), request.getRequestURL());
// 参数 使用公司框架 第1和第2个参数为HttpServletRequest request, HttpServletResponse
// response
if (joinPoint.getArgs().length > 2) {
logger.info("args={}", joinPoint.getArgs()[2]);
} else {
logger.info("args={}", joinPoint.getArgs());
}
// logger.info("url={}", request.getRequestURL());
//
// // method
// logger.info("method={}", request.getMethod());
//
// // ip
// logger.info("ip={}", request.getRemoteAddr());
//
// // 类方法
// logger.info("class_method={}",
// joinPoint.getSignature().getDeclaringTypeName() + "." +
// joinPoint.getSignature().getName());
//
// // 参数
// logger.info("args={}", joinPoint.getArgs());
}
// @After("sign()")
// public void doAfter() {
// logger.info("222222222222");
// }
@AfterReturning(returning = "object", pointcut = "accessLog()")
public void doAfterReturning(Object object) {
if (null != object) {
logger.info("response={}", object.toString());
}
}
}
package com.mortals.xhx.base.framework.config;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import com.mortals.framework.web.config.BasePropertyPlaceholderConfigurer;
//@Configuration
public class IotServiceDataConfiguration {
@Bean
public PropertyPlaceholderConfigurer properties() {
BasePropertyPlaceholderConfigurer bppc = new BasePropertyPlaceholderConfigurer();
bppc.setIgnoreUnresolvablePlaceholders(true);
final List<Resource> resourceLst = new ArrayList<>();
resourceLst.add(new ClassPathResource("bootstrap.properties"));
bppc.setLocations(resourceLst.toArray(new Resource[] {}));
return bppc;
}
}
package com.mortals.xhx.base.framework.config;
import java.io.IOException;
import java.net.URLDecoder;
import javax.sql.DataSource;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import com.mortals.framework.springcloud.config.SpringBootVFS;
@Configuration
public class MybatisConfiguration {
private static Log logger = LogFactory.getLog(MybatisConfiguration.class);
// 配置类型别名
@Value("${spring.application.name}")
private String name;
// 配置类型别名
@Value("${mybatis.root-path}")
private String rootPath;
private static final String ROOT_PATH_SPLIT = ",";
// 配置类型别名
@Value("${mybatis.type-aliases-package}")
private String typeAliasesPackage;
// 配置mapper的扫描,找到所有的mapper.xml映射文件
@Value("${mybatis.mapper-locations}")
private String mapperLocations;
// 加载全局的配置文件
@Value("${mybatis.config-location}")
private String configLocation;
private final String PATH_SEPARATOR = "/";
// 提供SqlSeesion
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) {
return getSqlSessionFactoryBean(dataSource);
}
public SqlSessionFactory getSqlSessionFactoryBean(DataSource dataSource) {
try {
// 解决myBatis下 不能从嵌套jar文件中读取class的问题
VFS.addImplClass(SpringBootVFS.class);
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
// 读取配置
sessionFactoryBean.setTypeAliasesPackage(getTypeAliasesPackage());
//
Resource[] resources = new PathMatchingResourcePatternResolver().getResources(mapperLocations);
sessionFactoryBean.setMapperLocations(resources);
// //
Resource[] configLocations = new PathMatchingResourcePatternResolver().getResources(configLocation);
sessionFactoryBean.setConfigLocation(configLocations[0]);
// 添加插件 (改为使用配置文件加载了)
// sqlSessionFactoryBean.setPlugins(new
// Interceptor[]{pageHelper()});
return sessionFactoryBean.getObject();
} catch (IOException e) {
logger.error("mybatis resolver mapper*xml is error", e);
return null;
} catch (Exception e) {
logger.error("mybatis sqlSessionFactoryBean create error", e);
return null;
}
}
public String getTypeAliasesPackage() {
if (StringUtils.isEmpty(typeAliasesPackage)) {
return "";
}
rootPath = rootPath.trim().replace(".", PATH_SEPARATOR);
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
StringBuffer typeAliasesPackageStringBuffer = new StringBuffer();
try {
for (String location : typeAliasesPackage.split(ROOT_PATH_SPLIT)) {
if (StringUtils.isEmpty(location)) {
continue;
}
if (location.contains("*")) {
location = "classpath*:" + location.trim().replace(".", PATH_SEPARATOR);
location = getResources(resolver, location);
}
if (location.endsWith(PATH_SEPARATOR)) {
location = location.substring(0, location.length() - 1);
}
typeAliasesPackageStringBuffer.append(location + ROOT_PATH_SPLIT);
}
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
if (typeAliasesPackageStringBuffer.length() == 0) {
throw new RuntimeException(
"mybatis typeAliasesPackage 路径扫描错误!请检查applicationContext.xml@sqlSessionFactory配置!");
}
String allTypeAliasesPackage = typeAliasesPackageStringBuffer.toString().replace(PATH_SEPARATOR, ".");
logger.info("allTypeAliasesPackage:" + allTypeAliasesPackage);
return allTypeAliasesPackage;
}
private String getResources(ResourcePatternResolver resolver, String location) throws IOException {
StringBuffer resourcePathStringBuffer = new StringBuffer();
for (Resource resource : resolver.getResources(location)) {
if (resource == null || resource.getURL() == null) {
continue;
}
String path = resource == null ? "" : resource.getURL().getPath();
path = URLDecoder.decode(path, "UTF-8");// 对URL进行解码
path = path.replaceAll("\\\\", PATH_SEPARATOR);// 将所有反斜杠(\)替换成正斜杠(/)
if (StringUtils.isEmpty(path) || path.indexOf(rootPath) == -1) {
continue;
}
if (path.endsWith(PATH_SEPARATOR)) {
path = path.substring(0, path.length() - 1);
}
resourcePathStringBuffer.append(path.substring(path.indexOf(rootPath))).append(ROOT_PATH_SPLIT);
}
return resourcePathStringBuffer.toString();
}
}
\ No newline at end of file
package com.mortals.xhx.base.framework.exception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.exception.AppException;
/**
* 统一异常处理
*/
@ControllerAdvice
public class ExceptionHandle {
private final static Logger log = LoggerFactory.getLogger(ExceptionHandle.class);
public static final String KEY_RESULT_CODE = "code";
public static final String KEY_RESULT_MSG = "msg";
public static final String KEY_RESULT_DATA = "data";
public static final int VALUE_RESULT_FAILURE = -1;
@ExceptionHandler(value = Exception.class)
@ResponseBody
public String handle(Exception e) {
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
if (e instanceof AppException) {
StackTraceElement stack = e.getStackTrace()[0];
log.error("[business error]=========stack message[{}],[{},method:{},line{}][{}]", e.getMessage(),
stack.getClassName(), stack.getMethodName(), stack.getLineNumber(), e.getClass().getName());
AppException ex = (AppException) e;
ret.put(KEY_RESULT_MSG, ex.getMessage());
} else {
log.error("[system error]{}", e);
ret.put(KEY_RESULT_MSG, "unknown exception!");
}
return ret.toJSONString();
}
}
package com.mortals.xhx.base.system.idgenerator.dao;
import com.mortals.xhx.base.system.idgenerator.model.IdgeneratorEntity;
import com.mortals.framework.dao.ICRUDDao;
/**
* <p>Title: id生成器</p>
* <p>Description: IdgeneratorDao DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
public interface IdgeneratorDao extends ICRUDDao<IdgeneratorEntity, Long> {
}
\ No newline at end of file
package com.mortals.xhx.base.system.idgenerator.dao.ibatis;
import com.mortals.xhx.base.system.idgenerator.dao.IdgeneratorDao;
import com.mortals.xhx.base.system.idgenerator.model.IdgeneratorEntity;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import org.springframework.stereotype.Repository;
/**
* <p>Title: id生成器</p>
* <p>Description: IdgeneratorDaoImpl DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
@Repository("idgeneratorDao")
public class IdgeneratorDaoImpl extends BaseCRUDDaoMybatis<IdgeneratorEntity, Long> implements IdgeneratorDao {
}
\ No newline at end of file
package com.mortals.xhx.base.system.idgenerator.model;
import com.mortals.framework.model.BaseEntityLong;
import java.util.Date;
/**
* <p>Title: id生成器</p>
* <p>Description: IdgeneratorEntity </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
public class IdgeneratorEntity extends BaseEntityLong {
private static final long serialVersionUID = 1555564885341L;
/** id类型 */
private String idType;
/** 当前id最大值 */
private Long idMaxValue;
/** 备注 */
private String remark;
/** 版本号,默认0 */
private Long versionNum;
/** 最后修改时间 */
private Date gmtModify;
public IdgeneratorEntity() {
}
/**
* 获取 id类型
*
* @return idType
*/
public String getIdType() {
return this.idType;
}
/**
* 设置 id类型
*
* @param idType
*/
public void setIdType(String idType) {
this.idType = idType;
}
/**
* 获取 当前id最大值
*
* @return idMaxValue
*/
public Long getIdMaxValue() {
return this.idMaxValue;
}
/**
* 设置 当前id最大值
*
* @param idMaxValue
*/
public void setIdMaxValue(Long idMaxValue) {
this.idMaxValue = idMaxValue;
}
/**
* 获取 备注
*
* @return remark
*/
public String getRemark() {
return this.remark;
}
/**
* 设置 备注
*
* @param remark
*/
public void setRemark(String remark) {
this.remark = remark;
}
/**
* 获取 版本号,默认0
*
* @return versionNum
*/
public Long getVersionNum() {
return this.versionNum;
}
/**
* 设置 版本号,默认0
*
* @param versionNum
*/
public void setVersionNum(Long versionNum) {
this.versionNum = versionNum;
}
/**
* 获取 最后修改时间
*
* @return gmtModify
*/
public Date getGmtModify() {
return this.gmtModify;
}
/**
* 设置 最后修改时间
*
* @param gmtModify
*/
public void setGmtModify(Date gmtModify) {
this.gmtModify = gmtModify;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj instanceof IdgeneratorEntity) {
IdgeneratorEntity tmp = (IdgeneratorEntity) obj;
return this.getId().longValue() == tmp.getId().longValue();
}
return false;
}
@Override
public String toString() {
return "IdgeneratorEntity{" + "idType='" + idType + '\'' + ", idMaxValue=" + idMaxValue + ", remark='" + remark
+ '\'' + ", versionNum=" + versionNum + ", gmtModify=" + gmtModify + ", id=" + id + '}';
}
@Override
public void initAttrValue() {
this.idType = null;
this.idMaxValue = null;
this.remark = null;
this.versionNum = 0L;
this.gmtModify = null;
}
}
\ No newline at end of file
package com.mortals.xhx.base.system.idgenerator.model;
import java.util.List;
/**
* <p>Title: id生成器</p>
* <p>Description: IdgeneratorQuery </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
public class IdgeneratorQuery extends IdgeneratorEntity {
private static final long serialVersionUID = 1555564885342L;
/** 开始 菜单ID,主键,自增长 */
private Long idStart;
/** 结束 菜单ID,主键,自增长 */
private Long idEnd;
/** 增加 菜单ID,主键,自增长 */
private Long idIncrement;
/** 菜单ID,主键,自增长 */
private List<Long> idList;
/** id类型 */
private List<String> idTypeList;
/** 开始 当前id最大值 */
private Long idMaxValueStart;
/** 结束 当前id最大值 */
private Long idMaxValueEnd;
/** 增加 当前id最大值 */
private Long idMaxValueIncrement;
/** 当前id最大值 */
private List<Long> idMaxValueList;
/** 备注 */
private List<String> remarkList;
/** 开始 版本号,默认0 */
private Long versionNumStart;
/** 结束 版本号,默认0 */
private Long versionNumEnd;
/** 增加 版本号,默认0 */
private Long versionNumIncrement;
/** 版本号,默认0 */
private List<Long> versionNumList;
/** 开始 最后修改时间 */
private String gmtModifyStart;
/** 结束 最后修改时间 */
private String gmtModifyEnd;
public IdgeneratorQuery() {
}
/**
* 获取 开始 菜单ID,主键,自增长
*
* @return idStart
*/
public Long getIdStart() {
return this.idStart;
}
/**
* 设置 开始 菜单ID,主键,自增长
*
* @param idStart
*/
public void setIdStart(Long idStart) {
this.idStart = idStart;
}
/**
* 获取 结束 菜单ID,主键,自增长
*
* @return idEnd
*/
public Long getIdEnd() {
return this.idEnd;
}
/**
* 设置 结束 菜单ID,主键,自增长
*
* @param idEnd
*/
public void setIdEnd(Long idEnd) {
this.idEnd = idEnd;
}
/**
* 获取 增加 菜单ID,主键,自增长
*
* @return idIncrement
*/
public Long getIdIncrement() {
return this.idIncrement;
}
/**
* 设置 增加 菜单ID,主键,自增长
*
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement) {
this.idIncrement = idIncrement;
}
/**
* 获取 菜单ID,主键,自增长
*
* @return idList
*/
public List<Long> getIdList() {
return this.idList;
}
/**
* 设置 菜单ID,主键,自增长
*
* @param idList
*/
public void setIdList(List<Long> idList) {
this.idList = idList;
}
/**
* 获取 id类型
*
* @return idTypeList
*/
public List<String> getIdTypeList() {
return this.idTypeList;
}
/**
* 设置 id类型
*
* @param idTypeList
*/
public void setIdTypeList(List<String> idTypeList) {
this.idTypeList = idTypeList;
}
/**
* 获取 开始 当前id最大值
*
* @return idMaxValueStart
*/
public Long getIdMaxValueStart() {
return this.idMaxValueStart;
}
/**
* 设置 开始 当前id最大值
*
* @param idMaxValueStart
*/
public void setIdMaxValueStart(Long idMaxValueStart) {
this.idMaxValueStart = idMaxValueStart;
}
/**
* 获取 结束 当前id最大值
*
* @return idMaxValueEnd
*/
public Long getIdMaxValueEnd() {
return this.idMaxValueEnd;
}
/**
* 设置 结束 当前id最大值
*
* @param idMaxValueEnd
*/
public void setIdMaxValueEnd(Long idMaxValueEnd) {
this.idMaxValueEnd = idMaxValueEnd;
}
/**
* 获取 增加 当前id最大值
*
* @return idMaxValueIncrement
*/
public Long getIdMaxValueIncrement() {
return this.idMaxValueIncrement;
}
/**
* 设置 增加 当前id最大值
*
* @param idMaxValueIncrement
*/
public void setIdMaxValueIncrement(Long idMaxValueIncrement) {
this.idMaxValueIncrement = idMaxValueIncrement;
}
/**
* 获取 当前id最大值
*
* @return idMaxValueList
*/
public List<Long> getIdMaxValueList() {
return this.idMaxValueList;
}
/**
* 设置 当前id最大值
*
* @param idMaxValueList
*/
public void setIdMaxValueList(List<Long> idMaxValueList) {
this.idMaxValueList = idMaxValueList;
}
/**
* 获取 备注
*
* @return remarkList
*/
public List<String> getRemarkList() {
return this.remarkList;
}
/**
* 设置 备注
*
* @param remarkList
*/
public void setRemarkList(List<String> remarkList) {
this.remarkList = remarkList;
}
/**
* 获取 开始 版本号,默认0
*
* @return versionNumStart
*/
public Long getVersionNumStart() {
return this.versionNumStart;
}
/**
* 设置 开始 版本号,默认0
*
* @param versionNumStart
*/
public void setVersionNumStart(Long versionNumStart) {
this.versionNumStart = versionNumStart;
}
/**
* 获取 结束 版本号,默认0
*
* @return versionNumEnd
*/
public Long getVersionNumEnd() {
return this.versionNumEnd;
}
/**
* 设置 结束 版本号,默认0
*
* @param versionNumEnd
*/
public void setVersionNumEnd(Long versionNumEnd) {
this.versionNumEnd = versionNumEnd;
}
/**
* 获取 增加 版本号,默认0
*
* @return versionNumIncrement
*/
public Long getVersionNumIncrement() {
return this.versionNumIncrement;
}
/**
* 设置 增加 版本号,默认0
*
* @param versionNumIncrement
*/
public void setVersionNumIncrement(Long versionNumIncrement) {
this.versionNumIncrement = versionNumIncrement;
}
/**
* 获取 版本号,默认0
*
* @return versionNumList
*/
public List<Long> getVersionNumList() {
return this.versionNumList;
}
/**
* 设置 版本号,默认0
*
* @param versionNumList
*/
public void setVersionNumList(List<Long> versionNumList) {
this.versionNumList = versionNumList;
}
/**
* 获取 开始 最后修改时间
*
* @return gmtModifyStart
*/
public String getGmtModifyStart() {
return this.gmtModifyStart;
}
/**
* 设置 开始 最后修改时间
*
* @param gmtModifyStart
*/
public void setGmtModifyStart(String gmtModifyStart) {
this.gmtModifyStart = gmtModifyStart;
}
/**
* 获取 结束 最后修改时间
*
* @return gmtModifyEnd
*/
public String getGmtModifyEnd() {
return this.gmtModifyEnd;
}
/**
* 设置 结束 最后修改时间
*
* @param gmtModifyEnd
*/
public void setGmtModifyEnd(String gmtModifyEnd) {
this.gmtModifyEnd = gmtModifyEnd;
}
}
\ No newline at end of file
package com.mortals.xhx.base.system.idgenerator.service;
import com.mortals.xhx.base.system.idgenerator.service.impl.IdgeneratorServiceImpl;
import java.util.List;
/**
* <p>Title: id生成器</p>
* <p>Description: IdgeneratorService service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
public interface IdgeneratorService {
/**
* 获取Long类型ID
*
* @param idGeneratorKey
* @param factorInfo 生成因子,根据各IdGeneratorKey要求选择传入
* @return
* @createTime 2016年3月16日 上午10:43:22
*/
Long getLongId(IdgeneratorServiceImpl.IdGeneratorKey idGeneratorKey, Object... factorInfo);
/**
* 获取String类型ID
*
* @param idGeneratorKey
* @param factorInfo 生成因子,根据各IdGeneratorKey要求选择传入
* @return
* @createTime 2016年3月16日 上午10:43:38
*/
String getStringId(IdgeneratorServiceImpl.IdGeneratorKey idGeneratorKey, Object... factorInfo);
/**
* 批量获取Long类型ID
*
* @param idGeneratorKey
* @param factorInfo
* @return
*/
List<Long> getLongIdList(IdgeneratorServiceImpl.IdGeneratorKey idGeneratorKey, Object... factorInfo);
}
\ No newline at end of file
/**
* 文件:OperLogDao.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.dao;
import com.mortals.xhx.base.system.oper.model.OperLogEntity;
import com.mortals.framework.dao.ICRUDDao;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogDao DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface OperLogDao extends ICRUDDao<OperLogEntity,Long> {
}
\ No newline at end of file
/**
* 文件:OperLogDaoImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.dao.ibatis;
import com.mortals.xhx.base.system.oper.dao.OperLogDao;
import com.mortals.xhx.base.system.oper.model.OperLogEntity;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import org.springframework.stereotype.Repository;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogDaoImpl DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Repository("operLogDao")
public class OperLogDaoImpl extends BaseCRUDDaoMybatis<OperLogEntity,Long> implements OperLogDao {
}
\ No newline at end of file
/**
* 文件:OperLogEntity.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.model;
import com.mortals.framework.model.BaseEntityLong;
import java.util.Date;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogEntity </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class OperLogEntity extends BaseEntityLong{
private static final long serialVersionUID = 1547777703333L;
/** 平台标识 */
private String platformMark;
/** 用户id */
private Long userId;
/** 用户名称 */
private String userName;
/** 用户登录名 */
private String loginName;
/** 请求地址 */
private String requestUrl;
/** 操作内容,记录操作具体信息,如修改前修改或的数据 */
private String content;
/** 操作IP地址 */
private String ip;
/** 操作时间 */
private Date logDate;
/** 操作类型,0:新增,1:修改,2:删除 */
private Integer operType;
public OperLogEntity(){
}
/**
* 获取 平台标识
* @return platformMark
*/
public String getPlatformMark(){
return this.platformMark;
}
/**
* 设置 平台标识
* @param platformMark
*/
public void setPlatformMark(String platformMark){
this.platformMark = platformMark;
}
/**
* 获取 用户id
* @return userId
*/
public Long getUserId(){
return this.userId;
}
/**
* 设置 用户id
* @param userId
*/
public void setUserId(Long userId){
this.userId = userId;
}
/**
* 获取 用户名称
* @return userName
*/
public String getUserName(){
return this.userName;
}
/**
* 设置 用户名称
* @param userName
*/
public void setUserName(String userName){
this.userName = userName;
}
/**
* 获取 用户登录名
* @return loginName
*/
public String getLoginName(){
return this.loginName;
}
/**
* 设置 用户登录名
* @param loginName
*/
public void setLoginName(String loginName){
this.loginName = loginName;
}
/**
* 获取 请求地址
* @return requestUrl
*/
public String getRequestUrl(){
return this.requestUrl;
}
/**
* 设置 请求地址
* @param requestUrl
*/
public void setRequestUrl(String requestUrl){
this.requestUrl = requestUrl;
}
/**
* 获取 操作内容,记录操作具体信息,如修改前修改或的数据
* @return content
*/
public String getContent(){
return this.content;
}
/**
* 设置 操作内容,记录操作具体信息,如修改前修改或的数据
* @param content
*/
public void setContent(String content){
this.content = content;
}
/**
* 获取 操作IP地址
* @return ip
*/
public String getIp(){
return this.ip;
}
/**
* 设置 操作IP地址
* @param ip
*/
public void setIp(String ip){
this.ip = ip;
}
/**
* 获取 操作时间
* @return logDate
*/
public Date getLogDate(){
return this.logDate;
}
/**
* 设置 操作时间
* @param logDate
*/
public void setLogDate(Date logDate){
this.logDate = logDate;
}
/**
* 获取 操作类型,0:新增,1:修改,2:删除
* @return operType
*/
public Integer getOperType(){
return this.operType;
}
/**
* 设置 操作类型,0:新增,1:修改,2:删除
* @param operType
*/
public void setOperType(Integer operType){
this.operType = operType;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj instanceof OperLogEntity) {
OperLogEntity tmp = (OperLogEntity) obj;
if (this.getId().longValue() == tmp.getId().longValue()) {
return true;
}
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append("id:").append(getId())
.append(",platformMark:").append(getPlatformMark())
.append(",userId:").append(getUserId())
.append(",userName:").append(getUserName())
.append(",loginName:").append(getLoginName())
.append(",requestUrl:").append(getRequestUrl())
.append(",content:").append(getContent())
.append(",ip:").append(getIp())
.append(",logDate:").append(getLogDate())
.append(",operType:").append(getOperType());
return sb.toString();
}
public void initAttrValue(){
this.platformMark = null;
this.userId = null;
this.userName = null;
this.loginName = null;
this.requestUrl = null;
this.content = null;
this.ip = null;
this.logDate = null;
this.operType = null;
}
}
\ No newline at end of file
/**
* 文件:OperLogQuery.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.model;
import java.util.List;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogQuery </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class OperLogQuery extends OperLogEntity{
private static final long serialVersionUID = 1547777703333L;
/** 开始 序号,主键,自增长 */
private Long idStart;
/** 结束 序号,主键,自增长 */
private Long idEnd;
/** 增加 序号,主键,自增长 */
private Long idIncrement;
/** 序号,主键,自增长 */
private List<Long> idList;
/** 平台标识 */
private List<String> platformMarkList;
/** 开始 用户id */
private Long userIdStart;
/** 结束 用户id */
private Long userIdEnd;
/** 增加 用户id */
private Long userIdIncrement;
/** 用户id */
private List<Long> userIdList;
/** 用户名称 */
private List<String> userNameList;
/** 用户登录名 */
private List<String> loginNameList;
/** 请求地址 */
private List<String> requestUrlList;
/** 操作内容,记录操作具体信息,如修改前修改或的数据 */
private List<String> contentList;
/** 操作IP地址 */
private List<String> ipList;
/** 开始 操作时间 */
private String logDateStart;
/** 结束 操作时间 */
private String logDateEnd;
/** 开始 操作类型,0:新增,1:修改,2:删除 */
private Integer operTypeStart;
/** 结束 操作类型,0:新增,1:修改,2:删除 */
private Integer operTypeEnd;
/** 增加 操作类型,0:新增,1:修改,2:删除 */
private Integer operTypeIncrement;
/** 操作类型,0:新增,1:修改,2:删除 */
private List<Integer> operTypeList;
public OperLogQuery(){
}
/**
* 获取 开始 序号,主键,自增长
* @return idStart
*/
public Long getIdStart(){
return this.idStart;
}
/**
* 设置 开始 序号,主键,自增长
* @param idStart
*/
public void setIdStart(Long idStart){
this.idStart = idStart;
}
/**
* 获取 结束 序号,主键,自增长
* @return idEnd
*/
public Long getIdEnd(){
return this.idEnd;
}
/**
* 设置 结束 序号,主键,自增长
* @param idEnd
*/
public void setIdEnd(Long idEnd){
this.idEnd = idEnd;
}
/**
* 获取 增加 序号,主键,自增长
* @return idIncrement
*/
public Long getIdIncrement(){
return this.idIncrement;
}
/**
* 设置 增加 序号,主键,自增长
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement;
}
/**
* 获取 序号,主键,自增长
* @return idList
*/
public List<Long> getIdList(){
return this.idList;
}
/**
* 设置 序号,主键,自增长
* @param idList
*/
public void setIdList(List<Long> idList){
this.idList = idList;
}
/**
* 获取 平台标识
* @return platformMarkList
*/
public List<String> getPlatformMarkList(){
return this.platformMarkList;
}
/**
* 设置 平台标识
* @param platformMarkList
*/
public void setPlatformMarkList(List<String> platformMarkList){
this.platformMarkList = platformMarkList;
}
/**
* 获取 开始 用户id
* @return userIdStart
*/
public Long getUserIdStart(){
return this.userIdStart;
}
/**
* 设置 开始 用户id
* @param userIdStart
*/
public void setUserIdStart(Long userIdStart){
this.userIdStart = userIdStart;
}
/**
* 获取 结束 用户id
* @return userIdEnd
*/
public Long getUserIdEnd(){
return this.userIdEnd;
}
/**
* 设置 结束 用户id
* @param userIdEnd
*/
public void setUserIdEnd(Long userIdEnd){
this.userIdEnd = userIdEnd;
}
/**
* 获取 增加 用户id
* @return userIdIncrement
*/
public Long getUserIdIncrement(){
return this.userIdIncrement;
}
/**
* 设置 增加 用户id
* @param userIdIncrement
*/
public void setUserIdIncrement(Long userIdIncrement){
this.userIdIncrement = userIdIncrement;
}
/**
* 获取 用户id
* @return userIdList
*/
public List<Long> getUserIdList(){
return this.userIdList;
}
/**
* 设置 用户id
* @param userIdList
*/
public void setUserIdList(List<Long> userIdList){
this.userIdList = userIdList;
}
/**
* 获取 用户名称
* @return userNameList
*/
public List<String> getUserNameList(){
return this.userNameList;
}
/**
* 设置 用户名称
* @param userNameList
*/
public void setUserNameList(List<String> userNameList){
this.userNameList = userNameList;
}
/**
* 获取 用户登录名
* @return loginNameList
*/
public List<String> getLoginNameList(){
return this.loginNameList;
}
/**
* 设置 用户登录名
* @param loginNameList
*/
public void setLoginNameList(List<String> loginNameList){
this.loginNameList = loginNameList;
}
/**
* 获取 请求地址
* @return requestUrlList
*/
public List<String> getRequestUrlList(){
return this.requestUrlList;
}
/**
* 设置 请求地址
* @param requestUrlList
*/
public void setRequestUrlList(List<String> requestUrlList){
this.requestUrlList = requestUrlList;
}
/**
* 获取 操作内容,记录操作具体信息,如修改前修改或的数据
* @return contentList
*/
public List<String> getContentList(){
return this.contentList;
}
/**
* 设置 操作内容,记录操作具体信息,如修改前修改或的数据
* @param contentList
*/
public void setContentList(List<String> contentList){
this.contentList = contentList;
}
/**
* 获取 操作IP地址
* @return ipList
*/
public List<String> getIpList(){
return this.ipList;
}
/**
* 设置 操作IP地址
* @param ipList
*/
public void setIpList(List<String> ipList){
this.ipList = ipList;
}
/**
* 获取 开始 操作时间
* @return logDateStart
*/
public String getLogDateStart(){
return this.logDateStart;
}
/**
* 设置 开始 操作时间
* @param logDateStart
*/
public void setLogDateStart(String logDateStart){
this.logDateStart = logDateStart;
}
/**
* 获取 结束 操作时间
* @return logDateEnd
*/
public String getLogDateEnd(){
return this.logDateEnd;
}
/**
* 设置 结束 操作时间
* @param logDateEnd
*/
public void setLogDateEnd(String logDateEnd){
this.logDateEnd = logDateEnd;
}
/**
* 获取 开始 操作类型,0:新增,1:修改,2:删除
* @return operTypeStart
*/
public Integer getOperTypeStart(){
return this.operTypeStart;
}
/**
* 设置 开始 操作类型,0:新增,1:修改,2:删除
* @param operTypeStart
*/
public void setOperTypeStart(Integer operTypeStart){
this.operTypeStart = operTypeStart;
}
/**
* 获取 结束 操作类型,0:新增,1:修改,2:删除
* @return operTypeEnd
*/
public Integer getOperTypeEnd(){
return this.operTypeEnd;
}
/**
* 设置 结束 操作类型,0:新增,1:修改,2:删除
* @param operTypeEnd
*/
public void setOperTypeEnd(Integer operTypeEnd){
this.operTypeEnd = operTypeEnd;
}
/**
* 获取 增加 操作类型,0:新增,1:修改,2:删除
* @return operTypeIncrement
*/
public Integer getOperTypeIncrement(){
return this.operTypeIncrement;
}
/**
* 设置 增加 操作类型,0:新增,1:修改,2:删除
* @param operTypeIncrement
*/
public void setOperTypeIncrement(Integer operTypeIncrement){
this.operTypeIncrement = operTypeIncrement;
}
/**
* 获取 操作类型,0:新增,1:修改,2:删除
* @return operTypeList
*/
public List<Integer> getOperTypeList(){
return this.operTypeList;
}
/**
* 设置 操作类型,0:新增,1:修改,2:删除
* @param operTypeList
*/
public void setOperTypeList(List<Integer> operTypeList){
this.operTypeList = operTypeList;
}
}
\ No newline at end of file
/**
* 文件:OperLogService.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.service;
import com.mortals.xhx.base.system.oper.model.OperLogEntity;
import com.mortals.xhx.common.code.OperTypeEnum;
import com.mortals.framework.model.BaseEntity;
import com.mortals.framework.service.ICRUDService;
import com.mortals.framework.service.IUser;
import javax.servlet.http.HttpServletRequest;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogService service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface OperLogService extends ICRUDService<OperLogEntity,Long> {
/**
* 保存新增数据的日志信息
* @param request 发送请求信息
* @param user 当前登录用户
* @param result 新增后的返回数据
*/
void saveCreateOperLog(HttpServletRequest request, IUser user, String result);
/**
* 保存更新数据日志信息
* @param request 发送请求信息
* @param user 当前登录用户
* @param oldEntity 原始数据
* @param newEntity 新数据
*/
void saveUpdateOperLog(HttpServletRequest request, IUser user, BaseEntity oldEntity, BaseEntity newEntity);
/**
* 保存删除操作日志信息
* @param request 发送请求信息
* @param user 当前登录用户
* @param result 新增后的返回数据
* @param id 删除的数据id
*/
void saveDeleteOperLog(HttpServletRequest request, IUser user, String result, String id);
/**
* 保存新增信息操作日志,内容直接取content字段,如果存在id会加上id信息
* @param request 发送请求信息
* @param user 当前登录用户
* @param content 需要记录的日志信息
* @param id 数据的id值
*/
void saveOperLog(HttpServletRequest request, IUser user, String content, String id);
/**
*
* @param request 发送请求信息
* @param user 当前登录用户
* @param oldEntity 原始数据
* @param newEntity 新数据
* @param operType 日志类型
* @param content 需要记录的日志信息
* @param id 数据的id值
*/
void insertOperLog(HttpServletRequest request, IUser user, BaseEntity oldEntity, BaseEntity newEntity, OperTypeEnum operType, String content, String id);
void insertOperLog(String ip, String requestUrl, Long userId, String userName, String loginName, String content);
}
\ No newline at end of file
/**
* 文件:OperLogServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.mortals.xhx.base.system.oper.dao.OperLogDao;
import com.mortals.xhx.base.system.oper.model.OperLogEntity;
import com.mortals.xhx.base.system.oper.service.OperLogService;
import com.mortals.xhx.common.code.OperTypeEnum;
import com.mortals.framework.ap.GlobalSysInfo;
import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.model.BaseEntity;
import com.mortals.framework.service.IUser;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.util.HttpUtil;
import com.mortals.framework.web.BaseController;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Service("operLogService")
public class OperLogServiceImpl extends AbstractCRUDServiceImpl<OperLogDao,OperLogEntity,Long> implements OperLogService {
@Override
public void saveCreateOperLog(HttpServletRequest request, IUser user, String result) {
JSONObject jsonObject = JSONObject.parseObject(result);
Map<String, Object> model = jsonObject.get(BaseController.KEY_RESULT_DATA) == null ? new HashMap<>() : (Map<String, Object>) jsonObject.get(BaseController.KEY_RESULT_DATA);
this.insertOperLog(request, user, null, null, OperTypeEnum.SAVE, jsonObject.get(BaseController.KEY_RESULT_MSG).toString(), model.get("id") == null ? "" : model.get("id").toString());
}
@Override
public void saveUpdateOperLog(HttpServletRequest request, IUser user, BaseEntity oldEntity, BaseEntity newEntity) {
this.insertOperLog(request, user, oldEntity, newEntity, OperTypeEnum.UPDATE, null, null);
}
@Override
public void saveDeleteOperLog(HttpServletRequest request, IUser user, String result, String id) {
JSONObject jsonObject = JSONObject.parseObject(result);
Map<String, Object> model = (Map<String, Object>) jsonObject.get(BaseController.KEY_RESULT_DATA);
this.insertOperLog(request, user, null, null, OperTypeEnum.DELETE, jsonObject.get(BaseController.KEY_RESULT_MSG).toString(), id);
}
@Override
public void saveOperLog(HttpServletRequest request, IUser user, String content, String id) {
this.insertOperLog(request, user, null, null, OperTypeEnum.OTHER, content, id);
}
@Override
public void insertOperLog(HttpServletRequest request, IUser user, BaseEntity oldEntity, BaseEntity newEntity, OperTypeEnum operType, String content, String id) {
OperLogEntity operLogEntity = new OperLogEntity();
operLogEntity.setIp(HttpUtil.getRequestIP(request));
operLogEntity.setLogDate(new Date());
operLogEntity.setPlatformMark(GlobalSysInfo.getPropertyValue(SysConstains.PROP_PLATFORM_MARK));
operLogEntity.setOperType(operType.getValue());
operLogEntity.setRequestUrl(request.getRequestURI());
if (user != null) {
operLogEntity.setLoginName(user.getLoginName());
operLogEntity.setUserId(user.getId());
operLogEntity.setUserName(user.getRealName());
}
switch (operType) {
case SAVE:
formatterLogContent(operLogEntity, content, id, operType);
break;
case UPDATE:
formatterLogContent(operLogEntity, oldEntity, newEntity);
break;
case DELETE:
formatterLogContent(operLogEntity, content, id, operType);
break;
default:
operLogEntity.setOperType(OperTypeEnum.UPDATE.getValue());
operLogEntity.setContent(StringUtils.isBlank(id) ? content : content + "id:" + id);
break;
}
super.save(operLogEntity, null);
}
@Override
public void insertOperLog(String ip,String requestUrl,Long userId, String userName, String loginName,String content){
OperLogEntity operLogEntity = new OperLogEntity();
operLogEntity.setIp(ip);
operLogEntity.setLogDate(new Date());
operLogEntity.setPlatformMark(GlobalSysInfo.getPropertyValue(SysConstains.PROP_PLATFORM_MARK));
// operLogEntity.setOperType(operType.getValue());
operLogEntity.setRequestUrl(requestUrl);
operLogEntity.setLoginName(loginName);
operLogEntity.setUserId(userId);
operLogEntity.setUserName(userName);
operLogEntity.setContent(content);
super.save(operLogEntity, null);
}
private void formatterLogContent(OperLogEntity operLogEntity, String content, String id, OperTypeEnum operType) {
if (operType == OperTypeEnum.SAVE) {
content = operLogEntity.getUserName() + "在" + content + "中新增一条数据" ;
} else if (operType == OperTypeEnum.DELETE) {
content = operLogEntity.getUserName() + "在" + content + ",id为:" + id;
}
content += StringUtils.isBlank("id") ? "":",id为:" + id;
operLogEntity.setContent(content);
}
private void formatterLogContent(OperLogEntity operLogEntity, BaseEntity oldEntity, BaseEntity newEntity) {
if (oldEntity == null || newEntity == null) {
return;
}
StringBuilder content = new StringBuilder();
Class clazz = oldEntity.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
try {
Object oldValue = field.get(oldEntity);
Object newValue = field.get(newEntity);
if (String.valueOf(oldValue).equals(String.valueOf(newValue))) {
continue;
}
content.append(field.getName() + "由:" + oldValue + "变更为:" + newValue + ";");
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
if (content.length() == 0) {
content.append("无内容变更");
}
operLogEntity.setContent(content.toString());
}
}
\ No newline at end of file
/**
* 文件:OperLogController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.xhx.base.system.oper.model.OperLogEntity;
import com.mortals.xhx.base.system.oper.service.OperLogService;
import com.mortals.xhx.common.code.OperTypeEnum;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@RestController
@RequestMapping("oper/log")
public class OperLogController extends BaseCRUDJsonMappingController<OperLogService,OperLogForm,OperLogEntity,Long> {
public OperLogController(){
super.setFormClass(OperLogForm.class);
super.setModuleDesc("操作日志");
}
@Override
protected void init(HttpServletRequest request, HttpServletResponse response, OperLogForm form,
Map<String, Object> model, Context context) {
Map<String, Object> status = new HashMap<String, Object>(1);
// 返回日志类型
status.put("operType", OperTypeEnum.getEnumMap());
model.put(KEY_RESULT_DICT, status);
super.init(request, response, form, model, context);
}
/**
* 查询产品基本信息
*/
@Override
@PostMapping(value = "list")
public String list(HttpServletRequest request, HttpServletResponse response, OperLogForm form) {
try {
form.getQuery().setOrderColList(new ArrayList<OrderCol>() {
{
add(new OrderCol("a.logDate", "desc"));
}
});
return super.list(request, response, form);
} catch (Exception e) {
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
}
\ No newline at end of file
/**
* 文件:OperLogForm.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.oper.web;
import com.mortals.xhx.base.system.oper.model.OperLogEntity;
import com.mortals.xhx.base.system.oper.model.OperLogQuery;
import com.mortals.framework.web.BaseCRUDFormLong;
/**
* <p>Title: 操作日志</p>
* <p>Description: OperLogForm </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class OperLogForm extends BaseCRUDFormLong<OperLogEntity> {
private OperLogEntity operLog = new OperLogEntity();
private OperLogQuery query = new OperLogQuery();
public OperLogForm(){
}
@Override
public OperLogEntity getEntity() {
return operLog;
}
public OperLogEntity getOperLog() {
return operLog;
}
public void setOperLog(OperLogEntity operLog) {
this.operLog = operLog;
}
@Override
public OperLogQuery getQuery() {
return query;
}
public void setQuery(OperLogQuery query) {
this.query = query;
}
}
\ No newline at end of file
/**
* 文件:TableIndexDao.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.dao;
import com.mortals.xhx.base.system.table.model.TableIndexEntity;
import com.mortals.framework.dao.ICRUDDao;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexDao DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface TableIndexDao extends ICRUDDao<TableIndexEntity,Long> {
}
\ No newline at end of file
/**
* 文件:TableIndexDaoImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.dao.ibatis;
import com.mortals.xhx.base.system.table.dao.TableIndexDao;
import com.mortals.xhx.base.system.table.model.TableIndexEntity;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import org.springframework.stereotype.Repository;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexDaoImpl DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Repository("tableIndexDao")
public class TableIndexDaoImpl extends BaseCRUDDaoMybatis<TableIndexEntity,Long> implements TableIndexDao {
}
\ No newline at end of file
/**
* 文件:TableIndexEntity.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.model;
import com.mortals.framework.model.BaseEntityLong;
import java.util.Date;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexEntity </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class TableIndexEntity extends BaseEntityLong{
private static final long serialVersionUID = 1547777703369L;
/** 表名称 */
private String tableName;
/** 表标识 */
private String tableMark;
/** 创建时间 */
private Date createTime;
public TableIndexEntity(){
}
/**
* 获取 表名称
* @return tableName
*/
public String getTableName(){
return this.tableName;
}
/**
* 设置 表名称
* @param tableName
*/
public void setTableName(String tableName){
this.tableName = tableName;
}
/**
* 获取 表标识
* @return tableMark
*/
public String getTableMark(){
return this.tableMark;
}
/**
* 设置 表标识
* @param tableMark
*/
public void setTableMark(String tableMark){
this.tableMark = tableMark;
}
/**
* 获取 创建时间
* @return createTime
*/
public Date getCreateTime(){
return this.createTime;
}
/**
* 设置 创建时间
* @param createTime
*/
public void setCreateTime(Date createTime){
this.createTime = createTime;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj instanceof TableIndexEntity) {
TableIndexEntity tmp = (TableIndexEntity) obj;
if (this.getId().longValue() == tmp.getId().longValue()) {
return true;
}
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append("id:").append(getId())
.append(",tableName:").append(getTableName())
.append(",tableMark:").append(getTableMark())
.append(",createTime:").append(getCreateTime());
return sb.toString();
}
public void initAttrValue(){
this.tableName = null;
this.tableMark = null;
this.createTime = null;
}
}
\ No newline at end of file
/**
* 文件:TableIndexQuery.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.model;
import java.util.List;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexQuery </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class TableIndexQuery extends TableIndexEntity{
private static final long serialVersionUID = 1547777703369L;
/** 开始 菜单ID,主键,自增长 */
private Long idStart;
/** 结束 菜单ID,主键,自增长 */
private Long idEnd;
/** 增加 菜单ID,主键,自增长 */
private Long idIncrement;
/** 菜单ID,主键,自增长 */
private List<Long> idList;
/** 表名称 */
private List<String> tableNameList;
/** 表标识 */
private List<String> tableMarkList;
/** 开始 创建时间 */
private String createTimeStart;
/** 结束 创建时间 */
private String createTimeEnd;
public TableIndexQuery(){
}
/**
* 获取 开始 菜单ID,主键,自增长
* @return idStart
*/
public Long getIdStart(){
return this.idStart;
}
/**
* 设置 开始 菜单ID,主键,自增长
* @param idStart
*/
public void setIdStart(Long idStart){
this.idStart = idStart;
}
/**
* 获取 结束 菜单ID,主键,自增长
* @return idEnd
*/
public Long getIdEnd(){
return this.idEnd;
}
/**
* 设置 结束 菜单ID,主键,自增长
* @param idEnd
*/
public void setIdEnd(Long idEnd){
this.idEnd = idEnd;
}
/**
* 获取 增加 菜单ID,主键,自增长
* @return idIncrement
*/
public Long getIdIncrement(){
return this.idIncrement;
}
/**
* 设置 增加 菜单ID,主键,自增长
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement;
}
/**
* 获取 菜单ID,主键,自增长
* @return idList
*/
public List<Long> getIdList(){
return this.idList;
}
/**
* 设置 菜单ID,主键,自增长
* @param idList
*/
public void setIdList(List<Long> idList){
this.idList = idList;
}
/**
* 获取 表名称
* @return tableNameList
*/
public List<String> getTableNameList(){
return this.tableNameList;
}
/**
* 设置 表名称
* @param tableNameList
*/
public void setTableNameList(List<String> tableNameList){
this.tableNameList = tableNameList;
}
/**
* 获取 表标识
* @return tableMarkList
*/
public List<String> getTableMarkList(){
return this.tableMarkList;
}
/**
* 设置 表标识
* @param tableMarkList
*/
public void setTableMarkList(List<String> tableMarkList){
this.tableMarkList = tableMarkList;
}
/**
* 获取 开始 创建时间
* @return createTimeStart
*/
public String getCreateTimeStart(){
return this.createTimeStart;
}
/**
* 设置 开始 创建时间
* @param createTimeStart
*/
public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
}
/**
* 获取 结束 创建时间
* @return createTimeEnd
*/
public String getCreateTimeEnd(){
return this.createTimeEnd;
}
/**
* 设置 结束 创建时间
* @param createTimeEnd
*/
public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
}
}
\ No newline at end of file
/**
* 文件:TableIndexService.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.service;
import com.mortals.xhx.base.system.table.model.TableIndexEntity;
import com.mortals.framework.service.ICRUDService;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexService service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface TableIndexService extends ICRUDService<TableIndexEntity,Long> {
}
\ No newline at end of file
/**
* 文件:TableIndexServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.service.impl;
import com.mortals.xhx.base.system.table.dao.TableIndexDao;
import com.mortals.xhx.base.system.table.model.TableIndexEntity;
import com.mortals.xhx.base.system.table.service.TableIndexService;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Service("tableIndexService")
public class TableIndexServiceImpl extends AbstractCRUDServiceImpl<TableIndexDao,TableIndexEntity,Long> implements TableIndexService {
}
\ No newline at end of file
/**
* 文件:TableIndexController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.web;
import com.mortals.xhx.base.system.table.model.TableIndexEntity;
import com.mortals.xhx.base.system.table.service.TableIndexService;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@RestController
@RequestMapping("table/index")
public class TableIndexController extends BaseCRUDJsonMappingController<TableIndexService, TableIndexForm,TableIndexEntity,Long> {
public TableIndexController(){
super.setFormClass(TableIndexForm.class);
super.setModuleDesc("分表索引信息");
}
}
\ No newline at end of file
/**
* 文件:TableIndexForm.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.table.web;
import com.mortals.xhx.base.system.table.model.TableIndexEntity;
import com.mortals.xhx.base.system.table.model.TableIndexQuery;
import com.mortals.framework.web.BaseCRUDFormLong;
/**
* <p>Title: 分表索引信息</p>
* <p>Description: TableIndexForm </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class TableIndexForm extends BaseCRUDFormLong<TableIndexEntity> {
private TableIndexEntity tableIndex = new TableIndexEntity();
private TableIndexQuery query = new TableIndexQuery();
public TableIndexForm(){
}
@Override
public TableIndexEntity getEntity() {
return tableIndex;
}
public TableIndexEntity getTableIndex() {
return tableIndex;
}
public void setTableIndex(TableIndexEntity tableIndex) {
this.tableIndex = tableIndex;
}
@Override
public TableIndexQuery getQuery() {
return query;
}
public void setQuery(TableIndexQuery query) {
this.query = query;
}
}
\ No newline at end of file
/**
* 文件:ValidCodeDao.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.dao;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.framework.dao.ICRUDDao;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeDao DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface ValidCodeDao extends ICRUDDao<ValidCodeEntity,Long> {
}
\ No newline at end of file
/**
* 文件:ValidCodeDaoImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.dao.ibatis;
import com.mortals.xhx.base.system.valid.dao.ValidCodeDao;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import org.springframework.stereotype.Repository;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeDaoImpl DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Repository("validCodeDao")
public class ValidCodeDaoImpl extends BaseCRUDDaoMybatis<ValidCodeEntity,Long> implements ValidCodeDao {
}
\ No newline at end of file
/**
* 文件:ValidCodeEntity.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.model;
import com.mortals.framework.model.BaseEntityLong;
import java.util.Date;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeEntity </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class ValidCodeEntity extends BaseEntityLong{
private static final long serialVersionUID = 1547777703382L;
/** 验证码 */
private String code;
/** 校验地址,email校验使用 */
private String url;
/** 校验手机号 */
private String mobile;
/** 校验邮箱 */
private String email;
/** 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0 */
private Integer type;
/** 会话ID */
private String sessionId;
/** IP地址 */
private String ip;
/** 创建时间 */
private Date createTime;
/** 失效时间 */
private Date lapseTime;
public ValidCodeEntity(){
}
/**
* 获取 验证码
* @return code
*/
public String getCode(){
return this.code;
}
/**
* 设置 验证码
* @param code
*/
public void setCode(String code){
this.code = code;
}
/**
* 获取 校验地址,email校验使用
* @return url
*/
public String getUrl(){
return this.url;
}
/**
* 设置 校验地址,email校验使用
* @param url
*/
public void setUrl(String url){
this.url = url;
}
/**
* 获取 校验手机号
* @return mobile
*/
public String getMobile(){
return this.mobile;
}
/**
* 设置 校验手机号
* @param mobile
*/
public void setMobile(String mobile){
this.mobile = mobile;
}
/**
* 获取 校验邮箱
* @return email
*/
public String getEmail(){
return this.email;
}
/**
* 设置 校验邮箱
* @param email
*/
public void setEmail(String email){
this.email = email;
}
/**
* 获取 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @return type
*/
public Integer getType(){
return this.type;
}
/**
* 设置 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @param type
*/
public void setType(Integer type){
this.type = type;
}
/**
* 获取 会话ID
* @return sessionId
*/
public String getSessionId(){
return this.sessionId;
}
/**
* 设置 会话ID
* @param sessionId
*/
public void setSessionId(String sessionId){
this.sessionId = sessionId;
}
/**
* 获取 IP地址
* @return ip
*/
public String getIp(){
return this.ip;
}
/**
* 设置 IP地址
* @param ip
*/
public void setIp(String ip){
this.ip = ip;
}
/**
* 获取 创建时间
* @return createTime
*/
public Date getCreateTime(){
return this.createTime;
}
/**
* 设置 创建时间
* @param createTime
*/
public void setCreateTime(Date createTime){
this.createTime = createTime;
}
/**
* 获取 失效时间
* @return lapseTime
*/
public Date getLapseTime(){
return this.lapseTime;
}
/**
* 设置 失效时间
* @param lapseTime
*/
public void setLapseTime(Date lapseTime){
this.lapseTime = lapseTime;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj instanceof ValidCodeEntity) {
ValidCodeEntity tmp = (ValidCodeEntity) obj;
if (this.getId().longValue() == tmp.getId().longValue()) {
return true;
}
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append("id:").append(getId())
.append(",code:").append(getCode())
.append(",url:").append(getUrl())
.append(",mobile:").append(getMobile())
.append(",email:").append(getEmail())
.append(",type:").append(getType())
.append(",sessionId:").append(getSessionId())
.append(",ip:").append(getIp())
.append(",createTime:").append(getCreateTime())
.append(",lapseTime:").append(getLapseTime());
return sb.toString();
}
public void initAttrValue(){
this.code = null;
this.url = null;
this.mobile = null;
this.email = null;
this.type = 0;
this.sessionId = null;
this.ip = null;
this.createTime = null;
this.lapseTime = null;
}
}
\ No newline at end of file
/**
* 文件:ValidCodeQuery.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.model;
import java.util.List;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeQuery </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class ValidCodeQuery extends ValidCodeEntity{
private static final long serialVersionUID = 1547777703382L;
/** 开始 菜单ID,主键,自增长 */
private Long idStart;
/** 结束 菜单ID,主键,自增长 */
private Long idEnd;
/** 增加 菜单ID,主键,自增长 */
private Long idIncrement;
/** 菜单ID,主键,自增长 */
private List<Long> idList;
/** 验证码 */
private List<String> codeList;
/** 校验地址,email校验使用 */
private List<String> urlList;
/** 校验手机号 */
private List<String> mobileList;
/** 校验邮箱 */
private List<String> emailList;
/** 开始 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0 */
private Integer typeStart;
/** 结束 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0 */
private Integer typeEnd;
/** 增加 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0 */
private Integer typeIncrement;
/** 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0 */
private List<Integer> typeList;
/** 会话ID */
private List<String> sessionIdList;
/** IP地址 */
private List<String> ipList;
/** 开始 创建时间 */
private String createTimeStart;
/** 结束 创建时间 */
private String createTimeEnd;
/** 开始 失效时间 */
private String lapseTimeStart;
/** 结束 失效时间 */
private String lapseTimeEnd;
public ValidCodeQuery(){
}
/**
* 获取 开始 菜单ID,主键,自增长
* @return idStart
*/
public Long getIdStart(){
return this.idStart;
}
/**
* 设置 开始 菜单ID,主键,自增长
* @param idStart
*/
public void setIdStart(Long idStart){
this.idStart = idStart;
}
/**
* 获取 结束 菜单ID,主键,自增长
* @return idEnd
*/
public Long getIdEnd(){
return this.idEnd;
}
/**
* 设置 结束 菜单ID,主键,自增长
* @param idEnd
*/
public void setIdEnd(Long idEnd){
this.idEnd = idEnd;
}
/**
* 获取 增加 菜单ID,主键,自增长
* @return idIncrement
*/
public Long getIdIncrement(){
return this.idIncrement;
}
/**
* 设置 增加 菜单ID,主键,自增长
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement;
}
/**
* 获取 菜单ID,主键,自增长
* @return idList
*/
public List<Long> getIdList(){
return this.idList;
}
/**
* 设置 菜单ID,主键,自增长
* @param idList
*/
public void setIdList(List<Long> idList){
this.idList = idList;
}
/**
* 获取 验证码
* @return codeList
*/
public List<String> getCodeList(){
return this.codeList;
}
/**
* 设置 验证码
* @param codeList
*/
public void setCodeList(List<String> codeList){
this.codeList = codeList;
}
/**
* 获取 校验地址,email校验使用
* @return urlList
*/
public List<String> getUrlList(){
return this.urlList;
}
/**
* 设置 校验地址,email校验使用
* @param urlList
*/
public void setUrlList(List<String> urlList){
this.urlList = urlList;
}
/**
* 获取 校验手机号
* @return mobileList
*/
public List<String> getMobileList(){
return this.mobileList;
}
/**
* 设置 校验手机号
* @param mobileList
*/
public void setMobileList(List<String> mobileList){
this.mobileList = mobileList;
}
/**
* 获取 校验邮箱
* @return emailList
*/
public List<String> getEmailList(){
return this.emailList;
}
/**
* 设置 校验邮箱
* @param emailList
*/
public void setEmailList(List<String> emailList){
this.emailList = emailList;
}
/**
* 获取 开始 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @return typeStart
*/
public Integer getTypeStart(){
return this.typeStart;
}
/**
* 设置 开始 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @param typeStart
*/
public void setTypeStart(Integer typeStart){
this.typeStart = typeStart;
}
/**
* 获取 结束 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @return typeEnd
*/
public Integer getTypeEnd(){
return this.typeEnd;
}
/**
* 设置 结束 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @param typeEnd
*/
public void setTypeEnd(Integer typeEnd){
this.typeEnd = typeEnd;
}
/**
* 获取 增加 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @return typeIncrement
*/
public Integer getTypeIncrement(){
return this.typeIncrement;
}
/**
* 设置 增加 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @param typeIncrement
*/
public void setTypeIncrement(Integer typeIncrement){
this.typeIncrement = typeIncrement;
}
/**
* 获取 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @return typeList
*/
public List<Integer> getTypeList(){
return this.typeList;
}
/**
* 设置 校验方式,0:图片校验,1:手机校验,2:邮箱校验,默认0
* @param typeList
*/
public void setTypeList(List<Integer> typeList){
this.typeList = typeList;
}
/**
* 获取 会话ID
* @return sessionIdList
*/
public List<String> getSessionIdList(){
return this.sessionIdList;
}
/**
* 设置 会话ID
* @param sessionIdList
*/
public void setSessionIdList(List<String> sessionIdList){
this.sessionIdList = sessionIdList;
}
/**
* 获取 IP地址
* @return ipList
*/
public List<String> getIpList(){
return this.ipList;
}
/**
* 设置 IP地址
* @param ipList
*/
public void setIpList(List<String> ipList){
this.ipList = ipList;
}
/**
* 获取 开始 创建时间
* @return createTimeStart
*/
public String getCreateTimeStart(){
return this.createTimeStart;
}
/**
* 设置 开始 创建时间
* @param createTimeStart
*/
public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
}
/**
* 获取 结束 创建时间
* @return createTimeEnd
*/
public String getCreateTimeEnd(){
return this.createTimeEnd;
}
/**
* 设置 结束 创建时间
* @param createTimeEnd
*/
public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
}
/**
* 获取 开始 失效时间
* @return lapseTimeStart
*/
public String getLapseTimeStart(){
return this.lapseTimeStart;
}
/**
* 设置 开始 失效时间
* @param lapseTimeStart
*/
public void setLapseTimeStart(String lapseTimeStart){
this.lapseTimeStart = lapseTimeStart;
}
/**
* 获取 结束 失效时间
* @return lapseTimeEnd
*/
public String getLapseTimeEnd(){
return this.lapseTimeEnd;
}
/**
* 设置 结束 失效时间
* @param lapseTimeEnd
*/
public void setLapseTimeEnd(String lapseTimeEnd){
this.lapseTimeEnd = lapseTimeEnd;
}
}
\ No newline at end of file
/**
* 文件:ValidCodeService.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.service;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ICRUDService;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeService service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface ValidCodeService extends ICRUDService<ValidCodeEntity,Long> {
/**
* 创建图片校验码
* @param sessionId
* @param ip
* @return
* @throws AppException
*/
public String createImageValidCode(String sessionId, String ip) throws AppException;
/**
* 校验图片校验码
* @param sessionId
* @param ip
* @param code
* @return
* @throws AppException
*/
public boolean doCheckImageValidCode(String sessionId, String ip, String code) throws AppException;
/**
* 创建短信校验码
* @param sessionId
* @param ip
* @param mobile
* @return
* @throws AppException
*/
public boolean createSmsValidCode(String sessionId, String ip, String mobile) throws AppException;
/**
* 校验短信校验码
* @param sessionId
* @param ip
* @param mobile
* @param code
* @return
* @throws AppException
*/
public boolean doCheckSmsValidCode(String sessionId, String ip, String mobile, String code) throws AppException;
}
\ No newline at end of file
/**
* 文件:ValidCodeServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.service.impl;
import com.mortals.xhx.base.system.valid.dao.ValidCodeDao;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.xhx.base.system.valid.model.ValidCodeQuery;
import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.framework.common.code.ValidCodeType;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.util.SecurityCode;
import org.springframework.stereotype.Service;
import java.util.Calendar;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Service("validCodeService")
public class ValidCodeServiceImpl extends AbstractCRUDServiceImpl<ValidCodeDao, ValidCodeEntity,Long> implements ValidCodeService {
@Override
public String createImageValidCode(String sessionId, String ip) throws AppException {
String code = SecurityCode.getSecurityCode();
Calendar cal = Calendar.getInstance();
ValidCodeEntity entity = new ValidCodeEntity();
entity.setType(ValidCodeType.IMAGE.getValue());
entity.setCode(code);
entity.setSessionId(sessionId);
entity.setIp(ip);
entity.setCreateTime(cal.getTime());
cal.add(Calendar.MINUTE, 10);
entity.setLapseTime(cal.getTime());
dao.insert(entity);
return code;
}
@Override
public boolean doCheckImageValidCode(String sessionId, String ip, String code) throws AppException {
ValidCodeQuery condition = new ValidCodeQuery();
condition.setSessionId(sessionId);
condition.setCode(code);
int result = dao.delete(condition);
return result > 0;
}
@Override
public boolean createSmsValidCode(String sessionId, String ip, String mobile) throws AppException {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean doCheckSmsValidCode(String sessionId, String ip, String mobile, String code) throws AppException {
// TODO Auto-generated method stub
return false;
}
}
\ No newline at end of file
/**
* 文件:ValidCodeController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.xhx.common.code.ValidCodeType;
import com.mortals.framework.model.Context;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@RestController
@RequestMapping("validcode")
public class ValidCodeController extends BaseCRUDJsonMappingController<ValidCodeService,ValidCodeForm, ValidCodeEntity,Long> {
public ValidCodeController(){
super.setFormClass(ValidCodeForm.class);
super.setModuleDesc("验证码信息");
}
@Override
protected void init(HttpServletRequest request, HttpServletResponse response, ValidCodeForm form,
Map<String, Object> model, Context context) {
Map<String,Object> status = new HashMap<String,Object>();
status.put("type", ValidCodeType.getEnumMap());
model.put(KEY_RESULT_DICT,status);
super.init(request, response, form, model, context);
}
@Override
@PostMapping(value="list")
public String list(HttpServletRequest request, HttpServletResponse response, ValidCodeForm form) {
try{
return super.list(request, response, form);
}catch(Exception e){
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
}
\ No newline at end of file
/**
* 文件:ValidCodeForm.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.base.system.valid.web;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.xhx.base.system.valid.model.ValidCodeQuery;
import com.mortals.framework.web.BaseCRUDFormLong;
/**
* <p>Title: 验证码信息</p>
* <p>Description: ValidCodeForm </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class ValidCodeForm extends BaseCRUDFormLong<ValidCodeEntity> {
private ValidCodeEntity validCode = new ValidCodeEntity();
private ValidCodeQuery query = new ValidCodeQuery();
public ValidCodeForm(){
}
@Override
public ValidCodeEntity getEntity() {
return validCode;
}
public ValidCodeEntity getValidCode() {
return validCode;
}
public void setValidCode(ValidCodeEntity validCode) {
this.validCode = validCode;
}
@Override
public ValidCodeQuery getQuery() {
return query;
}
public void setQuery(ValidCodeQuery query) {
this.query = query;
}
}
\ No newline at end of file
package com.mortals.xhx.common.key;
public final class Constant {
/**
* 基础代码版本 Z-BASE.MANAGER-S1.0.0
*/
public final static String BASEMANAGER_VERSION = "Z-BASE.MANAGER-S1.0.0";
}
package com.mortals.xhx.common.key;
/**
* 参数表对应key定义对应
* @author linlc
*
*/
public class ParamKey {
/** 文件访问的地址 */
public static final String FILE_URL = "iot:base:param:fileUrl";
}
package com.mortals.xhx.common.key;
/**
* Redis缓存key定义
*/
public class RedisKey {
/**
* 登录 cookies key
*/
public static final String KEY_MENU_CACHE = "iot:base:MenuCacheKey:";
}
package com.mortals.xhx.common.pdu;
/**
* @author karlhoo
*/
public class ApiRespPdu<T> {
/**
* 结果编码
*/
private int code;
/**
* 结果描述
*/
private String msg;
/**
* 响应数据
*/
private T data;
}
package com.mortals.xhx.common.pdu.sms;
import lombok.Data;
@Data
public class SmsSendReq {
private String mobile;
private String templeteId;
private String[] params;
}
package com.mortals.xhx.common.pdu.sms;
import lombok.Data;
@Data
public class SmsSendResp {
}
package com.mortals.xhx.common.uid;
/**
* 序列号生成工具
*
* @author GuoMin
* @date 2017年11月2日
*/
public class SeqGenerator {
/**
* 开始时间截 (2017-01-01)
*/
private static final long twepoch = 1483200000000L;
/**
* 时间所占的位数
*/
private static final long timestampBits = 41L;
/**
* 机器id所占的位数
*/
private static final long workerIdBits = 10L;
/**
* 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数)
*/
private static final long maxWorkerId = -1L ^ (-1L << workerIdBits);
/**
* 序列在id中占的位数
*/
private static final long sequenceBits = 12L;
/**
* 机器ID向左移12位
*/
private static final long workerIdShift = sequenceBits;
/**
* 时间截向左移22位(10+12)
*/
private static final long timestampLeftShift = sequenceBits + workerIdBits;
/**
* 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095)
*/
private static final long sequenceMask = -1L ^ (-1L << sequenceBits);
/**
* 毫秒内序列(0~4095)
*/
private static long sequence = 0L;
/**
* 上次生成ID的时间截
*/
private static long lastTimestamp = -1L;
/**
* 分布式订单号<br>
* 为一个64位Long型数字,结构如下(每部分用-分开):<br>
* 0 - 0000000000 0000000000 0000000000 0000000000 0 - 0000000000 - 000000000000 <br>
* 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0<br>
* 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截),
* 这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序twepoch属性)。
* 41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br>
* 10位的数据机器位,可以部署在1024个节点<br>
* 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
*
* @param workerId 工作主机ID(取值:0 ~ 1023)
*/
public static synchronized long nextId(int workerId) {
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
}
long timestamp = timeGen();
//如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常
if (timestamp < lastTimestamp) {
throw new RuntimeException(
String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
}
//如果是同一时间生成的,则进行毫秒内序列
if (lastTimestamp == timestamp) {
sequence = (sequence + 1) & sequenceMask;
//毫秒内序列溢出
if (sequence == 0) {
//阻塞到下一个毫秒,获得新的时间戳
timestamp = tilNextMillis(lastTimestamp);
}
}
//时间戳改变,毫秒内序列重置
else {
sequence = 0L;
}
//上次生成ID的时间截
lastTimestamp = timestamp;
//移位并通过或运算拼到一起组成64位的ID
// System.out.println(String.format("timestamp:%d, workerId:%d, sequence:%d", timestamp - twepoch, workerId, sequence));
return ((timestamp - twepoch) << timestampLeftShift)
| (workerId << workerIdShift)
| sequence;
}
public static synchronized Long[] parserId(long id) {
long timestamp = id >>> timestampLeftShift;
long workerId = id << timestampBits + 1;
workerId = workerId >>> timestampBits + sequenceBits + 1;
long sequence = id << timestampBits + workerIdBits + 1;
sequence = sequence >>> timestampBits + workerIdBits + 1;
// System.out.println(String.format("timestamp:%d, workerId:%d, sequence:%d", timestamp, workerId, sequence));
return new Long[]{timestamp + twepoch, workerId, sequence};
}
/**
* 阻塞到下一个毫秒,直到获得新的时间戳
*
* @param lastTimestamp 上次生成ID的时间截
* @return 当前时间戳
*/
private static long tilNextMillis(long lastTimestamp) {
long timestamp = timeGen();
while (timestamp <= lastTimestamp) {
timestamp = timeGen();
}
return timestamp;
}
/**
* 返回以毫秒为单位的当前时间
*
* @return 当前时间(毫秒)
*/
private static long timeGen() {
return System.currentTimeMillis();
}
public static void main(String[] args) {
long id = nextId(1000);
System.out.println(id);
parserId(id);
}
}
\ No newline at end of file
package com.mortals.xhx.common.utils;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
public class BeanUtil {
protected static Logger log = LoggerFactory.getLogger(BeanUtil.class);
public static <SOURCE, TARGET> List<TARGET> covertList(List<SOURCE> srcList, Class<TARGET> clazz) {
List<TARGET> retList = new ArrayList<>();
if (srcList == null || srcList.isEmpty()) {
return retList;
}
for (SOURCE source : srcList) {
TARGET target;
try {
target = clazz.newInstance();
if (source == null) {
continue;
}
BeanUtils.copyProperties(source, target);
retList.add(target);
} catch (InstantiationException | IllegalAccessException e) {
log.error("", e);
}
}
return retList;
}
public static <SOURCE, TARGET> TARGET covert(SOURCE source, Class<TARGET> clazz) {
TARGET target = null;
if (source == null) {
return target;
}
try {
target = clazz.newInstance();
BeanUtils.copyProperties(source, target);
} catch (InstantiationException | IllegalAccessException e) {
log.error("", e);
}
return target;
}
@SuppressWarnings({ "rawtypes", "unused", "unchecked" })
public static final Map entityToMap(Object entity) {
Map map = new HashMap<>();
try {
Class cls = entity.getClass();
BeanInfo beanInfo = Introspector.getBeanInfo(cls);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (!propertyName.equals("class") && !propertyName.equals("orderCols")
&& !propertyName.equals("notSelectCols") && !propertyName.equals("symbolCols")
&& !propertyName.equals("vague")) {
Method readMethod = descriptor.getReadMethod();
Object result = readMethod.invoke(entity, new Object[0]);
if (result != null) {
String className = result.getClass().getSimpleName();
map.put(propertyName, result);
/*
* if(result instanceof String){
* if(((String)result).trim().length() > 0){
* map.put(propertyName, result); } }else{
* map.put(propertyName, result); }
*/
}
}
}
} catch (Exception e) {
log.warn("将对象转换成Map异常-->" + entity + "-->" + e.getMessage());
}
return map;
}
public static final <T> T mapToEntity(Map<?, ?> map, Class<T> clz) {
T target = null;
try {
target = clz.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(clz);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (map.containsKey(propertyName)) {
Object value = map.get(propertyName);
Object[] args = new Object[1];
args[0] = value;
descriptor.getWriteMethod().invoke(target, args);
}
}
} catch (Exception e) {
log.warn("将Map转换成对象异常-->" + clz + "-->" + e.getMessage());
}
return target;
}
}
后台(守护)服务
1、定时任务,实现接口:com.mortals.framework.service.ITaskExcuteService
2、应用级服务,实现接口:com.mortals.framework.springcloud.service.IApplicationStartedService
3、如项目中无后台服务,可删除本目录包
\ No newline at end of file
package com.mortals.xhx.daemon.task;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService;
/**
* @author: finegirl
* @date: 2021/7/15 14:33
* @description: //TODO 请完善注释信息
**/
public class TaskExcuteService implements ITaskExcuteService {
@Override
public void excuteTask(ITask task) throws AppException {
}
@Override
public void stopTask(ITask task) throws AppException {
}
}
定时任务,实现接口:com.mortals.framework.service.ITaskExcuteService
\ No newline at end of file
/**
* 文件:DemoDao.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.dao;
import com.mortals.xhx.module.demo.model.DemoEntity;
import com.mortals.framework.dao.ICRUDDao;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoDao DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface DemoDao extends ICRUDDao<DemoEntity,Long>{
}
\ No newline at end of file
/**
* 文件:DemoDaoImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.dao.ibatis;
import com.mortals.xhx.module.demo.dao.DemoDao;
import com.mortals.xhx.module.demo.model.DemoEntity;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import org.springframework.stereotype.Repository;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoDaoImpl DAO接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Repository("demoDao")
public class DemoDaoImpl extends BaseCRUDDaoMybatis<DemoEntity,Long> implements DemoDao {
}
\ No newline at end of file
/**
* 文件:DemoEntity.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.model;
import com.mortals.framework.model.BaseEntityLong;
import java.util.Date;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoEntity </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class DemoEntity extends BaseEntityLong{
private static final long serialVersionUID = 1603706650202L;
/** 演示字段1 */
private String fieldOne;
/** 演示字段1 */
private Long fieldTwo;
/** 变更时间 */
private Date updateTime;
/** 变更用户loginName */
private String updateUser;
/** 创建时间 */
private Date createTime;
/** 创建用户loginName */
private String createUser;
public DemoEntity(){
}
/**
* 获取 演示字段1
* @return fieldOne
*/
public String getFieldOne(){
return this.fieldOne;
}
/**
* 设置 演示字段1
* @param fieldOne
*/
public void setFieldOne(String fieldOne){
this.fieldOne = fieldOne;
}
/**
* 获取 演示字段1
* @return fieldTwo
*/
public Long getFieldTwo(){
return this.fieldTwo;
}
/**
* 设置 演示字段1
* @param fieldTwo
*/
public void setFieldTwo(Long fieldTwo){
this.fieldTwo = fieldTwo;
}
/**
* 获取 变更时间
* @return updateTime
*/
public Date getUpdateTime(){
return this.updateTime;
}
/**
* 设置 变更时间
* @param updateTime
*/
public void setUpdateTime(Date updateTime){
this.updateTime = updateTime;
}
/**
* 获取 变更用户loginName
* @return updateUser
*/
public String getUpdateUser(){
return this.updateUser;
}
/**
* 设置 变更用户loginName
* @param updateUser
*/
public void setUpdateUser(String updateUser){
this.updateUser = updateUser;
}
/**
* 获取 创建时间
* @return createTime
*/
public Date getCreateTime(){
return this.createTime;
}
/**
* 设置 创建时间
* @param createTime
*/
public void setCreateTime(Date createTime){
this.createTime = createTime;
}
/**
* 获取 创建用户loginName
* @return createUser
*/
public String getCreateUser(){
return this.createUser;
}
/**
* 设置 创建用户loginName
* @param createUser
*/
public void setCreateUser(String createUser){
this.createUser = createUser;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj instanceof DemoEntity) {
DemoEntity tmp = (DemoEntity) obj;
if (this.getId().longValue() == tmp.getId().longValue()) {
return true;
}
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append("id:").append(getId())
.append(",fieldOne:").append(getFieldOne())
.append(",fieldTwo:").append(getFieldTwo())
.append(",updateTime:").append(getUpdateTime())
.append(",updateUser:").append(getUpdateUser())
.append(",createTime:").append(getCreateTime())
.append(",createUser:").append(getCreateUser());
return sb.toString();
}
public void initAttrValue(){
this.fieldOne = null;
this.fieldTwo = null;
this.updateTime = null;
this.updateUser = null;
this.createTime = null;
this.createUser = null;
}
}
\ No newline at end of file
/**
* 文件:DemoService.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.service;
import com.mortals.xhx.module.demo.model.DemoEntity;
import com.mortals.framework.service.ICRUDService;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoService service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public interface DemoService extends ICRUDService<DemoEntity,Long>{
}
\ No newline at end of file
/**
* 文件:DemoServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.service.impl;
import com.mortals.xhx.common.pdu.sms.SmsSendReq;
import com.mortals.xhx.feign.api.IApiGateFeign;
import com.mortals.xhx.module.demo.dao.DemoDao;
import com.mortals.xhx.module.demo.model.DemoEntity;
import com.mortals.xhx.module.demo.service.DemoService;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@Service("demoService")
public class DemoServiceImpl extends AbstractCRUDServiceImpl<DemoDao,DemoEntity,Long> implements DemoService {
@Autowired
private IApiGateFeign apiGateFeign;
public void smsSendtoFeign(String moblie, String templeteId, String[] params) {
apiGateFeign.smsSend(buildSmsSendReq(moblie, templeteId, params));
}
private SmsSendReq buildSmsSendReq(String moblie, String templeteId, String[] params) {
SmsSendReq smsSendReq = new SmsSendReq();
smsSendReq.setMobile(moblie);
smsSendReq.setTempleteId(templeteId);
smsSendReq.setParams(params);
return smsSendReq;
}
}
\ No newline at end of file
/**
* 文件:DemoController.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.xhx.module.demo.model.DemoEntity;
import com.mortals.xhx.module.demo.service.DemoService;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import org.springframework.web.bind.annotation.*;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@RestController
@RequestMapping("demo")
public class DemoController extends BaseCRUDJsonMappingController<DemoService,DemoForm, DemoEntity,Long> {
public DemoController(){
super.setFormClass(DemoForm.class);
super.setModuleDesc("演示模块");
}
/**
* test
*
* @param:
* @return:
* @Author: ZXF
*/
@PostMapping("test")
public String testSms(@RequestParam String mobile, @RequestParam String templete) {
log.info("收到【测试】请求【请求体】--> ");
DemoEntity demoEntity = this.service.get(1L, null);
log.info("响应【测试】【响应体】--> " + JSONObject.toJSONString(demoEntity));
return JSONObject.toJSONString(demoEntity);
}
@GetMapping("/echo")
public String echo(String name) {
return "provider:" + name;
}
}
\ No newline at end of file
/**
* 文件:DemoForm.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.web;
import com.mortals.xhx.module.demo.model.DemoEntity;
import com.mortals.xhx.module.demo.model.DemoQuery;
import com.mortals.framework.web.BaseCRUDFormLong;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoForm </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class DemoForm extends BaseCRUDFormLong<DemoEntity> {
private DemoEntity demo = new DemoEntity();
private DemoQuery query = new DemoQuery();
public DemoForm(){
}
@Override
public DemoEntity getEntity() {
return demo;
}
public DemoEntity getDemo() {
return demo;
}
public void setDemo(DemoEntity demo) {
this.demo = demo;
}
@Override
public DemoQuery getQuery() {
return query;
}
public void setQuery(DemoQuery query) {
this.query = query;
}
}
\ No newline at end of file
>>>>>>>>>>>>>>>>>>>
>> base-wx-api <<
<<<<<<<<<<<<<<<<<<<
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Manifest-Version: 1.0
Main-Class: com.mortals.xhx.ManagerApplication
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