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
package com.mortals.xhx.base.system.idgenerator.service.impl;
import com.alibaba.fastjson.JSON;
import com.mortals.xhx.base.system.idgenerator.dao.IdgeneratorDao;
import com.mortals.xhx.base.system.idgenerator.model.IdgeneratorEntity;
import com.mortals.xhx.base.system.idgenerator.service.IdgeneratorService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
/**
* <p>Title: id生成器</p>
* <p>Description: IdgeneratorServiceImpl service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
@Service("idgeneratorService")
public class IdgeneratorServiceImpl implements IdgeneratorService {
private Log log = LogFactory.getLog(IdgeneratorServiceImpl.class);
@Resource
private IdgeneratorDao idgeneratorDao;
private ConcurrentHashMap<IdGeneratorKey, SequenceId> seqIdMap = new ConcurrentHashMap<>();
/** 默认步长,即一次取多少个ID */
private static final Long DEFAULT_STEP = 50L;
/**
* <B>Description</B> 生成器key枚举 <br />
* <B>Copyright</B> Copyright (c) 2016 www.ulute.com All rights reserved.
* <br />
* 本软件源代码版权归哎媲媲网络,未经许可不得任意复制与传播.<br />
* <B>Company</B> 哎媲媲网络
*
* @author
* @createTime 2016年3月16日 上午10:07:19
*/
@SuppressWarnings("rawtypes")
public static enum IdGeneratorKey {
/**
* 生成各基础信息表的version字段值(保证所有分表ID全局唯一) <br/>
* 生成规则:1开始
*
* @return 返回Long类型
*/
INFO_VERSION_KEY(50L, "getInfoVersion", null),
/** 空,测试用 */
DUMMY(DEFAULT_STEP, "", null),
;
/** 步长 */
private final Long step;
/** 生成ID方法名 */
private final String methodName;
/** 生成ID所需参数因子类型 */
private final Class[] factorsClazz;
private IdGeneratorKey(Long step, String methodName, Class[] factorsClazz) {
this.step = step;
this.methodName = methodName;
this.factorsClazz = factorsClazz;
}
public Long getStep() {
return step;
}
public String getMethodName() {
return methodName;
}
public Class[] getFactorsClazz() {
return factorsClazz;
}
}
@Override
public Long getLongId(IdGeneratorKey key, Object... factorInfo) {
try {
Method method = this.getClass().getDeclaredMethod(key.getMethodName(), key.getFactorsClazz());
return (Long) method.invoke(this, factorInfo);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public String getStringId(IdGeneratorKey key, Object... factorInfo) {
try {
Method method = this.getClass().getDeclaredMethod(key.getMethodName(), key.getFactorsClazz());
return (String) method.invoke(this, factorInfo);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public List<Long> getLongIdList(IdGeneratorKey key, Object... factorInfo) {
try {
Method method = this.getClass().getDeclaredMethod(key.getMethodName() + "Batch", key.getFactorsClazz());
return (List<Long>) method.invoke(this, factorInfo);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private Long getInfoVersion() {
synchronized (IdGeneratorKey.INFO_VERSION_KEY) {
return getNextSequenceId(IdGeneratorKey.INFO_VERSION_KEY, null);
}
}
// *******************************************************************************
/**
* 获取表唯一ID,
*
* @param key id类型
* @param startSeq 从指定SEQ开始
* @return
*/
private Long getNextSequenceId(IdGeneratorKey key, Long startSeq) {
Long seqId = getNextSeqId(key, startSeq);
// 失败后,最大重复10次获取
for (int i = 0; (seqId <= 0 && i < 10); i++) {
seqIdMap.remove(key);
// 重置为空,从数据库获取最新值
seqId = getNextSeqId(key, null);
}
if (seqId <= 0) {
throw new RuntimeException("多应用服务器争用程度太高,请稍后再试");
}
return seqId;
}
private Long getNextSeqId(final IdGeneratorKey key, final Long startSeq) {
SequenceId idSequence = seqIdMap.get(key);
if (idSequence == null) {
idSequence = new SequenceId();
idSequence.setStep(key.getStep());
SequenceId returnSeqId = seqIdMap.putIfAbsent(key, idSequence);
if (returnSeqId != null) {
idSequence = returnSeqId;
}
}
if (startSeq != null || idSequence.getStartSeq() >= idSequence.getFinishSeq()) {
if (updateTableIdMaxValue(key, startSeq, idSequence) <= 0) {
return 0L;
}
}
Long id = idSequence.next();
return id;
}
private List<Long> getNextSequenceIdBatch(IdGeneratorKey key, Long startSeq, Integer num) {
List<Long> seqId = getNextSeqIdBatch(key, startSeq, num);
// 失败后,最大重复10次获取
for (int i = 0; (seqId.size() <= 0 && i < 10); i++) {
seqIdMap.remove(key);
// 重置为空,从数据库获取最新值
seqId = getNextSeqIdBatch(key, null, num);
}
if (seqId.size() == 0) {
throw new RuntimeException("多应用服务器争用程度太高,请稍后再试");
}
return seqId;
}
private List<Long> getNextSeqIdBatch(final IdGeneratorKey key, final Long startSeq, Integer num) {
SequenceId idSequence = seqIdMap.get(key);
if (idSequence == null) {
idSequence = new SequenceId();
idSequence.setStep(num.longValue());
SequenceId returnSeqId = seqIdMap.putIfAbsent(key, idSequence);
if (returnSeqId != null) {
idSequence = returnSeqId;
}
}
if (startSeq != null || idSequence.getStartSeq() >= idSequence.getFinishSeq()
|| idSequence.getStartSeq() + idSequence.getStep() > idSequence.getFinishSeq()) {
if (updateTableIdMaxValueBatch(key, startSeq, idSequence, num) <= 0) {
return new ArrayList<>();
}
}
List<Long> idList = new ArrayList<>();
for (int i = 0; i < num.intValue(); i++) {
idList.add(idSequence.next());
}
return idList;
}
/**
* 更新最新ID到数据表
*
* @param key
* @param startSeq
* @param idSequence
* @return
* @createTime 2016年3月16日 上午10:09:00
* @author
*/
private int updateTableIdMaxValue(final IdGeneratorKey key, final Long startSeq, final SequenceId idSequence) {
IdgeneratorEntity entity = new IdgeneratorEntity();
entity.setIdType(key.name());
List<IdgeneratorEntity> list = idgeneratorDao.getList(entity);
IdgeneratorEntity idgeneratorEntity = list.get(0);
long sseq = idgeneratorEntity.getIdMaxValue();
if (startSeq != null && idgeneratorEntity.getIdMaxValue() < startSeq) {
sseq = startSeq;
}
idSequence.setStartSeq(sseq);
idSequence.setFinishSeq(idSequence.getStartSeq() + idSequence.getStep());
idgeneratorEntity.setIdMaxValue(idSequence.getFinishSeq());
idgeneratorEntity.setGmtModify(new Date());
if (log.isDebugEnabled()) {
log.debug("idgenerator update table idSequence value:" + JSON.toJSONString(idSequence));
log.debug("idgenerator update table set value:" + JSON.toJSONString(idgeneratorEntity));
}
IdgeneratorEntity condition = new IdgeneratorEntity();
condition.setId(idgeneratorEntity.getId());
condition.setVersionNum(idgeneratorEntity.getVersionNum());
idgeneratorEntity.setVersionNum(idgeneratorEntity.getVersionNum() + 1);
int result = idgeneratorDao.update(idgeneratorEntity, condition);
if (result > 0) {
return result;
} else {
log.warn("version locked, retry it.....");
return updateTableIdMaxValue(key, null, idSequence);
}
}
private int updateTableIdMaxValueBatch(final IdGeneratorKey key, final Long startSeq, final SequenceId idSequence,
Integer num) {
synchronized (IdGeneratorKey.DUMMY) {
IdgeneratorEntity entity = new IdgeneratorEntity();
entity.setIdType(key.name());
List<IdgeneratorEntity> list = idgeneratorDao.getList(entity);
IdgeneratorEntity idgeneratorEntity = list.get(0);
long sseq = idgeneratorEntity.getIdMaxValue();
if (startSeq != null && idgeneratorEntity.getIdMaxValue() < startSeq) {
sseq = startSeq;
}
idSequence.setStartSeq(sseq);
idSequence.setFinishSeq(idSequence.getStartSeq() + num.longValue());
idgeneratorEntity.setIdMaxValue(idSequence.getFinishSeq());
idgeneratorEntity.setGmtModify(new Date());
if (log.isDebugEnabled()) {
log.debug("idgenerator update table idSequence value:" + JSON.toJSONString(idSequence));
log.debug("idgenerator update table set value:" + JSON.toJSONString(idgeneratorEntity));
}
IdgeneratorEntity condition = new IdgeneratorEntity();
condition.setId(idgeneratorEntity.getId());
condition.setVersionNum(idgeneratorEntity.getVersionNum());
idgeneratorEntity.setVersionNum(idgeneratorEntity.getVersionNum() + 1);
int result = idgeneratorDao.update(idgeneratorEntity, condition);
if (result > 0) {
return result;
} else {
log.warn("version locked, retry it.....");
return updateTableIdMaxValueBatch(key, null, idSequence, num);
}
}
}
private class SequenceId {
/** 步长 */
private Long step = 100L;
/** 开始ID */
private volatile AtomicLong startSeq = new AtomicLong(1);
/** 结束ID */
private volatile Long finishSeq = 0L;
public Long next() {
return startSeq.getAndIncrement();
}
public Long getStep() {
return step;
}
public void setStep(Long step) {
this.step = step;
}
public Long getStartSeq() {
return startSeq.get();
}
public void setStartSeq(Long startSeq) {
this.startSeq = new AtomicLong(startSeq);
}
public Long getFinishSeq() {
return finishSeq;
}
public void setFinishSeq(Long finishSeq) {
this.finishSeq = finishSeq;
}
}
}
\ 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
/**
* 文件:DemoQuery.java
* 版本:1.0.0
* 日期:
* Copyright &reg;
* All right reserved.
*/
package com.mortals.xhx.module.demo.model;
import java.util.List;
/**
* <p>Title: 演示模块</p>
* <p>Description: DemoQuery </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public class DemoQuery extends DemoEntity{
private static final long serialVersionUID = 1603706650204L;
/** 开始 设备ID,自增长 */
private Long idStart;
/** 结束 设备ID,自增长 */
private Long idEnd;
/** 增加 设备ID,自增长 */
private Long idIncrement;
/** 设备ID,自增长 */
private List<Long> idList;
/** 演示字段1 */
private List<String> fieldOneList;
/** 开始 演示字段1 */
private Long fieldTwoStart;
/** 结束 演示字段1 */
private Long fieldTwoEnd;
/** 增加 演示字段1 */
private Long fieldTwoIncrement;
/** 演示字段1 */
private List<Long> fieldTwoList;
/** 开始 变更时间 */
private String updateTimeStart;
/** 结束 变更时间 */
private String updateTimeEnd;
/** 变更用户loginName */
private List<String> updateUserList;
/** 开始 创建时间 */
private String createTimeStart;
/** 结束 创建时间 */
private String createTimeEnd;
/** 创建用户loginName */
private List<String> createUserList;
public DemoQuery(){
}
/**
* 获取 开始 设备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;
}
/**
* 获取 演示字段1
* @return fieldOneList
*/
public List<String> getFieldOneList(){
return this.fieldOneList;
}
/**
* 设置 演示字段1
* @param fieldOneList
*/
public void setFieldOneList(List<String> fieldOneList){
this.fieldOneList = fieldOneList;
}
/**
* 获取 开始 演示字段1
* @return fieldTwoStart
*/
public Long getFieldTwoStart(){
return this.fieldTwoStart;
}
/**
* 设置 开始 演示字段1
* @param fieldTwoStart
*/
public void setFieldTwoStart(Long fieldTwoStart){
this.fieldTwoStart = fieldTwoStart;
}
/**
* 获取 结束 演示字段1
* @return fieldTwoEnd
*/
public Long getFieldTwoEnd(){
return this.fieldTwoEnd;
}
/**
* 设置 结束 演示字段1
* @param fieldTwoEnd
*/
public void setFieldTwoEnd(Long fieldTwoEnd){
this.fieldTwoEnd = fieldTwoEnd;
}
/**
* 获取 增加 演示字段1
* @return fieldTwoIncrement
*/
public Long getFieldTwoIncrement(){
return this.fieldTwoIncrement;
}
/**
* 设置 增加 演示字段1
* @param fieldTwoIncrement
*/
public void setFieldTwoIncrement(Long fieldTwoIncrement){
this.fieldTwoIncrement = fieldTwoIncrement;
}
/**
* 获取 演示字段1
* @return fieldTwoList
*/
public List<Long> getFieldTwoList(){
return this.fieldTwoList;
}
/**
* 设置 演示字段1
* @param fieldTwoList
*/
public void setFieldTwoList(List<Long> fieldTwoList){
this.fieldTwoList = fieldTwoList;
}
/**
* 获取 开始 变更时间
* @return updateTimeStart
*/
public String getUpdateTimeStart(){
return this.updateTimeStart;
}
/**
* 设置 开始 变更时间
* @param updateTimeStart
*/
public void setUpdateTimeStart(String updateTimeStart){
this.updateTimeStart = updateTimeStart;
}
/**
* 获取 结束 变更时间
* @return updateTimeEnd
*/
public String getUpdateTimeEnd(){
return this.updateTimeEnd;
}
/**
* 设置 结束 变更时间
* @param updateTimeEnd
*/
public void setUpdateTimeEnd(String updateTimeEnd){
this.updateTimeEnd = updateTimeEnd;
}
/**
* 获取 变更用户loginName
* @return updateUserList
*/
public List<String> getUpdateUserList(){
return this.updateUserList;
}
/**
* 设置 变更用户loginName
* @param updateUserList
*/
public void setUpdateUserList(List<String> updateUserList){
this.updateUserList = updateUserList;
}
/**
* 获取 开始 创建时间
* @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;
}
/**
* 获取 创建用户loginName
* @return createUserList
*/
public List<String> getCreateUserList(){
return this.createUserList;
}
/**
* 设置 创建用户loginName
* @param createUserList
*/
public void setCreateUserList(List<String> createUserList){
this.createUserList = createUserList;
}
}
\ 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
/**
* 文件: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 lombok.extern.apachecommons.CommonsLog;
import org.springframework.beans.factory.annotation.Autowired;
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("test")
@CommonsLog
public class TestController {
@Autowired
private DemoService demoService;
/**
* test
*
* @param:
* @return:
* @Author: ZXF
*/
@PostMapping("test1")
public String testSms(@RequestParam String mobile, @RequestParam String templete) {
log.info("收到【测试】请求【请求体】--> ");
DemoEntity demoEntity = demoService.get(1L, null);
log.info("响应【测试】【响应体】--> " + JSONObject.toJSONString(demoEntity));
return JSONObject.toJSONString(demoEntity);
}
@GetMapping("/echo")
public String echo(String name) {
DemoEntity demoEntity = demoService.get(1L, null);
return JSONObject.toJSONString(demoEntity);
}
}
\ No newline at end of file
>>>>>>>>>>>>>>>>>>>
>> base-wx-api <<
<<<<<<<<<<<<<<<<<<<
\ No newline at end of file
server:
tomcat:
uri-encoding: utf-8
spring:
application:
name: base-handler
profiles:
active: develop
http:
multipart:
maxFileSize: 100Mb
maxRequestSize: 1000Mb
# autoconfigure:
# exclude: org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
group: DEFAULT_GROUP
namespace: 342d427e-a226-4ade-8963-b38353acecc7
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr} # Nacos 服务器地址
group: ${spring.cloud.nacos.discovery.group}
namespace: ${spring.cloud.nacos.discovery.namespace} # Nacos 命名空间 dev 的编号
file-extension: yaml
mybatis:
root-path: com.mortals
type-aliases-package: com.mortals.framework.model,com.mortals.xhx.common.**.model,com.mortals.xhx.**.model
mapper-locations: classpath*:sqlmap/**/*.xml
config-location: classpath*:config/mybatis-sqlmap-config.xml
service:
provider:
cacheClass: com.mortals.framework.service.impl.RedisCacheServiceImpl
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="false" />
<setting name="lazyLoadingEnabled" value="flase" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="defaultExecutorType" value="REUSE" />
<!-- 是否开始sql日志控制台打印 -->
<!-- <setting name="logImpl" value="STDOUT_LOGGING" /> -->
</settings>
<plugins>
<plugin interceptor="com.mortals.framework.thirty.mybatis.MortalsPagePlugin">
<property name="dialect" value="MySql" />
<property name="showSql" value="MySql" />
</plugin>
</plugins>
</configuration>
\ 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"
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"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<springProperty scope="context" name="springApplicationName" source="spring.application.name"/>
<springProperty scope="context" name="serverPort" source="server.port"/>
<springProperty scope="context" name="logFilePath" source="application.log.path" defaultValue="/mortals/www.iot.com/logs" />
<springProperty scope="context" name="logLevel" source="application.log.level" defaultValue="INFO" />
<property name="logFilePath" value="${logFilePath:-/mortals/www.iot.com/logs}" />
<property name="logLevel" value="${logLevel:-INFO}" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%.50c\(%L\)] - %msg%n</pattern>
</encoder>
</appender>
<appender name="fileInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%.50c\(%L\)] - %msg%n</pattern>
</encoder>
<file>${logFilePath}/${springApplicationName:-default}/${serverPort:-default}-info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logFilePath}/${springApplicationName:-default}/${serverPort:-default}-info.log.%d{yyyyMMdd}</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileError" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%.50c\(%L\)] - %msg%n</pattern>
</encoder>
<file>${logFilePath}/${springApplicationName:-default}/${serverPort:-default}-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logFilePath}/${springApplicationName:-default}/${serverPort:-default}-error.log.%d{yyyyMMdd}</fileNamePattern>
</rollingPolicy>
</appender>
<root level="${logLevel}">
<appender-ref ref="console"/>
<appender-ref ref="fileInfo"/>
<appender-ref ref="fileError"/>
</root>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.base.system.idgenerator.dao.ibatis.IdgeneratorDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="IdgeneratorEntity" id="IdgeneratorEntity-Map">
<result property="id" column="id" />
<result property="idType" column="idType" />
<result property="idMaxValue" column="idMaxValue" />
<result property="remark" column="remark" />
<result property="versionNum" column="versionNum" />
<result property="gmtModify" column="gmtModify" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id as id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('idType') or colPickMode == 1 and data.containsKey('idType')))">
a.idType as idType,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('idMaxValue') or colPickMode == 1 and data.containsKey('idMaxValue')))">
a.idMaxValue as idMaxValue,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('remark') or colPickMode == 1 and data.containsKey('remark')))">
a.remark as remark,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('versionNum') or colPickMode == 1 and data.containsKey('versionNum')))">
a.versionNum as versionNum,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('gmtModify') or colPickMode == 1 and data.containsKey('gmtModify')))">
a.gmtModify as gmtModify,
</if>
</trim>
</sql>
<!-- 新增 -->
<insert id="insert" parameterType="IdgeneratorEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_iot_idgenerator
(idType,idMaxValue,remark,versionNum,gmtModify
)VALUES(#{idType},#{idMaxValue},#{remark},#{versionNum},#{gmtModify})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_iot_idgenerator
(idType,idMaxValue,remark,versionNum,gmtModify
)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.idType},#{item.idMaxValue},#{item.remark},#{item.versionNum},#{item.gmtModify})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
<update id="update" parameterType="paramDto">
update mortals_iot_idgenerator as a
set
<trim suffixOverrides="," suffix="">
<if test="(colPickMode==0 and data.containsKey('idType')) or (colPickMode==1 and !data.containsKey('idType'))">
a.idType=#{data.idType},
</if>
<if test="(colPickMode==0 and data.containsKey('idMaxValue')) or (colPickMode==1 and !data.containsKey('idMaxValue'))">
a.idMaxValue=#{data.idMaxValue},
</if>
<if test="(colPickMode==0 and data.containsKey('idMaxValueIncrement')) or (colPickMode==1 and !data.containsKey('idMaxValueIncrement'))">
a.idMaxValue=ifnull(a.idMaxValue,0) + #{data.idMaxValueIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('remark')) or (colPickMode==1 and !data.containsKey('remark'))">
a.remark=#{data.remark},
</if>
<if test="(colPickMode==0 and data.containsKey('versionNum')) or (colPickMode==1 and !data.containsKey('versionNum'))">
a.versionNum=#{data.versionNum},
</if>
<if test="(colPickMode==0 and data.containsKey('versionNumIncrement')) or (colPickMode==1 and !data.containsKey('versionNumIncrement'))">
a.versionNum=ifnull(a.versionNum,0) + #{data.versionNumIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('gmtModify')) or (colPickMode==1 and !data.containsKey('gmtModify'))">
a.gmtModify=#{data.gmtModify},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</update>
<!-- 根据主健查询 -->
<select id="getByKey" parameterType="paramDto" resultMap="IdgeneratorEntity-Map">
select <include refid="_columns"/>
from mortals_iot_idgenerator as a
where a.id=#{condition.id}
</select>
<!-- 根据主健删除 -->
<delete id="deleteByKey" parameterType="paramDto">
delete a.* from mortals_iot_idgenerator as a where a.id=#{condition.id}
</delete>
<!-- 根据主健删除一批,针对单一主健有效 -->
<delete id="deleteByKeys">
delete from mortals_iot_idgenerator where id in
<foreach collection="array" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据paramDto删除一批 -->
<delete id="deleteByMap" parameterType="paramDto">
delete a.* from mortals_iot_idgenerator as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</delete>
<!-- 获取列表 -->
<select id="getList" parameterType="paramDto" resultMap="IdgeneratorEntity-Map">
select <include refid="_columns"/>
from mortals_iot_idgenerator as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
from mortals_iot_idgenerator as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</select>
<!-- 条件映射 -->
<sql id="_condition_">
<if test="condition != null and !condition.isEmpty()">
<if test="condition.containsKey('id')">
<if test="condition.id != null">
and a.id=#{condition.id}
</if>
</if>
<if test="condition.containsKey('id')">
<if test="condition.id != null ">
and a.id = #{condition.id}
</if>
<if test="condition.id == null">
and a.id is null
</if>
</if>
<if test="condition.containsKey('idList')">
and a.id in
<foreach collection="condition.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('idStart') and condition.idStart != null">
<![CDATA[ and a.id >= #{condition.idStart} ]]>
</if>
<if test="condition.containsKey('idEnd') and condition.idEnd != null">
<![CDATA[ and a.id <= #{condition.idEnd} ]]>
</if>
<if test="condition.containsKey('idType')">
<if test="condition.idType != null and condition.idType != ''">
and a.idType like #{condition.idType}
</if>
<if test="condition.idType == null">
and a.idType is null
</if>
</if>
<if test="condition.containsKey('idTypeList')">
and a.idType in
<foreach collection="condition.idTypeList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('idMaxValue')">
<if test="condition.idMaxValue != null ">
and a.idMaxValue = #{condition.idMaxValue}
</if>
<if test="condition.idMaxValue == null">
and a.idMaxValue is null
</if>
</if>
<if test="condition.containsKey('idMaxValueList')">
and a.idMaxValue in
<foreach collection="condition.idMaxValueList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('idMaxValueStart') and condition.idMaxValueStart != null">
<![CDATA[ and a.idMaxValue >= #{condition.idMaxValueStart} ]]>
</if>
<if test="condition.containsKey('idMaxValueEnd') and condition.idMaxValueEnd != null">
<![CDATA[ and a.idMaxValue <= #{condition.idMaxValueEnd} ]]>
</if>
<if test="condition.containsKey('remark')">
<if test="condition.remark != null and condition.remark != ''">
and a.remark like #{condition.remark}
</if>
<if test="condition.remark == null">
and a.remark is null
</if>
</if>
<if test="condition.containsKey('remarkList')">
and a.remark in
<foreach collection="condition.remarkList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('versionNum')">
<if test="condition.versionNum != null ">
and a.versionNum = #{condition.versionNum}
</if>
<if test="condition.versionNum == null">
and a.versionNum is null
</if>
</if>
<if test="condition.containsKey('versionNumList')">
and a.versionNum in
<foreach collection="condition.versionNumList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('versionNumStart') and condition.versionNumStart != null">
<![CDATA[ and a.versionNum >= #{condition.versionNumStart} ]]>
</if>
<if test="condition.containsKey('versionNumEnd') and condition.versionNumEnd != null">
<![CDATA[ and a.versionNum <= #{condition.versionNumEnd} ]]>
</if>
<if test="condition.containsKey('gmtModify')">
<if test="condition.gmtModify != null ">
and a.gmtModify = #{condition.gmtModify}
</if>
<if test="condition.gmtModify == null">
and a.gmtModify is null
</if>
</if>
<if test="condition.containsKey('gmtModifyStart') and condition.gmtModifyStart != null and condition.gmtModifyStart!=''">
<![CDATA[ and a.gmtModify >= STR_TO_DATE(left(concat(#{condition.gmtModifyStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('gmtModifyEnd') and condition.gmtModifyEnd != null and condition.gmtModifyEnd!=''">
<![CDATA[ and a.gmtModify <= STR_TO_DATE(left(concat(#{condition.gmtModifyEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test="orderCol.id!= null">
${orderCol.id}
</if>
,
</if>
<if test="orderCol.containsKey('idType')">
a.idType
<if test="orderCol.idType!= null">
${orderCol.idType}
</if>
,
</if>
<if test="orderCol.containsKey('idMaxValue')">
a.idMaxValue
<if test="orderCol.idMaxValue!= null">
${orderCol.idMaxValue}
</if>
,
</if>
<if test="orderCol.containsKey('remark')">
a.remark
<if test="orderCol.remark!= null">
${orderCol.remark}
</if>
,
</if>
<if test="orderCol.containsKey('versionNum')">
a.versionNum
<if test="orderCol.versionNum!= null">
${orderCol.versionNum}
</if>
,
</if>
<if test="orderCol.containsKey('gmtModify')">
a.gmtModify
<if test="orderCol.gmtModify!= null">
${orderCol.gmtModify}
</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
GROUP BY
<trim suffixOverrides="," suffix="">
<foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
${item}
</foreach>
</trim>
</if>
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.base.system.oper.dao.ibatis.OperLogDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="OperLogEntity" id="OperLogEntity-Map">
<result property="id" column="id" />
<result property="platformMark" column="platformMark" />
<result property="userId" column="userId" />
<result property="userName" column="userName" />
<result property="loginName" column="loginName" />
<result property="requestUrl" column="requestUrl" />
<result property="content" column="content" />
<result property="ip" column="ip" />
<result property="logDate" column="logDate" />
<result property="operType" column="operType" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id as id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('platformMark') or colPickMode == 1 and data.containsKey('platformMark')))">
a.platformMark as platformMark,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('userId') or colPickMode == 1 and data.containsKey('userId')))">
a.userId as userId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('userName') or colPickMode == 1 and data.containsKey('userName')))">
a.userName as userName,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('loginName') or colPickMode == 1 and data.containsKey('loginName')))">
a.loginName as loginName,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('requestUrl') or colPickMode == 1 and data.containsKey('requestUrl')))">
a.requestUrl as requestUrl,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('content') or colPickMode == 1 and data.containsKey('content')))">
a.content as content,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('ip') or colPickMode == 1 and data.containsKey('ip')))">
a.ip as ip,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('logDate') or colPickMode == 1 and data.containsKey('logDate')))">
a.logDate as logDate,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('operType') or colPickMode == 1 and data.containsKey('operType')))">
a.operType as operType,
</if>
</trim>
</sql>
<!-- 新增 -->
<insert id="insert" parameterType="OperLogEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_iot_oper_log
(platformMark,userId,userName,loginName,requestUrl,
content,ip,logDate,operType
)VALUES(#{platformMark},#{userId},#{userName},#{loginName},#{requestUrl},
#{content},#{ip},#{logDate},#{operType})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_iot_oper_log
(platformMark,userId,userName,loginName,requestUrl,
content,ip,logDate,operType
)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.platformMark},#{item.userId},#{item.userName},#{item.loginName},#{item.requestUrl},
#{item.content},#{item.ip},#{item.logDate},#{item.operType})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
<update id="update" parameterType="paramDto">
update mortals_iot_oper_log as a
set
<trim suffixOverrides="," suffix="">
<if test="(colPickMode==0 and data.containsKey('platformMark')) or (colPickMode==1 and !data.containsKey('platformMark'))">
a.platformMark=#{data.platformMark},
</if>
<if test="(colPickMode==0 and data.containsKey('userId')) or (colPickMode==1 and !data.containsKey('userId'))">
a.userId=#{data.userId},
</if>
<if test="(colPickMode==0 and data.containsKey('userIdIncrement')) or (colPickMode==1 and !data.containsKey('userIdIncrement'))">
a.userId=ifnull(a.userId,0) + #{data.userIdIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('userName')) or (colPickMode==1 and !data.containsKey('userName'))">
a.userName=#{data.userName},
</if>
<if test="(colPickMode==0 and data.containsKey('loginName')) or (colPickMode==1 and !data.containsKey('loginName'))">
a.loginName=#{data.loginName},
</if>
<if test="(colPickMode==0 and data.containsKey('requestUrl')) or (colPickMode==1 and !data.containsKey('requestUrl'))">
a.requestUrl=#{data.requestUrl},
</if>
<if test="(colPickMode==0 and data.containsKey('content')) or (colPickMode==1 and !data.containsKey('content'))">
a.content=#{data.content},
</if>
<if test="(colPickMode==0 and data.containsKey('ip')) or (colPickMode==1 and !data.containsKey('ip'))">
a.ip=#{data.ip},
</if>
<if test="(colPickMode==0 and data.containsKey('logDate')) or (colPickMode==1 and !data.containsKey('logDate'))">
a.logDate=#{data.logDate},
</if>
<if test="(colPickMode==0 and data.containsKey('operType')) or (colPickMode==1 and !data.containsKey('operType'))">
a.operType=#{data.operType},
</if>
<if test="(colPickMode==0 and data.containsKey('operTypeIncrement')) or (colPickMode==1 and !data.containsKey('operTypeIncrement'))">
a.operType=ifnull(a.operType,0) + #{data.operTypeIncrement},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</update>
<!-- 根据主健查询 -->
<select id="getByKey" parameterType="paramDto" resultMap="OperLogEntity-Map">
select <include refid="_columns"/>
from mortals_iot_oper_log as a
where a.id=#{condition.id}
</select>
<!-- 根据主健删除 -->
<delete id="deleteByKey" parameterType="paramDto">
delete a.* from mortals_iot_oper_log as a where a.id=#{condition.id}
</delete>
<!-- 根据主健删除一批,针对单一主健有效 -->
<delete id="deleteByKeys">
delete from mortals_iot_oper_log where id in
<foreach collection="array" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据paramDto删除一批 -->
<delete id="deleteByMap" parameterType="paramDto">
delete a.* from mortals_iot_oper_log as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</delete>
<!-- 获取列表 -->
<select id="getList" parameterType="paramDto" resultMap="OperLogEntity-Map">
select <include refid="_columns"/>
from mortals_iot_oper_log as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
from mortals_iot_oper_log as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</select>
<!-- 条件映射 -->
<sql id="_condition_">
<if test="condition != null and !condition.isEmpty()">
<if test="condition.containsKey('id')">
<if test="condition.id != null">
and a.id=#{condition.id}
</if>
</if>
<if test="condition.containsKey('id')">
<if test="condition.id != null ">
and a.id = #{condition.id}
</if>
<if test="condition.id == null">
and a.id is null
</if>
</if>
<if test="condition.containsKey('idList')">
and a.id in
<foreach collection="condition.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('idStart') and condition.idStart != null">
<![CDATA[ and a.id >= #{condition.idStart} ]]>
</if>
<if test="condition.containsKey('idEnd') and condition.idEnd != null">
<![CDATA[ and a.id <= #{condition.idEnd} ]]>
</if>
<if test="condition.containsKey('platformMark')">
<if test="condition.platformMark != null and condition.platformMark != ''">
and a.platformMark like #{condition.platformMark}
</if>
<if test="condition.platformMark == null">
and a.platformMark is null
</if>
</if>
<if test="condition.containsKey('platformMarkList')">
and a.platformMark in
<foreach collection="condition.platformMarkList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('userId')">
<if test="condition.userId != null ">
and a.userId = #{condition.userId}
</if>
<if test="condition.userId == null">
and a.userId is null
</if>
</if>
<if test="condition.containsKey('userIdList')">
and a.userId in
<foreach collection="condition.userIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('userIdStart') and condition.userIdStart != null">
<![CDATA[ and a.userId >= #{condition.userIdStart} ]]>
</if>
<if test="condition.containsKey('userIdEnd') and condition.userIdEnd != null">
<![CDATA[ and a.userId <= #{condition.userIdEnd} ]]>
</if>
<if test="condition.containsKey('userName')">
<if test="condition.userName != null and condition.userName != ''">
and a.userName like #{condition.userName}
</if>
<if test="condition.userName == null">
and a.userName is null
</if>
</if>
<if test="condition.containsKey('userNameList')">
and a.userName in
<foreach collection="condition.userNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('loginName')">
<if test="condition.loginName != null and condition.loginName != ''">
and a.loginName like #{condition.loginName}
</if>
<if test="condition.loginName == null">
and a.loginName is null
</if>
</if>
<if test="condition.containsKey('loginNameList')">
and a.loginName in
<foreach collection="condition.loginNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('requestUrl')">
<if test="condition.requestUrl != null and condition.requestUrl != ''">
and a.requestUrl like #{condition.requestUrl}
</if>
<if test="condition.requestUrl == null">
and a.requestUrl is null
</if>
</if>
<if test="condition.containsKey('requestUrlList')">
and a.requestUrl in
<foreach collection="condition.requestUrlList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('content')">
<if test="condition.content != null and condition.content != ''">
and a.content like #{condition.content}
</if>
<if test="condition.content == null">
and a.content is null
</if>
</if>
<if test="condition.containsKey('contentList')">
and a.content in
<foreach collection="condition.contentList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('ip')">
<if test="condition.ip != null and condition.ip != ''">
and a.ip like #{condition.ip}
</if>
<if test="condition.ip == null">
and a.ip is null
</if>
</if>
<if test="condition.containsKey('ipList')">
and a.ip in
<foreach collection="condition.ipList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('logDate')">
<if test="condition.logDate != null ">
and a.logDate = #{condition.logDate}
</if>
<if test="condition.logDate == null">
and a.logDate is null
</if>
</if>
<if test="condition.containsKey('logDateStart') and condition.logDateStart != null and condition.logDateStart!=''">
<![CDATA[ and a.logDate >= STR_TO_DATE(left(concat(#{condition.logDateStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('logDateEnd') and condition.logDateEnd != null and condition.logDateEnd!=''">
<![CDATA[ and a.logDate <= STR_TO_DATE(left(concat(#{condition.logDateEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('operType')">
<if test="condition.operType != null ">
and a.operType = #{condition.operType}
</if>
<if test="condition.operType == null">
and a.operType is null
</if>
</if>
<if test="condition.containsKey('operTypeList')">
and a.operType in
<foreach collection="condition.operTypeList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('operTypeStart') and condition.operTypeStart != null">
<![CDATA[ and a.operType >= #{condition.operTypeStart} ]]>
</if>
<if test="condition.containsKey('operTypeEnd') and condition.operTypeEnd != null">
<![CDATA[ and a.operType <= #{condition.operTypeEnd} ]]>
</if>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test="orderCol.id!= null">
${orderCol.id}
</if>
,
</if>
<if test="orderCol.containsKey('platformMark')">
a.platformMark
<if test="orderCol.platformMark!= null">
${orderCol.platformMark}
</if>
,
</if>
<if test="orderCol.containsKey('userId')">
a.userId
<if test="orderCol.userId!= null">
${orderCol.userId}
</if>
,
</if>
<if test="orderCol.containsKey('userName')">
a.userName
<if test="orderCol.userName!= null">
${orderCol.userName}
</if>
,
</if>
<if test="orderCol.containsKey('loginName')">
a.loginName
<if test="orderCol.loginName!= null">
${orderCol.loginName}
</if>
,
</if>
<if test="orderCol.containsKey('requestUrl')">
a.requestUrl
<if test="orderCol.requestUrl!= null">
${orderCol.requestUrl}
</if>
,
</if>
<if test="orderCol.containsKey('content')">
a.content
<if test="orderCol.content!= null">
${orderCol.content}
</if>
,
</if>
<if test="orderCol.containsKey('ip')">
a.ip
<if test="orderCol.ip!= null">
${orderCol.ip}
</if>
,
</if>
<if test="orderCol.containsKey('logDate')">
a.logDate
<if test="orderCol.logDate!= null">
${orderCol.logDate}
</if>
,
</if>
<if test="orderCol.containsKey('operType')">
a.operType
<if test="orderCol.operType!= null">
${orderCol.operType}
</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
GROUP BY
<trim suffixOverrides="," suffix="">
<foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
${item}
</foreach>
</trim>
</if>
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.base.system.table.dao.ibatis.TableIndexDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="TableIndexEntity" id="TableIndexEntity-Map">
<result property="id" column="id" />
<result property="tableName" column="tableName" />
<result property="tableMark" column="tableMark" />
<result property="createTime" column="createTime" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id as id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('tableName') or colPickMode == 1 and data.containsKey('tableName')))">
a.tableName as tableName,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('tableMark') or colPickMode == 1 and data.containsKey('tableMark')))">
a.tableMark as tableMark,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime as createTime,
</if>
</trim>
</sql>
<!-- 新增 -->
<insert id="insert" parameterType="TableIndexEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_iot_table_index
(tableName,tableMark,createTime
)VALUES(#{tableName},#{tableMark},#{createTime})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_iot_table_index
(tableName,tableMark,createTime
)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.tableName},#{item.tableMark},#{item.createTime})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
<update id="update" parameterType="paramDto">
update mortals_iot_table_index as a
set
<trim suffixOverrides="," suffix="">
<if test="(colPickMode==0 and data.containsKey('tableName')) or (colPickMode==1 and !data.containsKey('tableName'))">
a.tableName=#{data.tableName},
</if>
<if test="(colPickMode==0 and data.containsKey('tableMark')) or (colPickMode==1 and !data.containsKey('tableMark'))">
a.tableMark=#{data.tableMark},
</if>
<if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
a.createTime=#{data.createTime},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</update>
<!-- 根据主健查询 -->
<select id="getByKey" parameterType="paramDto" resultMap="TableIndexEntity-Map">
select <include refid="_columns"/>
from mortals_iot_table_index as a
where a.id=#{condition.id}
</select>
<!-- 根据主健删除 -->
<delete id="deleteByKey" parameterType="paramDto">
delete a.* from mortals_iot_table_index as a where a.id=#{condition.id}
</delete>
<!-- 根据主健删除一批,针对单一主健有效 -->
<delete id="deleteByKeys">
delete from mortals_iot_table_index where id in
<foreach collection="array" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据paramDto删除一批 -->
<delete id="deleteByMap" parameterType="paramDto">
delete a.* from mortals_iot_table_index as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</delete>
<!-- 获取列表 -->
<select id="getList" parameterType="paramDto" resultMap="TableIndexEntity-Map">
select <include refid="_columns"/>
from mortals_iot_table_index as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
from mortals_iot_table_index as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</select>
<!-- 条件映射 -->
<sql id="_condition_">
<if test="condition != null and !condition.isEmpty()">
<if test="condition.containsKey('id')">
<if test="condition.id != null">
and a.id=#{condition.id}
</if>
</if>
<if test="condition.containsKey('id')">
<if test="condition.id != null ">
and a.id = #{condition.id}
</if>
<if test="condition.id == null">
and a.id is null
</if>
</if>
<if test="condition.containsKey('idList')">
and a.id in
<foreach collection="condition.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('idStart') and condition.idStart != null">
<![CDATA[ and a.id >= #{condition.idStart} ]]>
</if>
<if test="condition.containsKey('idEnd') and condition.idEnd != null">
<![CDATA[ and a.id <= #{condition.idEnd} ]]>
</if>
<if test="condition.containsKey('tableName')">
<if test="condition.tableName != null and condition.tableName != ''">
and a.tableName like #{condition.tableName}
</if>
<if test="condition.tableName == null">
and a.tableName is null
</if>
</if>
<if test="condition.containsKey('tableNameList')">
and a.tableName in
<foreach collection="condition.tableNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('tableMark')">
<if test="condition.tableMark != null and condition.tableMark != ''">
and a.tableMark like #{condition.tableMark}
</if>
<if test="condition.tableMark == null">
and a.tableMark is null
</if>
</if>
<if test="condition.containsKey('tableMarkList')">
and a.tableMark in
<foreach collection="condition.tableMarkList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('createTime')">
<if test="condition.createTime != null ">
and a.createTime = #{condition.createTime}
</if>
<if test="condition.createTime == null">
and a.createTime is null
</if>
</if>
<if test="condition.containsKey('createTimeStart') and condition.createTimeStart != null and condition.createTimeStart!=''">
<![CDATA[ and a.createTime >= STR_TO_DATE(left(concat(#{condition.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('createTimeEnd') and condition.createTimeEnd != null and condition.createTimeEnd!=''">
<![CDATA[ and a.createTime <= STR_TO_DATE(left(concat(#{condition.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test="orderCol.id!= null">
${orderCol.id}
</if>
,
</if>
<if test="orderCol.containsKey('tableName')">
a.tableName
<if test="orderCol.tableName!= null">
${orderCol.tableName}
</if>
,
</if>
<if test="orderCol.containsKey('tableMark')">
a.tableMark
<if test="orderCol.tableMark!= null">
${orderCol.tableMark}
</if>
,
</if>
<if test="orderCol.containsKey('createTime')">
a.createTime
<if test="orderCol.createTime!= null">
${orderCol.createTime}
</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
GROUP BY
<trim suffixOverrides="," suffix="">
<foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
${item}
</foreach>
</trim>
</if>
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.base.system.valid.dao.ibatis.ValidCodeDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="ValidCodeEntity" id="ValidCodeEntity-Map">
<result property="id" column="id" />
<result property="code" column="code" />
<result property="url" column="url" />
<result property="mobile" column="mobile" />
<result property="email" column="email" />
<result property="type" column="type" />
<result property="sessionId" column="sessionId" />
<result property="ip" column="ip" />
<result property="createTime" column="createTime" />
<result property="lapseTime" column="lapseTime" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id as id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('code') or colPickMode == 1 and data.containsKey('code')))">
a.code as code,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('url') or colPickMode == 1 and data.containsKey('url')))">
a.url as url,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('mobile') or colPickMode == 1 and data.containsKey('mobile')))">
a.mobile as mobile,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('email') or colPickMode == 1 and data.containsKey('email')))">
a.email as email,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('type') or colPickMode == 1 and data.containsKey('type')))">
a.type as type,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('sessionId') or colPickMode == 1 and data.containsKey('sessionId')))">
a.sessionId as sessionId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('ip') or colPickMode == 1 and data.containsKey('ip')))">
a.ip as ip,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime as createTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('lapseTime') or colPickMode == 1 and data.containsKey('lapseTime')))">
a.lapseTime as lapseTime,
</if>
</trim>
</sql>
<!-- 新增 -->
<insert id="insert" parameterType="ValidCodeEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_iot_valid_code
(code,url,mobile,email,type,
sessionId,ip,createTime,lapseTime
)VALUES(#{code},#{url},#{mobile},#{email},#{type},
#{sessionId},#{ip},#{createTime},#{lapseTime})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_iot_valid_code
(code,url,mobile,email,type,
sessionId,ip,createTime,lapseTime
)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.code},#{item.url},#{item.mobile},#{item.email},#{item.type},
#{item.sessionId},#{item.ip},#{item.createTime},#{item.lapseTime})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
<update id="update" parameterType="paramDto">
update mortals_iot_valid_code as a
set
<trim suffixOverrides="," suffix="">
<if test="(colPickMode==0 and data.containsKey('code')) or (colPickMode==1 and !data.containsKey('code'))">
a.code=#{data.code},
</if>
<if test="(colPickMode==0 and data.containsKey('url')) or (colPickMode==1 and !data.containsKey('url'))">
a.url=#{data.url},
</if>
<if test="(colPickMode==0 and data.containsKey('mobile')) or (colPickMode==1 and !data.containsKey('mobile'))">
a.mobile=#{data.mobile},
</if>
<if test="(colPickMode==0 and data.containsKey('email')) or (colPickMode==1 and !data.containsKey('email'))">
a.email=#{data.email},
</if>
<if test="(colPickMode==0 and data.containsKey('type')) or (colPickMode==1 and !data.containsKey('type'))">
a.type=#{data.type},
</if>
<if test="(colPickMode==0 and data.containsKey('typeIncrement')) or (colPickMode==1 and !data.containsKey('typeIncrement'))">
a.type=ifnull(a.type,0) + #{data.typeIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('sessionId')) or (colPickMode==1 and !data.containsKey('sessionId'))">
a.sessionId=#{data.sessionId},
</if>
<if test="(colPickMode==0 and data.containsKey('ip')) or (colPickMode==1 and !data.containsKey('ip'))">
a.ip=#{data.ip},
</if>
<if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
a.createTime=#{data.createTime},
</if>
<if test="(colPickMode==0 and data.containsKey('lapseTime')) or (colPickMode==1 and !data.containsKey('lapseTime'))">
a.lapseTime=#{data.lapseTime},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</update>
<!-- 根据主健查询 -->
<select id="getByKey" parameterType="paramDto" resultMap="ValidCodeEntity-Map">
select <include refid="_columns"/>
from mortals_iot_valid_code as a
where a.id=#{condition.id}
</select>
<!-- 根据主健删除 -->
<delete id="deleteByKey" parameterType="paramDto">
delete a.* from mortals_iot_valid_code as a where a.id=#{condition.id}
</delete>
<!-- 根据主健删除一批,针对单一主健有效 -->
<delete id="deleteByKeys">
delete from mortals_iot_valid_code where id in
<foreach collection="array" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据paramDto删除一批 -->
<delete id="deleteByMap" parameterType="paramDto">
delete a.* from mortals_iot_valid_code as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</delete>
<!-- 获取列表 -->
<select id="getList" parameterType="paramDto" resultMap="ValidCodeEntity-Map">
select <include refid="_columns"/>
from mortals_iot_valid_code as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
from mortals_iot_valid_code as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</select>
<!-- 条件映射 -->
<sql id="_condition_">
<if test="condition != null and !condition.isEmpty()">
<if test="condition.containsKey('id')">
<if test="condition.id != null">
and a.id=#{condition.id}
</if>
</if>
<if test="condition.containsKey('id')">
<if test="condition.id != null ">
and a.id = #{condition.id}
</if>
<if test="condition.id == null">
and a.id is null
</if>
</if>
<if test="condition.containsKey('idList')">
and a.id in
<foreach collection="condition.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('idStart') and condition.idStart != null">
<![CDATA[ and a.id >= #{condition.idStart} ]]>
</if>
<if test="condition.containsKey('idEnd') and condition.idEnd != null">
<![CDATA[ and a.id <= #{condition.idEnd} ]]>
</if>
<if test="condition.containsKey('code')">
<if test="condition.code != null and condition.code != ''">
and a.code like #{condition.code}
</if>
<if test="condition.code == null">
and a.code is null
</if>
</if>
<if test="condition.containsKey('codeList')">
and a.code in
<foreach collection="condition.codeList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('url')">
<if test="condition.url != null and condition.url != ''">
and a.url like #{condition.url}
</if>
<if test="condition.url == null">
and a.url is null
</if>
</if>
<if test="condition.containsKey('urlList')">
and a.url in
<foreach collection="condition.urlList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('mobile')">
<if test="condition.mobile != null and condition.mobile != ''">
and a.mobile like #{condition.mobile}
</if>
<if test="condition.mobile == null">
and a.mobile is null
</if>
</if>
<if test="condition.containsKey('mobileList')">
and a.mobile in
<foreach collection="condition.mobileList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('email')">
<if test="condition.email != null and condition.email != ''">
and a.email like #{condition.email}
</if>
<if test="condition.email == null">
and a.email is null
</if>
</if>
<if test="condition.containsKey('emailList')">
and a.email in
<foreach collection="condition.emailList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('type')">
<if test="condition.type != null ">
and a.type = #{condition.type}
</if>
<if test="condition.type == null">
and a.type is null
</if>
</if>
<if test="condition.containsKey('typeList')">
and a.type in
<foreach collection="condition.typeList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('typeStart') and condition.typeStart != null">
<![CDATA[ and a.type >= #{condition.typeStart} ]]>
</if>
<if test="condition.containsKey('typeEnd') and condition.typeEnd != null">
<![CDATA[ and a.type <= #{condition.typeEnd} ]]>
</if>
<if test="condition.containsKey('sessionId')">
<if test="condition.sessionId != null and condition.sessionId != ''">
and a.sessionId like #{condition.sessionId}
</if>
<if test="condition.sessionId == null">
and a.sessionId is null
</if>
</if>
<if test="condition.containsKey('sessionIdList')">
and a.sessionId in
<foreach collection="condition.sessionIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('ip')">
<if test="condition.ip != null and condition.ip != ''">
and a.ip like #{condition.ip}
</if>
<if test="condition.ip == null">
and a.ip is null
</if>
</if>
<if test="condition.containsKey('ipList')">
and a.ip in
<foreach collection="condition.ipList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('createTime')">
<if test="condition.createTime != null ">
and a.createTime = #{condition.createTime}
</if>
<if test="condition.createTime == null">
and a.createTime is null
</if>
</if>
<if test="condition.containsKey('createTimeStart') and condition.createTimeStart != null and condition.createTimeStart!=''">
<![CDATA[ and a.createTime >= STR_TO_DATE(left(concat(#{condition.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('createTimeEnd') and condition.createTimeEnd != null and condition.createTimeEnd!=''">
<![CDATA[ and a.createTime <= STR_TO_DATE(left(concat(#{condition.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('lapseTime')">
<if test="condition.lapseTime != null ">
and a.lapseTime = #{condition.lapseTime}
</if>
<if test="condition.lapseTime == null">
and a.lapseTime is null
</if>
</if>
<if test="condition.containsKey('lapseTimeStart') and condition.lapseTimeStart != null and condition.lapseTimeStart!=''">
<![CDATA[ and a.lapseTime >= STR_TO_DATE(left(concat(#{condition.lapseTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('lapseTimeEnd') and condition.lapseTimeEnd != null and condition.lapseTimeEnd!=''">
<![CDATA[ and a.lapseTime <= STR_TO_DATE(left(concat(#{condition.lapseTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test="orderCol.id!= null">
${orderCol.id}
</if>
,
</if>
<if test="orderCol.containsKey('code')">
a.code
<if test="orderCol.code!= null">
${orderCol.code}
</if>
,
</if>
<if test="orderCol.containsKey('url')">
a.url
<if test="orderCol.url!= null">
${orderCol.url}
</if>
,
</if>
<if test="orderCol.containsKey('mobile')">
a.mobile
<if test="orderCol.mobile!= null">
${orderCol.mobile}
</if>
,
</if>
<if test="orderCol.containsKey('email')">
a.email
<if test="orderCol.email!= null">
${orderCol.email}
</if>
,
</if>
<if test="orderCol.containsKey('type')">
a.type
<if test="orderCol.type!= null">
${orderCol.type}
</if>
,
</if>
<if test="orderCol.containsKey('sessionId')">
a.sessionId
<if test="orderCol.sessionId!= null">
${orderCol.sessionId}
</if>
,
</if>
<if test="orderCol.containsKey('ip')">
a.ip
<if test="orderCol.ip!= null">
${orderCol.ip}
</if>
,
</if>
<if test="orderCol.containsKey('createTime')">
a.createTime
<if test="orderCol.createTime!= null">
${orderCol.createTime}
</if>
,
</if>
<if test="orderCol.containsKey('lapseTime')">
a.lapseTime
<if test="orderCol.lapseTime!= null">
${orderCol.lapseTime}
</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
GROUP BY
<trim suffixOverrides="," suffix="">
<foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
${item}
</foreach>
</trim>
</if>
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.demo.dao.ibatis.DemoDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="DemoEntity" id="DemoEntity-Map">
<result property="id" column="id" />
<result property="fieldOne" column="fieldOne" />
<result property="fieldTwo" column="fieldTwo" />
<result property="updateTime" column="updateTime" />
<result property="updateUser" column="updateUser" />
<result property="createTime" column="createTime" />
<result property="createUser" column="createUser" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id as id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('fieldOne') or colPickMode == 1 and data.containsKey('fieldOne')))">
a.fieldOne as fieldOne,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('fieldTwo') or colPickMode == 1 and data.containsKey('fieldTwo')))">
a.fieldTwo as fieldTwo,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))">
a.updateTime as updateTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateUser') or colPickMode == 1 and data.containsKey('updateUser')))">
a.updateUser as updateUser,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime as createTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUser') or colPickMode == 1 and data.containsKey('createUser')))">
a.createUser as createUser,
</if>
</trim>
</sql>
<!-- 新增 -->
<insert id="insert" parameterType="DemoEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_iot_demo
(fieldOne,fieldTwo,updateTime,updateUser,createTime,
createUser
)VALUES(#{fieldOne},#{fieldTwo},#{updateTime},#{updateUser},#{createTime},
#{createUser})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_iot_demo
(fieldOne,fieldTwo,updateTime,updateUser,createTime,
createUser
)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.fieldOne},#{item.fieldTwo},#{item.updateTime},#{item.updateUser},#{item.createTime},
#{item.createUser})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
<update id="update" parameterType="paramDto">
update mortals_iot_demo as a
set
<trim suffixOverrides="," suffix="">
<if test="(colPickMode==0 and data.containsKey('fieldOne')) or (colPickMode==1 and !data.containsKey('fieldOne'))">
a.fieldOne=#{data.fieldOne},
</if>
<if test="(colPickMode==0 and data.containsKey('fieldTwo')) or (colPickMode==1 and !data.containsKey('fieldTwo'))">
a.fieldTwo=#{data.fieldTwo},
</if>
<if test="(colPickMode==0 and data.containsKey('fieldTwoIncrement')) or (colPickMode==1 and !data.containsKey('fieldTwoIncrement'))">
a.fieldTwo=ifnull(a.fieldTwo,0) + #{data.fieldTwoIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))">
a.updateTime=#{data.updateTime},
</if>
<if test="(colPickMode==0 and data.containsKey('updateUser')) or (colPickMode==1 and !data.containsKey('updateUser'))">
a.updateUser=#{data.updateUser},
</if>
<if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
a.createTime=#{data.createTime},
</if>
<if test="(colPickMode==0 and data.containsKey('createUser')) or (colPickMode==1 and !data.containsKey('createUser'))">
a.createUser=#{data.createUser},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</update>
<!-- 批量更新 -->
<update id="updateBatch" parameterType="paramDto">
update mortals_iot_demo as a
<trim prefix="set" suffixOverrides=",">
<trim prefix="fieldOne=(case" suffix="ELSE fieldOne end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('fieldOne')) or (colPickMode==1 and !item.containsKey('fieldOne'))">
when a.id=#{item.id} then #{item.fieldOne}
</if>
</foreach>
</trim>
<trim prefix="fieldTwo=(case" suffix="ELSE fieldTwo end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('fieldTwo')) or (colPickMode==1 and !item.containsKey('fieldTwo'))">
when a.id=#{item.id} then #{item.fieldTwo}
</when>
<when test="(colPickMode==0 and item.containsKey('fieldTwoIncrement')) or (colPickMode==1 and !item.containsKey('fieldTwoIncrement'))">
when a.id=#{item.id} then ifnull(a.fieldTwo,0) + #{item.fieldTwoIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="updateTime=(case" suffix="ELSE updateTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('updateTime')) or (colPickMode==1 and !item.containsKey('updateTime'))">
when a.id=#{item.id} then #{item.updateTime}
</if>
</foreach>
</trim>
<trim prefix="updateUser=(case" suffix="ELSE updateUser end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('updateUser')) or (colPickMode==1 and !item.containsKey('updateUser'))">
when a.id=#{item.id} then #{item.updateUser}
</if>
</foreach>
</trim>
<trim prefix="createTime=(case" suffix="ELSE createTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
when a.id=#{item.id} then #{item.createTime}
</if>
</foreach>
</trim>
<trim prefix="createUser=(case" suffix="ELSE createUser end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createUser')) or (colPickMode==1 and !item.containsKey('createUser'))">
when a.id=#{item.id} then #{item.createUser}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
<!-- 根据主健查询 -->
<select id="getByKey" parameterType="paramDto" resultMap="DemoEntity-Map">
select <include refid="_columns"/>
from mortals_iot_demo as a
where a.id=#{condition.id}
</select>
<!-- 根据主健删除 -->
<delete id="deleteByKey" parameterType="paramDto">
delete a.* from mortals_iot_demo as a where a.id=#{condition.id}
</delete>
<!-- 根据主健删除一批,针对单一主健有效 -->
<delete id="deleteByKeys">
delete from mortals_iot_demo where id in
<foreach collection="array" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据paramDto删除一批 -->
<delete id="deleteByMap" parameterType="paramDto">
delete a.* from mortals_iot_demo as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</delete>
<!-- 获取列表 -->
<select id="getList" parameterType="paramDto" resultMap="DemoEntity-Map">
select <include refid="_columns"/>
from mortals_iot_demo as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
from mortals_iot_demo as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</select>
<!-- 条件映射 -->
<sql id="_condition_">
<if test="condition != null and !condition.isEmpty()">
<if test="condition.containsKey('id')">
<if test="condition.id != null">
and a.id=#{condition.id}
</if>
</if>
<if test="condition.containsKey('id')">
<if test="condition.id != null ">
and a.id = #{condition.id}
</if>
<if test="condition.id == null">
and a.id is null
</if>
</if>
<if test="condition.containsKey('idList')">
and a.id in
<foreach collection="condition.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('idStart') and condition.idStart != null">
<![CDATA[ and a.id >= #{condition.idStart} ]]>
</if>
<if test="condition.containsKey('idEnd') and condition.idEnd != null">
<![CDATA[ and a.id <= #{condition.idEnd} ]]>
</if>
<if test="condition.containsKey('fieldOne')">
<if test="condition.fieldOne != null and condition.fieldOne != ''">
and a.fieldOne like #{condition.fieldOne}
</if>
<if test="condition.fieldOne == null">
and a.fieldOne is null
</if>
</if>
<if test="condition.containsKey('fieldOneList')">
and a.fieldOne in
<foreach collection="condition.fieldOneList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('fieldTwo')">
<if test="condition.fieldTwo != null ">
and a.fieldTwo = #{condition.fieldTwo}
</if>
<if test="condition.fieldTwo == null">
and a.fieldTwo is null
</if>
</if>
<if test="condition.containsKey('fieldTwoList')">
and a.fieldTwo in
<foreach collection="condition.fieldTwoList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('fieldTwoStart') and condition.fieldTwoStart != null">
<![CDATA[ and a.fieldTwo >= #{condition.fieldTwoStart} ]]>
</if>
<if test="condition.containsKey('fieldTwoEnd') and condition.fieldTwoEnd != null">
<![CDATA[ and a.fieldTwo <= #{condition.fieldTwoEnd} ]]>
</if>
<if test="condition.containsKey('updateTime')">
<if test="condition.updateTime != null ">
and a.updateTime = #{condition.updateTime}
</if>
<if test="condition.updateTime == null">
and a.updateTime is null
</if>
</if>
<if test="condition.containsKey('updateTimeStart') and condition.updateTimeStart != null and condition.updateTimeStart!=''">
<![CDATA[ and a.updateTime >= STR_TO_DATE(left(concat(#{condition.updateTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('updateTimeEnd') and condition.updateTimeEnd != null and condition.updateTimeEnd!=''">
<![CDATA[ and a.updateTime <= STR_TO_DATE(left(concat(#{condition.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('updateUser')">
<if test="condition.updateUser != null and condition.updateUser != ''">
and a.updateUser like #{condition.updateUser}
</if>
<if test="condition.updateUser == null">
and a.updateUser is null
</if>
</if>
<if test="condition.containsKey('updateUserList')">
and a.updateUser in
<foreach collection="condition.updateUserList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="condition.containsKey('createTime')">
<if test="condition.createTime != null ">
and a.createTime = #{condition.createTime}
</if>
<if test="condition.createTime == null">
and a.createTime is null
</if>
</if>
<if test="condition.containsKey('createTimeStart') and condition.createTimeStart != null and condition.createTimeStart!=''">
<![CDATA[ and a.createTime >= STR_TO_DATE(left(concat(#{condition.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('createTimeEnd') and condition.createTimeEnd != null and condition.createTimeEnd!=''">
<![CDATA[ and a.createTime <= STR_TO_DATE(left(concat(#{condition.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') ]]>
</if>
<if test="condition.containsKey('createUser')">
<if test="condition.createUser != null and condition.createUser != ''">
and a.createUser like #{condition.createUser}
</if>
<if test="condition.createUser == null">
and a.createUser is null
</if>
</if>
<if test="condition.containsKey('createUserList')">
and a.createUser in
<foreach collection="condition.createUserList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test="orderCol.id!= null">
${orderCol.id}
</if>
,
</if>
<if test="orderCol.containsKey('fieldOne')">
a.fieldOne
<if test="orderCol.fieldOne!= null">
${orderCol.fieldOne}
</if>
,
</if>
<if test="orderCol.containsKey('fieldTwo')">
a.fieldTwo
<if test="orderCol.fieldTwo!= null">
${orderCol.fieldTwo}
</if>
,
</if>
<if test="orderCol.containsKey('updateTime')">
a.updateTime
<if test="orderCol.updateTime!= null">
${orderCol.updateTime}
</if>
,
</if>
<if test="orderCol.containsKey('updateUser')">
a.updateUser
<if test="orderCol.updateUser!= null">
${orderCol.updateUser}
</if>
,
</if>
<if test="orderCol.containsKey('createTime')">
a.createTime
<if test="orderCol.createTime!= null">
${orderCol.createTime}
</if>
,
</if>
<if test="orderCol.containsKey('createUser')">
a.createUser
<if test="orderCol.createUser!= null">
${orderCol.createUser}
</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
GROUP BY
<trim suffixOverrides="," suffix="">
<foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
${item}
</foreach>
</trim>
</if>
</sql>
</mapper>
\ No newline at end of file
Manifest-Version: 1.0
Main-Class: com.mortals.xhx.ManagerApplication
......@@ -4,6 +4,8 @@
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>
<groupId>com.mortals.xhx</groupId>
<artifactId>dataCenter-manager</artifactId>
<packaging>jar</packaging>
<description>管理后台服务</description>
......@@ -25,6 +27,8 @@
</dependency>
<!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
......@@ -41,7 +45,11 @@
</exclusion>
</exclusions>
</dependency>
<!--2.导入Feign的包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
......
#!/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 17021 &
fi
;;
stop)
if [ -f $CATALINA_BASE/stop.sh ];then
$CATALINA_BASE/stop.sh 17021
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
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mortals</groupId>
<artifactId>mortals-common</artifactId>
<version>1.1.2-SNAPSHOT</version>
</parent>
<groupId>com.mortals.xhx</groupId>
<artifactId>xhx-base</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>dataCenter-manager</module>
<module>dataCenter-handler</module>
<module>dataCenter-common-lib</module>
</modules>
<properties>
<common-lib.version>0.0.1-SNAPSHOT</common-lib.version>
<aliyun-java-sdk-core.version>4.5.16</aliyun-java-sdk-core.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun-java-sdk-core.version}</version>
</dependency>
<dependency>
<groupId>com.mortals.xhx</groupId>
<artifactId>dataCenter-common-lib</artifactId>
<version>${common-lib.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入 Spring Cloud Alibaba Nacos Config 相关依赖,将 Nacos 作为配置中心,并实现对其的自动配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- 去除resources下的所有文件 -->
<!-- <excludes>-->
<!-- <exclude>**/*.properties</exclude>-->
<!-- <exclude>**/*.xml</exclude>-->
<!-- <exclude>**/*.yml</exclude>-->
<!-- <exclude>etlsql/**</exclude>-->
<!-- <exclude>sqlmap/**</exclude>-->
<!-- <exclude>config/**</exclude>-->
<!-- </excludes>-->
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<outputDirectory>${project.build.directory}/${project.name}/boot</outputDirectory>
<layout>ZIP</layout>
<!-- 打包时,本jar包不包含其他依赖包 , 否则打出的jar包还是很大 -->
<!-- <includes>-->
<!-- <include>-->
<!-- <groupId>nothing</groupId>-->
<!-- <artifactId>nothing</artifactId>-->
<!-- </include>-->
<!-- </includes>-->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!--设置jar所依赖的三方jar包存放的路径 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dep</id>
<phase>prepare-package</phase>
<goals>
<goal>
copy-dependencies
</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.name}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<!-- 是否不包含间接依赖 -->
<excludeTransitive>false</excludeTransitive>
<!-- 忽略版本 -->
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>${project.build.directory}/${project.name}/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>etlsql/**</include>
<include>sqlmap/**</include>
<include>config/**</include>
<include>*.yml</include>
<include>*.xml</include>
<include>*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-bin</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>${project.build.directory}/${project.name}/bin</outputDirectory>
<resources>
<resource>
<directory>src/main/bin/</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
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