commit
d7e8f86cc0
@ -0,0 +1,76 @@
|
|||||||
|
# For Java
|
||||||
|
*.lck
|
||||||
|
target/
|
||||||
|
*.json
|
||||||
|
log/
|
||||||
|
logback-test.xml
|
||||||
|
|
||||||
|
|
||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME)
|
||||||
|
.mtj.tmp/
|
||||||
|
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
|
||||||
|
# Image snapshot diff
|
||||||
|
__diff_output__/
|
||||||
|
/jest-stare
|
||||||
|
|
||||||
|
*.iml
|
||||||
|
.idea/
|
||||||
|
.ipr
|
||||||
|
.iws
|
||||||
|
*~
|
||||||
|
~*
|
||||||
|
*.diff
|
||||||
|
*.patch
|
||||||
|
*.bak
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
.project
|
||||||
|
.*proj
|
||||||
|
.svn/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*.log
|
||||||
|
*.log.*
|
||||||
|
*.json.gzip
|
||||||
|
node_modules/
|
||||||
|
.buildpath
|
||||||
|
.settings
|
||||||
|
dist
|
||||||
|
npm-debug.log
|
||||||
|
nohup.out
|
||||||
|
_site
|
||||||
|
_data
|
||||||
|
report.html
|
||||||
|
/lib
|
||||||
|
/es
|
||||||
|
elasticsearch-*
|
||||||
|
config/base.yaml
|
||||||
|
/.vscode/
|
||||||
|
/coverage
|
||||||
|
/.history
|
||||||
|
*.tmp
|
||||||
|
!**/nacos/target
|
||||||
|
**/nacos/data/*
|
||||||
|
**/nacos/logs/*
|
||||||
|
**/seata/bin/*
|
@ -0,0 +1,22 @@
|
|||||||
|
# 基础镜像
|
||||||
|
FROM eclipse-temurin:8u362-b09-jre
|
||||||
|
LABEL maintainer=jnpf-team
|
||||||
|
|
||||||
|
# 设置时区
|
||||||
|
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||||
|
&& echo 'Asia/Shanghai' >/etc/timezone
|
||||||
|
|
||||||
|
# 解决连接SQLServer安全错误
|
||||||
|
COPY security/java.security /opt/java/openjdk/lib/security
|
||||||
|
|
||||||
|
# 指定运行时的工作目录
|
||||||
|
WORKDIR /jnpfsoft/jnpf-server/jnpf-java-boot
|
||||||
|
|
||||||
|
# 将构建产物jar包拷贝到运行时目录中
|
||||||
|
COPY jnpf-admin/target/*.jar ./jnpf-admin.jar
|
||||||
|
|
||||||
|
# 指定容器内运行端口
|
||||||
|
EXPOSE 30000
|
||||||
|
|
||||||
|
# 指定容器启动时要运行的命令
|
||||||
|
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar jnpf-admin.jar"]
|
@ -0,0 +1,170 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-java-boot</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>jnpf-admin</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<!--打包WAR包删除注释-->
|
||||||
|
<!--<packaging>war</packaging>-->
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-file-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-extend-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-form-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-system-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-scheduletask-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-message-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-permission-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-visualdev-base-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-visualdev-onlinedev-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-visualdev-generater-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-visualdev-portal-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-visualdata-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-exception</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-workflow-engine-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-workflow-form-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-oauth-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-example-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-app-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-visualdev-integrate-controller</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--打包WAR包删除注释-->
|
||||||
|
<!--<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>-->
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<!-- ... -->
|
||||||
|
<!--打包WAR包注释插件-->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>jnpf.JnpfAdminApplication</mainClass>
|
||||||
|
<layout>ZIP</layout>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>repackage</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<!-- ... -->
|
||||||
|
<!--打包WAR包删除注释-->
|
||||||
|
<!--<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
|
<version>3.3.2</version>
|
||||||
|
<configuration>
|
||||||
|
<warSourceExcludes>src/main/resources/**</warSourceExcludes>
|
||||||
|
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||||
|
</configuration>
|
||||||
|
</plugin>-->
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
@ -0,0 +1,29 @@
|
|||||||
|
package jnpf;
|
||||||
|
|
||||||
|
import cn.xuyanwu.spring.file.storage.EnableFileStorage;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
|
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@SpringBootApplication(scanBasePackages = {"jnpf"},exclude={DataSourceAutoConfiguration.class})
|
||||||
|
@EnableFileStorage
|
||||||
|
public class JnpfAdminApplication extends SpringBootServletInitializer {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication springApplication = new SpringApplication(JnpfAdminApplication.class);
|
||||||
|
//添加监听器
|
||||||
|
// springApplication.addListeners(new JnpfListener());
|
||||||
|
springApplication.run(args);
|
||||||
|
System.out.println("JnpfAdmin启动完成");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,86 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.context.SaHolder;
|
||||||
|
import jnpf.base.UserInfo;
|
||||||
|
import jnpf.config.ConfigValueUtil;
|
||||||
|
import jnpf.database.util.NotTenantPluginHolder;
|
||||||
|
import jnpf.util.data.DataSourceContextHolder;
|
||||||
|
import jnpf.util.StringUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.Around;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.core.annotation.Order;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
@Order(1)
|
||||||
|
public class DataSourceBindAspect {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConfigValueUtil configValueUtil;
|
||||||
|
|
||||||
|
@Pointcut("((execution(* jnpf.*.controller.*.*(..)) || execution(* jnpf.controller.*.*(..))) " +
|
||||||
|
"&& !execution(* jnpf.controller.LoginController.login(..)))" +
|
||||||
|
"|| execution(* jnpf.message.websocket.WebSocket.*(..))")
|
||||||
|
public void bindDataSource() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NoDataSourceBind 不需要绑定数据库的注解
|
||||||
|
*
|
||||||
|
* @param pjp
|
||||||
|
* @return
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
|
@Around("bindDataSource() && !@annotation(jnpf.util.NoDataSourceBind)")
|
||||||
|
public Object doAroundService(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
if (configValueUtil.isMultiTenancy()) {
|
||||||
|
if(StringUtil.isEmpty(DataSourceContextHolder.getDatasourceId()) || StringUtil.isEmpty(DataSourceContextHolder.getDatasourceName())){
|
||||||
|
UserInfo userInfo = UserProvider.getUser();
|
||||||
|
String url = null;
|
||||||
|
try{
|
||||||
|
url = SaHolder.getRequest().getRequestPath();
|
||||||
|
}catch (Exception ee){ }
|
||||||
|
log.error("租户" + userInfo.getTenantId() + "数据库不存在, URL: {}, TOKEN: {}", url, userInfo.getToken());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return pjp.proceed();
|
||||||
|
}
|
||||||
|
Object obj = pjp.proceed();
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NoDataSourceBind 不需要绑定数据库的注解 加入不切租户库标记
|
||||||
|
*
|
||||||
|
* @param pjp
|
||||||
|
* @return
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
|
@Around("bindDataSource() && @annotation(jnpf.util.NoDataSourceBind)")
|
||||||
|
public Object doAroundService2(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
try{
|
||||||
|
NotTenantPluginHolder.setNotSwitchAlwaysFlag();
|
||||||
|
//Filter中提前设置租户信息, 不需要切库的方法进行清除切库
|
||||||
|
DataSourceContextHolder.clearDatasourceType();
|
||||||
|
return pjp.proceed();
|
||||||
|
}finally {
|
||||||
|
NotTenantPluginHolder.clearNotSwitchAlwaysFlag();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,111 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import jnpf.annotation.OrganizeAdminIsTrator;
|
||||||
|
import jnpf.base.ActionResult;
|
||||||
|
import jnpf.base.UserInfo;
|
||||||
|
import jnpf.constant.MsgCode;
|
||||||
|
import jnpf.constant.PermissionConstant;
|
||||||
|
import jnpf.permission.entity.OrganizeRelationEntity;
|
||||||
|
import jnpf.permission.model.authorize.SaveBatchForm;
|
||||||
|
import jnpf.permission.service.OrganizeRelationService;
|
||||||
|
import jnpf.util.PermissionAspectUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.Around;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
public class PermissionAdminAspect implements PermissionAdminBase{
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserProvider userProvider;
|
||||||
|
@Autowired
|
||||||
|
private OrganizeRelationService organizeRelationService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*/
|
||||||
|
@Pointcut("@annotation(jnpf.annotation.OrganizeAdminIsTrator)")
|
||||||
|
public void pointcut() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*
|
||||||
|
* @param pjp
|
||||||
|
* @return
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
|
@Around("pointcut()")
|
||||||
|
public Object around(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
return PermissionAdminBase.permissionCommon(pjp, userProvider, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean detailPermission(ProceedingJoinPoint pjp, String operatorUserId, String methodName){
|
||||||
|
switch (methodName) {
|
||||||
|
case PermissionConstant.METHOD_SAVE:
|
||||||
|
if(userProvider.get().getIsAdministrator()){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
String roleId = (String) pjp.getArgs()[0];
|
||||||
|
List<String> orgIdList = organizeRelationService.getRelationListByRoleId(roleId).stream().map(OrganizeRelationEntity::getOrganizeId).collect(Collectors.toList());
|
||||||
|
StringBuilder orgId = new StringBuilder();
|
||||||
|
orgIdList.stream().forEach(t->{
|
||||||
|
orgId.append(t + ",");
|
||||||
|
});
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
orgId.toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
case PermissionConstant.METHOD_SAVE_BATCH:
|
||||||
|
// 修改为只有超管才能操作
|
||||||
|
if(userProvider.get().getIsAdministrator()){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// 得到角色id
|
||||||
|
SaveBatchForm saveBatchForm = (SaveBatchForm) pjp.getArgs()[0];
|
||||||
|
List<String> list = Arrays.asList(saveBatchForm.getRoleIds());
|
||||||
|
if (list.size() == 0) {
|
||||||
|
list = new ArrayList<>();
|
||||||
|
list.add("");
|
||||||
|
}
|
||||||
|
// 得到组织id
|
||||||
|
List<String> orgIdLists = organizeRelationService.getRelationListByRoleIdList(list).stream().map(OrganizeRelationEntity::getOrganizeId).collect(Collectors.toList());
|
||||||
|
StringBuilder orgIds = new StringBuilder();
|
||||||
|
orgIdLists.stream().forEach(t->{
|
||||||
|
orgIds.append(t + ",");
|
||||||
|
});
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
orgIds.toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
case PermissionConstant.METHOD_UPDATE:
|
||||||
|
//判断是否有当前组织的修改权限
|
||||||
|
String organizeId = String.valueOf(pjp.getArgs()[0]);
|
||||||
|
return PermissionAspectUtil.containPermission(organizeId, operatorUserId, methodName);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import jnpf.base.ActionResult;
|
||||||
|
import jnpf.base.UserInfo;
|
||||||
|
import jnpf.constant.MsgCode;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
|
||||||
|
public interface PermissionAdminBase{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 详细的权限判断
|
||||||
|
* @param pjp AOP切点参数
|
||||||
|
* @param operatorUserId 操作者对象
|
||||||
|
*/
|
||||||
|
Boolean detailPermission(ProceedingJoinPoint pjp, String operatorUserId, String methodName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理者权限判断
|
||||||
|
*
|
||||||
|
* @param userProvider 操作者对象
|
||||||
|
*/
|
||||||
|
static Object permissionCommon(ProceedingJoinPoint pjp, UserProvider userProvider, PermissionAdminBase permissionAdminBase) throws Throwable {
|
||||||
|
// 获取用户信息
|
||||||
|
UserInfo operatorUser = userProvider.get();
|
||||||
|
// 是否是管理员
|
||||||
|
if(operatorUser.getIsAdministrator()){
|
||||||
|
return pjp.proceed();
|
||||||
|
}else {
|
||||||
|
// 获取方法名
|
||||||
|
String methodName = pjp.getSignature().getName();
|
||||||
|
// 具体方法权限
|
||||||
|
if(permissionAdminBase.detailPermission(pjp, operatorUser.getUserId(),methodName)){
|
||||||
|
return pjp.proceed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ActionResult.fail(MsgCode.FA021.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,121 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import jnpf.constant.PermissionConstant;
|
||||||
|
import jnpf.permission.entity.OrganizeEntity;
|
||||||
|
import jnpf.permission.model.organize.OrganizeCrForm;
|
||||||
|
import jnpf.permission.model.organize.OrganizeDepartCrForm;
|
||||||
|
import jnpf.permission.model.organize.OrganizeDepartUpForm;
|
||||||
|
import jnpf.permission.model.organize.OrganizeUpForm;
|
||||||
|
import jnpf.permission.service.OrganizeService;
|
||||||
|
import jnpf.util.PermissionAspectUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.Around;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
public class PermissionOrgAspect implements PermissionAdminBase {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserProvider userProvider;
|
||||||
|
@Autowired
|
||||||
|
private OrganizeService organizeService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*/
|
||||||
|
@Pointcut("@annotation(jnpf.annotation.OrganizePermission)")
|
||||||
|
public void pointcut() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*
|
||||||
|
* @param pjp
|
||||||
|
* @return
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
|
@Around("pointcut()")
|
||||||
|
public Object around(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
return PermissionAdminBase.permissionCommon(pjp, userProvider, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean detailPermission(ProceedingJoinPoint pjp, String operatorUserId, String methodName) {
|
||||||
|
switch (methodName) {
|
||||||
|
case PermissionConstant.METHOD_CREATE:
|
||||||
|
return PermissionAspectUtil.getPermitByOrgIds(
|
||||||
|
// 操作目标对象表单对象
|
||||||
|
((OrganizeCrForm) pjp.getArgs()[0]).getParentId(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_CREATE);
|
||||||
|
case PermissionConstant.METHOD_CREATE_DEPARTMENT:
|
||||||
|
return PermissionAspectUtil.getPermitByOrgIds(
|
||||||
|
// 操作目标对象表单对象
|
||||||
|
((OrganizeDepartCrForm) pjp.getArgs()[0]).getParentId(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_CREATE);
|
||||||
|
case PermissionConstant.METHOD_UPDATE:
|
||||||
|
// 当前组织id
|
||||||
|
String orgId = (String) pjp.getArgs()[0];
|
||||||
|
// 当前组织父级id
|
||||||
|
OrganizeEntity info = organizeService.getInfo(orgId);
|
||||||
|
// 修改后的id
|
||||||
|
OrganizeUpForm organizeUpForm = (OrganizeUpForm) pjp.getArgs()[1];
|
||||||
|
StringJoiner stringJoiner = new StringJoiner(",");
|
||||||
|
stringJoiner.add(orgId);
|
||||||
|
if (!organizeUpForm.getParentId().equals(info.getParentId()) && !"-1".equals(info.getParentId())) {
|
||||||
|
stringJoiner.add(info.getParentId());
|
||||||
|
}
|
||||||
|
if (!organizeUpForm.getParentId().equals(info.getParentId()) && !"-1".equals(organizeUpForm.getParentId())) {
|
||||||
|
stringJoiner.add(organizeUpForm.getParentId());
|
||||||
|
}
|
||||||
|
return PermissionAspectUtil.getPermitByOrgIds(
|
||||||
|
// 操作目标对象ID
|
||||||
|
stringJoiner.toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
case PermissionConstant.METHOD_UPDATE_DEPARTMENT:
|
||||||
|
// 当前组织id
|
||||||
|
String orgIds = (String) pjp.getArgs()[0];
|
||||||
|
// 当前组织父级id
|
||||||
|
OrganizeEntity infos = organizeService.getInfo(orgIds);
|
||||||
|
// 修改后的id
|
||||||
|
OrganizeDepartUpForm organizeDepartUpForm = (OrganizeDepartUpForm) pjp.getArgs()[1];
|
||||||
|
StringJoiner stringJoiners = new StringJoiner(",");
|
||||||
|
stringJoiners.add(orgIds);
|
||||||
|
if (!organizeDepartUpForm.getParentId().equals(infos.getParentId())) {
|
||||||
|
stringJoiners.add(infos.getParentId());
|
||||||
|
stringJoiners.add(organizeDepartUpForm.getParentId());
|
||||||
|
}
|
||||||
|
return PermissionAspectUtil.getPermitByOrgIds(
|
||||||
|
// 操作目标对象ID
|
||||||
|
stringJoiners.toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
case PermissionConstant.METHOD_DELETE:
|
||||||
|
case PermissionConstant.METHOD_DELETE_DEPARTMENT:
|
||||||
|
return PermissionAspectUtil.getPermitByOrgIds(
|
||||||
|
// 操作目标对象ID
|
||||||
|
pjp.getArgs()[0].toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_DELETE);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import jnpf.constant.PermissionConstant;
|
||||||
|
import jnpf.permission.entity.PositionEntity;
|
||||||
|
import jnpf.permission.model.position.PositionCrForm;
|
||||||
|
import jnpf.permission.model.position.PositionUpForm;
|
||||||
|
import jnpf.permission.service.OrganizeService;
|
||||||
|
import jnpf.permission.service.PositionService;
|
||||||
|
import jnpf.util.PermissionAspectUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.Around;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
public class PermissionPositionAspect implements PermissionAdminBase{
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserProvider userProvider;
|
||||||
|
@Autowired
|
||||||
|
private PositionService positionService;
|
||||||
|
@Autowired
|
||||||
|
private OrganizeService organizeService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*/
|
||||||
|
@Pointcut("@annotation(jnpf.annotation.PositionPermission)")
|
||||||
|
public void pointcut() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*
|
||||||
|
* @param pjp
|
||||||
|
* @return
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
|
@Around("pointcut()")
|
||||||
|
public Object around(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
return PermissionAdminBase.permissionCommon(pjp, userProvider, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean detailPermission(ProceedingJoinPoint pjp, String operatorUserId, String methodName) {
|
||||||
|
switch (methodName){
|
||||||
|
case PermissionConstant.METHOD_CREATE:
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
((PositionCrForm) pjp.getArgs()[0]).getOrganizeId(),
|
||||||
|
operatorUserId,
|
||||||
|
methodName);
|
||||||
|
case PermissionConstant.METHOD_UPDATE:
|
||||||
|
// 得到岗位信息后,判断是否有修改前的权限
|
||||||
|
PositionEntity info = positionService.getInfo(((String) pjp.getArgs()[0]));
|
||||||
|
if (PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
info.getOrganizeId(),
|
||||||
|
operatorUserId,
|
||||||
|
methodName)) {
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
((PositionUpForm) pjp.getArgs()[1]).getOrganizeId(),
|
||||||
|
operatorUserId,
|
||||||
|
methodName);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case PermissionConstant.METHOD_DELETE:
|
||||||
|
// 获取岗位所关联的组织ID字符串
|
||||||
|
String positionId = String.valueOf(pjp.getArgs()[0]);
|
||||||
|
String orgIds = organizeService.getInfo(positionService.getInfo(positionId).getOrganizeId()).getId();
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
orgIds,
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_DELETE);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,151 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import jnpf.constant.PermissionConst;
|
||||||
|
import jnpf.constant.PermissionConstant;
|
||||||
|
import jnpf.permission.entity.OrganizeRelationEntity;
|
||||||
|
import jnpf.permission.entity.UserRelationEntity;
|
||||||
|
import jnpf.permission.model.user.form.UserCrForm;
|
||||||
|
import jnpf.permission.model.user.form.UserUpForm;
|
||||||
|
import jnpf.permission.model.userrelation.UserRelationForm;
|
||||||
|
import jnpf.permission.service.*;
|
||||||
|
import jnpf.util.PermissionAspectUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.Around;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.StringJoiner;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
public class PermissionUserAspect implements PermissionAdminBase{
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserProvider userProvider;
|
||||||
|
@Autowired
|
||||||
|
private OrganizeRelationService organizeRelationService;
|
||||||
|
@Autowired
|
||||||
|
private PositionService positionService;
|
||||||
|
@Autowired
|
||||||
|
private UserRelationService userRelationService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*/
|
||||||
|
@Pointcut("@annotation(jnpf.annotation.UserPermission)")
|
||||||
|
public void pointcut() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分级管理切点
|
||||||
|
*
|
||||||
|
* @param pjp
|
||||||
|
* @return
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
|
@Around("pointcut()")
|
||||||
|
public Object around(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
return PermissionAdminBase.permissionCommon(pjp, userProvider, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean detailPermission(ProceedingJoinPoint pjp, String operatorUserId, String methodName) {
|
||||||
|
switch (methodName){
|
||||||
|
case PermissionConstant.METHOD_CREATE:
|
||||||
|
UserCrForm userCrForm = (UserCrForm) pjp.getArgs()[0];
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
userCrForm.getOrganizeId(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_CREATE);
|
||||||
|
case PermissionConstant.METHOD_UPDATE:
|
||||||
|
// 得到修改的用户以前的信息
|
||||||
|
String userId = (String) pjp.getArgs()[0];
|
||||||
|
List<String> collect = userRelationService.getListByUserId(userId, PermissionConst.ORGANIZE).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
|
||||||
|
StringJoiner stringJoiner = new StringJoiner(",");
|
||||||
|
collect.forEach(t -> {
|
||||||
|
stringJoiner.add(t);
|
||||||
|
});
|
||||||
|
if (PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
stringJoiner.toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE)) {
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
((UserUpForm) pjp.getArgs()[1]).getOrganizeId(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case PermissionConstant.METHOD_MODIFY_PW:
|
||||||
|
return PermissionAspectUtil.getPermitByUserId(
|
||||||
|
// 操作目标对象的ID
|
||||||
|
String.valueOf(pjp.getArgs()[0]),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
case PermissionConstant.METHOD_DELETE:
|
||||||
|
return PermissionAspectUtil.getPermitByUserId(
|
||||||
|
// 操作目标对象的ID
|
||||||
|
pjp.getArgs()[0].toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_DELETE);
|
||||||
|
case PermissionConstant.METHOD_SAVE:
|
||||||
|
String objId = pjp.getArgs()[0].toString();
|
||||||
|
UserRelationForm userRelationForm = (UserRelationForm)pjp.getArgs()[1];
|
||||||
|
|
||||||
|
List<String> orgIds = new ArrayList<>();
|
||||||
|
if(userRelationForm.getObjectType().equals(PermissionConst.ROLE)){
|
||||||
|
// 角色目前修改为只有超管才能够修改
|
||||||
|
if(userProvider.get().getIsAdministrator()){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
orgIds.addAll(organizeRelationService.getRelationListByRoleId(objId).stream().map(OrganizeRelationEntity::getOrganizeId).collect(Collectors.toList()));
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
// 操作目标对象组织ID集合
|
||||||
|
String.join(",", orgIds),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
}else {
|
||||||
|
if(userRelationForm.getObjectType().equals(PermissionConst.GROUP)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(userRelationForm.getObjectType().equals(PermissionConst.POSITION)) {
|
||||||
|
orgIds.add(positionService.getInfo(objId).getOrganizeId());
|
||||||
|
}
|
||||||
|
return PermissionAspectUtil.getPermitByOrgId(
|
||||||
|
String.join(",", orgIds),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
}
|
||||||
|
case PermissionConstant.METHOD_DELETE_SOCIALS:
|
||||||
|
if(pjp.getArgs()[0].toString().equals(operatorUserId)){return true;}
|
||||||
|
return PermissionAspectUtil.getPermitByUserId(
|
||||||
|
// 操作目标对象的ID
|
||||||
|
pjp.getArgs()[0].toString(),
|
||||||
|
operatorUserId,
|
||||||
|
PermissionConstant.METHOD_UPDATE);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,202 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import jnpf.base.LogSortEnum;
|
||||||
|
import jnpf.base.UserInfo;
|
||||||
|
import jnpf.config.ConfigValueUtil;
|
||||||
|
import jnpf.entity.LogEntity;
|
||||||
|
import jnpf.service.LogService;
|
||||||
|
import jnpf.util.*;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.Around;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.aspectj.lang.reflect.MethodSignature;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.core.annotation.Order;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import jnpf.annotation.HandleLog;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
@Order(2)
|
||||||
|
public class RequestLogAspect {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConfigValueUtil configValueUtil;
|
||||||
|
@Autowired
|
||||||
|
private LogService logService;
|
||||||
|
@Autowired
|
||||||
|
private Executor executor;
|
||||||
|
|
||||||
|
@Pointcut("(execution(* jnpf.*.controller.*.*(..)) || execution(* jnpf.message.websocket.WebSocket.*(..)))&&!execution(* jnpf.controller.UtilsController.*(..)) ")
|
||||||
|
public void requestLog() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Around("requestLog()")
|
||||||
|
public Object doAroundService(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
Object obj = pjp.proceed();
|
||||||
|
long costTime = System.currentTimeMillis() - startTime;
|
||||||
|
UserInfo userInfo = UserProvider.getUser();
|
||||||
|
if(userInfo.getUserId() != null) {
|
||||||
|
printLog(userInfo, costTime);
|
||||||
|
try {
|
||||||
|
// 判断是否需要操作日志
|
||||||
|
MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
|
||||||
|
// 得到请求参数
|
||||||
|
Object[] args = pjp.getArgs();
|
||||||
|
// 得到请求方法
|
||||||
|
Method method = methodSignature.getMethod();
|
||||||
|
HandleLog methodAnnotation = method.getAnnotation(HandleLog.class);
|
||||||
|
if (methodAnnotation != null) {
|
||||||
|
String moduleName = methodAnnotation.moduleName();
|
||||||
|
String requestMethod = methodAnnotation.requestMethod();
|
||||||
|
handleLog(userInfo, costTime, obj, moduleName, requestMethod, args);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("记录操作日志发生错误:" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求日志
|
||||||
|
*
|
||||||
|
* @param userInfo
|
||||||
|
* @param costTime
|
||||||
|
*/
|
||||||
|
private void printLog(UserInfo userInfo, long costTime) {
|
||||||
|
LogEntity entity = new LogEntity();
|
||||||
|
entity.setId(RandomUtil.uuId());
|
||||||
|
entity.setType(LogSortEnum.Request.getCode());
|
||||||
|
entity.setUserId(userInfo.getUserId());
|
||||||
|
entity.setUserName(userInfo.getUserName() + "/" + userInfo.getUserAccount());
|
||||||
|
//请求耗时
|
||||||
|
entity.setRequestDuration((int) costTime);
|
||||||
|
entity.setRequestUrl(ServletUtil.getRequest().getServletPath());
|
||||||
|
entity.setRequestMethod(ServletUtil.getRequest().getMethod());
|
||||||
|
entity.setIpAddress(IpUtil.getIpAddr());
|
||||||
|
entity.setCreatorTime(new Date());
|
||||||
|
entity.setPlatForm(ServletUtil.getUserAgent());
|
||||||
|
executor.execute(()->{
|
||||||
|
logService.save(entity);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加操作日志
|
||||||
|
*
|
||||||
|
* @param userInfo 用户信息
|
||||||
|
* @param costTime 操作耗时
|
||||||
|
* @param obj 请求结果
|
||||||
|
* @param moduleName 模块名称
|
||||||
|
* @param requestMethod 请求方法
|
||||||
|
* @param arg 请求参数
|
||||||
|
*/
|
||||||
|
private void handleLog(UserInfo userInfo, long costTime, Object obj, String moduleName, String requestMethod, Object[] arg) {
|
||||||
|
LogEntity entity = new LogEntity();
|
||||||
|
entity.setId(RandomUtil.uuId());
|
||||||
|
entity.setType(LogSortEnum.Operate.getCode());
|
||||||
|
entity.setUserId(userInfo.getUserId());
|
||||||
|
entity.setUserName(userInfo.getUserName() + "/" + userInfo.getUserAccount());
|
||||||
|
//请求耗时
|
||||||
|
entity.setRequestDuration((int) costTime);
|
||||||
|
entity.setRequestMethod(requestMethod);
|
||||||
|
entity.setIpAddress(IpUtil.getIpAddr());
|
||||||
|
entity.setCreatorTime(new Date());
|
||||||
|
// 请求设备
|
||||||
|
entity.setPlatForm(ServletUtil.getUserAgent());
|
||||||
|
// 操作模块
|
||||||
|
entity.setModuleName(moduleName);
|
||||||
|
// 操作记录
|
||||||
|
try {
|
||||||
|
// 定义字符串
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
for (Object o : arg) {
|
||||||
|
// 如果是MultipartFile则为导入
|
||||||
|
if (o instanceof MultipartFile) {
|
||||||
|
stringBuilder.append("{\"originalFilename\":\"" + ((MultipartFile) o).getOriginalFilename() + "\",");
|
||||||
|
stringBuilder.append("\"contentType\":\"" + ((MultipartFile) o).getContentType() + "\",");
|
||||||
|
stringBuilder.append("\"name\":\"" + ((MultipartFile) o).getName() + "\",");
|
||||||
|
stringBuilder.append("\"resource\":\"" + ((MultipartFile) o).getResource() + "\",");
|
||||||
|
stringBuilder.append("\"size\":\"" + ((MultipartFile) o).getSize() + "\"}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stringBuilder.length() > 0) {
|
||||||
|
entity.setJsons(requestMethod + "应用【" + stringBuilder + "】【" + obj + "】" );
|
||||||
|
} else {
|
||||||
|
entity.setJsons(requestMethod + "应用【" + JsonUtil.getObjectToString(arg) + "】【" + obj + "】" );
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
entity.setJsons(requestMethod + "应用【" + arg + "】【" + obj + "】" );
|
||||||
|
}
|
||||||
|
executor.execute(()->{
|
||||||
|
logService.save(entity);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 后面可能会用
|
||||||
|
// /**
|
||||||
|
// * 判断是否为导入导出
|
||||||
|
// *
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private String getRequestMethod() {
|
||||||
|
// //得到请求方式
|
||||||
|
// String methodType = ServletUtil.getRequest().getMethod();
|
||||||
|
// // 得到当前请求的尾缀
|
||||||
|
// String endWith = null;
|
||||||
|
// String servletPath = ServletUtil.getServletPath();
|
||||||
|
// if (StringUtil.isNotEmpty(servletPath)) {
|
||||||
|
// String[] path = servletPath.split("/");
|
||||||
|
// int length = path.length;
|
||||||
|
// if (length > 5) {
|
||||||
|
// endWith = path[length - 2] + "/" + path[length - 1];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // 如果是GET请求且请求后缀是'/Action/Export'则判定为导出
|
||||||
|
// if (HandleMethodEnum.GET.getRequestType().equals(methodType)) {
|
||||||
|
// methodType = "Action/Export".equals(endWith) ? "EXPORT" : "GET";
|
||||||
|
// } else if (HandleMethodEnum.POST.getRequestType().equals(methodType)) {
|
||||||
|
// methodType = "Action/Import".equals(endWith) ? "IMPORT" : "GET";
|
||||||
|
// }
|
||||||
|
// return methodType;
|
||||||
|
// }
|
||||||
|
// /**
|
||||||
|
// * 判断是否为导入导出
|
||||||
|
// *
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private String getRequestModuleName() {
|
||||||
|
// //得到Url
|
||||||
|
// String requestURI = ServletUtil.getRequest().getRequestURI();
|
||||||
|
// // 取模块名
|
||||||
|
// if (StringUtil.isNotEmpty(requestURI)) {
|
||||||
|
// String[] split = requestURI.split("/");
|
||||||
|
// if (split.length > 2) {
|
||||||
|
// String url = split[1];
|
||||||
|
// // 得到所在模块
|
||||||
|
// String moduleName = HandleModuleEnum.getModuleByURL(url);
|
||||||
|
// return moduleName;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return "";
|
||||||
|
// }
|
||||||
|
///
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package jnpf.aop;
|
||||||
|
|
||||||
|
import jnpf.util.RedisUtil;
|
||||||
|
import jnpf.util.ServletUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.annotation.After;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 可视化开发缓存数据处理
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/15 17:12
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
public class VisiualOpaAspect {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
UserProvider userProvider;
|
||||||
|
@Autowired
|
||||||
|
private RedisUtil redisUtil;
|
||||||
|
@Pointcut("(execution(* jnpf.onlinedev.controller.VisualdevModelDataController.*(..))) || execution(* jnpf.onlinedev.controller.VisualdevModelAppController.*(..)))" +
|
||||||
|
"|| execution(* jnpf.generater.controller.VisualdevGenController.*(..)))")
|
||||||
|
public void visiualOpa() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@After("visiualOpa()")
|
||||||
|
public void doAroundService(){
|
||||||
|
String method=ServletUtil.getRequest().getMethod().toLowerCase();
|
||||||
|
if("put".equals(method)||"delete".equals(method)||"post".equals(method)){
|
||||||
|
Set<String> allKey=new HashSet<>(16);
|
||||||
|
allKey.addAll(redisUtil.getAllVisiualKeys());
|
||||||
|
for(String key:allKey){
|
||||||
|
redisUtil.remove(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
# General
|
||||||
|
error.size.toolarge=\u8F93\u5165\u592A\u5927\u3002\u5B9E\u9645\u7684\u8F93\u5165\u4E3A{0}\u5B57\u8282\u3002\u5141\u8BB8\u7684\u6700\u5927\u8F93\u5165\u4E3A{1}\u5B57\u8282\u3002
|
||||||
|
error.comment.removed=\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6CE8\u91CA\u57DF\u5DF2\u88AB\u8FC7\u6EE4\u3002\u6CE8\u91CA\u57DF\u7684\u503C\u4E3A{0}
|
||||||
|
# Tag related
|
||||||
|
error.tag.notfound=\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6807\u8BB0{0}\u5DF2\u88AB\u8FC7\u6EE4\u3002\u6807\u8BB0\u7684\u5185\u5BB9\u4FDD\u5B58\u4E0D\u53D8\u3002
|
||||||
|
error.tag.removed=\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6807\u8BB0{0}\u4E0D\u88AB\u5141\u8BB8\u3002\u6B64\u6807\u8BB0\u4E0D\u5E94\u8BE5\u5F71\u54CD\u8F93\u5165\u7684\u663E\u793A\u3002
|
||||||
|
error.tag.filtered=\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6807\u8BB0{0}\u5DF2\u88AB\u8FC7\u6EE4\u3002\u6807\u8BB0\u7684\u5185\u5BB9\u4FDD\u5B58\u4E0D\u53D8\u3002
|
||||||
|
error.tag.encoded=The {0} tag has been encoded for security reasons. The contents of the tag will remain in place.
|
||||||
|
error.tag.empty=\u5728{0}\u7684\u6807\u7B7E\u662F\u7A7A\u7684\uFF0C\u56E0\u6B64\u6211\u4EEC\u65E0\u6CD5\u5904\u7406\u5B83\u3002\u8BE5\u90AE\u4EF6\u7684\u5176\u4F59\u90E8\u5206\u662F\u5B8C\u6574\u7684\uFF0C\u5176\u642C\u8FC1\u5E94\u8BE5\u6CA1\u6709\u4EFB\u4F55\u526F\u4F5C\u7528\u3002
|
||||||
|
error.cdata.found=\u4E00\u4E2ACDATA\u90E8\u5206\u88AB\u53D1\u73B0\uFF0C\u8FD9\u662F\u4E0D\u5141\u8BB8\u7684\u3002\u8BE5\u90AE\u4EF6\u7684\u5176\u4F59\u90E8\u5206\u662F\u5B8C\u6574\u7684\uFF0C\u5176\u642C\u8FC1\u4E0D\u5E94\u8BE5\u6709\u4EFB\u4F55\u526F\u4F5C\u7528\u3002\u5728CDATA\u7684\u5185\u5BB9\u662F \"{0}\"\u3002
|
||||||
|
error.pi.found=XML\u5904\u7406\u6307\u4EE4\u88AB\u53D1\u73B0\uFF0C\u8FD9\u662F\u4E0D\u5141\u8BB8\u7684\u3002\u6D88\u606F\u7684\u5176\u4F59\u90E8\u5206\u662F\u5B8C\u6574\u7684\uFF0C\u5176\u642C\u8FC1\u5E94\u8BE5\u4E0D\u4F1A\u6709\u4EFB\u4F55\u526F\u4F5C\u7528\u3002\u8BE5\u6307\u4EE4\u7684\u5185\u5BB9\u4E3A \"{0}\"\u3002
|
||||||
|
# Attribute related
|
||||||
|
error.attribute.notfound=\u6807\u8BB0{0}\u5305\u542B\u4E00\u4E2A\u6CA1\u6CD5\u5904\u7406\u7684\u5C5E\u6027\u3002\u5C5E\u6027{1}\u5DF2\u88AB\u8FC7\u6EE4\uFF0C\u4F46\u6807\u8BB0\u4FDD\u5B58\u4E0D\u53D8\u3002
|
||||||
|
error.attribute.invalid=\u6807\u8BB0{0}\u5305\u542B\u4E00\u4E2A\u6CA1\u6CD5\u5904\u7406\u7684\u5C5E\u6027\u3002\u5C5E\u6027{1}\u5305\u542B\u4E00\u4E2A\u503C\"{2}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u8FD9\u4E2A\u503C\u6CA1\u6CD5\u88AB\u63A5\u53D7\u3002\u4E3A\u4E86\u5904\u7406\u8FD9\u4E2A\u8F93\u5165\uFF0C\u8FD9\u4E2A\u5C5E\u6027\u5DF2\u88AB\u4ECE\u8FD9\u4E2A\u6807\u8BB0\u4E2D\u53BB\u6389\uFF0C\u6807\u8BB0\u5176\u4ED6\u90E8\u5206\u4FDD\u6301\u4E0D\u53D8\u3002
|
||||||
|
error.attribute.invalid.filtered=\u6807\u8BB0{0}\u5305\u542B\u4E00\u4E2A\u6CA1\u6CD5\u5904\u7406\u7684\u5C5E\u3002\u5C5E\u6027{1}\u5305\u542B\u4E00\u4E2A\u503C\"{2}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u8FD9\u4E2A\u503C\u6CA1\u6CD5\u88AB\u63A5\u53D7\u3002\u4E3A\u4E86\u8FDB\u4E00\u6B65\u5904\u7406\u8FD9\u4E2A\u8F93\u5165\uFF0C\u6807\u8BB0{0}\u5DF2\u88AB\u8FC7\u6EE4\u3002
|
||||||
|
error.attribute.invalid.encoded=The {0} tag contained an attribute that we could not process. The {1} attribute had a value of \"{2}\". This value could not be accepted for security reasons. We have chosen to encode the {0} tag in order to continue processing the input.
|
||||||
|
error.attribute.invalid.removed=\u6807\u8BB0{0}\u5305\u542B\u4E00\u4E2A\u6CA1\u6CD5\u5904\u7406\u7684\u5C5E\u6027\u3002\u5C5E\u6027{1}\u5305\u542B\u4E00\u4E2A\u503C\"{2}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u8FD9\u4E2A\u503C\u6CA1\u6CD5\u88AB\u63A5\u53D7\u3002\u4E3A\u4E86\u8FDB\u4E00\u6B65\u5904\u7406\u8FD9\u4E2A\u8F93\u5165\uFF0C\u6574\u4E2A\u6807\u8BB0{0}\u5DF2\u88AB\u53BB\u6389\u3002
|
||||||
|
# CSS related
|
||||||
|
error.css.tag.malformed=The stylesheet code \"{0}\" could not be parsed.
|
||||||
|
error.css.import.disabled=\u6837\u5F0F\u8868\u7684\u5BFC\u5165\u8FD8\u6CA1\u6709\u88AB\u6FC0\u6D3B\u3002
|
||||||
|
error.css.import.exceeded=\u4F4D\u4E8E{0}\u7684\u6837\u5F0F\u8868\u8D85\u8FC7\u5141\u8BB8\u5BFC\u5165\u7684\u6837\u5F0F\u8868\u7684\u603B\u6570\uFF0C\u56E0\u6B64\u8BE5\u6837\u5F0F\u8868\u6CA1\u6709\u88AB\u8BFB\u53D6\u3002\u5141\u8BB8\u5BFC\u5165\u7684\u6837\u5F0F\u8868\u7684\u6700\u5927\u6570\u76EE\u4E3A{1}\u3002
|
||||||
|
error.css.import.failure=\u8F93\u5165\u4E2D\u542B\u6709\u7684\u8FDC\u7A0B\u6837\u5F0F\u8868\u4F4D\u4E8E{0}\uFF0C\u6B64\u6837\u5F0F\u8868\u6CA1\u6CD5\u88AB\u8BFB\u53D6\u3002\u7F51\u7AD9\u53EF\u80FD\u5173\u95ED\u6216\u8005\u4E3B\u673A\u6CA1\u6CD5\u88AB\u8BBF\u95EE\u3002\u8FD9\u4E0D\u5E94\u8BE5\u5F71\u54CD\u8F93\u5165\u7684\u683C\u5F0F\u3002
|
||||||
|
error.css.import.toolarge=\u4F4D\u4E8E{0}\u7684\u6837\u5F0F\u8868\u4F7F\u5F97\u603B\u8F93\u5165\u592A\u5927\uFF0C\u56E0\u6B64\u6CA1\u6709\u88AB\u5BFC\u5165\u3002\u5141\u8BB8\u7684\u6700\u5927\u8F93\u5165\u4E3A{1}\u5B57\u8282\u3002
|
||||||
|
error.css.import.url.invalid=\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u7528\u4E8E\u5BFC\u5165\u6837\u5F0F\u8868\u7684url\u6CA1\u6CD5\u88AB\u63A5\u53D7\u3002\u6B64url\u662F{1}\u3002
|
||||||
|
error.css.stylesheet.relative=\u6837\u5F0F\u8868\u5F15\u7528\u4E86\u4E00\u4E2A\u6CA1\u6CD5\u8BFB\u53D6\u7684\u76F8\u5BF9\u6837\u5F0F\u8868\"{0}\"\u3002
|
||||||
|
error.css.tag.relative=\u6807\u8BB0{0}\u4E2D\u7684\u4E00\u4E2A\u6837\u5F0F\u5C5E\u6027\u6307\u5B9A\u4E86\u4E00\u4E2A\u6CA1\u6CD5\u8BFB\u53D6\u7684\u76F8\u5BF9\u6837\u5F0F\u8868\u5E94\u7528\"{0}\"\u3002
|
||||||
|
error.css.stylesheet.rule.notfound=\u6837\u5F0F\u8868\u4F7F\u7528\u4E86\u4E00\u4E2A\u4E0D\u88AB\u652F\u6301\u7684\u89C4\u5219\"{0}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u89C4\u5219\u5DF2\u88AB\u53BB\u6389\u3002
|
||||||
|
error.css.tag.rule.notfound=\u6807\u8BB0{0}\u4E2D\u7684\u4E00\u4E2A\u6837\u5F0F\u5C5E\u6027\u4F7F\u7528\u4E86\u4E00\u4E2A\u4E0D\u88AB\u652F\u6301\u7684\u89C4\u5219\"{0}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u89C4\u5219\u5DF2\u88AB\u53BB\u6389\u3002
|
||||||
|
error.css.stylesheet.selector.notfound=\u6837\u5F0F\u8868\u4F7F\u7528\u4E86\u4E00\u4E2A\u6CA1\u6CD5\u5904\u7406\u7684\u9009\u62E9\u5668\"{0}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u9009\u62E9\u5668\u5DF2\u88AB\u53BB\u6389\u3002
|
||||||
|
error.css.tag.selector.notfound=\u6807\u8BB0{0}\u4E2D\u7684\u4E00\u4E2A\u6837\u5F0F\u5C5E\u6027\u4F7F\u7528\u4E86\u4E00\u4E2A\u6CA1\u6CD5\u5904\u7406\u7684\u9009\u62E9\u5668\"{0}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u89C4\u5219\u5DF2\u88AB\u53BB\u6389\u3002
|
||||||
|
error.css.stylesheet.selector.disallowed=\u6837\u5F0F\u8868\u4F7F\u7528\u4E86\u4E00\u4E2A\u9009\u62E9\u5668\"{0}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u9009\u62E9\u5668\u4E0D\u88AB\u5141\u8BB8\u3002
|
||||||
|
error.css.tag.selector.disallowed=\u6807\u8BB0{0}\u4E2D\u7684\u4E00\u4E2A\u6837\u5F0F\u5C5E\u6027\u4F7F\u7528\u4E86\u4E00\u4E2A\u9009\u62E9\u5668\"{1}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u9009\u62E9\u5668\u4E0D\u88AB\u5141\u8BB8\u3002
|
||||||
|
error.css.stylesheet.property.invalid=\u6837\u5F0F\u8868\u542B\u6709\u4E00\u4E2A\u5C5E\uFF08property)\"{0}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u5C5E\u6027\u4E0D\u88AB\u5141\u8BB8\u3002
|
||||||
|
error.css.tag.property.invalid=\u6807\u8BB0{0}\u4E2D\u542B\u6709\u4E00\u4E2A\u6837\u5F0F\u5C5E\u6027\"{1}\"\u3002\u51FA\u4E8E\u5B89\u5168\u7684\u539F\u56E0\uFF0C\u6B64\u5C5E\u6027\u4E0D\u88AB\u5141\u8BB8\u3002
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,73 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
W3C rules retrieved from:
|
||||||
|
http://www.w3.org/TR/html401/struct/global.html
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<anti-samy-rules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:noNamespaceSchemaLocation="antisamy.xsd">
|
||||||
|
|
||||||
|
<directives>
|
||||||
|
<directive name="omitXmlDeclaration" value="true"/>
|
||||||
|
<directive name="omitDoctypeDeclaration" value="true"/>
|
||||||
|
<directive name="maxInputSize" value="0"/>
|
||||||
|
<directive name="useXHTML" value="true"/>
|
||||||
|
<directive name="formatOutput" value="false"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
remember, this won't work for relative URIs - AntiSamy doesn't
|
||||||
|
know anything about the URL or your web structure
|
||||||
|
-->
|
||||||
|
<directive name="embedStyleSheets" value="false"/>
|
||||||
|
|
||||||
|
</directives>
|
||||||
|
|
||||||
|
<common-regexps>
|
||||||
|
</common-regexps>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Tag.name = a, b, div, body, etc.
|
||||||
|
Tag.action = filter: remove tags, but keep content, validate: keep content as long as it passes rules, remove: remove tag and contents
|
||||||
|
Attribute.name = id, class, href, align, width, etc.
|
||||||
|
Attribute.onInvalid = what to do when the attribute is invalid, e.g., remove the tag (removeTag), remove the attribute (removeAttribute), filter the tag (filterTag)
|
||||||
|
Attribute.description = What rules in English you want to tell the users they can have for this attribute. Include helpful things so they'll be able to tune their HTML
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Some attributes are common to all (or most) HTML tags. There aren't many that qualify for this. You have to make sure there's no
|
||||||
|
collisions between any of these attribute names with attribute names of other tags that are for different purposes.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<common-attributes>
|
||||||
|
</common-attributes>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This requires normal updates as browsers continue to diverge from the W3C and each other. As long as the browser wars continue
|
||||||
|
this is going to continue. I'm not sure war is the right word for what's going on. Doesn't somebody have to win a war after
|
||||||
|
a while? Even wars of attrition, surely?
|
||||||
|
-->
|
||||||
|
|
||||||
|
<global-tag-attributes>
|
||||||
|
</global-tag-attributes>
|
||||||
|
|
||||||
|
<tags-to-encode>
|
||||||
|
</tags-to-encode>
|
||||||
|
|
||||||
|
<tag-rules>
|
||||||
|
</tag-rules>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- CSS validation processing rules -->
|
||||||
|
|
||||||
|
<css-rules>
|
||||||
|
<!-- end manual properties -->
|
||||||
|
</css-rules>
|
||||||
|
<allowed-empty-tags>
|
||||||
|
</allowed-empty-tags>
|
||||||
|
</anti-samy-rules>
|
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.mapper.BigDataMapper">
|
||||||
|
|
||||||
|
<select id="maxCode" resultType="Integer">
|
||||||
|
SELECT MAX(F_EN_CODE) FROM ext_big_data
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.mapper.DocumentMapper">
|
||||||
|
<resultMap id="DocumentEntity" type="jnpf.entity.DocumentEntity">
|
||||||
|
<id column="F_Id" property="id"/>
|
||||||
|
<result column="F_ParentId" property="parentId"/>
|
||||||
|
<result column="F_FullName" property="fullName"/>
|
||||||
|
<result column="F_Type" property="type"/>
|
||||||
|
<result column="F_FileSize" property="fileSize"/>
|
||||||
|
<result column="F_SortCode" property="sortCode"/>
|
||||||
|
<result column="F_FilePath" property="filePath"/>
|
||||||
|
<result column="F_FileExtension" property="fileExtension"/>
|
||||||
|
<result column="F_ReadcCount" property="readcCount"/>
|
||||||
|
<result column="F_IsShare" property="isShare"/>
|
||||||
|
<result column="F_ShareTime" property="shareTime"/>
|
||||||
|
<result column="F_Description" property="description"/>
|
||||||
|
<result column="F_EnabledMark" property="enabledMark"/>
|
||||||
|
<result column="F_CreatorTime" property="creatorTime"/>
|
||||||
|
<result column="F_CreatorUserId" property="creatorUserId"/>
|
||||||
|
<result column="F_LastModifyTime" property="lastModifyTime"/>
|
||||||
|
<result column="F_LastModifyUserId" property="lastModifyUserId"/>
|
||||||
|
<result column="F_DeleteMark" property="deleteMark"/>
|
||||||
|
<result column="F_DeleteTime" property="deleteTime"/>
|
||||||
|
<result column="F_DeleteUserId" property="deleteUserId"/>
|
||||||
|
</resultMap>
|
||||||
|
<select id="getShareTomeList" parameterType="String" resultMap="DocumentEntity">
|
||||||
|
SELECT * FROM ext_document WHERE F_Id IN (
|
||||||
|
SELECT F_DocumentId FROM ext_documentshare
|
||||||
|
WHERE F_ShareUserId = #{userId}
|
||||||
|
) AND F_DeleteMark is NULL and F_EnabledMark = 1
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getChildList" parameterType="String" resultMap="DocumentEntity">
|
||||||
|
WITH document AS (
|
||||||
|
SELECT * FROM ext_document WHERE F_Id = #{folderId} UNION ALL
|
||||||
|
SELECT ext_document.* FROM (
|
||||||
|
SELECT * FROM ext_document WHERE F_Id = #{folderId}
|
||||||
|
) AS document, ext_document WHERE document.F_Id = ext_document.F_ParentId
|
||||||
|
) SELECT * FROM document
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<update id="trashRecovery" parameterType="String">
|
||||||
|
UPDATE ext_document SET F_DELETEMARK=1,F_DELETETIME=NULL,F_DELETEUSERID=NULL WHERE F_Id=#{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.mapper.FlowFormMapper">
|
||||||
|
|
||||||
|
<resultMap id="flowInfo" type="jnpf.model.flow.FlowTempInfoModel">
|
||||||
|
<id column="F_Id" property="id"/>
|
||||||
|
<result column="F_EnCode" property="enCode"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="findFLowInfo" parameterType="String" resultMap="flowInfo">
|
||||||
|
SELECT ft.F_En_Code as F_EnCode,ft.F_Id as F_Id,F_Enabled_Mark as enabledMark FROM flow_template ft where ft.F_Id =#{tempId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,157 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.permission.mapper.AuthorizeMapper">
|
||||||
|
|
||||||
|
<resultMap id="ModuleVO" type="jnpf.base.model.module.ModuleModel">
|
||||||
|
<id column="f_id" property="id"/>
|
||||||
|
<result column="f_parent_id" property="parentId"/>
|
||||||
|
<result column="f_full_name" property="fullName"/>
|
||||||
|
<result column="f_en_code" property="enCode"/>
|
||||||
|
<result column="f_type" property="type"/>
|
||||||
|
<result column="f_url_address" property="urlAddress"/>
|
||||||
|
<result column="f_link_target" property="linkTarget"/>
|
||||||
|
<result column="f_category" property="category"/>
|
||||||
|
<result column="f_icon" property="icon"/>
|
||||||
|
<result column="f_sort_code" property="sortCode"/>
|
||||||
|
<result column="f_property_json" property="propertyJson"/>
|
||||||
|
<result column="f_system_id" property="systemId"/>
|
||||||
|
<result column="f_description" property="description"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="ButtonVO" type="jnpf.base.model.button.ButtonModel">
|
||||||
|
<id column="f_id" property="id"/>
|
||||||
|
<result column="f_parent_id" property="parentId"/>
|
||||||
|
<result column="f_full_name" property="fullName"/>
|
||||||
|
<result column="f_en_code" property="enCode"/>
|
||||||
|
<result column="f_icon" property="icon"/>
|
||||||
|
<result column="f_url_address" property="urlAddress"/>
|
||||||
|
<result column="f_module_id" property="moduleId"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="ColumnVO" type="jnpf.base.model.column.ColumnModel">
|
||||||
|
<id column="f_id" property="id"/>
|
||||||
|
<result column="f_parent_id" property="parentId"/>
|
||||||
|
<result column="f_full_name" property="fullName"/>
|
||||||
|
<result column="f_en_code" property="enCode"/>
|
||||||
|
<result column="f_bind_table" property="bindTable"/>
|
||||||
|
<result column="f_bind_table_name" property="bindTableName"/>
|
||||||
|
<result column="f_module_id" property="moduleId"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="ResourceVO" type="jnpf.base.model.resource.ResourceModel">
|
||||||
|
<id column="f_id" property="id"/>
|
||||||
|
<result column="f_full_name" property="fullName"/>
|
||||||
|
<result column="f_en_code" property="enCode"/>
|
||||||
|
<result column="f_condition_json" property="conditionJson"/>
|
||||||
|
<result column="f_condition_text" property="conditionText"/>
|
||||||
|
<result column="f_module_id" property="moduleId"/>
|
||||||
|
<result column="f_match_logic" property="matchLogic"/>
|
||||||
|
<result column="f_object_id" property="objectId"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="FormVO" type="jnpf.base.model.form.ModuleFormModel">
|
||||||
|
<id column="f_id" property="id"/>
|
||||||
|
<result column="f_parent_id" property="parentId"/>
|
||||||
|
<result column="f_full_name" property="fullName"/>
|
||||||
|
<result column="f_en_code" property="enCode"/>
|
||||||
|
<result column="f_module_id" property="moduleId"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="SystemVO" type="jnpf.base.model.base.SystemBaeModel">
|
||||||
|
<id column="f_id" property="id"/>
|
||||||
|
<result column="f_full_name" property="fullName"/>
|
||||||
|
<result column="f_en_code" property="enCode"/>
|
||||||
|
<result column="f_icon" property="icon"/>
|
||||||
|
<result column="f_property_json" property="propertyJson"/>
|
||||||
|
<result column="f_description" property="description"/>
|
||||||
|
<result column="f_sort_code" property="sortCode"/>
|
||||||
|
<result column="f_enabled_mark" property="enabledMark"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="findModule" parameterType="String" resultMap="ModuleVO">
|
||||||
|
SELECT * FROM base_module WHERE f_id IN (SELECT f_item_id FROM base_authorize WHERE f_object_id IN (${objectId}) AND f_item_type = 'module') and f_enabled_mark = 1
|
||||||
|
<if test="id != null and id != ''">
|
||||||
|
and f_system_id != #{id}
|
||||||
|
</if>
|
||||||
|
and f_en_code not in (
|
||||||
|
'workFlow.addFlow','workFlow.flowLaunch','workFlow.entrust','workFlow','workFlow.flowTodo','workFlow.flowDone','workFlow.flowCirculate'
|
||||||
|
)
|
||||||
|
Order by f_sort_code DESC,f_parent_id desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findButton" parameterType="String" resultMap="ButtonVO">
|
||||||
|
SELECT * FROM base_module_button WHERE f_id IN (SELECT f_item_id FROM base_authorize WHERE f_object_id IN (${objectId}) AND f_item_type = 'button') and f_enabled_mark = 1 Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="findColumn" parameterType="String" resultMap="ColumnVO">
|
||||||
|
SELECT * FROM base_module_column WHERE f_id IN (SELECT f_item_id FROM base_authorize WHERE f_object_id IN (${objectId}) AND f_item_type = 'column') and f_enabled_mark = 1 Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findForms" parameterType="String" resultMap="FormVO">
|
||||||
|
SELECT * FROM base_module_form WHERE f_id IN (SELECT f_item_id FROM base_authorize WHERE f_object_id IN (${objectId}) AND f_item_type = 'form') and f_enabled_mark = 1 Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findSystem" parameterType="String" resultMap="SystemVO">
|
||||||
|
SELECT * FROM base_system WHERE f_id IN (SELECT f_item_id FROM base_authorize WHERE f_object_id IN (${objectId}) AND f_item_type = 'system') and f_enabled_mark = 1
|
||||||
|
<if test="enCode != null and enCode != ''">
|
||||||
|
and f_en_code != #{enCode}
|
||||||
|
</if>
|
||||||
|
Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findResource" parameterType="String" resultMap="ResourceVO">
|
||||||
|
SELECT s.*,a.f_object_id FROM base_module_scheme s LEFT JOIN
|
||||||
|
base_authorize a on s.f_id = a.f_item_id WHERE s.f_id IN (SELECT f_item_id FROM base_authorize WHERE f_object_id IN (${objectId}) AND f_item_type = 'resource') and s.f_enabled_mark = 1 Order by s.f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="findModuleAdmin" parameterType="Integer" resultMap="ModuleVO">
|
||||||
|
SELECT * FROM base_module WHERE f_enabled_mark = #{mark}
|
||||||
|
<if test="id != null and id != ''">
|
||||||
|
and f_system_id != #{id}
|
||||||
|
</if>
|
||||||
|
and f_en_code not in (
|
||||||
|
'workFlow.addFlow','workFlow.flowLaunch','workFlow.entrust','workFlow','workFlow.flowTodo','workFlow.flowDone','workFlow.flowCirculate'
|
||||||
|
)
|
||||||
|
Order by f_sort_code Asc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findButtonAdmin" parameterType="Integer" resultMap="ButtonVO">
|
||||||
|
SELECT * FROM base_module_button WHERE f_enabled_mark = #{mark} Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findColumnAdmin" parameterType="Integer" resultMap="ColumnVO">
|
||||||
|
SELECT * FROM base_module_column WHERE f_enabled_mark = #{mark} Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFormsAdmin" parameterType="Integer" resultMap="FormVO">
|
||||||
|
SELECT * FROM base_module_form WHERE f_enabled_mark = #{mark} Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findResourceAdmin" parameterType="Integer" resultMap="ResourceVO">
|
||||||
|
SELECT * FROM base_module_scheme WHERE f_enabled_mark = #{mark} Order by f_sort_code desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="saveBatch" parameterType="String">
|
||||||
|
INSERT INTO base_authorize (f_id, f_item_type, f_item_id, f_object_type, f_object_id, f_sort_code, f_creator_time, f_creator_user_id ) VALUES ${values}
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<insert id="savaBatchList" parameterType="java.util.List">
|
||||||
|
INSERT ALL
|
||||||
|
<foreach item="item" index="index" collection="list">
|
||||||
|
INTO base_authorize (f_id, f_item_type, f_item_id, f_object_type, f_object_id, f_sort_code, f_creator_time,
|
||||||
|
f_creator_user_id ) VALUES (
|
||||||
|
#{item.id},
|
||||||
|
#{item.itemType},
|
||||||
|
#{item.itemId},
|
||||||
|
#{item.objectType},
|
||||||
|
#{item.objectId},
|
||||||
|
#{item.sortCode,jdbcType=NUMERIC},
|
||||||
|
#{item.creatorTime, jdbcType=TIMESTAMP},
|
||||||
|
#{item.creatorUserId})
|
||||||
|
</foreach>
|
||||||
|
SELECT 1 FROM DUAL
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.message.mapper.ImContentMapper">
|
||||||
|
|
||||||
|
<!-- <update id="SendMessage" parameterType="jnpf.system.entity.IMContentEntity">
|
||||||
|
<id column="F_Id" property="id"/>
|
||||||
|
<result column="F_SENDUSERID" property="sendUserId"/>
|
||||||
|
<result column="F_SENDTIME" property="sendTime"/>
|
||||||
|
<result column="F_RECEIVEUSERID" property="receiveUserId"/>
|
||||||
|
<result column="F_RECEIVETIME" property="receiveTime"/>
|
||||||
|
<result column="f_content" property="content"/>
|
||||||
|
<result column="f_content_type" property="contentType"/>
|
||||||
|
<result column="F_STATE" property="state"/>
|
||||||
|
</update>-->
|
||||||
|
<select id="getUnreadList" parameterType="String" resultType="jnpf.message.model.ImUnreadNumModel">
|
||||||
|
SELECT * FROM (
|
||||||
|
SELECT SUM(CASE WHEN f_enabled_mark = 0 THEN 1 ELSE 0 END) UnreadNum, f_send_user_id SendUserId, f_receive_user_id ReceiveUserId
|
||||||
|
FROM base_im_content WHERE 1 = 1 AND f_receive_user_id = #{receiveUserId} GROUP BY f_send_user_id, f_receive_user_id
|
||||||
|
) t WHERE UnreadNum > 0
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getUnreadLists" parameterType="String" resultType="jnpf.message.model.ImUnreadNumModel">
|
||||||
|
select f_send_user_id SendUserId, f_content DefaultMessage,f_content_type DefaultMessageType, f_send_time DefaultMessageTime from base_im_content WHERE 1 = 1 AND f_receive_user_id = #{receiveUserId} AND f_enabled_mark = 0 order by f_send_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<update id="readMessage" parameterType="map">
|
||||||
|
UPDATE base_im_content SET f_enabled_mark = 1, f_receive_time = #{map.receiveTime} WHERE 1 = 1 AND f_enabled_mark = 0 AND f_send_user_id = #{map.sendUserId} AND f_receive_user_id = #{map.receiveUserId}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.message.mapper.ImReplyMapper">
|
||||||
|
<resultMap id="imReplyList" type="jnpf.message.model.ImReplyListModel">
|
||||||
|
<id column="f_receive_user_id" property="id"/>
|
||||||
|
<result column="f_user_id" property="userId"/>
|
||||||
|
<result column="F_HEAD_ICON" property="headIcon"/>
|
||||||
|
<result column="f_receive_time" property="latestDate"/>
|
||||||
|
<result column="f_content_type" property="messageType"/>
|
||||||
|
<result column="f_content" property="latestMessage"/>
|
||||||
|
<result column="f_delete_user_id" property="deleteUserId"/>
|
||||||
|
<result column="f_delete_mark" property="deleteMark"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="getImReplyList" resultMap="imReplyList" parameterType="jnpf.message.model.ImReplyListVo">
|
||||||
|
SELECT
|
||||||
|
ir.f_user_id,
|
||||||
|
ir.f_receive_user_id,
|
||||||
|
ir.f_delete_user_id,
|
||||||
|
bu.F_HEAD_ICON,
|
||||||
|
ir.f_receive_time,
|
||||||
|
ic.f_content_type,
|
||||||
|
ic.f_content,
|
||||||
|
ic.f_delete_user_id,
|
||||||
|
ic.f_delete_mark
|
||||||
|
FROM
|
||||||
|
base_im_reply ir
|
||||||
|
LEFT JOIN base_user bu ON ir.f_user_id = bu.F_Id
|
||||||
|
LEFT JOIN base_im_content ic ON ic.f_send_user_id = bu.F_Id
|
||||||
|
AND ir.f_user_id = ic.f_send_user_id
|
||||||
|
AND ir.f_receive_user_id = ic.f_receive_user_id
|
||||||
|
AND ir.f_receive_time = ic.f_send_time
|
||||||
|
AND (ir.f_delete_mark != 1 OR ir.f_delete_mark IS NULL)
|
||||||
|
</select>
|
||||||
|
</mapper>
|
@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.message.mapper.MessageMapper">
|
||||||
|
|
||||||
|
<resultMap id="Message" type="jnpf.message.entity.MessageReceiveEntity">
|
||||||
|
<id column="f_id" property="id"/>
|
||||||
|
<result column="f_title" property="title"/>
|
||||||
|
<result column="f_type" property="type"/>
|
||||||
|
<result column="f_creator_time" property="creatorTime"/>
|
||||||
|
<result column="f_creator_user_id" property="creatorUserId"/>
|
||||||
|
<result column="f_last_modify_time" property="lastModifyTime"/>
|
||||||
|
<result column="f_enabled_mark" property="enabledMark"/>
|
||||||
|
<result column="f_is_read" property="isRead"/>
|
||||||
|
<result column="f_last_modify_user_id" property="lastModifyUserId"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="getMessageList" parameterType="map" resultMap="Message">
|
||||||
|
SELECT r.f_id, r.f_title, r.f_type, r.f_is_read, r.f_creator_time, r.f_creator_user_id, r.f_last_modify_time, r.f_last_modify_user_id,
|
||||||
|
u.f_real_name,u.f_account FROM base_message r
|
||||||
|
LEFT JOIN base_user u ON u.f_id = r.f_user_id where 1 = 1
|
||||||
|
<if test="map.userId != null">
|
||||||
|
AND r.f_user_id= #{map.userId}
|
||||||
|
</if>
|
||||||
|
<if test="map.keyword != null">
|
||||||
|
AND (r.f_title like #{map.keyword} OR u.f_real_name LIKE #{map.keyword} OR u.f_account LIKE #{map.keyword})
|
||||||
|
</if>
|
||||||
|
<if test="map.type != null">
|
||||||
|
AND r.f_type = #{map.type}
|
||||||
|
</if>
|
||||||
|
<if test="map.isRead != null">
|
||||||
|
AND r.f_is_read = #{map.isRead}
|
||||||
|
</if>
|
||||||
|
ORDER BY r.f_last_modify_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getUnreadCount" resultType="int">
|
||||||
|
SELECT COUNT(1) FROM base_message
|
||||||
|
WHERE f_user_id = #{userId} AND f_is_read = 0 AND f_type = #{type}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getInfoDefault" parameterType="int" resultMap="Message">
|
||||||
|
SELECT * FROM base_message WHERE 1 = 1 AND f_type = #{type} ORDER BY f_creator_time DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.base.mapper.PortalManageMapper">
|
||||||
|
|
||||||
|
<sql id="selectPages">
|
||||||
|
SELECT
|
||||||
|
-- 门户管理表
|
||||||
|
bpm.F_Id id,
|
||||||
|
bpm.F_Enabled_Mark enabledMark,
|
||||||
|
bpm.F_Platform platform,
|
||||||
|
bpm.F_Description description,
|
||||||
|
bpm.F_Tenant_Id tenantId,
|
||||||
|
bpm.F_Sort_Code sortCode,
|
||||||
|
bpm.F_System_Id systemId,
|
||||||
|
bpm.F_PORTAL_ID portalId,
|
||||||
|
bpm.F_Creator_Time creatorTime,
|
||||||
|
bpm.F_Last_Modify_Time lastModifyTime,
|
||||||
|
-- 门户表
|
||||||
|
bp.F_Category categoryId,
|
||||||
|
bp.F_Full_Name portalName,
|
||||||
|
bd.F_Full_Name categoryName,
|
||||||
|
-- 用户表
|
||||||
|
us.F_Real_Name createUserName,
|
||||||
|
us.F_Account createUserAccount,
|
||||||
|
us2.F_Real_Name modifyUserName,
|
||||||
|
us2.F_Account modifyUserAccount
|
||||||
|
FROM
|
||||||
|
base_portal_manage bpm
|
||||||
|
LEFT JOIN
|
||||||
|
base_portal bp
|
||||||
|
ON
|
||||||
|
bpm.F_Portal_Id = bp.F_Id
|
||||||
|
LEFT JOIN
|
||||||
|
base_user us
|
||||||
|
ON
|
||||||
|
bpm.F_Creator_User_Id = us.F_Id
|
||||||
|
LEFT JOIN
|
||||||
|
base_user us2
|
||||||
|
ON
|
||||||
|
bpm.F_Last_Modify_User_Id = us2.F_Id
|
||||||
|
LEFT JOIN
|
||||||
|
base_dictionary_data bd
|
||||||
|
ON bp.F_Category = bd.F_Id
|
||||||
|
WHERE 1 = 1
|
||||||
|
<if test="pmPage.keyword != null and pmPage.keyword != ''">
|
||||||
|
AND (bp.F_Full_Name LIKE #{pmPage.keyword} OR bpm.F_Description LIKE #{pmPage.keyword})
|
||||||
|
</if>
|
||||||
|
<if test="pmPage.category != null and pmPage.category != ''">
|
||||||
|
AND
|
||||||
|
bp.F_Category = #{pmPage.category}
|
||||||
|
</if>
|
||||||
|
<if test="pmPage.enabledMark != null and pmPage.enabledMark != ''">
|
||||||
|
AND
|
||||||
|
bpm.F_Enabled_Mark = #{pmPage.enabledMark}
|
||||||
|
AND bp.F_Enabled_Mark = #{pmPage.enabledMark}
|
||||||
|
</if>
|
||||||
|
<if test="pmPage.platform != null and pmPage.platform != ''">
|
||||||
|
AND
|
||||||
|
bpm.F_Platform LIKE #{pmPage.platform}
|
||||||
|
</if>
|
||||||
|
<if test="pmPage.systemId != null and pmPage.systemId != ''">
|
||||||
|
AND
|
||||||
|
bpm.F_System_Id = #{pmPage.systemId}
|
||||||
|
</if>
|
||||||
|
<if test="pmPage.state != null and pmPage.state != ''">
|
||||||
|
AND
|
||||||
|
bp.F_state != #{pmPage.state}
|
||||||
|
</if>
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectPortalManageDoPage" resultType="jnpf.base.model.portalManage.PortalManagePageDO" parameterType="jnpf.base.model.portalManage.PortalManagePage">
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM (<include refid="selectPages"></include>) TempTable
|
||||||
|
ORDER BY
|
||||||
|
sortCode ASC,
|
||||||
|
creatorTime DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectPortalManageDoList" resultType="jnpf.base.model.portalManage.PortalManagePageDO" parameterType="jnpf.base.model.portalManage.PortalManagePage">
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM (<include refid="selectPages"></include>) TempTable
|
||||||
|
ORDER BY
|
||||||
|
sortCode ASC,
|
||||||
|
creatorTime DESC
|
||||||
|
</select>
|
||||||
|
</mapper>
|
@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.permission.mapper.PositionMapper">
|
||||||
|
|
||||||
|
<select id="getListByUserId" parameterType="String" resultType="jnpf.permission.entity.PositionEntity">
|
||||||
|
SELECT * FROM base_position WHERE F_ID IN(SELECT F_OBJECT_ID FROM base_user_relation WHERE F_USER_ID = #{userId}) ORDER BY F_SORT_CODE
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="query" resultType="java.lang.String">
|
||||||
|
SELECT F_Id FROM base_position WHERE F_Id IN (
|
||||||
|
SELECT DISTINCT a.F_Id FROM (
|
||||||
|
SELECT
|
||||||
|
bp.F_Id
|
||||||
|
FROM
|
||||||
|
base_organize bo
|
||||||
|
LEFT JOIN
|
||||||
|
base_organize_relation bor
|
||||||
|
ON bo.F_Id = bor.F_Organize_Id
|
||||||
|
LEFT JOIN
|
||||||
|
base_position bp
|
||||||
|
ON bp.F_Id = bor.F_Object_Id
|
||||||
|
WHERE
|
||||||
|
bor.F_Object_Type = 'Position'
|
||||||
|
AND bor.F_Object_Type IS NOT NULL
|
||||||
|
<if test="keyword != null and keyword != ''">
|
||||||
|
AND (bp.F_Full_Name LIKE #{keyword} OR bp.F_En_Code LIKE #{keyword})
|
||||||
|
</if>
|
||||||
|
<if test="orgIdList != null and orgIdList.size() != 0">
|
||||||
|
AND bo.F_Id IN
|
||||||
|
<foreach collection="orgIdList"
|
||||||
|
item="orgIds" index="index" separator="," open="(" close=")">
|
||||||
|
#{orgIds}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
) a
|
||||||
|
)
|
||||||
|
ORDER BY f_sort_code asc, f_creator_time desc
|
||||||
|
<!-- <if test="keyword != null and keyword != ''">-->
|
||||||
|
<!-- ,f_last_modify_time desc-->
|
||||||
|
<!-- </if>-->
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.permission.mapper.RoleMapper">
|
||||||
|
|
||||||
|
<select id="getListId" resultType="java.lang.String">
|
||||||
|
SELECT * FROM base_role WHERE F_ID IN(SELECT F_OBJECT_ID FROM base_user_relation WHERE F_USER_ID = #{userId}) ORDER BY F_SORT_CODE
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="query" resultType="java.lang.String">
|
||||||
|
SELECT
|
||||||
|
F_Id
|
||||||
|
FROM
|
||||||
|
base_role
|
||||||
|
<if test="globalMark != 1">
|
||||||
|
WHERE 1 = 1
|
||||||
|
AND F_Id IN (
|
||||||
|
SELECT DISTINCT
|
||||||
|
a.F_Id
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
br.F_Id
|
||||||
|
FROM
|
||||||
|
base_organize bo
|
||||||
|
LEFT JOIN base_organize_relation bor ON bo.F_Id = bor.F_Organize_Id
|
||||||
|
LEFT JOIN base_role br ON br.F_Id = bor.F_Object_Id
|
||||||
|
WHERE
|
||||||
|
bor.F_Object_Type = 'Role'
|
||||||
|
AND bor.F_Object_Type IS NOT NULL
|
||||||
|
<!-- <if test="keyword != null and keyword != ''">-->
|
||||||
|
<!-- AND (br.F_Full_Name LIKE #{keyword} OR br.F_En_Code LIKE #{keyword})-->
|
||||||
|
<!-- </if>-->
|
||||||
|
<if test="orgIdList != null and orgIdList.size() != 0">
|
||||||
|
AND bo.F_Id IN
|
||||||
|
<foreach collection="orgIdList"
|
||||||
|
item="orgIds" index="index" separator="," open="(" close=")">
|
||||||
|
#{orgIds}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
) a
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
<if test="globalMark == -1 or globalMark == 1">
|
||||||
|
<if test="globalMark != 1">
|
||||||
|
OR
|
||||||
|
</if>
|
||||||
|
<if test="globalMark == 1">
|
||||||
|
Where
|
||||||
|
</if>
|
||||||
|
F_Id IN
|
||||||
|
(
|
||||||
|
SELECT F_Id FROM base_role WHERE F_Global_Mark = 1
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
<if test="keyword != null and keyword != ''">
|
||||||
|
AND (F_Full_Name LIKE #{keyword} OR F_En_Code LIKE #{keyword})
|
||||||
|
</if>
|
||||||
|
ORDER BY f_sort_code asc, f_creator_time desc
|
||||||
|
<!-- <if test="keyword != null and keyword != ''">-->
|
||||||
|
<!-- ,f_last_modify_time desc-->
|
||||||
|
<!-- </if>-->
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.base.mapper.SysconfigMapper">
|
||||||
|
|
||||||
|
<delete id="deleteFig">
|
||||||
|
delete from base_sys_config where F_Category ='SysConfig'
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteMpFig">
|
||||||
|
delete from base_sys_config where F_Category='MPConfig'
|
||||||
|
</delete>
|
||||||
|
<delete id="deleteQyhFig">
|
||||||
|
delete from base_sys_config where F_Category='QYHConfig'
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.permission.mapper.UserMapper">
|
||||||
|
|
||||||
|
<select id="getListId" resultType="java.lang.String">
|
||||||
|
SELECT F_Id from base_user WHERE F_Enabled_Mark = 1
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="query" resultType="java.lang.String">
|
||||||
|
SELECT F_Id FROM
|
||||||
|
(SELECT DISTINCT u.F_Id,u.F_Sort_Code,u.F_Creator_Time
|
||||||
|
FROM
|
||||||
|
<if test="dbSchema!=null">
|
||||||
|
#{dbSchema}.base_user_relation ul1,#{dbSchema}.base_user u
|
||||||
|
</if>
|
||||||
|
<if test="dbSchema==null">
|
||||||
|
base_user_relation ul1,base_user u
|
||||||
|
</if>
|
||||||
|
WHERE u.F_Id = ul1.F_User_Id
|
||||||
|
AND u.F_Account != 'admin'
|
||||||
|
<if test="account != null and account != ''">
|
||||||
|
and (u.F_Account like #{account} or u.F_Real_Name like #{account} or u.F_Mobile_Phone like
|
||||||
|
#{account})
|
||||||
|
</if>
|
||||||
|
<if test="orgIdList != null and orgIdList.size > 0">
|
||||||
|
AND ul1.F_Object_Id IN
|
||||||
|
<trim suffixOverrides=" OR ul1.F_Object_Id IN()">
|
||||||
|
<foreach collection="orgIdList" item="orgIds" index="index" open="(" close=")">
|
||||||
|
<if test="index != 0">
|
||||||
|
<choose>
|
||||||
|
<when test="index % 1000 == 999">) OR ul1.F_Object_Id IN (</when>
|
||||||
|
<otherwise>,</otherwise>
|
||||||
|
</choose>
|
||||||
|
</if>
|
||||||
|
#{orgIds}
|
||||||
|
</foreach>
|
||||||
|
</trim>
|
||||||
|
</if>
|
||||||
|
ORDER BY u.F_Sort_Code ASC,u.F_Creator_Time DESC) uu
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,317 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="jnpf.engine.mapper.FlowTaskMapper">
|
||||||
|
|
||||||
|
<resultMap id="FlowTask" type="jnpf.engine.model.flowtask.FlowTaskListModel">
|
||||||
|
<id column="F_Id" property="id"/>
|
||||||
|
<result column="F_ProcessId" property="processId"/>
|
||||||
|
<result column="F_EnCode" property="enCode"/>
|
||||||
|
<result column="F_FullName" property="fullName"/>
|
||||||
|
<result column="F_FlowUrgent" property="flowUrgent"/>
|
||||||
|
<result column="F_FlowId" property="flowId"/>
|
||||||
|
<result column="F_FlowCode" property="flowCode"/>
|
||||||
|
<result column="F_FlowName" property="flowName"/>
|
||||||
|
<result column="F_FlowCategory" property="flowCategory"/>
|
||||||
|
<result column="F_StartTime" property="startTime"/>
|
||||||
|
<result column="F_EndTime" property="endTime"/>
|
||||||
|
<result column="F_ThisStep" property="thisStep"/>
|
||||||
|
<result column="F_ThisStepId" property="thisStepId"/>
|
||||||
|
<result column="F_Status" property="status"/>
|
||||||
|
<result column="F_Completion" property="completion"/>
|
||||||
|
<result column="F_CreatorUserId" property="creatorUserId"/>
|
||||||
|
<result column="F_CreatorTime" property="creatorTime"/>
|
||||||
|
<result column="F_HandleId" property="handleId"/>
|
||||||
|
<result column="F_NodeName" property="nodeName"/>
|
||||||
|
<result column="F_NodePropertyJson" property="approversProperties"/>
|
||||||
|
<result column="F_Description" property="description"/>
|
||||||
|
<result column="F_FlowVersion" property="flowVersion"/>
|
||||||
|
<result column="F_DelegateUser" property="delegateUser"/>
|
||||||
|
<result column="F_TemplateId" property="templateId"/>
|
||||||
|
<result column="F_CirculateId" property="circulateId"/>
|
||||||
|
<result column="F_Icon" property="icon"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="getTrialList" parameterType="map" resultMap="FlowTask">
|
||||||
|
SELECT
|
||||||
|
r.F_Id AS F_Id,
|
||||||
|
t.F_Process_Id AS F_ProcessId,
|
||||||
|
t.F_En_Code AS F_EnCode,
|
||||||
|
t.F_Start_Time AS F_StartTime,
|
||||||
|
t.F_Full_Name AS F_FullName,
|
||||||
|
t.F_Flow_Urgent AS F_FlowUrgent,
|
||||||
|
t.F_Flow_Id AS F_FlowId,
|
||||||
|
t.F_Flow_Code AS F_FlowCode,
|
||||||
|
t.F_Flow_Name AS F_FlowName,
|
||||||
|
t.F_Flow_Category AS F_FlowCategory,
|
||||||
|
t.F_End_Time AS F_EndTime,
|
||||||
|
r.F_Node_Name AS F_ThisStep,
|
||||||
|
r.F_Task_Node_Id AS F_ThisStepId,
|
||||||
|
r.F_Handle_Status AS F_Status,
|
||||||
|
t.F_Completion,
|
||||||
|
e.F_Icon,
|
||||||
|
t.F_Creator_User_Id AS F_CreatorUserId,
|
||||||
|
r.F_Handle_Time AS F_CreatorTime,
|
||||||
|
t.F_Last_Modify_User_Id AS F_LastModifyUserId,
|
||||||
|
t.F_Last_Modify_Time AS F_LastModifyTime,
|
||||||
|
r.F_Handle_Id AS F_HandleId,
|
||||||
|
o.F_Handle_Id AS F_DelegateUser
|
||||||
|
FROM
|
||||||
|
flow_task t
|
||||||
|
LEFT JOIN flow_task_operator_record r ON r.F_Task_Id = t.F_Id
|
||||||
|
LEFT JOIN flow_task_operator o ON r.F_Task_Operator_Id = o.F_Id
|
||||||
|
LEFT JOIN flow_template e on t.F_Template_Id = e.F_Id
|
||||||
|
WHERE
|
||||||
|
1 = 1
|
||||||
|
AND ( r.F_Handle_Status = 0 OR r.F_Handle_Status = 1 OR r.F_Handle_Status = 10 )
|
||||||
|
AND r.F_Task_Operator_Id IS NOT NULL AND r.F_Handle_Id = #{map.handleId}
|
||||||
|
<if test="map.keyWord != null and map.keyWord!=''">
|
||||||
|
AND (t.F_En_Code like #{map.keyWord} or t.F_Full_Name like #{map.keyWord})
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.startTime != null and map.startTime!='' and map.endTime != null and map.endTime!=''">
|
||||||
|
<choose>
|
||||||
|
<when test="map.oracle != null and map.oracle!=''">
|
||||||
|
AND r.F_Handle_Time Between TO_DATE(#{map.startTime},'yyyy-mm-dd HH24:mi:ss') AND
|
||||||
|
TO_DATE(#{map.endTime},'yyyy-mm-dd HH24:mi:ss')
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
AND r.F_Handle_Time Between #{map.startTime} and #{map.endTime}
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowCategory != null and map.flowCategory.size()>0">
|
||||||
|
AND t.F_Flow_Category in
|
||||||
|
<foreach collection="map.flowCategory" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.creatorUserId != null and map.creatorUserId!=''">
|
||||||
|
AND t.F_Creator_User_Id = #{map.creatorUserId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.templateId != null and map.templateId!=''">
|
||||||
|
AND t.F_Template_Id = #{map.templateId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowList != null and map.flowList.size()>0">
|
||||||
|
AND t.F_Flow_Id in
|
||||||
|
<foreach collection="map.flowList" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowUrgent != null and map.flowUrgent!=''">
|
||||||
|
AND t.F_Flow_Urgent = #{map.flowUrgent}
|
||||||
|
</if>
|
||||||
|
Order by r.F_Handle_Time DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getCirculateList" parameterType="map" resultMap="FlowTask">
|
||||||
|
SELECT
|
||||||
|
t.F_Id,
|
||||||
|
t.F_Process_Id AS F_ProcessId,
|
||||||
|
t.F_En_Code AS F_EnCode,
|
||||||
|
t.F_Full_Name AS F_FullName,
|
||||||
|
t.F_Flow_Urgent AS F_FlowUrgent,
|
||||||
|
t.F_Flow_Id AS F_FlowId,
|
||||||
|
t.F_Flow_Code AS F_FlowCode,
|
||||||
|
t.F_Flow_Name AS F_FlowName,
|
||||||
|
t.F_Flow_Category AS F_FlowCategory,
|
||||||
|
t.F_Start_Time AS F_StartTime,
|
||||||
|
t.F_End_Time AS F_EndTime,
|
||||||
|
c.F_Node_Name AS F_ThisStep,
|
||||||
|
c.F_Task_Node_Id AS F_ThisStepId,
|
||||||
|
c.F_Id AS F_CirculateId,
|
||||||
|
t.F_Status,
|
||||||
|
t.F_Completion,
|
||||||
|
e.F_Icon,
|
||||||
|
t.F_Creator_User_Id AS F_CreatorUserId,
|
||||||
|
c.F_Creator_Time AS F_CreatorTime,
|
||||||
|
t.F_Last_Modify_User_Id AS F_LastModifyUserId,
|
||||||
|
t.F_Last_Modify_Time AS F_LastModifyTime
|
||||||
|
FROM
|
||||||
|
flow_task t
|
||||||
|
LEFT JOIN flow_task_circulate c ON c.F_Task_Id = t.F_Id
|
||||||
|
LEFT JOIN flow_template e on t.F_Template_Id = e.F_Id
|
||||||
|
WHERE
|
||||||
|
1 =1
|
||||||
|
<if test="map.objectId != null and map.objectId.size()>0">
|
||||||
|
and c.F_Object_Id in
|
||||||
|
<foreach collection="map.objectId" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.keyWord != null and map.keyWord!=''">
|
||||||
|
AND (t.F_En_Code like #{map.keyWord} or t.F_Full_Name like #{map.keyWord})
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.startTime != null and map.startTime!='' and map.endTime != null and map.endTime!=''">
|
||||||
|
<choose>
|
||||||
|
<when test="map.oracle != null and map.oracle!=''">
|
||||||
|
AND c.F_Creator_Time Between TO_DATE(#{map.startTime},'yyyy-mm-dd HH24:mi:ss') AND
|
||||||
|
TO_DATE(#{map.endTime},'yyyy-mm-dd HH24:mi:ss')
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
AND c.F_Creator_Time Between #{map.startTime} and #{map.endTime}
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.templateId != null and map.templateId!=''">
|
||||||
|
AND t.F_Template_Id = #{map.templateId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowList != null and map.flowList.size()>0">
|
||||||
|
AND t.F_Flow_Id in
|
||||||
|
<foreach collection="map.flowList" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowCategory != null and map.flowCategory.size()>0">
|
||||||
|
AND t.F_Flow_Category in
|
||||||
|
<foreach collection="map.flowCategory" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.creatorUserId != null and map.creatorUserId!=''">
|
||||||
|
AND t.F_Creator_User_Id = #{map.creatorUserId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowUrgent != null and map.flowUrgent!=''">
|
||||||
|
AND t.F_Flow_Urgent = #{map.flowUrgent}
|
||||||
|
</if>
|
||||||
|
Order by c.F_Creator_Time DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getWaitList" parameterType="map" resultMap="FlowTask">
|
||||||
|
SELECT
|
||||||
|
o.F_Id AS F_Id,
|
||||||
|
t.F_Process_Id AS F_ProcessId,
|
||||||
|
t.F_En_Code AS F_EnCode,
|
||||||
|
t.F_Full_Name AS F_FullName,
|
||||||
|
t.F_Flow_Urgent AS F_FlowUrgent,
|
||||||
|
t.F_Flow_Id AS F_FlowId,
|
||||||
|
t.F_Flow_Code AS F_FlowCode,
|
||||||
|
t.F_Flow_Name AS F_FlowName,
|
||||||
|
t.F_Flow_Category AS F_FlowCategory,
|
||||||
|
t.F_Start_Time AS F_StartTime,
|
||||||
|
t.F_End_Time AS F_EndTime,
|
||||||
|
t.F_Current_Node_Name AS F_ThisStep,
|
||||||
|
n.F_Id AS F_ThisStepId,
|
||||||
|
t.F_Status,
|
||||||
|
t.F_Completion,
|
||||||
|
t.F_Creator_User_Id AS F_CreatorUserId,
|
||||||
|
o.F_Creator_Time AS F_CreatorTime,
|
||||||
|
o.F_Handle_Id AS F_HandleId,
|
||||||
|
t.F_Last_Modify_User_Id AS F_LastModifyUserId,
|
||||||
|
t.F_Template_Id AS F_TemplateId,
|
||||||
|
t.F_Last_Modify_Time AS F_LastModifyTime,
|
||||||
|
n.F_Node_Property_Json AS F_NodePropertyJson,
|
||||||
|
o.F_Description,
|
||||||
|
o.F_Node_Name AS F_NodeName,
|
||||||
|
t.F_Flow_Version AS F_FlowVersion,
|
||||||
|
e.F_Icon
|
||||||
|
FROM
|
||||||
|
flow_task_operator o
|
||||||
|
LEFT JOIN flow_task t ON o.F_Task_Id = t.F_Id
|
||||||
|
LEFT JOIN flow_task_node n ON o.F_Task_Node_Id = n.F_Id
|
||||||
|
LEFT JOIN flow_template e on t.F_Template_Id = e.F_Id
|
||||||
|
WHERE
|
||||||
|
1 = 1
|
||||||
|
AND o.F_Completion = 0
|
||||||
|
AND t.F_Status = 1
|
||||||
|
AND o.F_State = '0'
|
||||||
|
<if test="map.handleId != null and map.handleId.size()>0">
|
||||||
|
AND o.F_Handle_Id in
|
||||||
|
<foreach collection="map.handleId" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.keyWord != null and map.keyWord!=''">
|
||||||
|
AND (t.F_En_Code like #{map.keyWord} or t.F_Full_Name like #{map.keyWord})
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.startTime != null and map.startTime!='' and map.endTime != null and map.endTime!=''">
|
||||||
|
<choose>
|
||||||
|
<when test="map.oracle != null and map.oracle!=''">
|
||||||
|
AND o.F_Creator_Time Between TO_DATE(#{map.startTime},'yyyy-mm-dd HH24:mi:ss') AND
|
||||||
|
TO_DATE(#{map.endTime},'yyyy-mm-dd HH24:mi:ss')
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
AND o.F_Creator_Time Between #{map.startTime} and #{map.endTime}
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowCategory != null and map.flowCategory.size()>0">
|
||||||
|
AND t.F_Flow_Category in
|
||||||
|
<foreach collection="map.flowCategory" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.creatorUserId != null and map.creatorUserId!=''">
|
||||||
|
AND t.F_Creator_User_Id = #{map.creatorUserId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.nodeCode != null and map.nodeCode!=''">
|
||||||
|
AND o.F_Node_Code = #{map.nodeCode}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.templateId != null and map.templateId!=''">
|
||||||
|
AND t.F_Template_Id = #{map.templateId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowList != null and map.flowList.size()>0">
|
||||||
|
AND t.F_Flow_Id in
|
||||||
|
<foreach collection="map.flowList" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.isBatch != null and map.isBatch!=''">
|
||||||
|
AND t.F_Is_Batch = #{map.isBatch}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<if test="map.flowUrgent != null and map.flowUrgent!=''">
|
||||||
|
AND t.F_Flow_Urgent = #{map.flowUrgent}
|
||||||
|
</if>
|
||||||
|
Order by O.F_Creator_Time DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getWorkTrial" parameterType="map" resultMap="FlowTask">
|
||||||
|
SELECT
|
||||||
|
r.F_Id AS F_Id,
|
||||||
|
t.F_Process_Id AS F_ProcessId,
|
||||||
|
t.F_En_Code AS F_EnCode,
|
||||||
|
t.F_Start_Time AS F_StartTime,
|
||||||
|
t.F_Full_Name AS F_FullName,
|
||||||
|
t.F_Flow_Urgent AS F_FlowUrgent,
|
||||||
|
t.F_Flow_Id AS F_FlowId,
|
||||||
|
t.F_Flow_Code AS F_FlowCode,
|
||||||
|
t.F_Flow_Name AS F_FlowName,
|
||||||
|
t.F_Flow_Category AS F_FlowCategory,
|
||||||
|
t.F_End_Time AS F_EndTime,
|
||||||
|
r.F_Node_Name AS F_ThisStep,
|
||||||
|
r.F_Task_Node_Id AS F_ThisStepId,
|
||||||
|
r.F_Handle_Status AS F_Status,
|
||||||
|
t.F_Completion,
|
||||||
|
e.F_Icon,
|
||||||
|
t.F_Creator_User_Id AS F_CreatorUserId,
|
||||||
|
r.F_Handle_Time AS F_CreatorTime,
|
||||||
|
t.F_Last_Modify_User_Id AS F_LastModifyUserId,
|
||||||
|
t.F_Last_Modify_Time AS F_LastModifyTime,
|
||||||
|
r.F_Handle_Id AS F_HandleId
|
||||||
|
FROM
|
||||||
|
flow_task t
|
||||||
|
LEFT JOIN flow_task_operator_record r ON r.F_Task_Id = t.F_Id
|
||||||
|
LEFT JOIN flow_template e on t.F_Template_Id = e.F_Id
|
||||||
|
WHERE r.F_Handle_Id = #{map.handleId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
@ -0,0 +1,41 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-app</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-app-biz</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-app-entity</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-permission-biz</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-system-biz</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-workflow-engine-biz</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,16 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import jnpf.entity.AppDataEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-07-08
|
||||||
|
*/
|
||||||
|
public interface AppDataMapper extends SuperMapper<AppDataEntity> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
package jnpf.service;
|
||||||
|
|
||||||
|
import jnpf.base.service.SuperService;
|
||||||
|
import jnpf.engine.model.flowengine.FlowPagination;
|
||||||
|
import jnpf.entity.AppDataEntity;
|
||||||
|
import jnpf.model.AppDataListAllVO;
|
||||||
|
import jnpf.model.AppFlowListAllVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-08-08
|
||||||
|
*/
|
||||||
|
public interface AppDataService extends SuperService<AppDataEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表
|
||||||
|
*
|
||||||
|
* @param type 类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AppDataEntity> getList(String type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AppDataEntity> getList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 信息
|
||||||
|
*
|
||||||
|
* @param objectId 对象主键
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
AppDataEntity getInfo(String objectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证名称
|
||||||
|
*
|
||||||
|
* @param objectId 对象主键
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean isExistByObjectId(String objectId, String systemId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建
|
||||||
|
*
|
||||||
|
* @param entity 实体对象
|
||||||
|
*/
|
||||||
|
void create(AppDataEntity entity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除
|
||||||
|
*
|
||||||
|
* @param entity 实体对象
|
||||||
|
*/
|
||||||
|
void delete(AppDataEntity entity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除
|
||||||
|
*
|
||||||
|
* @param objectId 应用主键
|
||||||
|
*/
|
||||||
|
void delete(String objectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程所有应用
|
||||||
|
*
|
||||||
|
* @param pagination
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AppFlowListAllVO> getFlowList(FlowPagination pagination);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程所有应用
|
||||||
|
* @param type 类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AppDataListAllVO> getDataList(String type);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package jnpf.service;
|
||||||
|
|
||||||
|
import jnpf.model.AppUserInfoVO;
|
||||||
|
import jnpf.model.AppUsersVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app用户信息
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-08-08
|
||||||
|
*/
|
||||||
|
public interface AppService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app用户信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
AppUsersVO userInfo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通讯录
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
AppUserInfoVO getInfo(String id);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,171 @@
|
|||||||
|
package jnpf.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import jnpf.base.service.SuperServiceImpl;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import jnpf.base.UserInfo;
|
||||||
|
import jnpf.base.entity.ModuleEntity;
|
||||||
|
import jnpf.base.model.module.ModuleModel;
|
||||||
|
import jnpf.base.service.ModuleService;
|
||||||
|
import jnpf.engine.entity.FlowTemplateEntity;
|
||||||
|
import jnpf.engine.model.flowengine.FlowPagination;
|
||||||
|
import jnpf.engine.service.FlowTemplateJsonService;
|
||||||
|
import jnpf.engine.service.FlowTemplateService;
|
||||||
|
import jnpf.entity.AppDataEntity;
|
||||||
|
import jnpf.mapper.AppDataMapper;
|
||||||
|
import jnpf.model.*;
|
||||||
|
import jnpf.permission.model.authorize.AuthorizeVO;
|
||||||
|
import jnpf.permission.service.AuthorizeService;
|
||||||
|
import jnpf.service.AppDataService;
|
||||||
|
import jnpf.util.JsonUtil;
|
||||||
|
import jnpf.util.RandomUtil;
|
||||||
|
import jnpf.util.StringUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import jnpf.util.treeutil.SumTree;
|
||||||
|
import jnpf.util.treeutil.newtreeutil.TreeDotUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-08-08
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class AppDataServiceImpl extends SuperServiceImpl<AppDataMapper, AppDataEntity> implements AppDataService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserProvider userProvider;
|
||||||
|
@Autowired
|
||||||
|
private ModuleService moduleService;
|
||||||
|
@Autowired
|
||||||
|
private AuthorizeService authorizeService;
|
||||||
|
@Autowired
|
||||||
|
private FlowTemplateService flowTemplateService;
|
||||||
|
@Autowired
|
||||||
|
private FlowTemplateJsonService flowTemplateJsonService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AppDataEntity> getList(String type) {
|
||||||
|
UserInfo userInfo = userProvider.get();
|
||||||
|
QueryWrapper<AppDataEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(AppDataEntity::getObjectType, type).eq(AppDataEntity::getCreatorUserId, userInfo.getUserId());
|
||||||
|
List<AppDataEntity> list = this.list(queryWrapper);
|
||||||
|
list = list.stream().filter(t -> StringUtil.isNotEmpty(t.getSystemId()) && t.getSystemId().equals(userInfo.getAppSystemId())).collect(Collectors.toList());
|
||||||
|
List<String> idAll = list.stream().map(AppDataEntity::getObjectId).collect(Collectors.toList());
|
||||||
|
List<FlowTemplateEntity> templateList = flowTemplateService.getTemplateList(idAll);
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
AppDataEntity appDataEntity = list.get(i);
|
||||||
|
if ("2".equals(type)) {
|
||||||
|
ModuleEntity info = moduleService.getInfo(appDataEntity.getObjectId());
|
||||||
|
if (info == null || info.getEnabledMark() == 0) {
|
||||||
|
list.remove(i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
FlowTemplateEntity templateEntity = templateList.stream().filter(t -> t.getId().equals(appDataEntity.getObjectId())).findFirst().orElse(null);
|
||||||
|
if (templateEntity == null) {
|
||||||
|
list.remove(i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AppDataEntity> getList() {
|
||||||
|
QueryWrapper<AppDataEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
return this.list(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AppDataEntity getInfo(String objectId) {
|
||||||
|
UserInfo userInfo = userProvider.get();
|
||||||
|
QueryWrapper<AppDataEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(AppDataEntity::getObjectId, objectId).eq(AppDataEntity::getCreatorUserId, userInfo.getUserId());
|
||||||
|
return this.getOne(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isExistByObjectId(String objectId, String systemId) {
|
||||||
|
UserInfo userInfo = userProvider.get();
|
||||||
|
QueryWrapper<AppDataEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(AppDataEntity::getObjectId, objectId)
|
||||||
|
.eq(AppDataEntity::getCreatorUserId, userInfo.getUserId())
|
||||||
|
.eq(AppDataEntity::getSystemId, systemId);
|
||||||
|
return this.count(queryWrapper) > 0 ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create(AppDataEntity entity) {
|
||||||
|
UserInfo userInfo = userProvider.get();
|
||||||
|
entity.setId(RandomUtil.uuId());
|
||||||
|
entity.setCreatorUserId(userInfo.getUserId());
|
||||||
|
entity.setCreatorTime(new Date());
|
||||||
|
entity.setEnabledMark(1);
|
||||||
|
entity.setSystemId(userInfo.getAppSystemId());
|
||||||
|
this.save(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(AppDataEntity entity) {
|
||||||
|
this.removeById(entity.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(String objectId) {
|
||||||
|
QueryWrapper<AppDataEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(AppDataEntity::getObjectId, objectId);
|
||||||
|
this.remove(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AppFlowListAllVO> getFlowList(FlowPagination pagination) {
|
||||||
|
List<String> objectId = getList("1").stream().map(AppDataEntity::getObjectId).collect(Collectors.toList());;
|
||||||
|
List<FlowTemplateEntity> pageList = flowTemplateService.getListAll(pagination,true);
|
||||||
|
List<AppFlowListAllVO> result = new ArrayList<>();
|
||||||
|
for (FlowTemplateEntity entity : pageList) {
|
||||||
|
AppFlowListAllVO vo = JsonUtil.getJsonToBean(entity, AppFlowListAllVO.class);
|
||||||
|
vo.setIsData(objectId.contains(vo.getId()));
|
||||||
|
result.add(vo);
|
||||||
|
}
|
||||||
|
return pagination.setData(result, pagination.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AppDataListAllVO> getDataList(String type) {
|
||||||
|
List<AppDataEntity> dataList = getList(type);
|
||||||
|
String appSystemId = userProvider.get().getAppSystemId();
|
||||||
|
AuthorizeVO authorizeModel = authorizeService.getAuthorize(true, false);
|
||||||
|
List<ModuleModel> buttonList = authorizeModel.getModuleList();
|
||||||
|
List<ModuleEntity> menuList = moduleService.getList().stream().filter(t -> "App".equals(t.getCategory()) && t.getEnabledMark() == 1 && t.getSystemId().equals(appSystemId)).collect(Collectors.toList());
|
||||||
|
List<UserMenuModel> list = new LinkedList<>();
|
||||||
|
for (ModuleEntity module : menuList) {
|
||||||
|
boolean count = buttonList.stream().filter(t -> t.getId().equals(module.getId())).count() > 0;
|
||||||
|
UserMenuModel userMenuModel = JsonUtil.getJsonToBean(module, UserMenuModel.class);
|
||||||
|
if (count) {
|
||||||
|
boolean isData = dataList.stream().filter(t -> t.getObjectId().equals(module.getId())).count() > 0;
|
||||||
|
userMenuModel.setIsData(isData);
|
||||||
|
list.add(userMenuModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SumTree<UserMenuModel>> menuAll = TreeDotUtils.convertListToTreeDot(list);
|
||||||
|
List<AppDataListAllVO> menuListAll = JsonUtil.getJsonToList(menuAll, AppDataListAllVO.class);
|
||||||
|
List<AppDataListAllVO> data = new LinkedList<>();
|
||||||
|
for (AppDataListAllVO appMenu : menuListAll) {
|
||||||
|
if ("-1".equals(appMenu.getParentId())) {
|
||||||
|
data.add(appMenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-app</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-app-controller</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-app-biz</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,22 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-app</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-app-entity</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-common-all</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,46 @@
|
|||||||
|
package jnpf.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import jnpf.base.entity.SuperExtendEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-08-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("base_app_data")
|
||||||
|
public class AppDataEntity extends SuperExtendEntity.SuperExtendDEEntity<String> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对象类型
|
||||||
|
*/
|
||||||
|
@TableField("f_object_type")
|
||||||
|
private String objectType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对象主键
|
||||||
|
*/
|
||||||
|
@TableField("f_object_id")
|
||||||
|
private String objectId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据
|
||||||
|
*/
|
||||||
|
@TableField("f_object_data")
|
||||||
|
private String objectData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联系统id
|
||||||
|
*/
|
||||||
|
@TableField("f_system_id")
|
||||||
|
private String systemId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-07-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppDataCrForm {
|
||||||
|
@NotBlank(message = "必填")
|
||||||
|
@Schema(description = "应用类型")
|
||||||
|
private String objectType;
|
||||||
|
@NotBlank(message = "必填")
|
||||||
|
@Schema(description = "应用主键")
|
||||||
|
private String objectId;
|
||||||
|
@Schema(description = "数据")
|
||||||
|
private String objectData;
|
||||||
|
@Schema(description = "系统主键")
|
||||||
|
private String systemId;
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-07-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppDataListAllVO {
|
||||||
|
@Schema(description = "主键")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "是否有下级菜单")
|
||||||
|
private Boolean hasChildren;
|
||||||
|
@Schema(description = "菜单名称")
|
||||||
|
private String fullName;
|
||||||
|
@Schema(description = " 图标")
|
||||||
|
private String icon;
|
||||||
|
@Schema(description = "链接地址")
|
||||||
|
private String urlAddress;
|
||||||
|
@Schema(description = "父级id")
|
||||||
|
private String parentId;
|
||||||
|
@Schema(description = "菜单类型",example = "1")
|
||||||
|
private Integer type;
|
||||||
|
@Schema(description = "扩展字段")
|
||||||
|
private String propertyJson;
|
||||||
|
@Schema(description = "是否常用")
|
||||||
|
private Boolean isData;
|
||||||
|
@Schema(description = "下级菜单列表")
|
||||||
|
private List<AppDataListAllVO> children;
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-07-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppDataListVO {
|
||||||
|
@Schema(description = "主键")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "应用主键")
|
||||||
|
private String objectId;
|
||||||
|
@Schema(description = "数据")
|
||||||
|
private String objectData;
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app常用数据
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-07-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppFlowListAllVO {
|
||||||
|
@Schema(description = "主键")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "名称")
|
||||||
|
private String fullName;
|
||||||
|
@Schema(description = "图标")
|
||||||
|
private String icon;
|
||||||
|
@Schema(description = "图标背景色")
|
||||||
|
private String iconBackground;
|
||||||
|
@Schema(description = "编码")
|
||||||
|
private String enCode;
|
||||||
|
@Schema(description = "是否常用")
|
||||||
|
private Boolean isData;
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app应用
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-07-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppMenuListVO {
|
||||||
|
@Schema(description = "主键")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "是否有下级菜单")
|
||||||
|
private Boolean hasChildren;
|
||||||
|
@Schema(description = "父级id")
|
||||||
|
private String parentId;
|
||||||
|
@Schema(description = "菜单名称")
|
||||||
|
private String fullName;
|
||||||
|
@Schema(description = " 图标")
|
||||||
|
private String icon;
|
||||||
|
@Schema(description = "是否常用")
|
||||||
|
private Boolean isData;
|
||||||
|
@Schema(description = "链接地址")
|
||||||
|
private String urlAddress;
|
||||||
|
@Schema(description = "菜单类型",example = "1")
|
||||||
|
private Integer type;
|
||||||
|
@Schema(description = "扩展字段")
|
||||||
|
private String propertyJson;
|
||||||
|
@Schema(description = "下级菜单列表")
|
||||||
|
private List<AppMenuListVO> children;
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app应用
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-08-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppPositionVO {
|
||||||
|
@Schema(description = "岗位id")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "岗位名称")
|
||||||
|
private String name;
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/12 15:31
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppUserInfoVO {
|
||||||
|
@Schema(description = "主键")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "户名")
|
||||||
|
private String realName;
|
||||||
|
@Schema(description = "部门名称")
|
||||||
|
private String organizeName;
|
||||||
|
@Schema(description = "账号")
|
||||||
|
private String account;
|
||||||
|
@Schema(description = "岗位名称")
|
||||||
|
private String positionName;
|
||||||
|
@Schema(description = "办公电话")
|
||||||
|
private String telePhone;
|
||||||
|
@Schema(description = "办公座机")
|
||||||
|
private String landline;
|
||||||
|
@Schema(description = "手机号码")
|
||||||
|
private String mobilePhone;
|
||||||
|
@Schema(description = "用户头像")
|
||||||
|
private String headIcon;
|
||||||
|
@Schema(description = "邮箱")
|
||||||
|
private String email;
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021-07-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "常用模型")
|
||||||
|
public class AppUsersVO {
|
||||||
|
@Schema(description = "用户id")
|
||||||
|
private String userId;
|
||||||
|
@Schema(description = "用户账号")
|
||||||
|
private String userAccount;
|
||||||
|
@Schema(description = "用户姓名")
|
||||||
|
private String userName;
|
||||||
|
@Schema(description = "用户头像")
|
||||||
|
private String headIcon;
|
||||||
|
@Schema(description = "组织主键")
|
||||||
|
private String organizeId;
|
||||||
|
@Schema(description = "组织名称")
|
||||||
|
private String organizeName;
|
||||||
|
@Schema(description = "角色主键")
|
||||||
|
private String roleId;
|
||||||
|
@Schema(description = "角色名称")
|
||||||
|
private String roleName;
|
||||||
|
@Schema(description = "性别")
|
||||||
|
private Integer gender;
|
||||||
|
@Schema(description = "岗位")
|
||||||
|
private List<AppPositionVO> positionIds;
|
||||||
|
@Schema(description = "生日")
|
||||||
|
private Long birthday;
|
||||||
|
@Schema(description = "手机")
|
||||||
|
private String mobilePhone;
|
||||||
|
@Schema(description = "邮箱")
|
||||||
|
private String email;
|
||||||
|
@Schema(description = "直属主管")
|
||||||
|
private String manager;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-java-boot</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-app</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<modules>
|
||||||
|
<module>jnpf-app-entity</module>
|
||||||
|
<module>jnpf-app-biz</module>
|
||||||
|
<module>jnpf-app-controller</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,27 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-example</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-example-biz</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-example-entity</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-generater-base</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,16 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import jnpf.entity.ContractEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 9:47
|
||||||
|
*/
|
||||||
|
public interface ContractMapper extends SuperMapper<ContractEntity> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package jnpf.service;
|
||||||
|
|
||||||
|
import jnpf.base.service.SuperService;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import jnpf.base.Pagination;
|
||||||
|
import jnpf.entity.ContractEntity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 9:47
|
||||||
|
*/
|
||||||
|
public interface ContractService extends SuperService<ContractEntity> {
|
||||||
|
|
||||||
|
List<ContractEntity> getlist(Pagination pagination);
|
||||||
|
|
||||||
|
ContractEntity getInfo(String id);
|
||||||
|
|
||||||
|
void create(ContractEntity entity);
|
||||||
|
|
||||||
|
void update(String id, ContractEntity entity);
|
||||||
|
|
||||||
|
void delete(ContractEntity entity);
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package jnpf.service.impl;
|
||||||
|
|
||||||
|
import jnpf.base.service.SuperServiceImpl;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import jnpf.base.Pagination;
|
||||||
|
import jnpf.base.UserInfo;
|
||||||
|
import jnpf.mapper.ContractMapper;
|
||||||
|
import jnpf.service.ContractService;
|
||||||
|
import jnpf.entity.ContractEntity;
|
||||||
|
import jnpf.util.RandomUtil;
|
||||||
|
import jnpf.util.StringUtil;
|
||||||
|
import jnpf.util.UserProvider;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 9:47
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class ContractServiceImpl extends SuperServiceImpl<ContractMapper, ContractEntity> implements ContractService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserProvider userProvider;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ContractEntity> getlist(Pagination pagination){
|
||||||
|
//通过UserProvider获取用户信息
|
||||||
|
QueryWrapper<ContractEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
if (!StringUtil.isEmpty(pagination.getKeyword())) {
|
||||||
|
queryWrapper.lambda().and(
|
||||||
|
t -> t.like(ContractEntity::getContractName, pagination.getKeyword())
|
||||||
|
.or().like(ContractEntity::getMytelePhone, pagination.getKeyword())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//排序
|
||||||
|
if (StringUtil.isEmpty(pagination.getSidx())) {
|
||||||
|
} else {
|
||||||
|
queryWrapper = "asc".equals(pagination.getSort().toLowerCase()) ? queryWrapper.orderByAsc(pagination.getSidx()) : queryWrapper.orderByDesc(pagination.getSidx());
|
||||||
|
}
|
||||||
|
Page<ContractEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
|
||||||
|
IPage<ContractEntity> userPage = this.page(page, queryWrapper);
|
||||||
|
return pagination.setData(userPage.getRecords(), page.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContractEntity getInfo(String id){
|
||||||
|
QueryWrapper<ContractEntity> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(ContractEntity::getId, id);
|
||||||
|
return this.getOne(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@DSTransactional
|
||||||
|
public void create(ContractEntity entity){
|
||||||
|
entity.setId(RandomUtil.uuId());
|
||||||
|
this.save(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@DSTransactional
|
||||||
|
public void update(String id, ContractEntity entity){
|
||||||
|
entity.setId(id);
|
||||||
|
this.updateById(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(ContractEntity entity) {
|
||||||
|
if (entity != null) {
|
||||||
|
this.removeById(entity.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-example</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-example-controller</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-example-biz</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,22 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-example</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-example-entity</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-common-all</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,20 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-java-boot</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-example</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<modules>
|
||||||
|
<module>jnpf-example-entity</module>
|
||||||
|
<module>jnpf-example-biz</module>
|
||||||
|
<module>jnpf-example-controller</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,31 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-java-boot</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-exception</artifactId>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-common-auth</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-common-all</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-oauth-entity</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,107 @@
|
|||||||
|
package jnpf.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import jnpf.base.entity.SuperExtendEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统日志
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月27日 上午9:18
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("base_sys_log")
|
||||||
|
public class LogEntity extends SuperExtendEntity.SuperExtendDescriptionEntity<String> implements Serializable {
|
||||||
|
/**
|
||||||
|
* 用户主键
|
||||||
|
*/
|
||||||
|
@TableField("F_USER_ID")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户主键
|
||||||
|
*/
|
||||||
|
@TableField("F_USER_NAME")
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日志类型
|
||||||
|
*/
|
||||||
|
@TableField("F_TYPE")
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日志级别
|
||||||
|
*/
|
||||||
|
@TableField("F_LEVEL")
|
||||||
|
private Integer levels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IP地址
|
||||||
|
*/
|
||||||
|
@TableField("F_IP_ADDRESS")
|
||||||
|
private String ipAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IP所在城市
|
||||||
|
*/
|
||||||
|
@TableField("F_IP_ADDRESS_NAME")
|
||||||
|
private String ipAddressName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求地址
|
||||||
|
*/
|
||||||
|
@TableField("F_REQUEST_URL")
|
||||||
|
private String requestUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求方法
|
||||||
|
*/
|
||||||
|
@TableField("F_REQUEST_METHOD")
|
||||||
|
private String requestMethod;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求耗时
|
||||||
|
*/
|
||||||
|
@TableField("F_REQUEST_DURATION")
|
||||||
|
private Integer requestDuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日志内容
|
||||||
|
*/
|
||||||
|
@TableField("F_JSON")
|
||||||
|
private String jsons;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 平台设备
|
||||||
|
*/
|
||||||
|
@TableField("F_PLAT_FORM")
|
||||||
|
private String platForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能主键
|
||||||
|
*/
|
||||||
|
@TableField("F_MODULE_ID")
|
||||||
|
private String moduleId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能名称
|
||||||
|
*/
|
||||||
|
@TableField("F_MODULE_NAME")
|
||||||
|
private String moduleName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对象Id
|
||||||
|
*/
|
||||||
|
@TableField("F_OBJECT_ID")
|
||||||
|
private String objectId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
package jnpf.enums;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日志等级
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月26日 上午9:18
|
||||||
|
*/
|
||||||
|
public enum LogLevelEnum {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误
|
||||||
|
*/
|
||||||
|
Error(0,"错误"),
|
||||||
|
/**
|
||||||
|
* 成功
|
||||||
|
*/
|
||||||
|
Success(1,"成功"),
|
||||||
|
/**
|
||||||
|
* 警告
|
||||||
|
*/
|
||||||
|
Warning(2,"警告");
|
||||||
|
|
||||||
|
private int code;
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
LogLevelEnum(int code, String message){
|
||||||
|
this.code = code;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(Integer code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据状态code获取枚举名称
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getMessageByCode(Integer code) {
|
||||||
|
for (LogLevelEnum status : LogLevelEnum.values()) {
|
||||||
|
if (status.getCode().equals(code)) {
|
||||||
|
return status.message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据状态code获取枚举值
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static LogLevelEnum getByCode(Integer code) {
|
||||||
|
for (LogLevelEnum status : LogLevelEnum.values()) {
|
||||||
|
if (status.getCode().equals(code)) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
package jnpf.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日志分类
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月26日 上午9:18
|
||||||
|
*/
|
||||||
|
public enum LogSortEnum {
|
||||||
|
/**
|
||||||
|
* 登录
|
||||||
|
*/
|
||||||
|
Login(1, "登录"),
|
||||||
|
/**
|
||||||
|
* 访问
|
||||||
|
*/
|
||||||
|
Visit(2, "访问"),
|
||||||
|
/**
|
||||||
|
* 操作
|
||||||
|
*/
|
||||||
|
Operate(3, "操作"),
|
||||||
|
/**
|
||||||
|
* 异常
|
||||||
|
*/
|
||||||
|
Exception(4, "异常"),
|
||||||
|
/**
|
||||||
|
* 请求
|
||||||
|
*/
|
||||||
|
Request(5, "请求");
|
||||||
|
|
||||||
|
private int code;
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
LogSortEnum(int code, String message) {
|
||||||
|
this.code = code;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(Integer code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据状态code获取枚举名称
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getMessageByCode(Integer code) {
|
||||||
|
for (LogSortEnum status : LogSortEnum.values()) {
|
||||||
|
if (status.getCode().equals(code)) {
|
||||||
|
return status.message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据状态code获取枚举值
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static LogSortEnum getByCode(Integer code) {
|
||||||
|
for (LogSortEnum status : LogSortEnum.values()) {
|
||||||
|
if (status.getCode().equals(code)) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,281 @@
|
|||||||
|
package jnpf.exception;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.exception.SameTokenInvalidException;
|
||||||
|
import cn.dev33.satoken.exception.NotLoginException;
|
||||||
|
import cn.dev33.satoken.exception.NotPermissionException;
|
||||||
|
import cn.dev33.satoken.exception.NotRoleException;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import jnpf.base.ActionResult;
|
||||||
|
import jnpf.base.ActionResultCode;
|
||||||
|
import jnpf.base.LogSortEnum;
|
||||||
|
import jnpf.base.UserInfo;
|
||||||
|
import jnpf.config.ConfigValueUtil;
|
||||||
|
import jnpf.database.util.NotTenantPluginHolder;
|
||||||
|
import jnpf.entity.LogEntity;
|
||||||
|
import jnpf.service.LogService;
|
||||||
|
import jnpf.util.*;
|
||||||
|
import jnpf.util.data.DataSourceContextHolder;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.autoconfigure.web.ErrorProperties;
|
||||||
|
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
|
||||||
|
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.validation.ObjectError;
|
||||||
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||||
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 10:10
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Controller
|
||||||
|
@ControllerAdvice
|
||||||
|
public class ResultException extends BasicErrorController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserProvider userProvider;
|
||||||
|
@Autowired
|
||||||
|
private LogService logService;
|
||||||
|
@Autowired
|
||||||
|
private ConfigValueUtil configValueUtil;
|
||||||
|
|
||||||
|
public ResultException(){
|
||||||
|
super(new DefaultErrorAttributes(), new ErrorProperties());
|
||||||
|
}
|
||||||
|
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = LoginException.class)
|
||||||
|
public ActionResult loginException(LoginException e) {
|
||||||
|
ActionResult result = ActionResult.fail(ActionResultCode.Fail.getCode(), e.getMessage());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = ImportException.class)
|
||||||
|
public ActionResult loginException(ImportException e) {
|
||||||
|
ActionResult result = ActionResult.fail(ActionResultCode.Fail.getCode(), e.getMessage());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ResponseBody
|
||||||
|
// @ExceptionHandler(value = FileNotException.class)
|
||||||
|
// public ActionResult loginException(FileNotException e) {
|
||||||
|
// ActionResult result = ActionResult.fail(ActionResultCode.Fail.getCode(), "文件不存在");
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义异常内容返回
|
||||||
|
*
|
||||||
|
* @param e
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = DataException.class)
|
||||||
|
public ActionResult dataException(DataException e) {
|
||||||
|
ActionResult result = ActionResult.fail(ActionResultCode.Fail.getCode(), e.getMessage());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
// @ResponseBody
|
||||||
|
// @ExceptionHandler(value = SQLSyntaxErrorException.class)
|
||||||
|
// public ActionResult sqlException(SQLSyntaxErrorException e) {
|
||||||
|
// ActionResult result;
|
||||||
|
// log.error(e.getMessage());
|
||||||
|
// e.printStackTrace();
|
||||||
|
// if (e.getMessage().contains("Unknown database")) {
|
||||||
|
// printLog(e, "请求失败");
|
||||||
|
// result = ActionResult.fail(ActionResultCode.Fail.getCode(), "请求失败");
|
||||||
|
// } else {
|
||||||
|
// printLog(e, "数据库异常");
|
||||||
|
// result = ActionResult.fail(ActionResultCode.Fail.getCode(), "数据库异常");
|
||||||
|
// }
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @ResponseBody
|
||||||
|
// @ExceptionHandler(value = SQLServerException.class)
|
||||||
|
// public ActionResult sqlServerException(SQLServerException e) {
|
||||||
|
// ActionResult result;
|
||||||
|
// printLog(e, "系统异常");
|
||||||
|
// if (e.getMessage().contains("将截断字符串")) {
|
||||||
|
// printLog(e, "某个字段字符长度超过限制,请检查。");
|
||||||
|
// result = ActionResult.fail(ActionResultCode.Fail.getCode(), "某个字段字符长度超过限制,请检查。");
|
||||||
|
// } else {
|
||||||
|
// log.error(e.getMessage());
|
||||||
|
// printLog(e, "数据库异常,请检查。");
|
||||||
|
// result = ActionResult.fail(ActionResultCode.Fail.getCode(), "数据库异常,请检查。");
|
||||||
|
// }
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
|
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = MethodArgumentNotValidException.class)
|
||||||
|
public ActionResult methodArgumentNotValidException(MethodArgumentNotValidException e) {
|
||||||
|
Map<String, String> map = new HashMap<>(16);
|
||||||
|
List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
|
||||||
|
for (int i = 0; i < allErrors.size(); i++) {
|
||||||
|
String s = allErrors.get(i).getCodes()[0];
|
||||||
|
//用分割的方法得到字段名
|
||||||
|
String[] parts = s.split("\\.");
|
||||||
|
String part1 = parts[parts.length - 1];
|
||||||
|
map.put(part1, allErrors.get(i).getDefaultMessage());
|
||||||
|
}
|
||||||
|
String json = JSON.toJSONString(map);
|
||||||
|
ActionResult result = ActionResult.fail(ActionResultCode.ValidateError.getCode(), json);
|
||||||
|
printLog(e, "字段验证异常");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = WorkFlowException.class)
|
||||||
|
public ActionResult workFlowException(WorkFlowException e) {
|
||||||
|
if (e.getCode() == 200) {
|
||||||
|
List<Map<String, Object>> list = JsonUtil.getJsonToListMap(e.getMessage());
|
||||||
|
return ActionResult.success(list);
|
||||||
|
} else {
|
||||||
|
return ActionResult.fail(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = WxErrorException.class)
|
||||||
|
public ActionResult wxErrorException(WxErrorException e) {
|
||||||
|
return ActionResult.fail(e.getError().getErrorCode(), "操作过于频繁");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = ServletException.class)
|
||||||
|
public void exception(ServletException e) throws Exception {
|
||||||
|
log.error("系统异常:" + e.getMessage(), e);
|
||||||
|
printLog(e, "系统异常");
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(value = Exception.class)
|
||||||
|
public ActionResult exception(Exception e) {
|
||||||
|
log.error("系统异常:" + e.getMessage(), e);
|
||||||
|
printLog(e, "系统异常");
|
||||||
|
return ActionResult.fail(ActionResultCode.Fail.getCode(), "系统异常");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限码异常
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(NotPermissionException.class)
|
||||||
|
public ActionResult<Void> handleNotPermissionException(NotPermissionException e) {
|
||||||
|
return ActionResult.fail(ActionResultCode.Fail.getCode(), "没有访问权限,请联系管理员授权");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色权限异常
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(NotRoleException.class)
|
||||||
|
public ActionResult<Void> handleNotRoleException(NotRoleException e) {
|
||||||
|
return ActionResult.fail(ActionResultCode.ValidateError.getCode(), "没有访问权限,请联系管理员授权");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 认证失败
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(NotLoginException.class)
|
||||||
|
public ActionResult<Void> handleNotLoginException(NotLoginException e) {
|
||||||
|
return ActionResult.fail(ActionResultCode.SessionOverdue.getCode(), "认证失败,无法访问系统资源");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 无效认证
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@ExceptionHandler(SameTokenInvalidException.class)
|
||||||
|
public ActionResult<Void> handleIdTokenInvalidException(SameTokenInvalidException e) {
|
||||||
|
return ActionResult.fail(ActionResultCode.SessionOverdue.getCode(), "无效内部认证,无法访问系统资源");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void printLog(Exception e, String module) {
|
||||||
|
try {
|
||||||
|
UserInfo userInfo = userProvider.get();
|
||||||
|
if (userInfo.getId() == null) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//接口错误将不会进入数据库切源拦截器需要手动设置
|
||||||
|
if (configValueUtil.isMultiTenancy() && DataSourceContextHolder.getDatasourceId() == null) {
|
||||||
|
DataSourceContextHolder.setDatasource(userInfo.getTenantId(), userInfo.getTenantDbConnectionString(), userInfo.isAssignDataSource());
|
||||||
|
}
|
||||||
|
LogEntity entity = new LogEntity();
|
||||||
|
entity.setId(RandomUtil.uuId());
|
||||||
|
entity.setType(LogSortEnum.Operate.getCode());
|
||||||
|
entity.setUserId(userInfo.getUserId());
|
||||||
|
entity.setUserName(userInfo.getUserName() + "/" + userInfo.getUserAccount());
|
||||||
|
if (!ServletUtil.getIsMobileDevice()) {
|
||||||
|
String modelName = module;
|
||||||
|
entity.setModuleName(modelName);
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(e.toString() + "\n");
|
||||||
|
StackTraceElement[] stackArray = e.getStackTrace();
|
||||||
|
for (int i = 0; i < stackArray.length; i++) {
|
||||||
|
StackTraceElement element = stackArray[i];
|
||||||
|
sb.append(element.toString() + "\n");
|
||||||
|
}
|
||||||
|
entity.setJsons(sb.toString());
|
||||||
|
entity.setRequestUrl(ServletUtil.getRequest().getServletPath());
|
||||||
|
entity.setRequestMethod(ServletUtil.getRequest().getMethod());
|
||||||
|
entity.setType(4);
|
||||||
|
entity.setUserId(userInfo.getUserId());
|
||||||
|
entity.setIpAddress(IpUtil.getIpAddr());
|
||||||
|
entity.setCreatorTime(new Date());
|
||||||
|
entity.setPlatForm(ServletUtil.getUserAgent());
|
||||||
|
if (configValueUtil.isMultiTenancy() && StringUtil.isEmpty(DataSourceContextHolder.getDatasourceId())) {
|
||||||
|
log.error("请求异常, 无登陆租户:" + ReflectionUtil.toString(entity), e);
|
||||||
|
} else {
|
||||||
|
logService.save(entity);
|
||||||
|
}
|
||||||
|
}catch (Exception g){
|
||||||
|
log.error(g.getMessage());
|
||||||
|
}finally {
|
||||||
|
UserProvider.clearLocalUser();
|
||||||
|
TenantProvider.clearBaseSystemIfo();
|
||||||
|
DataSourceContextHolder.clearDatasourceType();
|
||||||
|
NotTenantPluginHolder.clearNotSwitchFlag();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 覆盖默认的JSON响应
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@RequestMapping
|
||||||
|
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
|
||||||
|
HttpStatus status = getStatus(request);
|
||||||
|
|
||||||
|
if (status == HttpStatus.NOT_FOUND) {
|
||||||
|
return new ResponseEntity<>(status);
|
||||||
|
}
|
||||||
|
return super.error(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import jnpf.entity.LogEntity;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统日志
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月27日 上午9:18
|
||||||
|
*/
|
||||||
|
public interface LogMapper extends SuperMapper<LogEntity> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 10:10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ErrorLogVO {
|
||||||
|
@Schema(description = "创建用户")
|
||||||
|
private String userName;
|
||||||
|
@Schema(description = "创建时间",example = "1")
|
||||||
|
private Long creatorTime;
|
||||||
|
@Schema(description = "IP")
|
||||||
|
private String ipaddress;
|
||||||
|
@Schema(description = "id")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "异常功能")
|
||||||
|
private String moduleName;
|
||||||
|
@Schema(description = "异常描述")
|
||||||
|
private String json;
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作日志模型
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 10:10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class HandleLogVO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
public String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求时间
|
||||||
|
*/
|
||||||
|
public Long creatorTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求用户名
|
||||||
|
*/
|
||||||
|
public String userName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求IP
|
||||||
|
*/
|
||||||
|
public String ipaddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求设备
|
||||||
|
*/
|
||||||
|
public String platForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作模块
|
||||||
|
*/
|
||||||
|
public String moduleName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作类型
|
||||||
|
*/
|
||||||
|
public String requestMethod;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求耗时
|
||||||
|
*/
|
||||||
|
public int requestDuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作记录
|
||||||
|
*/
|
||||||
|
public String json;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 10:10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class LogDelForm {
|
||||||
|
@Schema(description = "id集合")
|
||||||
|
private String[] ids;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 10:10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class LoginLogVO {
|
||||||
|
@Schema(description = "id")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "创建时间",example = "1")
|
||||||
|
private Long creatorTime;
|
||||||
|
@Schema(description = "登陆用户")
|
||||||
|
private String userName;
|
||||||
|
@Schema(description = "登陆IP")
|
||||||
|
private String ipaddress;
|
||||||
|
@Schema(description = "登陆平台")
|
||||||
|
private String platForm;
|
||||||
|
@Schema(description = "登陆日志摘要")
|
||||||
|
private String abstracts;
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package jnpf.model;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2021/3/16 10:10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RequestLogVO {
|
||||||
|
@Schema(description = "id")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "请求时间",example = "1")
|
||||||
|
private Long creatorTime;
|
||||||
|
@Schema(description = "请求用户名")
|
||||||
|
private String userName;
|
||||||
|
@Schema(description = "请求IP")
|
||||||
|
private String ipaddress;
|
||||||
|
@Schema(description = "请求设备")
|
||||||
|
private String platForm;
|
||||||
|
@Schema(description = "请求地址")
|
||||||
|
private String requestURL;
|
||||||
|
@Schema(description = "请求类型")
|
||||||
|
private String requestMethod;
|
||||||
|
@Schema(description = "请求耗时",example = "1")
|
||||||
|
private Long requestDuration;
|
||||||
|
}
|
@ -0,0 +1,83 @@
|
|||||||
|
package jnpf.service;
|
||||||
|
|
||||||
|
import jnpf.base.service.SuperService;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import jnpf.base.PaginationTime;
|
||||||
|
import jnpf.entity.LogEntity;
|
||||||
|
import jnpf.model.PaginationLogModel;
|
||||||
|
import jnpf.model.UserLogForm;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 系统日志
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月27日 上午9:18
|
||||||
|
*/
|
||||||
|
public interface LogService extends SuperService<LogEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表
|
||||||
|
*
|
||||||
|
* @param userLogForm
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<LogEntity> getList(UserLogForm userLogForm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表
|
||||||
|
*
|
||||||
|
* @param category 日志分类
|
||||||
|
* @param paginationTime 分页条件
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<LogEntity> getList(int category, PaginationLogModel paginationTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 信息
|
||||||
|
*
|
||||||
|
* @param id 主键值
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
LogEntity getInfo(String id);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除
|
||||||
|
* @param ids
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean delete(String[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 写入日志
|
||||||
|
*
|
||||||
|
* @param userId 用户Id
|
||||||
|
* @param userName 用户名称
|
||||||
|
* @param abstracts 摘要
|
||||||
|
*/
|
||||||
|
void writeLogAsync(String userId, String userName, String abstracts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求日志
|
||||||
|
*
|
||||||
|
* @param logEntity 实体对象
|
||||||
|
*/
|
||||||
|
void writeLogAsync(LogEntity logEntity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求日志
|
||||||
|
*/
|
||||||
|
void deleteHandleLog(String type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取操作模块名
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Set<String> queryList();
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jnpf-extend</artifactId>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<version>3.5.0-RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>jnpf-extend-biz</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-extend-entity</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-mail</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jnpf</groupId>
|
||||||
|
<artifactId>jnpf-system-biz</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- PDF -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.itextpdf</groupId>
|
||||||
|
<artifactId>itextpdf</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.itextpdf</groupId>
|
||||||
|
<artifactId>itext-asian</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,19 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import jnpf.entity.BigDataEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 大数据测试
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月26日 上午9:18
|
||||||
|
*/
|
||||||
|
public interface BigDataMapper extends SuperMapper<BigDataEntity> {
|
||||||
|
|
||||||
|
Integer maxCode();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import jnpf.entity.DocumentShareEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 知识文档
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月26日 上午9:18
|
||||||
|
*/
|
||||||
|
public interface DocumentShareMapper extends SuperMapper<DocumentShareEntity> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import jnpf.base.entity.EmailConfigEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 邮件配置
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月26日 上午9:18
|
||||||
|
*/
|
||||||
|
public interface EmailConfigMapper extends SuperMapper<EmailConfigEntity> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import jnpf.entity.EmailReceiveEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 邮件接收
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月26日 上午9:18
|
||||||
|
*/
|
||||||
|
public interface EmailReceiveMapper extends SuperMapper<EmailReceiveEntity> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package jnpf.mapper;
|
||||||
|
|
||||||
|
|
||||||
|
import jnpf.base.mapper.SuperMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import jnpf.entity.EmailSendEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 邮件发送
|
||||||
|
*
|
||||||
|
* @author JNPF开发平台组
|
||||||
|
* @version V3.1.0
|
||||||
|
* @copyright 引迈信息技术有限公司
|
||||||
|
* @date 2019年9月26日 上午9:18
|
||||||
|
*/
|
||||||
|
public interface EmailSendMapper extends SuperMapper<EmailSendEntity> {
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue