调解系统初始化版本

This commit is contained in:
gy b
2024-01-04 16:58:19 +08:00
parent 30a6a3a428
commit 04b4df2964
549 changed files with 69911 additions and 0 deletions
@@ -0,0 +1,51 @@
package com.ruoyi.bestsign.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ArbitrSignatuVO {
/**
* 用户帐号
* 任务id
* 文件MD5
* 文件内容
* 文件总页数
* 文件名称
* 文件类型
* 合同标题
* 有效期
* 合同编号
* 签署者账号
* 签名位置页码
* x坐标
* y坐标
*/
private String account;
private String taskId;
private String fileMd5;
private String fileData;
private String filePages;
private String fileName;
private String fileType;
private String contractTitle;
private String periodValidity;
private String contractNum;
private String signerAccout;
private String pageNumSigner;
private String pageNumSignerX;
private String pageNumSignerY;
}
@@ -0,0 +1,22 @@
package com.ruoyi.bestsign.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CredentialVO {
/**
* 用户证件号
*/
private String identity;
/**
* 用户证件类型
* 默认用“0”, "0"表示身份证,会校验18位身份证号格式。0-居民身份证; 1-护照;6-社会保障卡; B-港澳居民往来内地通行证; C-台湾居民来往大陆通行证; E-户口簿; F-临时居民身份证;P-外国人永久居留证;Z-其他证件
*/
private String identityType;
}
@@ -0,0 +1,29 @@
package com.ruoyi.bestsign.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PersonRegisterVO {
/**
* 用户帐号
* 用户名称
* 用户类型
* 用户邮箱
* 用户手机号
* 用户证件信息对象
* 是否申请证书
*/
private String account;
private String name;
private String userType;
private String mail;
private String mobile;
private CredentialVO credential;
private String applyCert;
}
@@ -0,0 +1,12 @@
package com.ruoyi.bestsign.service;
import com.ruoyi.bestsign.domain.ArbitrSignatuVO;
import com.ruoyi.common.core.domain.AjaxResult;
public interface ArbitrSignatuService {
AjaxResult selectApplyStatus(ArbitrSignatuVO arbitrSignatuVO);
}
@@ -0,0 +1,18 @@
package com.ruoyi.bestsign.service;
import com.ruoyi.bestsign.domain.PersonRegisterVO;
import com.ruoyi.common.core.domain.AjaxResult;
public interface SignRegisterService {
/**
* 注册上上签个人用户
*
* @param personRegisterVO
* @return
*/
AjaxResult registerPerson(PersonRegisterVO personRegisterVO);
/**
* 查询用户认证状态/user/async/applyCert/status/
*/
AjaxResult queryRegisterStatus(PersonRegisterVO personRegisterVO);
}
@@ -0,0 +1,29 @@
package com.ruoyi.bestsign.service.impl;
import com.ruoyi.bestsign.domain.ArbitrSignatuVO;
import com.ruoyi.bestsign.service.ArbitrSignatuService;
import com.ruoyi.bestsign.utils.BestsignOpenApiClient;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ArbitrSignatuServiceImpl implements ArbitrSignatuService {
@Autowired
BestsignOpenApiClient bestsignOpenApiClient;
@Override
public AjaxResult selectApplyStatus(ArbitrSignatuVO arbitrSignatuVO) {
String strRespon = "";
try {
strRespon = bestsignOpenApiClient.selectApplyStatus(arbitrSignatuVO.getAccount(),
arbitrSignatuVO.getTaskId());
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
return AjaxResult.success(strRespon);
}
}
@@ -0,0 +1,63 @@
package com.ruoyi.bestsign.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.bestsign.domain.PersonRegisterVO;
import com.ruoyi.bestsign.service.SignRegisterService;
import com.ruoyi.bestsign.utils.BestsignOpenApiClient;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RegisterServiceImpl implements SignRegisterService {
@Autowired
BestsignOpenApiClient bestsignOpenApiClient;
/**
* 注册上上签个人用户
*
* @param personRegisterVO
* @return
*/
@Override
public AjaxResult registerPerson(PersonRegisterVO personRegisterVO) {
try {
JSONObject jsonObject = bestsignOpenApiClient.userPersonalReg(personRegisterVO.getAccount(),
personRegisterVO.getName(),
personRegisterVO.getMail(),
personRegisterVO.getMobile(),
personRegisterVO.getCredential().getIdentity(),
personRegisterVO.getCredential().getIdentityType(),
null, null, null, null, null, "/user/reg/");
AjaxResult.success(jsonObject);
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
return AjaxResult.success();
}
/**
* 查询用户认证状态/user/async/applyCert/status/
*
* @param personRegisterVO
*/
@Override
public AjaxResult queryRegisterStatus(PersonRegisterVO personRegisterVO) {
try {
JSONObject jsonObject = bestsignOpenApiClient.userPersonalReg(personRegisterVO.getAccount(),
personRegisterVO.getName(),
personRegisterVO.getMail(),
personRegisterVO.getMobile(),
personRegisterVO.getCredential().getIdentity(),
personRegisterVO.getCredential().getIdentityType(),
null, null, null, null, null, "/user/async/applyCert/status/");
AjaxResult.success(jsonObject);
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
return AjaxResult.success();
}
}
@@ -0,0 +1,286 @@
package com.ruoyi.bestsign.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.bestsign.domain.ArbitrSignatuVO;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotNull;
import java.io.IOException;
/**
* 上上签混合云SDK客户端
*/
@Component
@Data
@Slf4j
public class BestsignOpenApiClient {
/**
* 开发者id
*/
@Value("${ssq.developerId}")
private String developerId;
/**
* 开发者私钥
*/
@Value("${ssq.privateKey}")
private String privateKey;
/**
* Host地址
*/
@Value("${ssq.serverHost}")
private String serverHost;
/**
* 签名参数
*/
private static String urlSignParams = "?developerId=%s&rtick=%s&signType=rsa&sign=%s";
// public BestsignOpenApiClient(String developerId, String privateKey,
// String serverHost) {
// this.developerId = developerIds;
// this.privateKey = privateKey;
// this.serverHost = serverHost;
// }
/**
* POST方法示例
* 个人用户注册
*
* @param account 用户账号
* @param name 姓名
* @param mail 用来接收通知邮件的电子邮箱
* @param mobile 用来接收通知短信的手机号码
* @param identity 证件号码
* @param identityType 枚举值:0-身份证,目前仅支持身份证
* @param contactMail 电子邮箱
* @param contactMobile 手机号码
* @param province 省份
* @param city 城市
* @param address 地址
* @param method 地址
* @return 异步申请任务单号
* @throws IOException
*/
public JSONObject userPersonalReg(String account, String name, String mail,
String mobile, String identity, String identityType,
String contactMail, String contactMobile, String province,
String city, String address, @NotNull String method) throws Exception {
//body参数
JSONObject requestBody = new JSONObject();
//用户帐号
requestBody.put("account", account);
//用户名称
requestBody.put("name", name);
//用户类型
requestBody.put("userType", "1");
//用户邮箱
requestBody.put("mail", mail);
//用户手机号
requestBody.put("mobile", mobile);
//用户证件信息对象
JSONObject credential = new JSONObject();
//用户证件号
credential.put("identity", identity);
//用户证件类型
credential.put("identityType", identityType);
requestBody.put("credential", credential);
//是否申请证书
requestBody.put("applyCert", "1");
// 生成一个时间戳参数
String rtick = RSAUtils.getRtick();
// 计算参数签名
String paramsSign = RSAUtils.calcRsaSign(this.developerId,
this.privateKey, this.serverHost, method, rtick, null,
requestBody.toJSONString());
// 签名参数追加为url参数
String fullUrlParams = String.format(urlSignParams, this.developerId,
rtick, paramsSign);
// 发送POST请求
String responseBody = HttpClientSender.sendHttpPost(this.serverHost, method,
fullUrlParams, requestBody.toJSONString());
System.out.println(responseBody);
// 返回结果解析
JSONObject userObj = JSON.parseObject(responseBody);
System.out.println(JSON.toJSONString(userObj));
return userObj;
// 返回errno为0,表示成功,其他表示失败
// if (userObj.getIntValue("errno") == 0) {
// JSONObject data = userObj.getJSONObject("data");
// if (data != null) {
// //对返回data进行处理
// String taskId = data.getString("taskId");
// return taskId;
// }
// return null;
// } else {
// //接口返回异常
// System.out.println(userObj.getIntValue("errno"));
// System.out.println(userObj.getString("errmsg"));
// throw new Exception(userObj.getIntValue("errno") + ":"
// + userObj.getString("errmsg"));
// }
}
/**
* GET方法示例
* 下载合同PDF文件
*
* @param contractId 合同编号
* @return
* @throws Exception
*/
public byte[] contractDownload(String contractId) throws Exception {
String host = this.serverHost;
String method = "/storage/contract/download/";
// 组装url参数
String urlParams = "contractId=" + contractId;
// 生成一个时间戳参数
String rtick = RSAUtils.getRtick();
// 计算参数签名
String paramsSign = RSAUtils.calcRsaSign(this.developerId,
this.privateKey, host, method, rtick, urlParams, null);
// 签名参数追加为url参数
urlParams = String.format(urlSignParams, this.developerId, rtick,
paramsSign) + "&" + urlParams;
// 发送请求
byte[] responseBody = HttpClientSender.sendHttpGet(host, method,
urlParams);
// 返回结果解析
return responseBody;
}
public String selectApplyStatus(String account, String taskId) throws Exception {
String methodInvoke = "/user/async/applyCert/status/";
JSONObject requestParam = new JSONObject();
//用户账号
requestParam.put("account", account);
//任务单号
requestParam.put("taskId", taskId);
String timestamsParam = RSAUtils.getRtick();
// 计算参数签名
String paramsSign = RSAUtils.calcRsaSign(this.developerId,
this.privateKey, this.serverHost, methodInvoke, timestamsParam, null,
requestParam.toJSONString());
// 签名参数追加为url参数
String fullUrlParams = String.format(urlSignParams, this.developerId,
timestamsParam, paramsSign);
String responseResult = HttpClientSender.sendHttpPost(this.serverHost, methodInvoke,
fullUrlParams, requestParam.toJSONString());
JSONObject responseObj = JSON.parseObject(responseResult);
// 返回errno为0,表示成功,其他表示失败
if (responseObj.getIntValue("errno") == 0) {
JSONObject data = responseObj.getJSONObject("data");
if (data != null) {
String message = data.getString("message");
String status = data.getString("status");
return status;
}
} else {
log.error("查询申请状态异常:" + responseObj.toJSONString());
}
return responseObj.toJSONString();
}
/**
* 获取签署链接
*
* @param arbitrSignatuVO
* @return
* @throws Exception
*/
public String getSignLink(ArbitrSignatuVO arbitrSignatuVO) throws Exception {
String methodInvoke = "/contract/send/";
JSONObject requestParam = new JSONObject();
requestParam.put("contractId", arbitrSignatuVO.getContractNum());
requestParam.put("signer", arbitrSignatuVO.getSignerAccout());
JSONArray signatureArray = new JSONArray();
JSONObject signatuItem = new JSONObject();
signatuItem.put("pageNum", arbitrSignatuVO.getPageNumSigner());
//x坐标
signatuItem.put("x", arbitrSignatuVO.getPageNumSignerX());
//y坐标
signatuItem.put("y", arbitrSignatuVO.getPageNumSignerY());
signatureArray.add(signatuItem);
requestParam.put("signaturePositions", signatureArray);
String timestamsParam = RSAUtils.getRtick();
// 计算参数签名
String paramsSign = RSAUtils.calcRsaSign(this.developerId,
this.privateKey, this.serverHost, methodInvoke, timestamsParam, null,
requestParam.toJSONString());
// 签名参数追加为url参数
String fullUrlParams = String.format(urlSignParams, this.developerId,
timestamsParam, paramsSign);
String responseResult = HttpClientSender.sendHttpPost(this.serverHost, methodInvoke,
fullUrlParams, requestParam.toJSONString());
JSONObject responseObj = JSON.parseObject(responseResult);
// 返回errno为0,表示成功,其他表示失败
if (responseObj.getIntValue("errno") == 0) {
JSONObject data = responseObj.getJSONObject("data");
if (data != null) {
String signLink = data.getString("url");
return signLink;
}
} else {
log.error("获取签署链接异常:" + responseObj.toJSONString());
}
return responseObj.toJSONString();
}
/**
* 完成签署
*
* @param arbitrSignatuVO
* @return
* @throws Exception
*/
public String finishSign(ArbitrSignatuVO arbitrSignatuVO) throws Exception {
String methodInvoke = "/storage/contract/lock/";
JSONObject requestParam = new JSONObject();
requestParam.put("contractId", arbitrSignatuVO.getContractNum());
String timestamsParam = RSAUtils.getRtick();
// 计算参数签名
String paramsSign = RSAUtils.calcRsaSign(this.developerId,
this.privateKey, this.serverHost, methodInvoke, timestamsParam, null,
requestParam.toJSONString());
// 签名参数追加为url参数
String fullUrlParams = String.format(urlSignParams, this.developerId,
timestamsParam, paramsSign);
String responseResult = HttpClientSender.sendHttpPost(this.serverHost, methodInvoke,
fullUrlParams, requestParam.toJSONString());
JSONObject responseObj = JSON.parseObject(responseResult);
// 返回errno为0,表示成功,其他表示失败
if (responseObj.getIntValue("errno") == 0) {
return "完成签名";
} else {
log.error("完成签署异常:" + responseObj.toJSONString());
}
return responseObj.toJSONString();
}
}
@@ -0,0 +1,390 @@
package com.ruoyi.bestsign.utils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
public class HttpClientSender {
private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = null;
private static Map<String, CloseableHttpClient> httpClients = new HashMap<String, CloseableHttpClient>();
private static Object o = new Object();
public static String sendHttpPost(String host, String method, String urlParams, String sendData) throws IOException {
String requestUrl = host + method + urlParams;
Map<String, Object> response = request("POST", requestUrl, sendData, null);
int responseCode = Integer.parseInt(response.get("responseCode").toString());
byte[] responseBytes = (byte[]) response.get("responseData");
String responseString;
try {
responseString = new String(responseBytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
responseString = new String(responseBytes);
}
//请求返回结果无论成功失败,http-status均为200
if (responseCode == 200) {
//返回结果
return responseString;
} else {
throw new IOException(responseCode + ":" + responseString);
}
}
public static byte[] sendHttpGet(String host, String method, String urlParams) throws IOException {
String requestUrl = host + method + urlParams;
Map<String, Object> response = request("GET", requestUrl, null, null);
int responseCode = Integer.parseInt(response.get("responseCode").toString());
byte[] responseBytes = (byte[]) response.get("responseData");
//请求返回结果无论成功失败,http-status均为200
if (responseCode == 200) {
//返回结果
return responseBytes;
} else {
throw new IOException(responseCode + "");
}
}
public static String urlencode(String data) {
return urlencode(data, "UTF-8");
}
public static String urlencode(String data, String charset) {
try {
return URLEncoder.encode(data, charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public static Map<String, Object> request(String method, String url, Object sendData, Map<String, String> headers) throws IOException {
String requestPath;
try {
requestPath = new URL(url).getPath();
} catch (MalformedURLException e) {
throw new RuntimeException(e.getMessage(), e);
}
CloseableHttpClient httpClient = getHttpClient(requestPath);
Map<String, Object> response = null;
if ("POST".equals(method)) {
response = sendPost(httpClient, url, headers, sendData);
} else {
response = sendGet(httpClient, url, headers);
}
return response;
}
private static Map<String, Object> sendPost(CloseableHttpClient httpClient, String url, Map<String, String> headers, Object sendData) throws IOException {
String tag = "[HttpRequester] [POST " + url + "]";
int responseCode = -1;
byte[] responseBytes = null;
HttpPost request = new HttpPost(url);
if (headers != null && headers.size() > 0) {
for (String name : headers.keySet()) {
String value = headers.get(name);
request.setHeader(name, value);
}
}
if (sendData != null) {
StringEntity stringEntity = new StringEntity((String) sendData, "UTF-8");
stringEntity.setContentType("application/json");
request.setEntity(stringEntity);
HttpEntity httpEntity = null;
IOException exception = null;
for (int i = 0; i < 3; i++) {
try {
CloseableHttpResponse response = httpClient.execute(request);
responseCode = response.getStatusLine().getStatusCode();
httpEntity = response.getEntity();
String responseBody = EntityUtils.toString(httpEntity, "utf-8");
if (responseBody != null) {
responseBytes = responseBody.getBytes();
} else {
InputStream respStream = null;
try {
respStream = httpEntity.getContent();
int respBodySize = respStream.available();
if (respBodySize <= 0)
throw new IOException("Invalid respBodySize: " + respBodySize);
responseBytes = new byte[respBodySize];
if (respStream.read(responseBytes) != respBodySize)
throw new IOException("Read respBody Error");
} catch (Exception e) {
} finally {
if (respStream != null) {
respStream.close();
}
}
}
exception = null;
break;
} catch (UnsupportedOperationException e) {
try {
EntityUtils.consume(httpEntity);
} catch (IOException e2) {
}
throw new RuntimeException(e.getMessage(), e);
} catch (IOException e) {
e.printStackTrace();
exception = e;
try {
EntityUtils.consume(httpEntity);
} catch (IOException e2) {
}
if (i < 2) {
try {
Thread.sleep(5);
} catch (InterruptedException e2) {
}
}
}
}
if (exception != null) {
throw exception;
}
}
Map<String, Object> response = new HashMap<String, Object>();
response.put("responseCode", responseCode);
response.put("responseData", responseBytes);
String loggerResponseString = getLoggerString(responseBytes, 256);
return response;
}
private static Map<String, Object> sendGet(CloseableHttpClient httpClient, String url, Map<String, String> headers) throws IOException {
String tag = "[HttpRequester] [GET " + url + "]";
int responseCode = -1;
byte[] responseBytes = null;
HttpGet request = new HttpGet(url);
if (headers != null && headers.size() > 0) {
for (String name : headers.keySet()) {
String value = headers.get(name);
request.setHeader(name, value);
}
}
HttpEntity httpEntity = null;
IOException exception = null;
for (int i = 0; i < 3; i++) {
try {
CloseableHttpResponse response = httpClient.execute(request);
responseCode = response.getStatusLine().getStatusCode();
httpEntity = response.getEntity();
byte[] responseBody = EntityUtils.toByteArray(httpEntity);
if (responseBody != null) {
responseBytes = responseBody;
} else {
InputStream respStream = null;
try {
respStream = httpEntity.getContent();
int respBodySize = respStream.available();
if (respBodySize <= 0)
throw new IOException("Invalid respBodySize: " + respBodySize);
responseBytes = new byte[respBodySize];
if (respStream.read(responseBytes) != respBodySize)
throw new IOException("Read respBody Error");
} catch (Exception e) {
} finally {
if (respStream != null) {
respStream.close();
}
}
}
exception = null;
break;
} catch (UnsupportedOperationException e) {
try {
EntityUtils.consume(httpEntity);
} catch (IOException e2) {
}
throw new RuntimeException(e.getMessage(), e);
} catch (IOException e) {
e.printStackTrace();
exception = e;
try {
EntityUtils.consume(httpEntity);
} catch (IOException e2) {
}
if (i < 2) {
try {
Thread.sleep(5);
} catch (InterruptedException e2) {
}
}
}
}
if (exception != null) {
throw exception;
}
Map<String, Object> response = new HashMap<String, Object>();
response.put("responseCode", responseCode);
response.put("responseData", responseBytes);
String loggerResponseString = getLoggerString(responseBytes, 256);
System.out.println(tag + " response " + responseCode + " " + loggerResponseString);
return response;
}
private static String getLoggerString(final byte[] data, int maxLength) {
String loggerString;
if (data.length > maxLength) {
byte[] shortData = new byte[maxLength];
System.arraycopy(data, 0, shortData, 0, shortData.length);
try {
loggerString = new String(shortData, "UTF-8") + "...";
} catch (UnsupportedEncodingException e) {
loggerString = new String(shortData) + "...";
}
} else {
try {
loggerString = new String(data, "UTF-8");
} catch (UnsupportedEncodingException e) {
loggerString = new String(data);
}
}
char[] chars = new char[loggerString.length()];
loggerString.getChars(0, loggerString.length(), chars, 0);
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == '\n' || c == '\r') {
chars[i] = ' ';
}
}
return new String(chars);
}
private static CloseableHttpClient getHttpClient(String requestPath) {
if (httpClients.containsKey(requestPath)) {
return httpClients.get(requestPath);
}
if (poolingHttpClientConnectionManager == null) {
synchronized (o) {
if (poolingHttpClientConnectionManager == null) {
poolingHttpClientConnectionManager = HttpClientUtils.createHttpClientConnectionManager();
}
}
}
synchronized (httpClients) {
if (httpClients.containsKey(requestPath)) {
return httpClients.get(requestPath);
}
CloseableHttpClient httpClient = HttpClientUtils.createHttpClient(poolingHttpClientConnectionManager);
httpClients.put(requestPath, httpClient);
return httpClient;
}
}
private static class HttpClientUtils {
// 默认连接超时
private static int defaultConnectTimeout = 6000;
// 默认读取超时
private static int defaultReadTimeout = 30000;
public static CloseableHttpClient createHttpClient(PoolingHttpClientConnectionManager connManager) {
//HttpHost httpHost = new HttpHost("10.211.55.4", 8888);
CloseableHttpClient httpClient = HttpClients.custom()
//.setProxy(httpHost)
.setConnectionManager(connManager)
.disableContentCompression()
.setSSLContext(getSslcontext())
.setDefaultRequestConfig(getRequestConfig())
.build();
return httpClient;
}
public static PoolingHttpClientConnectionManager createHttpClientConnectionManager() {
SSLConnectionSocketFactory sslConnectionSocketFactory = null;
try {
sslConnectionSocketFactory = new SSLConnectionSocketFactory(getSslcontext(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("https", sslConnectionSocketFactory)
.register("http", new PlainConnectionSocketFactory())
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
cm.setMaxTotal(500);
cm.setDefaultMaxPerRoute(500);
return cm;
}
private static RequestConfig getRequestConfig() {
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(defaultConnectTimeout)
.setSocketTimeout(defaultReadTimeout)
.build();
return defaultRequestConfig;
}
private static SSLContext getSslcontext() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLS");
TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sslContext.init(null, new TrustManager[]{tm}, null);
} catch (Exception e) {
e.printStackTrace();
}
return sslContext;
}
}
}
@@ -0,0 +1,281 @@
package com.ruoyi.bestsign.utils;
import org.apache.commons.codec.binary.Base64;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
/**
* 参数签名算法工具类
*/
public class RSAUtils {
/**
* 获取当前的时间戳参数
* @return
*/
public static String getRtick(){
long timestamp = System.currentTimeMillis();
int rnd = (int)Math.random() * 1000;
String rtick = timestamp + "" + rnd;
return rtick;
}
/**
* 计算参数签名
* @param developerId 开发者ID
* @param privateKey 用户私钥
* @param host 请求的HOST地址(http://ip:port/context)
* @param methodName 请求的接口方法名
* @param rtick 时间戳参数
* @param urlParams url参数(param1=value1&param2=value2&param3=value3)
* @param requestBody request body 参数(JSON字符串)
* @return
*/
public static String calcRsaSign(String developerId, String privateKey, String host, String methodName, String rtick, String urlParams, String requestBody) {
String url = host+methodName;
Map<String, String> mySignedURLParams = new TreeMap<String, String>();
mySignedURLParams.put("developerId", developerId);
mySignedURLParams.put("rtick", rtick);
mySignedURLParams.put("signType", "rsa");
if(urlParams != null && !"".equals(urlParams)){
String[] params = urlParams.split("&");
for(String p1 : params){
String[] p2 = p1.split("=");
String key = p2[0];
String value = "";
if(p2.length == 2){
value = p2[1];
}
mySignedURLParams.put(key, value);
}
}
String requestPath;
try {
requestPath = new URL(url).getPath();
}
catch (MalformedURLException e) {
throw new RuntimeException(e.getMessage(), e);
}
StringBuilder signStringBuilder = new StringBuilder();
for (String name : mySignedURLParams.keySet()) {
String value = mySignedURLParams.get(name);
signStringBuilder.append(name);
signStringBuilder.append("=");
signStringBuilder.append(value);
}
signStringBuilder.append(requestPath);
if (requestBody != null && !"".equals(requestBody) ) {
String requestMd5 = getRequestMd5(requestBody);
signStringBuilder.append(requestMd5);
}
String signString = signStringBuilder.toString();
String rsaSign = calcRsaSign(privateKey, signString);
//rsa算出来的sign,需要urlencode
try {
rsaSign = URLEncoder.encode(rsaSign,"UTF-8");
} catch (UnsupportedEncodingException e) {
rsaSign = null;
}
return rsaSign;
}
/**
* 获取request body 的MD5
* @param requestBody
* @return
*/
private static String getRequestMd5(final String requestBody) {
byte[] data;
String newRequestBody = convertToUtf8(requestBody);
try {
data = newRequestBody.getBytes("UTF-8");
}
catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
return md5(data);
}
/**
* 计算参数RSA签名
* @param privateKey
* @param signData
* @return
*/
private static String calcRsaSign(String privateKey, final String signData) {
byte[] data;
try {
data = signData.getBytes("UTF-8");
}
catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
byte[] sign = null;
// 解密由base64编码的私钥
byte[] privateKeyBytes = base64decode(privateKey.getBytes());
// 构造PKCS8EncodedKeySpec对象
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
// KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory;
try {
keyFactory = KeyFactory.getInstance("RSA");
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage(), e);
}
// 取私钥匙对象
PrivateKey priKey;
try {
priKey = keyFactory.generatePrivate(pkcs8KeySpec);
}
catch (InvalidKeySpecException e) {
throw new RuntimeException(e.getMessage(), e);
}
// 用私钥对信息生成数字签名
Signature signature;
try {
signature = Signature.getInstance("SHA1withRSA");
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage(), e);
}
try {
signature.initSign(priKey);
}
catch (InvalidKeyException e) {
throw new RuntimeException(e.getMessage(), e);
}
try {
signature.update(data);
sign = signature.sign();
}
catch (SignatureException e) {
throw new RuntimeException(e.getMessage(), e);
}
return new String(base64encode(sign));
}
/**
* 转换字符集到utf8
*
* @param src
* @return
*/
private static String convertToUtf8(String src) {
if (src == null || src.length() == 0) {
return src;
}
if ("UTF-8".equalsIgnoreCase(Charset.defaultCharset().name())) {
return src;
}
byte[] srcData = src.getBytes();
try {
return new String(srcData, "UTF-8");
}
catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
/**
* md5
* @param data
* @return
*/
public static String md5(byte[] data) {
char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
byte[] btInput = data;
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst;
try {
mdInst = MessageDigest.getInstance("MD5");
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage(), e);
}
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
/**
* base64编码
* @param data
* @return
*/
public static byte[] base64encode(byte[] data) {
return Base64.encodeBase64(data);
}
/**
* base64编码字符串
* @param data
* @return
*/
public static String base64encodeString(byte[] data) {
return Base64.encodeBase64String(data);
}
/**
* base64解码
* @param data
* @return
*/
public static byte[] base64decode(byte[] data) {
try {
return Base64.decodeBase64(data);
} catch (Exception e) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
for (int i = 0; i < data.length; i++) {
byte c = data[i];
if (c == 13 || c == 10) {
continue;
}
outputStream.write(c);
}
try {
outputStream.close();
} catch (IOException e2) {
}
data = outputStream.toByteArray();
return Base64.decodeBase64(data);
}
}
}
@@ -0,0 +1,81 @@
package com.ruoyi.system.domain;
import com.ruoyi.common.utils.StringUtils;
/**
* 缓存信息
*
* @author ruoyi
*/
public class SysCache
{
/** 缓存名称 */
private String cacheName = "";
/** 缓存键名 */
private String cacheKey = "";
/** 缓存内容 */
private String cacheValue = "";
/** 备注 */
private String remark = "";
public SysCache()
{
}
public SysCache(String cacheName, String remark)
{
this.cacheName = cacheName;
this.remark = remark;
}
public SysCache(String cacheName, String cacheKey, String cacheValue)
{
this.cacheName = StringUtils.replace(cacheName, ":", "");
this.cacheKey = StringUtils.replace(cacheKey, cacheName, "");
this.cacheValue = cacheValue;
}
public String getCacheName()
{
return cacheName;
}
public void setCacheName(String cacheName)
{
this.cacheName = cacheName;
}
public String getCacheKey()
{
return cacheKey;
}
public void setCacheKey(String cacheKey)
{
this.cacheKey = cacheKey;
}
public String getCacheValue()
{
return cacheValue;
}
public void setCacheValue(String cacheValue)
{
this.cacheValue = cacheValue;
}
public String getRemark()
{
return remark;
}
public void setRemark(String remark)
{
this.remark = remark;
}
}
@@ -0,0 +1,111 @@
package com.ruoyi.system.domain;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 参数配置表 sys_config
*
* @author ruoyi
*/
public class SysConfig extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 参数主键 */
@Excel(name = "参数主键", cellType = ColumnType.NUMERIC)
private Long configId;
/** 参数名称 */
@Excel(name = "参数名称")
private String configName;
/** 参数键名 */
@Excel(name = "参数键名")
private String configKey;
/** 参数键值 */
@Excel(name = "参数键值")
private String configValue;
/** 系统内置(Y是 N否) */
@Excel(name = "系统内置", readConverterExp = "Y=是,N=否")
private String configType;
public Long getConfigId()
{
return configId;
}
public void setConfigId(Long configId)
{
this.configId = configId;
}
@NotBlank(message = "参数名称不能为空")
@Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
public String getConfigName()
{
return configName;
}
public void setConfigName(String configName)
{
this.configName = configName;
}
@NotBlank(message = "参数键名长度不能为空")
@Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
public String getConfigKey()
{
return configKey;
}
public void setConfigKey(String configKey)
{
this.configKey = configKey;
}
@NotBlank(message = "参数键值不能为空")
@Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符")
public String getConfigValue()
{
return configValue;
}
public void setConfigValue(String configValue)
{
this.configValue = configValue;
}
public String getConfigType()
{
return configType;
}
public void setConfigType(String configType)
{
this.configType = configType;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("configId", getConfigId())
.append("configName", getConfigName())
.append("configKey", getConfigKey())
.append("configValue", getConfigValue())
.append("configType", getConfigType())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
@@ -0,0 +1,144 @@
package com.ruoyi.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 系统访问记录表 sys_logininfor
*
* @author ruoyi
*/
public class SysLogininfor extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** ID */
@Excel(name = "序号", cellType = ColumnType.NUMERIC)
private Long infoId;
/** 用户账号 */
@Excel(name = "用户账号")
private String userName;
/** 登录状态 0成功 1失败 */
@Excel(name = "登录状态", readConverterExp = "0=成功,1=失败")
private String status;
/** 登录IP地址 */
@Excel(name = "登录地址")
private String ipaddr;
/** 登录地点 */
@Excel(name = "登录地点")
private String loginLocation;
/** 浏览器类型 */
@Excel(name = "浏览器")
private String browser;
/** 操作系统 */
@Excel(name = "操作系统")
private String os;
/** 提示消息 */
@Excel(name = "提示消息")
private String msg;
/** 访问时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date loginTime;
public Long getInfoId()
{
return infoId;
}
public void setInfoId(Long infoId)
{
this.infoId = infoId;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getIpaddr()
{
return ipaddr;
}
public void setIpaddr(String ipaddr)
{
this.ipaddr = ipaddr;
}
public String getLoginLocation()
{
return loginLocation;
}
public void setLoginLocation(String loginLocation)
{
this.loginLocation = loginLocation;
}
public String getBrowser()
{
return browser;
}
public void setBrowser(String browser)
{
this.browser = browser;
}
public String getOs()
{
return os;
}
public void setOs(String os)
{
this.os = os;
}
public String getMsg()
{
return msg;
}
public void setMsg(String msg)
{
this.msg = msg;
}
public Date getLoginTime()
{
return loginTime;
}
public void setLoginTime(Date loginTime)
{
this.loginTime = loginTime;
}
}
@@ -0,0 +1,102 @@
package com.ruoyi.system.domain;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.xss.Xss;
/**
* 通知公告表 sys_notice
*
* @author ruoyi
*/
public class SysNotice extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 公告ID */
private Long noticeId;
/** 公告标题 */
private String noticeTitle;
/** 公告类型(1通知 2公告) */
private String noticeType;
/** 公告内容 */
private String noticeContent;
/** 公告状态(0正常 1关闭) */
private String status;
public Long getNoticeId()
{
return noticeId;
}
public void setNoticeId(Long noticeId)
{
this.noticeId = noticeId;
}
public void setNoticeTitle(String noticeTitle)
{
this.noticeTitle = noticeTitle;
}
@Xss(message = "公告标题不能包含脚本字符")
@NotBlank(message = "公告标题不能为空")
@Size(min = 0, max = 50, message = "公告标题不能超过50个字符")
public String getNoticeTitle()
{
return noticeTitle;
}
public void setNoticeType(String noticeType)
{
this.noticeType = noticeType;
}
public String getNoticeType()
{
return noticeType;
}
public void setNoticeContent(String noticeContent)
{
this.noticeContent = noticeContent;
}
public String getNoticeContent()
{
return noticeContent;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("noticeId", getNoticeId())
.append("noticeTitle", getNoticeTitle())
.append("noticeType", getNoticeType())
.append("noticeContent", getNoticeContent())
.append("status", getStatus())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
@@ -0,0 +1,269 @@
package com.ruoyi.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 操作日志记录表 oper_log
*
* @author ruoyi
*/
public class SysOperLog extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 日志主键 */
@Excel(name = "操作序号", cellType = ColumnType.NUMERIC)
private Long operId;
/** 操作模块 */
@Excel(name = "操作模块")
private String title;
/** 业务类型(0其它 1新增 2修改 3删除) */
@Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据")
private Integer businessType;
/** 业务类型数组 */
private Integer[] businessTypes;
/** 请求方法 */
@Excel(name = "请求方法")
private String method;
/** 请求方式 */
@Excel(name = "请求方式")
private String requestMethod;
/** 操作类别(0其它 1后台用户 2手机端用户) */
@Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户")
private Integer operatorType;
/** 操作人员 */
@Excel(name = "操作人员")
private String operName;
/** 部门名称 */
@Excel(name = "部门名称")
private String deptName;
/** 请求url */
@Excel(name = "请求地址")
private String operUrl;
/** 操作地址 */
@Excel(name = "操作地址")
private String operIp;
/** 操作地点 */
@Excel(name = "操作地点")
private String operLocation;
/** 请求参数 */
@Excel(name = "请求参数")
private String operParam;
/** 返回参数 */
@Excel(name = "返回参数")
private String jsonResult;
/** 操作状态(0正常 1异常) */
@Excel(name = "状态", readConverterExp = "0=正常,1=异常")
private Integer status;
/** 错误消息 */
@Excel(name = "错误消息")
private String errorMsg;
/** 操作时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date operTime;
/** 消耗时间 */
@Excel(name = "消耗时间", suffix = "毫秒")
private Long costTime;
public Long getOperId()
{
return operId;
}
public void setOperId(Long operId)
{
this.operId = operId;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public Integer getBusinessType()
{
return businessType;
}
public void setBusinessType(Integer businessType)
{
this.businessType = businessType;
}
public Integer[] getBusinessTypes()
{
return businessTypes;
}
public void setBusinessTypes(Integer[] businessTypes)
{
this.businessTypes = businessTypes;
}
public String getMethod()
{
return method;
}
public void setMethod(String method)
{
this.method = method;
}
public String getRequestMethod()
{
return requestMethod;
}
public void setRequestMethod(String requestMethod)
{
this.requestMethod = requestMethod;
}
public Integer getOperatorType()
{
return operatorType;
}
public void setOperatorType(Integer operatorType)
{
this.operatorType = operatorType;
}
public String getOperName()
{
return operName;
}
public void setOperName(String operName)
{
this.operName = operName;
}
public String getDeptName()
{
return deptName;
}
public void setDeptName(String deptName)
{
this.deptName = deptName;
}
public String getOperUrl()
{
return operUrl;
}
public void setOperUrl(String operUrl)
{
this.operUrl = operUrl;
}
public String getOperIp()
{
return operIp;
}
public void setOperIp(String operIp)
{
this.operIp = operIp;
}
public String getOperLocation()
{
return operLocation;
}
public void setOperLocation(String operLocation)
{
this.operLocation = operLocation;
}
public String getOperParam()
{
return operParam;
}
public void setOperParam(String operParam)
{
this.operParam = operParam;
}
public String getJsonResult()
{
return jsonResult;
}
public void setJsonResult(String jsonResult)
{
this.jsonResult = jsonResult;
}
public Integer getStatus()
{
return status;
}
public void setStatus(Integer status)
{
this.status = status;
}
public String getErrorMsg()
{
return errorMsg;
}
public void setErrorMsg(String errorMsg)
{
this.errorMsg = errorMsg;
}
public Date getOperTime()
{
return operTime;
}
public void setOperTime(Date operTime)
{
this.operTime = operTime;
}
public Long getCostTime()
{
return costTime;
}
public void setCostTime(Long costTime)
{
this.costTime = costTime;
}
}
@@ -0,0 +1,124 @@
package com.ruoyi.system.domain;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 岗位表 sys_post
*
* @author ruoyi
*/
public class SysPost extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 岗位序号 */
@Excel(name = "岗位序号", cellType = ColumnType.NUMERIC)
private Long postId;
/** 岗位编码 */
@Excel(name = "岗位编码")
private String postCode;
/** 岗位名称 */
@Excel(name = "岗位名称")
private String postName;
/** 岗位排序 */
@Excel(name = "岗位排序")
private Integer postSort;
/** 状态(0正常 1停用) */
@Excel(name = "状态", readConverterExp = "0=正常,1=停用")
private String status;
/** 用户是否存在此岗位标识 默认不存在 */
private boolean flag = false;
public Long getPostId()
{
return postId;
}
public void setPostId(Long postId)
{
this.postId = postId;
}
@NotBlank(message = "岗位编码不能为空")
@Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符")
public String getPostCode()
{
return postCode;
}
public void setPostCode(String postCode)
{
this.postCode = postCode;
}
@NotBlank(message = "岗位名称不能为空")
@Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符")
public String getPostName()
{
return postName;
}
public void setPostName(String postName)
{
this.postName = postName;
}
@NotNull(message = "显示顺序不能为空")
public Integer getPostSort()
{
return postSort;
}
public void setPostSort(Integer postSort)
{
this.postSort = postSort;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public boolean isFlag()
{
return flag;
}
public void setFlag(boolean flag)
{
this.flag = flag;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("postId", getPostId())
.append("postCode", getPostCode())
.append("postName", getPostName())
.append("postSort", getPostSort())
.append("status", getStatus())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
@@ -0,0 +1,46 @@
package com.ruoyi.system.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 角色和部门关联 sys_role_dept
*
* @author ruoyi
*/
public class SysRoleDept
{
/** 角色ID */
private Long roleId;
/** 部门ID */
private Long deptId;
public Long getRoleId()
{
return roleId;
}
public void setRoleId(Long roleId)
{
this.roleId = roleId;
}
public Long getDeptId()
{
return deptId;
}
public void setDeptId(Long deptId)
{
this.deptId = deptId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("roleId", getRoleId())
.append("deptId", getDeptId())
.toString();
}
}
@@ -0,0 +1,46 @@
package com.ruoyi.system.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 角色和菜单关联 sys_role_menu
*
* @author ruoyi
*/
public class SysRoleMenu
{
/** 角色ID */
private Long roleId;
/** 菜单ID */
private Long menuId;
public Long getRoleId()
{
return roleId;
}
public void setRoleId(Long roleId)
{
this.roleId = roleId;
}
public Long getMenuId()
{
return menuId;
}
public void setMenuId(Long menuId)
{
this.menuId = menuId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("roleId", getRoleId())
.append("menuId", getMenuId())
.toString();
}
}
@@ -0,0 +1,113 @@
package com.ruoyi.system.domain;
/**
* 当前在线会话
*
* @author ruoyi
*/
public class SysUserOnline
{
/** 会话编号 */
private String tokenId;
/** 部门名称 */
private String deptName;
/** 用户名称 */
private String userName;
/** 登录IP地址 */
private String ipaddr;
/** 登录地址 */
private String loginLocation;
/** 浏览器类型 */
private String browser;
/** 操作系统 */
private String os;
/** 登录时间 */
private Long loginTime;
public String getTokenId()
{
return tokenId;
}
public void setTokenId(String tokenId)
{
this.tokenId = tokenId;
}
public String getDeptName()
{
return deptName;
}
public void setDeptName(String deptName)
{
this.deptName = deptName;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getIpaddr()
{
return ipaddr;
}
public void setIpaddr(String ipaddr)
{
this.ipaddr = ipaddr;
}
public String getLoginLocation()
{
return loginLocation;
}
public void setLoginLocation(String loginLocation)
{
this.loginLocation = loginLocation;
}
public String getBrowser()
{
return browser;
}
public void setBrowser(String browser)
{
this.browser = browser;
}
public String getOs()
{
return os;
}
public void setOs(String os)
{
this.os = os;
}
public Long getLoginTime()
{
return loginTime;
}
public void setLoginTime(Long loginTime)
{
this.loginTime = loginTime;
}
}
@@ -0,0 +1,46 @@
package com.ruoyi.system.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 用户和岗位关联 sys_user_post
*
* @author ruoyi
*/
public class SysUserPost
{
/** 用户ID */
private Long userId;
/** 岗位ID */
private Long postId;
public Long getUserId()
{
return userId;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public Long getPostId()
{
return postId;
}
public void setPostId(Long postId)
{
this.postId = postId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("postId", getPostId())
.toString();
}
}
@@ -0,0 +1,46 @@
package com.ruoyi.system.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 用户和角色关联 sys_user_role
*
* @author ruoyi
*/
public class SysUserRole
{
/** 用户ID */
private Long userId;
/** 角色ID */
private Long roleId;
public Long getUserId()
{
return userId;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public Long getRoleId()
{
return roleId;
}
public void setRoleId(Long roleId)
{
this.roleId = roleId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("roleId", getRoleId())
.toString();
}
}
@@ -0,0 +1,106 @@
package com.ruoyi.system.domain.vo;
import com.ruoyi.common.utils.StringUtils;
/**
* 路由显示信息
*
* @author ruoyi
*/
public class MetaVo
{
/**
* 设置该路由在侧边栏和面包屑中展示的名字
*/
private String title;
/**
* 设置该路由的图标,对应路径src/assets/icons/svg
*/
private String icon;
/**
* 设置为true,则不会被 <keep-alive>缓存
*/
private boolean noCache;
/**
* 内链地址(http(s)://开头)
*/
private String link;
public MetaVo()
{
}
public MetaVo(String title, String icon)
{
this.title = title;
this.icon = icon;
}
public MetaVo(String title, String icon, boolean noCache)
{
this.title = title;
this.icon = icon;
this.noCache = noCache;
}
public MetaVo(String title, String icon, String link)
{
this.title = title;
this.icon = icon;
this.link = link;
}
public MetaVo(String title, String icon, boolean noCache, String link)
{
this.title = title;
this.icon = icon;
this.noCache = noCache;
if (StringUtils.ishttp(link))
{
this.link = link;
}
}
public boolean isNoCache()
{
return noCache;
}
public void setNoCache(boolean noCache)
{
this.noCache = noCache;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getIcon()
{
return icon;
}
public void setIcon(String icon)
{
this.icon = icon;
}
public String getLink()
{
return link;
}
public void setLink(String link)
{
this.link = link;
}
}
@@ -0,0 +1,148 @@
package com.ruoyi.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.List;
/**
* 路由配置信息
*
* @author ruoyi
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class RouterVo
{
/**
* 路由名字
*/
private String name;
/**
* 路由地址
*/
private String path;
/**
* 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现
*/
private boolean hidden;
/**
* 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
*/
private String redirect;
/**
* 组件地址
*/
private String component;
/**
* 路由参数:如 {"id": 1, "name": "ry"}
*/
private String query;
/**
* 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
*/
private Boolean alwaysShow;
/**
* 其他元素
*/
private MetaVo meta;
/**
* 子路由
*/
private List<RouterVo> children;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPath()
{
return path;
}
public void setPath(String path)
{
this.path = path;
}
public boolean getHidden()
{
return hidden;
}
public void setHidden(boolean hidden)
{
this.hidden = hidden;
}
public String getRedirect()
{
return redirect;
}
public void setRedirect(String redirect)
{
this.redirect = redirect;
}
public String getComponent()
{
return component;
}
public void setComponent(String component)
{
this.component = component;
}
public String getQuery()
{
return query;
}
public void setQuery(String query)
{
this.query = query;
}
public Boolean getAlwaysShow()
{
return alwaysShow;
}
public void setAlwaysShow(Boolean alwaysShow)
{
this.alwaysShow = alwaysShow;
}
public MetaVo getMeta()
{
return meta;
}
public void setMeta(MetaVo meta)
{
this.meta = meta;
}
public List<RouterVo> getChildren()
{
return children;
}
public void setChildren(List<RouterVo> children)
{
this.children = children;
}
}
@@ -0,0 +1,76 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysConfig;
/**
* 参数配置 数据层
*
* @author ruoyi
*/
public interface SysConfigMapper
{
/**
* 查询参数配置信息
*
* @param config 参数配置信息
* @return 参数配置信息
*/
public SysConfig selectConfig(SysConfig config);
/**
* 通过ID查询配置
*
* @param configId 参数ID
* @return 参数配置信息
*/
public SysConfig selectConfigById(Long configId);
/**
* 查询参数配置列表
*
* @param config 参数配置信息
* @return 参数配置集合
*/
public List<SysConfig> selectConfigList(SysConfig config);
/**
* 根据键名查询参数配置信息
*
* @param configKey 参数键名
* @return 参数配置信息
*/
public SysConfig checkConfigKeyUnique(String configKey);
/**
* 新增参数配置
*
* @param config 参数配置信息
* @return 结果
*/
public int insertConfig(SysConfig config);
/**
* 修改参数配置
*
* @param config 参数配置信息
* @return 结果
*/
public int updateConfig(SysConfig config);
/**
* 删除参数配置
*
* @param configId 参数ID
* @return 结果
*/
public int deleteConfigById(Long configId);
/**
* 批量删除参数信息
*
* @param configIds 需要删除的参数ID
* @return 结果
*/
public int deleteConfigByIds(Long[] configIds);
}
@@ -0,0 +1,127 @@
package com.ruoyi.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.common.core.domain.entity.SysDept;
/**
* 部门管理 数据层
*
* @author ruoyi
*/
public interface SysDeptMapper
{
/**
* 查询部门管理数据
*
* @param dept 部门信息
* @return 部门信息集合
*/
public List<SysDept> selectDeptList(SysDept dept);
/**
* 根据角色ID查询部门树信息
*
* @param roleId 角色ID
* @param deptCheckStrictly 部门树选择项是否关联显示
* @return 选中部门列表
*/
public List<Long> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly);
/**
* 根据部门ID查询信息
*
* @param deptId 部门ID
* @return 部门信息
*/
public SysDept selectDeptById(Long deptId);
/**
* 根据ID查询所有子部门
*
* @param deptId 部门ID
* @return 部门列表
*/
public List<SysDept> selectChildrenDeptById(Long deptId);
/**
* 根据ID查询所有子部门(正常状态)
*
* @param deptId 部门ID
* @return 子部门数
*/
public int selectNormalChildrenDeptById(Long deptId);
/**
* 是否存在子节点
*
* @param deptId 部门ID
* @return 结果
*/
public int hasChildByDeptId(Long deptId);
/**
* 查询部门是否存在用户
*
* @param deptId 部门ID
* @return 结果
*/
public int checkDeptExistUser(Long deptId);
/**
* 校验部门名称是否唯一
*
* @param deptName 部门名称
* @param parentId 父部门ID
* @return 结果
*/
public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
/**
* 新增部门信息
*
* @param dept 部门信息
* @return 结果
*/
public int insertDept(SysDept dept);
/**
* 修改部门信息
*
* @param dept 部门信息
* @return 结果
*/
public int updateDept(SysDept dept);
/**
* 修改所在部门正常状态
*
* @param deptIds 部门ID组
*/
public void updateDeptStatusNormal(Long[] deptIds);
/**
* 修改子元素关系
*
* @param depts 子元素
* @return 结果
*/
public int updateDeptChildren(@Param("depts") List<SysDept> depts);
/**
* 删除部门管理信息
*
* @param deptId 部门ID
* @return 结果
*/
public int deleteDeptById(Long deptId);
List<Long> selectUserDeptListByRoleId(@Param("roleId")Long roleId);
/**
* 批量新增
* @param sysDepts
* @return
*/
int batchSave(@Param("list")List<SysDept> sysDepts);
}
@@ -0,0 +1,95 @@
package com.ruoyi.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.common.core.domain.entity.SysDictData;
/**
* 字典表 数据层
*
* @author ruoyi
*/
public interface SysDictDataMapper
{
/**
* 根据条件分页查询字典数据
*
* @param dictData 字典数据信息
* @return 字典数据集合信息
*/
public List<SysDictData> selectDictDataList(SysDictData dictData);
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
public List<SysDictData> selectDictDataByType(String dictType);
/**
* 根据字典类型和字典键值查询字典数据信息
*
* @param dictType 字典类型
* @param dictValue 字典键值
* @return 字典标签
*/
public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);
/**
* 根据字典数据ID查询信息
*
* @param dictCode 字典数据ID
* @return 字典数据
*/
public SysDictData selectDictDataById(Long dictCode);
/**
* 查询字典数据
*
* @param dictType 字典类型
* @return 字典数据
*/
public int countDictDataByType(String dictType);
/**
* 通过字典ID删除字典数据信息
*
* @param dictCode 字典数据ID
* @return 结果
*/
public int deleteDictDataById(Long dictCode);
/**
* 批量删除字典数据信息
*
* @param dictCodes 需要删除的字典数据ID
* @return 结果
*/
public int deleteDictDataByIds(Long[] dictCodes);
/**
* 新增字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
public int insertDictData(SysDictData dictData);
/**
* 修改字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
public int updateDictData(SysDictData dictData);
/**
* 同步修改字典类型
*
* @param oldDictType 旧字典类型
* @param newDictType 新旧字典类型
* @return 结果
*/
public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
}
@@ -0,0 +1,83 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.common.core.domain.entity.SysDictType;
/**
* 字典表 数据层
*
* @author ruoyi
*/
public interface SysDictTypeMapper
{
/**
* 根据条件分页查询字典类型
*
* @param dictType 字典类型信息
* @return 字典类型集合信息
*/
public List<SysDictType> selectDictTypeList(SysDictType dictType);
/**
* 根据所有字典类型
*
* @return 字典类型集合信息
*/
public List<SysDictType> selectDictTypeAll();
/**
* 根据字典类型ID查询信息
*
* @param dictId 字典类型ID
* @return 字典类型
*/
public SysDictType selectDictTypeById(Long dictId);
/**
* 根据字典类型查询信息
*
* @param dictType 字典类型
* @return 字典类型
*/
public SysDictType selectDictTypeByType(String dictType);
/**
* 通过字典ID删除字典信息
*
* @param dictId 字典ID
* @return 结果
*/
public int deleteDictTypeById(Long dictId);
/**
* 批量删除字典类型信息
*
* @param dictIds 需要删除的字典ID
* @return 结果
*/
public int deleteDictTypeByIds(Long[] dictIds);
/**
* 新增字典类型信息
*
* @param dictType 字典类型信息
* @return 结果
*/
public int insertDictType(SysDictType dictType);
/**
* 修改字典类型信息
*
* @param dictType 字典类型信息
* @return 结果
*/
public int updateDictType(SysDictType dictType);
/**
* 校验字典类型称是否唯一
*
* @param dictType 字典类型
* @return 结果
*/
public SysDictType checkDictTypeUnique(String dictType);
}
@@ -0,0 +1,42 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysLogininfor;
/**
* 系统访问日志情况信息 数据层
*
* @author ruoyi
*/
public interface SysLogininforMapper
{
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
public void insertLogininfor(SysLogininfor logininfor);
/**
* 查询系统登录日志集合
*
* @param logininfor 访问日志对象
* @return 登录记录集合
*/
public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
/**
* 批量删除系统登录日志
*
* @param infoIds 需要删除的登录日志ID
* @return 结果
*/
public int deleteLogininforByIds(Long[] infoIds);
/**
* 清空系统登录日志
*
* @return 结果
*/
public int cleanLogininfor();
}
@@ -0,0 +1,125 @@
package com.ruoyi.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.common.core.domain.entity.SysMenu;
/**
* 菜单表 数据层
*
* @author ruoyi
*/
public interface SysMenuMapper
{
/**
* 查询系统菜单列表
*
* @param menu 菜单信息
* @return 菜单列表
*/
public List<SysMenu> selectMenuList(SysMenu menu);
/**
* 根据用户所有权限
*
* @return 权限列表
*/
public List<String> selectMenuPerms();
/**
* 根据用户查询系统菜单列表
*
* @param menu 菜单信息
* @return 菜单列表
*/
public List<SysMenu> selectMenuListByUserId(SysMenu menu);
/**
* 根据角色ID查询权限
*
* @param roleId 角色ID
* @return 权限列表
*/
public List<String> selectMenuPermsByRoleId(Long roleId);
/**
* 根据用户ID查询权限
*
* @param userId 用户ID
* @return 权限列表
*/
public List<String> selectMenuPermsByUserId(Long userId);
/**
* 根据用户ID查询菜单
*
* @return 菜单列表
*/
public List<SysMenu> selectMenuTreeAll();
/**
* 根据用户ID查询菜单
*
* @param userId 用户ID
* @return 菜单列表
*/
public List<SysMenu> selectMenuTreeByUserId(Long userId);
/**
* 根据角色ID查询菜单树信息
*
* @param roleId 角色ID
* @param menuCheckStrictly 菜单树选择项是否关联显示
* @return 选中菜单列表
*/
public List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
/**
* 根据菜单ID查询信息
*
* @param menuId 菜单ID
* @return 菜单信息
*/
public SysMenu selectMenuById(Long menuId);
/**
* 是否存在菜单子节点
*
* @param menuId 菜单ID
* @return 结果
*/
public int hasChildByMenuId(Long menuId);
/**
* 新增菜单信息
*
* @param menu 菜单信息
* @return 结果
*/
public int insertMenu(SysMenu menu);
/**
* 修改菜单信息
*
* @param menu 菜单信息
* @return 结果
*/
public int updateMenu(SysMenu menu);
/**
* 删除菜单管理信息
*
* @param menuId 菜单ID
* @return 结果
*/
public int deleteMenuById(Long menuId);
/**
* 校验菜单名称是否唯一
*
* @param menuName 菜单名称
* @param parentId 父菜单ID
* @return 结果
*/
public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
}
@@ -0,0 +1,60 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysNotice;
/**
* 通知公告表 数据层
*
* @author ruoyi
*/
public interface SysNoticeMapper
{
/**
* 查询公告信息
*
* @param noticeId 公告ID
* @return 公告信息
*/
public SysNotice selectNoticeById(Long noticeId);
/**
* 查询公告列表
*
* @param notice 公告信息
* @return 公告集合
*/
public List<SysNotice> selectNoticeList(SysNotice notice);
/**
* 新增公告
*
* @param notice 公告信息
* @return 结果
*/
public int insertNotice(SysNotice notice);
/**
* 修改公告
*
* @param notice 公告信息
* @return 结果
*/
public int updateNotice(SysNotice notice);
/**
* 批量删除公告
*
* @param noticeId 公告ID
* @return 结果
*/
public int deleteNoticeById(Long noticeId);
/**
* 批量删除公告信息
*
* @param noticeIds 需要删除的公告ID
* @return 结果
*/
public int deleteNoticeByIds(Long[] noticeIds);
}
@@ -0,0 +1,48 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysOperLog;
/**
* 操作日志 数据层
*
* @author ruoyi
*/
public interface SysOperLogMapper
{
/**
* 新增操作日志
*
* @param operLog 操作日志对象
*/
public void insertOperlog(SysOperLog operLog);
/**
* 查询系统操作日志集合
*
* @param operLog 操作日志对象
* @return 操作日志集合
*/
public List<SysOperLog> selectOperLogList(SysOperLog operLog);
/**
* 批量删除系统操作日志
*
* @param operIds 需要删除的操作日志ID
* @return 结果
*/
public int deleteOperLogByIds(Long[] operIds);
/**
* 查询操作日志详细
*
* @param operId 操作ID
* @return 操作日志对象
*/
public SysOperLog selectOperLogById(Long operId);
/**
* 清空操作日志
*/
public void cleanOperLog();
}
@@ -0,0 +1,107 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysPost;
/**
* 岗位信息 数据层
*
* @author ruoyi
*/
public interface SysPostMapper
{
/**
* 查询岗位数据集合
*
* @param post 岗位信息
* @return 岗位数据集合
*/
public List<SysPost> selectPostList(SysPost post);
/**
* 查询所有岗位
*
* @return 岗位列表
*/
public List<SysPost> selectPostAll();
/**
* 通过岗位ID查询岗位信息
*
* @param postId 岗位ID
* @return 角色对象信息
*/
public SysPost selectPostById(Long postId);
/**
* 查询岗位为经办人的岗位信息
*
* @param postCode 岗位编码
* @return 角色对象信息
*/
public SysPost selectPostByPostCode(String postCode);
/**
* 根据用户ID获取岗位选择框列表
*
* @param userId 用户ID
* @return 选中岗位ID列表
*/
public List<Long> selectPostListByUserId(Long userId);
/**
* 查询用户所属岗位组
*
* @param userName 用户名
* @return 结果
*/
public List<SysPost> selectPostsByUserName(String userName);
/**
* 删除岗位信息
*
* @param postId 岗位ID
* @return 结果
*/
public int deletePostById(Long postId);
/**
* 批量删除岗位信息
*
* @param postIds 需要删除的岗位ID
* @return 结果
*/
public int deletePostByIds(Long[] postIds);
/**
* 修改岗位信息
*
* @param post 岗位信息
* @return 结果
*/
public int updatePost(SysPost post);
/**
* 新增岗位信息
*
* @param post 岗位信息
* @return 结果
*/
public int insertPost(SysPost post);
/**
* 校验岗位名称
*
* @param postName 岗位名称
* @return 结果
*/
public SysPost checkPostNameUnique(String postName);
/**
* 校验岗位编码
*
* @param postCode 岗位编码
* @return 结果
*/
public SysPost checkPostCodeUnique(String postCode);
}
@@ -0,0 +1,44 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysRoleDept;
/**
* 角色与部门关联表 数据层
*
* @author ruoyi
*/
public interface SysRoleDeptMapper
{
/**
* 通过角色ID删除角色和部门关联
*
* @param roleId 角色ID
* @return 结果
*/
public int deleteRoleDeptByRoleId(Long roleId);
/**
* 批量删除角色部门关联信息
*
* @param ids 需要删除的数据ID
* @return 结果
*/
public int deleteRoleDept(Long[] ids);
/**
* 查询部门使用数量
*
* @param deptId 部门ID
* @return 结果
*/
public int selectCountRoleDeptByDeptId(Long deptId);
/**
* 批量新增角色部门信息
*
* @param roleDeptList 角色部门列表
* @return 结果
*/
public int batchRoleDept(List<SysRoleDept> roleDeptList);
}
@@ -0,0 +1,115 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.common.core.domain.entity.SysRole;
/**
* 角色表 数据层
*
* @author ruoyi
*/
public interface SysRoleMapper
{
/**
* 根据条件分页查询角色数据
*
* @param role 角色信息
* @return 角色数据集合信息
*/
public List<SysRole> selectRoleList(SysRole role);
/**
* 根据用户ID查询角色
*
* @param userId 用户ID
* @return 角色列表
*/
public List<SysRole> selectRolePermissionByUserId(Long userId);
/**
* 查询所有角色
*
* @return 角色列表
*/
public List<SysRole> selectRoleAll();
/**
* 根据用户ID获取角色选择框列表
*
* @param userId 用户ID
* @return 选中角色ID列表
*/
public List<Long> selectRoleListByUserId(Long userId);
/**
* 通过角色ID查询角色
*
* @param roleId 角色ID
* @return 角色对象信息
*/
public SysRole selectRoleById(Long roleId);
/**
* 根据角色名称查询角色id
* @param roleName
* @return
*/
public Long selectRoleIdByName(String roleName);
/**
* 根据用户ID查询角色
*
* @param userName 用户名
* @return 角色列表
*/
public List<SysRole> selectRolesByUserName(String userName);
/**
* 校验角色名称是否唯一
*
* @param roleName 角色名称
* @return 角色信息
*/
public SysRole checkRoleNameUnique(String roleName);
/**
* 校验角色权限是否唯一
*
* @param roleKey 角色权限
* @return 角色信息
*/
public SysRole checkRoleKeyUnique(String roleKey);
/**
* 修改角色信息
*
* @param role 角色信息
* @return 结果
*/
public int updateRole(SysRole role);
/**
* 新增角色信息
*
* @param role 角色信息
* @return 结果
*/
public int insertRole(SysRole role);
/**
* 通过角色ID删除角色
*
* @param roleId 角色ID
* @return 结果
*/
public int deleteRoleById(Long roleId);
/**
* 批量删除角色信息
*
* @param roleIds 需要删除的角色ID
* @return 结果
*/
public int deleteRoleByIds(Long[] roleIds);
}
@@ -0,0 +1,44 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysRoleMenu;
/**
* 角色与菜单关联表 数据层
*
* @author ruoyi
*/
public interface SysRoleMenuMapper
{
/**
* 查询菜单使用数量
*
* @param menuId 菜单ID
* @return 结果
*/
public int checkMenuExistRole(Long menuId);
/**
* 通过角色ID删除角色和菜单关联
*
* @param roleId 角色ID
* @return 结果
*/
public int deleteRoleMenuByRoleId(Long roleId);
/**
* 批量删除角色菜单关联信息
*
* @param ids 需要删除的数据ID
* @return 结果
*/
public int deleteRoleMenu(Long[] ids);
/**
* 批量新增角色菜单信息
*
* @param roleMenuList 角色菜单列表
* @return 结果
*/
public int batchRoleMenu(List<SysRoleMenu> roleMenuList);
}
@@ -0,0 +1,174 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.wisdomarbitrate.domain.Arbitrator;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.common.core.domain.entity.SysUser;
/**
* 用户表 数据层
*
* @author ruoyi
*/
public interface SysUserMapper
{
/**
* 根据条件分页查询用户列表
*
* @param sysUser 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectUserList(SysUser sysUser);
/**
* 查询仲裁员角色下的用户
* @return
*/
public List<SysUser> selectUserListByAdRole(Arbitrator arbitrator);
/**
* 根据条件分页查询已配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectAllocatedList(SysUser user);
/**
* 根据条件分页查询未分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectUnallocatedList(SysUser user);
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
public SysUser selectUserByUserName(String userName);
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
public SysUser selectUserById(Long userId);
/**
* 通过部门ID查询用户
*
* @param deptId 部门ID
* @return 用户对象信息
*/
public List<SysUser> selectUserByDeptId(Long deptId);
/**
* 新增用户信息
*
* @param user 用户信息
* @return 结果
*/
public int insertUser(SysUser user);
/**
* 修改用户信息
*
* @param user 用户信息
* @return 结果
*/
public int updateUser(SysUser user);
/**
* 修改用户头像
*
* @param userName 用户名
* @param avatar 头像地址
* @return 结果
*/
public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
/**
* 重置用户密码
*
* @param userName 用户名
* @param password 密码
* @return 结果
*/
public int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
/**
* 通过用户ID删除用户
*
* @param userId 用户ID
* @return 结果
*/
public int deleteUserById(Long userId);
/**
* 批量删除用户信息
*
* @param userIds 需要删除的用户ID
* @return 结果
*/
public int deleteUserByIds(Long[] userIds);
/**
* 校验用户名称是否唯一
*
* @param userName 用户名称
* @return 结果
*/
public SysUser checkUserNameUnique(String userName);
/**
* 校验手机号码是否唯一
*
* @param phonenumber 手机号码
* @return 结果
*/
public SysUser checkPhoneUnique(String phonenumber);
/**
* 校验email是否唯一
*
* @param email 用户邮箱
* @return 结果
*/
public SysUser checkEmailUnique(String email);
List<SysUser> selectUserListByIds(@Param("idList") List<Long> idList);
/**
* 根据身份证号查询用户信息
* @param identityNo
* @return
*/
SysUser selectUserByIdCard(@Param("idCard")String identityNo);
/**
* 根据手机号查询用户信息
* @param phone
* @return
*/
SysUser selectUserByPhone(@Param("phone")String phone);
/**
* 根据部门和角色查询用户
* @param applicationOrganId
* @param roleName
* @return
*/
List<SysUser> selectByDeptIdAndRole(@Param("deptId")String applicationOrganId, @Param("roleName")String roleName);
List<SysUser> selectRoleUserByDeptId(@Param("deptId")Long deptId,@Param("roleId") Long roleId );
/**
* 批量新增用户
* @param addUsers
* @return
*/
int batchSave(@Param("list")List<SysUser> addUsers);
}
@@ -0,0 +1,44 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysUserPost;
/**
* 用户与岗位关联表 数据层
*
* @author ruoyi
*/
public interface SysUserPostMapper
{
/**
* 通过用户ID删除用户和岗位关联
*
* @param userId 用户ID
* @return 结果
*/
public int deleteUserPostByUserId(Long userId);
/**
* 通过岗位ID查询岗位使用数量
*
* @param postId 岗位ID
* @return 结果
*/
public int countUserPostById(Long postId);
/**
* 批量删除用户和岗位关联
*
* @param ids 需要删除的数据ID
* @return 结果
*/
public int deleteUserPost(Long[] ids);
/**
* 批量新增用户岗位信息
*
* @param userPostList 用户角色列表
* @return 结果
*/
public int batchUserPost(List<SysUserPost> userPostList);
}
@@ -0,0 +1,62 @@
package com.ruoyi.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.system.domain.SysUserRole;
/**
* 用户与角色关联表 数据层
*
* @author ruoyi
*/
public interface SysUserRoleMapper
{
/**
* 通过用户ID删除用户和角色关联
*
* @param userId 用户ID
* @return 结果
*/
public int deleteUserRoleByUserId(Long userId);
/**
* 批量删除用户和角色关联
*
* @param ids 需要删除的数据ID
* @return 结果
*/
public int deleteUserRole(Long[] ids);
/**
* 通过角色ID查询角色使用数量
*
* @param roleId 角色ID
* @return 结果
*/
public int countUserRoleByRoleId(Long roleId);
/**
* 批量新增用户角色信息
*
* @param userRoleList 用户角色列表
* @return 结果
*/
public int batchUserRole(List<SysUserRole> userRoleList);
/**
* 删除用户和角色关联信息
*
* @param userRole 用户和角色关联信息
* @return 结果
*/
public int deleteUserRoleInfo(SysUserRole userRole);
/**
* 批量取消授权用户角色
*
* @param roleId 角色ID
* @param userIds 需要删除的用户数据ID
* @return 结果
*/
public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds);
}
@@ -0,0 +1,89 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.SysConfig;
/**
* 参数配置 服务层
*
* @author ruoyi
*/
public interface ISysConfigService
{
/**
* 查询参数配置信息
*
* @param configId 参数配置ID
* @return 参数配置信息
*/
public SysConfig selectConfigById(Long configId);
/**
* 根据键名查询参数配置信息
*
* @param configKey 参数键名
* @return 参数键值
*/
public String selectConfigByKey(String configKey);
/**
* 获取验证码开关
*
* @return true开启,false关闭
*/
public boolean selectCaptchaEnabled();
/**
* 查询参数配置列表
*
* @param config 参数配置信息
* @return 参数配置集合
*/
public List<SysConfig> selectConfigList(SysConfig config);
/**
* 新增参数配置
*
* @param config 参数配置信息
* @return 结果
*/
public int insertConfig(SysConfig config);
/**
* 修改参数配置
*
* @param config 参数配置信息
* @return 结果
*/
public int updateConfig(SysConfig config);
/**
* 批量删除参数信息
*
* @param configIds 需要删除的参数ID
*/
public void deleteConfigByIds(Long[] configIds);
/**
* 加载参数缓存数据
*/
public void loadingConfigCache();
/**
* 清空参数缓存数据
*/
public void clearConfigCache();
/**
* 重置参数缓存数据
*/
public void resetConfigCache();
/**
* 校验参数键名是否唯一
*
* @param config 参数信息
* @return 结果
*/
public boolean checkConfigKeyUnique(SysConfig config);
}
@@ -0,0 +1,124 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysDept;
/**
* 部门管理 服务层
*
* @author ruoyi
*/
public interface ISysDeptService
{
/**
* 查询部门管理数据
*
* @param dept 部门信息
* @return 部门信息集合
*/
public List<SysDept> selectDeptList(SysDept dept);
/**
* 查询部门树结构信息
*
* @param dept 部门信息
* @return 部门树信息集合
*/
public List<TreeSelect> selectDeptTreeList(SysDept dept);
/**
* 构建前端所需要树结构
*
* @param depts 部门列表
* @return 树结构列表
*/
public List<SysDept> buildDeptTree(List<SysDept> depts);
/**
* 构建前端所需要下拉树结构
*
* @param depts 部门列表
* @return 下拉树结构列表
*/
public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts);
/**
* 根据角色ID查询部门树信息
*
* @param roleId 角色ID
* @return 选中部门列表
*/
public List<Long> selectDeptListByRoleId(Long roleId);
/**
* 根据部门ID查询信息
*
* @param deptId 部门ID
* @return 部门信息
*/
public SysDept selectDeptById(Long deptId);
/**
* 根据ID查询所有子部门(正常状态)
*
* @param deptId 部门ID
* @return 子部门数
*/
public int selectNormalChildrenDeptById(Long deptId);
/**
* 是否存在部门子节点
*
* @param deptId 部门ID
* @return 结果
*/
public boolean hasChildByDeptId(Long deptId);
/**
* 查询部门是否存在用户
*
* @param deptId 部门ID
* @return 结果 true 存在 false 不存在
*/
public boolean checkDeptExistUser(Long deptId);
/**
* 校验部门名称是否唯一
*
* @param dept 部门信息
* @return 结果
*/
public boolean checkDeptNameUnique(SysDept dept);
/**
* 校验部门是否有数据权限
*
* @param deptId 部门id
*/
public void checkDeptDataScope(Long deptId);
/**
* 新增保存部门信息
*
* @param dept 部门信息
* @return 结果
*/
public int insertDept(SysDept dept);
/**
* 修改保存部门信息
*
* @param dept 部门信息
* @return 结果
*/
public int updateDept(SysDept dept);
/**
* 删除部门管理信息
*
* @param deptId 部门ID
* @return 结果
*/
public int deleteDeptById(Long deptId);
}
@@ -0,0 +1,60 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.common.core.domain.entity.SysDictData;
/**
* 字典 业务层
*
* @author ruoyi
*/
public interface ISysDictDataService
{
/**
* 根据条件分页查询字典数据
*
* @param dictData 字典数据信息
* @return 字典数据集合信息
*/
public List<SysDictData> selectDictDataList(SysDictData dictData);
/**
* 根据字典类型和字典键值查询字典数据信息
*
* @param dictType 字典类型
* @param dictValue 字典键值
* @return 字典标签
*/
public String selectDictLabel(String dictType, String dictValue);
/**
* 根据字典数据ID查询信息
*
* @param dictCode 字典数据ID
* @return 字典数据
*/
public SysDictData selectDictDataById(Long dictCode);
/**
* 批量删除字典数据信息
*
* @param dictCodes 需要删除的字典数据ID
*/
public void deleteDictDataByIds(Long[] dictCodes);
/**
* 新增保存字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
public int insertDictData(SysDictData dictData);
/**
* 修改保存字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
public int updateDictData(SysDictData dictData);
}
@@ -0,0 +1,98 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.SysDictType;
/**
* 字典 业务层
*
* @author ruoyi
*/
public interface ISysDictTypeService
{
/**
* 根据条件分页查询字典类型
*
* @param dictType 字典类型信息
* @return 字典类型集合信息
*/
public List<SysDictType> selectDictTypeList(SysDictType dictType);
/**
* 根据所有字典类型
*
* @return 字典类型集合信息
*/
public List<SysDictType> selectDictTypeAll();
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
public List<SysDictData> selectDictDataByType(String dictType);
/**
* 根据字典类型ID查询信息
*
* @param dictId 字典类型ID
* @return 字典类型
*/
public SysDictType selectDictTypeById(Long dictId);
/**
* 根据字典类型查询信息
*
* @param dictType 字典类型
* @return 字典类型
*/
public SysDictType selectDictTypeByType(String dictType);
/**
* 批量删除字典信息
*
* @param dictIds 需要删除的字典ID
*/
public void deleteDictTypeByIds(Long[] dictIds);
/**
* 加载字典缓存数据
*/
public void loadingDictCache();
/**
* 清空字典缓存数据
*/
public void clearDictCache();
/**
* 重置字典缓存数据
*/
public void resetDictCache();
/**
* 新增保存字典类型信息
*
* @param dictType 字典类型信息
* @return 结果
*/
public int insertDictType(SysDictType dictType);
/**
* 修改保存字典类型信息
*
* @param dictType 字典类型信息
* @return 结果
*/
public int updateDictType(SysDictType dictType);
/**
* 校验字典类型称是否唯一
*
* @param dictType 字典类型
* @return 结果
*/
public boolean checkDictTypeUnique(SysDictType dictType);
}
@@ -0,0 +1,40 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.SysLogininfor;
/**
* 系统访问日志情况信息 服务层
*
* @author ruoyi
*/
public interface ISysLogininforService
{
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
public void insertLogininfor(SysLogininfor logininfor);
/**
* 查询系统登录日志集合
*
* @param logininfor 访问日志对象
* @return 登录记录集合
*/
public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
/**
* 批量删除系统登录日志
*
* @param infoIds 需要删除的登录日志ID
* @return 结果
*/
public int deleteLogininforByIds(Long[] infoIds);
/**
* 清空系统登录日志
*/
public void cleanLogininfor();
}
@@ -0,0 +1,144 @@
package com.ruoyi.system.service;
import java.util.List;
import java.util.Set;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.system.domain.vo.RouterVo;
/**
* 菜单 业务层
*
* @author ruoyi
*/
public interface ISysMenuService
{
/**
* 根据用户查询系统菜单列表
*
* @param userId 用户ID
* @return 菜单列表
*/
public List<SysMenu> selectMenuList(Long userId);
/**
* 根据用户查询系统菜单列表
*
* @param menu 菜单信息
* @param userId 用户ID
* @return 菜单列表
*/
public List<SysMenu> selectMenuList(SysMenu menu, Long userId);
/**
* 根据用户ID查询权限
*
* @param userId 用户ID
* @return 权限列表
*/
public Set<String> selectMenuPermsByUserId(Long userId);
/**
* 根据角色ID查询权限
*
* @param roleId 角色ID
* @return 权限列表
*/
public Set<String> selectMenuPermsByRoleId(Long roleId);
/**
* 根据用户ID查询菜单树信息
*
* @param userId 用户ID
* @return 菜单列表
*/
public List<SysMenu> selectMenuTreeByUserId(Long userId);
/**
* 根据角色ID查询菜单树信息
*
* @param roleId 角色ID
* @return 选中菜单列表
*/
public List<Long> selectMenuListByRoleId(Long roleId);
/**
* 构建前端路由所需要的菜单
*
* @param menus 菜单列表
* @return 路由列表
*/
public List<RouterVo> buildMenus(List<SysMenu> menus);
/**
* 构建前端所需要树结构
*
* @param menus 菜单列表
* @return 树结构列表
*/
public List<SysMenu> buildMenuTree(List<SysMenu> menus);
/**
* 构建前端所需要下拉树结构
*
* @param menus 菜单列表
* @return 下拉树结构列表
*/
public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus);
/**
* 根据菜单ID查询信息
*
* @param menuId 菜单ID
* @return 菜单信息
*/
public SysMenu selectMenuById(Long menuId);
/**
* 是否存在菜单子节点
*
* @param menuId 菜单ID
* @return 结果 true 存在 false 不存在
*/
public boolean hasChildByMenuId(Long menuId);
/**
* 查询菜单是否存在角色
*
* @param menuId 菜单ID
* @return 结果 true 存在 false 不存在
*/
public boolean checkMenuExistRole(Long menuId);
/**
* 新增保存菜单信息
*
* @param menu 菜单信息
* @return 结果
*/
public int insertMenu(SysMenu menu);
/**
* 修改保存菜单信息
*
* @param menu 菜单信息
* @return 结果
*/
public int updateMenu(SysMenu menu);
/**
* 删除菜单管理信息
*
* @param menuId 菜单ID
* @return 结果
*/
public int deleteMenuById(Long menuId);
/**
* 校验菜单名称是否唯一
*
* @param menu 菜单信息
* @return 结果
*/
public boolean checkMenuNameUnique(SysMenu menu);
}
@@ -0,0 +1,60 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.SysNotice;
/**
* 公告 服务层
*
* @author ruoyi
*/
public interface ISysNoticeService
{
/**
* 查询公告信息
*
* @param noticeId 公告ID
* @return 公告信息
*/
public SysNotice selectNoticeById(Long noticeId);
/**
* 查询公告列表
*
* @param notice 公告信息
* @return 公告集合
*/
public List<SysNotice> selectNoticeList(SysNotice notice);
/**
* 新增公告
*
* @param notice 公告信息
* @return 结果
*/
public int insertNotice(SysNotice notice);
/**
* 修改公告
*
* @param notice 公告信息
* @return 结果
*/
public int updateNotice(SysNotice notice);
/**
* 删除公告信息
*
* @param noticeId 公告ID
* @return 结果
*/
public int deleteNoticeById(Long noticeId);
/**
* 批量删除公告信息
*
* @param noticeIds 需要删除的公告ID
* @return 结果
*/
public int deleteNoticeByIds(Long[] noticeIds);
}
@@ -0,0 +1,48 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.SysOperLog;
/**
* 操作日志 服务层
*
* @author ruoyi
*/
public interface ISysOperLogService
{
/**
* 新增操作日志
*
* @param operLog 操作日志对象
*/
public void insertOperlog(SysOperLog operLog);
/**
* 查询系统操作日志集合
*
* @param operLog 操作日志对象
* @return 操作日志集合
*/
public List<SysOperLog> selectOperLogList(SysOperLog operLog);
/**
* 批量删除系统操作日志
*
* @param operIds 需要删除的操作日志ID
* @return 结果
*/
public int deleteOperLogByIds(Long[] operIds);
/**
* 查询操作日志详细
*
* @param operId 操作ID
* @return 操作日志对象
*/
public SysOperLog selectOperLogById(Long operId);
/**
* 清空操作日志
*/
public void cleanOperLog();
}
@@ -0,0 +1,99 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.SysPost;
/**
* 岗位信息 服务层
*
* @author ruoyi
*/
public interface ISysPostService
{
/**
* 查询岗位信息集合
*
* @param post 岗位信息
* @return 岗位列表
*/
public List<SysPost> selectPostList(SysPost post);
/**
* 查询所有岗位
*
* @return 岗位列表
*/
public List<SysPost> selectPostAll();
/**
* 通过岗位ID查询岗位信息
*
* @param postId 岗位ID
* @return 角色对象信息
*/
public SysPost selectPostById(Long postId);
/**
* 根据用户ID获取岗位选择框列表
*
* @param userId 用户ID
* @return 选中岗位ID列表
*/
public List<Long> selectPostListByUserId(Long userId);
/**
* 校验岗位名称
*
* @param post 岗位信息
* @return 结果
*/
public boolean checkPostNameUnique(SysPost post);
/**
* 校验岗位编码
*
* @param post 岗位信息
* @return 结果
*/
public boolean checkPostCodeUnique(SysPost post);
/**
* 通过岗位ID查询岗位使用数量
*
* @param postId 岗位ID
* @return 结果
*/
public int countUserPostById(Long postId);
/**
* 删除岗位信息
*
* @param postId 岗位ID
* @return 结果
*/
public int deletePostById(Long postId);
/**
* 批量删除岗位信息
*
* @param postIds 需要删除的岗位ID
* @return 结果
*/
public int deletePostByIds(Long[] postIds);
/**
* 新增保存岗位信息
*
* @param post 岗位信息
* @return 结果
*/
public int insertPost(SysPost post);
/**
* 修改保存岗位信息
*
* @param post 岗位信息
* @return 结果
*/
public int updatePost(SysPost post);
}
@@ -0,0 +1,173 @@
package com.ruoyi.system.service;
import java.util.List;
import java.util.Set;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.system.domain.SysUserRole;
/**
* 角色业务层
*
* @author ruoyi
*/
public interface ISysRoleService
{
/**
* 根据条件分页查询角色数据
*
* @param role 角色信息
* @return 角色数据集合信息
*/
public List<SysRole> selectRoleList(SysRole role);
/**
* 根据用户ID查询角色列表
*
* @param userId 用户ID
* @return 角色列表
*/
public List<SysRole> selectRolesByUserId(Long userId);
/**
* 根据用户ID查询角色权限
*
* @param userId 用户ID
* @return 权限列表
*/
public Set<String> selectRolePermissionByUserId(Long userId);
/**
* 查询所有角色
*
* @return 角色列表
*/
public List<SysRole> selectRoleAll();
/**
* 根据用户ID获取角色选择框列表
*
* @param userId 用户ID
* @return 选中角色ID列表
*/
public List<Long> selectRoleListByUserId(Long userId);
/**
* 通过角色ID查询角色
*
* @param roleId 角色ID
* @return 角色对象信息
*/
public SysRole selectRoleById(Long roleId);
/**
* 校验角色名称是否唯一
*
* @param role 角色信息
* @return 结果
*/
public boolean checkRoleNameUnique(SysRole role);
/**
* 校验角色权限是否唯一
*
* @param role 角色信息
* @return 结果
*/
public boolean checkRoleKeyUnique(SysRole role);
/**
* 校验角色是否允许操作
*
* @param role 角色信息
*/
public void checkRoleAllowed(SysRole role);
/**
* 校验角色是否有数据权限
*
* @param roleId 角色id
*/
public void checkRoleDataScope(Long roleId);
/**
* 通过角色ID查询角色使用数量
*
* @param roleId 角色ID
* @return 结果
*/
public int countUserRoleByRoleId(Long roleId);
/**
* 新增保存角色信息
*
* @param role 角色信息
* @return 结果
*/
public int insertRole(SysRole role);
/**
* 修改保存角色信息
*
* @param role 角色信息
* @return 结果
*/
public int updateRole(SysRole role);
/**
* 修改角色状态
*
* @param role 角色信息
* @return 结果
*/
public int updateRoleStatus(SysRole role);
/**
* 修改数据权限信息
*
* @param role 角色信息
* @return 结果
*/
public int authDataScope(SysRole role);
/**
* 通过角色ID删除角色
*
* @param roleId 角色ID
* @return 结果
*/
public int deleteRoleById(Long roleId);
/**
* 批量删除角色信息
*
* @param roleIds 需要删除的角色ID
* @return 结果
*/
public int deleteRoleByIds(Long[] roleIds);
/**
* 取消授权用户角色
*
* @param userRole 用户和角色关联信息
* @return 结果
*/
public int deleteAuthUser(SysUserRole userRole);
/**
* 批量取消授权用户角色
*
* @param roleId 角色ID
* @param userIds 需要取消授权的用户数据ID
* @return 结果
*/
public int deleteAuthUsers(Long roleId, Long[] userIds);
/**
* 批量选择授权用户角色
*
* @param roleId 角色ID
* @param userIds 需要删除的用户数据ID
* @return 结果
*/
public int insertAuthUsers(Long roleId, Long[] userIds);
}
@@ -0,0 +1,48 @@
package com.ruoyi.system.service;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.system.domain.SysUserOnline;
/**
* 在线用户 服务层
*
* @author ruoyi
*/
public interface ISysUserOnlineService
{
/**
* 通过登录地址查询信息
*
* @param ipaddr 登录地址
* @param user 用户信息
* @return 在线用户信息
*/
public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user);
/**
* 通过用户名称查询信息
*
* @param userName 用户名称
* @param user 用户信息
* @return 在线用户信息
*/
public SysUserOnline selectOnlineByUserName(String userName, LoginUser user);
/**
* 通过登录地址/用户名称查询信息
*
* @param ipaddr 登录地址
* @param userName 用户名称
* @param user 用户信息
* @return 在线用户信息
*/
public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user);
/**
* 设置在线用户信息
*
* @param user 用户信息
* @return 在线用户
*/
public SysUserOnline loginUserToUserOnline(LoginUser user);
}
@@ -0,0 +1,211 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.wisdomarbitrate.domain.Arbitrator;
/**
* 用户 业务层
*
* @author ruoyi
*/
public interface ISysUserService
{
/**
* 根据条件分页查询用户列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectUserList(SysUser user);
public List<SysUser> selectUserListByAdRole(Arbitrator arbitrator);
/**
* 根据条件分页查询已分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectAllocatedList(SysUser user);
/**
* 根据条件分页查询未分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
public List<SysUser> selectUnallocatedList(SysUser user);
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
public SysUser selectUserByUserName(String userName);
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
public SysUser selectUserById(Long userId);
/**
* 根据用户ID查询用户所属角色组
*
* @param userName 用户名
* @return 结果
*/
public String selectUserRoleGroup(String userName);
/**
* 根据用户ID查询用户所属岗位组
*
* @param userName 用户名
* @return 结果
*/
public String selectUserPostGroup(String userName);
/**
* 校验用户名称是否唯一
*
* @param user 用户信息
* @return 结果
*/
public boolean checkUserNameUnique(SysUser user);
/**
* 校验手机号码是否唯一
*
* @param user 用户信息
* @return 结果
*/
public boolean checkPhoneUnique(SysUser user);
/**
* 校验email是否唯一
*
* @param user 用户信息
* @return 结果
*/
public boolean checkEmailUnique(SysUser user);
/**
* 校验用户是否允许操作
*
* @param user 用户信息
*/
public void checkUserAllowed(SysUser user);
/**
* 校验用户是否有数据权限
*
* @param userId 用户id
*/
public void checkUserDataScope(Long userId);
/**
* 新增用户信息
*
* @param user 用户信息
* @return 结果
*/
public AjaxResult insertUser(SysUser user);
/**
* 注册用户信息
*
* @param user 用户信息
* @return 结果
*/
public boolean registerUser(SysUser user);
/**
* 修改用户信息
*
* @param user 用户信息
* @return 结果
*/
public AjaxResult updateUser(SysUser user);
/**
* 用户授权角色
*
* @param userId 用户ID
* @param roleIds 角色组
*/
public void insertUserAuth(Long userId, Long[] roleIds);
/**
* 修改用户状态
*
* @param user 用户信息
* @return 结果
*/
public int updateUserStatus(SysUser user);
/**
* 修改用户基本信息
*
* @param user 用户信息
* @return 结果
*/
public int updateUserProfile(SysUser user);
/**
* 修改用户头像
*
* @param userName 用户名
* @param avatar 头像地址
* @return 结果
*/
public boolean updateUserAvatar(String userName, String avatar);
/**
* 重置用户密码
*
* @param user 用户信息
* @return 结果
*/
public int resetPwd(SysUser user);
/**
* 重置用户密码
*
* @param userName 用户名
* @param password 密码
* @return 结果
*/
public int resetUserPwd(String userName, String password);
/**
* 通过用户ID删除用户
*
* @param userId 用户ID
* @return 结果
*/
public int deleteUserById(Long userId);
/**
* 批量删除用户信息
*
* @param userIds 需要删除的用户ID
* @return 结果
*/
public int deleteUserByIds(Long[] userIds);
/**
* 导入用户数据
*
* @param userList 用户数据列表
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
* @param operName 操作用户
* @return 结果
*/
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
}
@@ -0,0 +1,232 @@
package com.ruoyi.system.service.impl;
import java.util.Collection;
import java.util.List;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
/**
* 参数配置 服务层实现
*
* @author ruoyi
*/
@Service
public class SysConfigServiceImpl implements ISysConfigService
{
@Autowired
private SysConfigMapper configMapper;
@Autowired
private RedisCache redisCache;
/**
* 项目启动时,初始化参数到缓存
*/
@PostConstruct
public void init()
{
loadingConfigCache();
}
/**
* 查询参数配置信息
*
* @param configId 参数配置ID
* @return 参数配置信息
*/
@Override
@DataSource(DataSourceType.MASTER)
public SysConfig selectConfigById(Long configId)
{
SysConfig config = new SysConfig();
config.setConfigId(configId);
return configMapper.selectConfig(config);
}
/**
* 根据键名查询参数配置信息
*
* @param configKey 参数key
* @return 参数键值
*/
@Override
public String selectConfigByKey(String configKey)
{
String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey)));
if (StringUtils.isNotEmpty(configValue))
{
return configValue;
}
SysConfig config = new SysConfig();
config.setConfigKey(configKey);
SysConfig retConfig = configMapper.selectConfig(config);
if (StringUtils.isNotNull(retConfig))
{
redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
return retConfig.getConfigValue();
}
return StringUtils.EMPTY;
}
/**
* 获取验证码开关
*
* @return true开启,false关闭
*/
@Override
public boolean selectCaptchaEnabled()
{
String captchaEnabled = selectConfigByKey("sys.account.captchaEnabled");
if (StringUtils.isEmpty(captchaEnabled))
{
return true;
}
return Convert.toBool(captchaEnabled);
}
/**
* 查询参数配置列表
*
* @param config 参数配置信息
* @return 参数配置集合
*/
@Override
public List<SysConfig> selectConfigList(SysConfig config)
{
return configMapper.selectConfigList(config);
}
/**
* 新增参数配置
*
* @param config 参数配置信息
* @return 结果
*/
@Override
public int insertConfig(SysConfig config)
{
int row = configMapper.insertConfig(config);
if (row > 0)
{
redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
}
return row;
}
/**
* 修改参数配置
*
* @param config 参数配置信息
* @return 结果
*/
@Override
public int updateConfig(SysConfig config)
{
SysConfig temp = configMapper.selectConfigById(config.getConfigId());
if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey()))
{
redisCache.deleteObject(getCacheKey(temp.getConfigKey()));
}
int row = configMapper.updateConfig(config);
if (row > 0)
{
redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
}
return row;
}
/**
* 批量删除参数信息
*
* @param configIds 需要删除的参数ID
*/
@Override
public void deleteConfigByIds(Long[] configIds)
{
for (Long configId : configIds)
{
SysConfig config = selectConfigById(configId);
if (StringUtils.equals(UserConstants.YES, config.getConfigType()))
{
throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
}
configMapper.deleteConfigById(configId);
redisCache.deleteObject(getCacheKey(config.getConfigKey()));
}
}
/**
* 加载参数缓存数据
*/
@Override
public void loadingConfigCache()
{
List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
for (SysConfig config : configsList)
{
redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
}
}
/**
* 清空参数缓存数据
*/
@Override
public void clearConfigCache()
{
Collection<String> keys = redisCache.keys(CacheConstants.SYS_CONFIG_KEY + "*");
redisCache.deleteObject(keys);
}
/**
* 重置参数缓存数据
*/
@Override
public void resetConfigCache()
{
clearConfigCache();
loadingConfigCache();
}
/**
* 校验参数键名是否唯一
*
* @param config 参数配置信息
* @return 结果
*/
@Override
public boolean checkConfigKeyUnique(SysConfig config)
{
Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 设置cache key
*
* @param configKey 参数键
* @return 缓存键key
*/
private String getCacheKey(String configKey)
{
return CacheConstants.SYS_CONFIG_KEY + configKey;
}
}
@@ -0,0 +1,341 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.service.ISysDeptService;
/**
* 部门管理 服务实现
*
* @author ruoyi
*/
@Service
public class SysDeptServiceImpl implements ISysDeptService
{
@Autowired
private SysDeptMapper deptMapper;
@Autowired
private SysRoleMapper roleMapper;
/**
* 查询部门管理数据
*
* @param dept 部门信息
* @return 部门信息集合
*/
@Override
@DataScope(deptAlias = "d")
public List<SysDept> selectDeptList(SysDept dept)
{
return deptMapper.selectDeptList(dept);
}
/**
* 查询部门树结构信息
*
* @param dept 部门信息
* @return 部门树信息集合
*/
@Override
public List<TreeSelect> selectDeptTreeList(SysDept dept)
{
List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
return buildDeptTreeSelect(depts);
}
/**
* 构建前端所需要树结构
*
* @param depts 部门列表
* @return 树结构列表
*/
@Override
public List<SysDept> buildDeptTree(List<SysDept> depts)
{
List<SysDept> returnList = new ArrayList<SysDept>();
List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
for (SysDept dept : depts)
{
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(dept.getParentId()))
{
recursionFn(depts, dept);
returnList.add(dept);
}
}
if (returnList.isEmpty())
{
returnList = depts;
}
return returnList;
}
/**
* 构建前端所需要下拉树结构
*
* @param depts 部门列表
* @return 下拉树结构列表
*/
@Override
public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts)
{
List<SysDept> deptTrees = buildDeptTree(depts);
return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
}
/**
* 根据角色ID查询部门树信息
*
* @param roleId 角色ID
* @return 选中部门列表
*/
@Override
public List<Long> selectDeptListByRoleId(Long roleId)
{
SysRole role = roleMapper.selectRoleById(roleId);
return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly());
}
/**
* 根据部门ID查询信息
*
* @param deptId 部门ID
* @return 部门信息
*/
@Override
public SysDept selectDeptById(Long deptId)
{
return deptMapper.selectDeptById(deptId);
}
/**
* 根据ID查询所有子部门(正常状态)
*
* @param deptId 部门ID
* @return 子部门数
*/
@Override
public int selectNormalChildrenDeptById(Long deptId)
{
return deptMapper.selectNormalChildrenDeptById(deptId);
}
/**
* 是否存在子节点
*
* @param deptId 部门ID
* @return 结果
*/
@Override
public boolean hasChildByDeptId(Long deptId)
{
int result = deptMapper.hasChildByDeptId(deptId);
return result > 0;
}
/**
* 查询部门是否存在用户
*
* @param deptId 部门ID
* @return 结果 true 存在 false 不存在
*/
@Override
public boolean checkDeptExistUser(Long deptId)
{
int result = deptMapper.checkDeptExistUser(deptId);
return result > 0;
}
/**
* 校验部门名称是否唯一
*
* @param dept 部门信息
* @return 结果
*/
@Override
public boolean checkDeptNameUnique(SysDept dept)
{
Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());
if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验部门是否有数据权限
*
* @param deptId 部门id
*/
@Override
public void checkDeptDataScope(Long deptId)
{
if (!SysUser.isAdmin(SecurityUtils.getUserId()))
{
SysDept dept = new SysDept();
dept.setDeptId(deptId);
List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
if (StringUtils.isEmpty(depts))
{
throw new ServiceException("没有权限访问部门数据!");
}
}
}
/**
* 新增保存部门信息
*
* @param dept 部门信息
* @return 结果
*/
@Override
public int insertDept(SysDept dept)
{
Long parentId = dept.getParentId();
if(parentId!=null){
SysDept info = deptMapper.selectDeptById(dept.getParentId());
// 如果父节点不为正常状态,则不允许新增子节点
if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
{
throw new ServiceException("部门停用,不允许新增");
}
dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
}
return deptMapper.insertDept(dept);
}
/**
* 修改保存部门信息
*
* @param dept 部门信息
* @return 结果
*/
@Override
public int updateDept(SysDept dept)
{
SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());
SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId());
if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept))
{
String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();
String oldAncestors = oldDept.getAncestors();
dept.setAncestors(newAncestors);
updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors);
}
int result = deptMapper.updateDept(dept);
if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors())
&& !StringUtils.equals("0", dept.getAncestors()))
{
// 如果该部门是启用状态,则启用该部门的所有上级部门
updateParentDeptStatusNormal(dept);
}
return result;
}
/**
* 修改该部门的父级部门状态
*
* @param dept 当前部门
*/
private void updateParentDeptStatusNormal(SysDept dept)
{
String ancestors = dept.getAncestors();
Long[] deptIds = Convert.toLongArray(ancestors);
deptMapper.updateDeptStatusNormal(deptIds);
}
/**
* 修改子元素关系
*
* @param deptId 被修改的部门ID
* @param newAncestors 新的父ID集合
* @param oldAncestors 旧的父ID集合
*/
public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors)
{
List<SysDept> children = deptMapper.selectChildrenDeptById(deptId);
for (SysDept child : children)
{
child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
}
if (children.size() > 0)
{
deptMapper.updateDeptChildren(children);
}
}
/**
* 删除部门管理信息
*
* @param deptId 部门ID
* @return 结果
*/
@Override
public int deleteDeptById(Long deptId)
{
return deptMapper.deleteDeptById(deptId);
}
/**
* 递归列表
*/
private void recursionFn(List<SysDept> list, SysDept t)
{
// 得到子节点列表
List<SysDept> childList = getChildList(list, t);
t.setChildren(childList);
for (SysDept tChild : childList)
{
if (hasChild(list, tChild))
{
recursionFn(list, tChild);
}
}
}
/**
* 得到子节点列表
*/
private List<SysDept> getChildList(List<SysDept> list, SysDept t)
{
List<SysDept> tlist = new ArrayList<SysDept>();
Iterator<SysDept> it = list.iterator();
while (it.hasNext())
{
SysDept n = (SysDept) it.next();
if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
{
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List<SysDept> list, SysDept t)
{
return getChildList(list, t).size() > 0;
}
}
@@ -0,0 +1,111 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.service.ISysDictDataService;
/**
* 字典 业务层处理
*
* @author ruoyi
*/
@Service
public class SysDictDataServiceImpl implements ISysDictDataService
{
@Autowired
private SysDictDataMapper dictDataMapper;
/**
* 根据条件分页查询字典数据
*
* @param dictData 字典数据信息
* @return 字典数据集合信息
*/
@Override
public List<SysDictData> selectDictDataList(SysDictData dictData)
{
return dictDataMapper.selectDictDataList(dictData);
}
/**
* 根据字典类型和字典键值查询字典数据信息
*
* @param dictType 字典类型
* @param dictValue 字典键值
* @return 字典标签
*/
@Override
public String selectDictLabel(String dictType, String dictValue)
{
return dictDataMapper.selectDictLabel(dictType, dictValue);
}
/**
* 根据字典数据ID查询信息
*
* @param dictCode 字典数据ID
* @return 字典数据
*/
@Override
public SysDictData selectDictDataById(Long dictCode)
{
return dictDataMapper.selectDictDataById(dictCode);
}
/**
* 批量删除字典数据信息
*
* @param dictCodes 需要删除的字典数据ID
*/
@Override
public void deleteDictDataByIds(Long[] dictCodes)
{
for (Long dictCode : dictCodes)
{
SysDictData data = selectDictDataById(dictCode);
dictDataMapper.deleteDictDataById(dictCode);
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
DictUtils.setDictCache(data.getDictType(), dictDatas);
}
}
/**
* 新增保存字典数据信息
*
* @param data 字典数据信息
* @return 结果
*/
@Override
public int insertDictData(SysDictData data)
{
int row = dictDataMapper.insertDictData(data);
if (row > 0)
{
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
DictUtils.setDictCache(data.getDictType(), dictDatas);
}
return row;
}
/**
* 修改保存字典数据信息
*
* @param data 字典数据信息
* @return 结果
*/
@Override
public int updateDictData(SysDictData data)
{
int row = dictDataMapper.updateDictData(data);
if (row > 0)
{
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
DictUtils.setDictCache(data.getDictType(), dictDatas);
}
return row;
}
}
@@ -0,0 +1,223 @@
package com.ruoyi.system.service.impl;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.SysDictType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.mapper.SysDictTypeMapper;
import com.ruoyi.system.service.ISysDictTypeService;
/**
* 字典 业务层处理
*
* @author ruoyi
*/
@Service
public class SysDictTypeServiceImpl implements ISysDictTypeService
{
@Autowired
private SysDictTypeMapper dictTypeMapper;
@Autowired
private SysDictDataMapper dictDataMapper;
/**
* 项目启动时,初始化字典到缓存
*/
@PostConstruct
public void init()
{
loadingDictCache();
}
/**
* 根据条件分页查询字典类型
*
* @param dictType 字典类型信息
* @return 字典类型集合信息
*/
@Override
public List<SysDictType> selectDictTypeList(SysDictType dictType)
{
return dictTypeMapper.selectDictTypeList(dictType);
}
/**
* 根据所有字典类型
*
* @return 字典类型集合信息
*/
@Override
public List<SysDictType> selectDictTypeAll()
{
return dictTypeMapper.selectDictTypeAll();
}
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
@Override
public List<SysDictData> selectDictDataByType(String dictType)
{
List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
if (StringUtils.isNotEmpty(dictDatas))
{
return dictDatas;
}
dictDatas = dictDataMapper.selectDictDataByType(dictType);
if (StringUtils.isNotEmpty(dictDatas))
{
DictUtils.setDictCache(dictType, dictDatas);
return dictDatas;
}
return null;
}
/**
* 根据字典类型ID查询信息
*
* @param dictId 字典类型ID
* @return 字典类型
*/
@Override
public SysDictType selectDictTypeById(Long dictId)
{
return dictTypeMapper.selectDictTypeById(dictId);
}
/**
* 根据字典类型查询信息
*
* @param dictType 字典类型
* @return 字典类型
*/
@Override
public SysDictType selectDictTypeByType(String dictType)
{
return dictTypeMapper.selectDictTypeByType(dictType);
}
/**
* 批量删除字典类型信息
*
* @param dictIds 需要删除的字典ID
*/
@Override
public void deleteDictTypeByIds(Long[] dictIds)
{
for (Long dictId : dictIds)
{
SysDictType dictType = selectDictTypeById(dictId);
if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
{
throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
}
dictTypeMapper.deleteDictTypeById(dictId);
DictUtils.removeDictCache(dictType.getDictType());
}
}
/**
* 加载字典缓存数据
*/
@Override
public void loadingDictCache()
{
SysDictData dictData = new SysDictData();
dictData.setStatus("0");
Map<String, List<SysDictData>> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet())
{
DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
}
}
/**
* 清空字典缓存数据
*/
@Override
public void clearDictCache()
{
DictUtils.clearDictCache();
}
/**
* 重置字典缓存数据
*/
@Override
public void resetDictCache()
{
clearDictCache();
loadingDictCache();
}
/**
* 新增保存字典类型信息
*
* @param dict 字典类型信息
* @return 结果
*/
@Override
public int insertDictType(SysDictType dict)
{
int row = dictTypeMapper.insertDictType(dict);
if (row > 0)
{
DictUtils.setDictCache(dict.getDictType(), null);
}
return row;
}
/**
* 修改保存字典类型信息
*
* @param dict 字典类型信息
* @return 结果
*/
@Override
@Transactional
public int updateDictType(SysDictType dict)
{
SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType());
int row = dictTypeMapper.updateDictType(dict);
if (row > 0)
{
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
DictUtils.setDictCache(dict.getDictType(), dictDatas);
}
return row;
}
/**
* 校验字典类型称是否唯一
*
* @param dict 字典类型
* @return 结果
*/
@Override
public boolean checkDictTypeUnique(SysDictType dict)
{
Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
}
@@ -0,0 +1,65 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.SysLogininfor;
import com.ruoyi.system.mapper.SysLogininforMapper;
import com.ruoyi.system.service.ISysLogininforService;
/**
* 系统访问日志情况信息 服务层处理
*
* @author ruoyi
*/
@Service
public class SysLogininforServiceImpl implements ISysLogininforService
{
@Autowired
private SysLogininforMapper logininforMapper;
/**
* 新增系统登录日志
*
* @param logininfor 访问日志对象
*/
@Override
public void insertLogininfor(SysLogininfor logininfor)
{
logininforMapper.insertLogininfor(logininfor);
}
/**
* 查询系统登录日志集合
*
* @param logininfor 访问日志对象
* @return 登录记录集合
*/
@Override
public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor)
{
return logininforMapper.selectLogininforList(logininfor);
}
/**
* 批量删除系统登录日志
*
* @param infoIds 需要删除的登录日志ID
* @return 结果
*/
@Override
public int deleteLogininforByIds(Long[] infoIds)
{
return logininforMapper.deleteLogininforByIds(infoIds);
}
/**
* 清空系统登录日志
*/
@Override
public void cleanLogininfor()
{
logininforMapper.cleanLogininfor();
}
}
@@ -0,0 +1,531 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.vo.MetaVo;
import com.ruoyi.system.domain.vo.RouterVo;
import com.ruoyi.system.mapper.SysMenuMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import com.ruoyi.system.service.ISysMenuService;
/**
* 菜单 业务层处理
*
* @author ruoyi
*/
@Service
public class SysMenuServiceImpl implements ISysMenuService
{
public static final String PREMISSION_STRING = "perms[\"{0}\"]";
@Autowired
private SysMenuMapper menuMapper;
@Autowired
private SysRoleMapper roleMapper;
@Autowired
private SysRoleMenuMapper roleMenuMapper;
/**
* 根据用户查询系统菜单列表
*
* @param userId 用户ID
* @return 菜单列表
*/
@Override
public List<SysMenu> selectMenuList(Long userId)
{
return selectMenuList(new SysMenu(), userId);
}
/**
* 查询系统菜单列表
*
* @param menu 菜单信息
* @return 菜单列表
*/
@Override
public List<SysMenu> selectMenuList(SysMenu menu, Long userId)
{
List<SysMenu> menuList = null;
// 管理员显示所有菜单信息
if (SysUser.isAdmin(userId))
{
menuList = menuMapper.selectMenuList(menu);
}
else
{
menu.getParams().put("userId", userId);
menuList = menuMapper.selectMenuListByUserId(menu);
}
return menuList;
}
/**
* 根据用户ID查询权限
*
* @param userId 用户ID
* @return 权限列表
*/
@Override
public Set<String> selectMenuPermsByUserId(Long userId)
{
List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
Set<String> permsSet = new HashSet<>();
for (String perm : perms)
{
if (StringUtils.isNotEmpty(perm))
{
permsSet.addAll(Arrays.asList(perm.trim().split(",")));
}
}
return permsSet;
}
/**
* 根据角色ID查询权限
*
* @param roleId 角色ID
* @return 权限列表
*/
@Override
public Set<String> selectMenuPermsByRoleId(Long roleId)
{
List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId);
Set<String> permsSet = new HashSet<>();
for (String perm : perms)
{
if (StringUtils.isNotEmpty(perm))
{
permsSet.addAll(Arrays.asList(perm.trim().split(",")));
}
}
return permsSet;
}
/**
* 根据用户ID查询菜单
*
* @param userId 用户名称
* @return 菜单列表
*/
@Override
public List<SysMenu> selectMenuTreeByUserId(Long userId)
{
List<SysMenu> menus = null;
if (SecurityUtils.isAdmin(userId))
{
menus = menuMapper.selectMenuTreeAll();
}
else
{
menus = menuMapper.selectMenuTreeByUserId(userId);
}
return getChildPerms(menus, 0);
}
/**
* 根据角色ID查询菜单树信息
*
* @param roleId 角色ID
* @return 选中菜单列表
*/
@Override
public List<Long> selectMenuListByRoleId(Long roleId)
{
SysRole role = roleMapper.selectRoleById(roleId);
return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
}
/**
* 构建前端路由所需要的菜单
*
* @param menus 菜单列表
* @return 路由列表
*/
@Override
public List<RouterVo> buildMenus(List<SysMenu> menus)
{
List<RouterVo> routers = new LinkedList<RouterVo>();
for (SysMenu menu : menus)
{
RouterVo router = new RouterVo();
router.setHidden("1".equals(menu.getVisible()));
router.setName(getRouteName(menu));
router.setPath(getRouterPath(menu));
router.setComponent(getComponent(menu));
router.setQuery(menu.getQuery());
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
List<SysMenu> cMenus = menu.getChildren();
if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
{
router.setAlwaysShow(true);
router.setRedirect("noRedirect");
router.setChildren(buildMenus(cMenus));
}
else if (isMenuFrame(menu))
{
router.setMeta(null);
List<RouterVo> childrenList = new ArrayList<RouterVo>();
RouterVo children = new RouterVo();
children.setPath(menu.getPath());
children.setComponent(menu.getComponent());
children.setName(StringUtils.capitalize(menu.getPath()));
children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
children.setQuery(menu.getQuery());
childrenList.add(children);
router.setChildren(childrenList);
}
else if (menu.getParentId().intValue() == 0 && isInnerLink(menu))
{
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
router.setPath("/");
List<RouterVo> childrenList = new ArrayList<RouterVo>();
RouterVo children = new RouterVo();
String routerPath = innerLinkReplaceEach(menu.getPath());
children.setPath(routerPath);
children.setComponent(UserConstants.INNER_LINK);
children.setName(StringUtils.capitalize(routerPath));
children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath()));
childrenList.add(children);
router.setChildren(childrenList);
}
routers.add(router);
}
return routers;
}
/**
* 构建前端所需要树结构
*
* @param menus 菜单列表
* @return 树结构列表
*/
@Override
public List<SysMenu> buildMenuTree(List<SysMenu> menus)
{
List<SysMenu> returnList = new ArrayList<SysMenu>();
List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
{
SysMenu menu = (SysMenu) iterator.next();
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(menu.getParentId()))
{
recursionFn(menus, menu);
returnList.add(menu);
}
}
if (returnList.isEmpty())
{
returnList = menus;
}
return returnList;
}
/**
* 构建前端所需要下拉树结构
*
* @param menus 菜单列表
* @return 下拉树结构列表
*/
@Override
public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
{
List<SysMenu> menuTrees = buildMenuTree(menus);
return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
}
/**
* 根据菜单ID查询信息
*
* @param menuId 菜单ID
* @return 菜单信息
*/
@Override
public SysMenu selectMenuById(Long menuId)
{
return menuMapper.selectMenuById(menuId);
}
/**
* 是否存在菜单子节点
*
* @param menuId 菜单ID
* @return 结果
*/
@Override
public boolean hasChildByMenuId(Long menuId)
{
int result = menuMapper.hasChildByMenuId(menuId);
return result > 0;
}
/**
* 查询菜单使用数量
*
* @param menuId 菜单ID
* @return 结果
*/
@Override
public boolean checkMenuExistRole(Long menuId)
{
int result = roleMenuMapper.checkMenuExistRole(menuId);
return result > 0;
}
/**
* 新增保存菜单信息
*
* @param menu 菜单信息
* @return 结果
*/
@Override
public int insertMenu(SysMenu menu)
{
return menuMapper.insertMenu(menu);
}
/**
* 修改保存菜单信息
*
* @param menu 菜单信息
* @return 结果
*/
@Override
public int updateMenu(SysMenu menu)
{
return menuMapper.updateMenu(menu);
}
/**
* 删除菜单管理信息
*
* @param menuId 菜单ID
* @return 结果
*/
@Override
public int deleteMenuById(Long menuId)
{
return menuMapper.deleteMenuById(menuId);
}
/**
* 校验菜单名称是否唯一
*
* @param menu 菜单信息
* @return 结果
*/
@Override
public boolean checkMenuNameUnique(SysMenu menu)
{
Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 获取路由名称
*
* @param menu 菜单信息
* @return 路由名称
*/
public String getRouteName(SysMenu menu)
{
String routerName = StringUtils.capitalize(menu.getPath());
// 非外链并且是一级目录(类型为目录)
if (isMenuFrame(menu))
{
routerName = StringUtils.EMPTY;
}
return routerName;
}
/**
* 获取路由地址
*
* @param menu 菜单信息
* @return 路由地址
*/
public String getRouterPath(SysMenu menu)
{
String routerPath = menu.getPath();
// 内链打开外网方式
if (menu.getParentId().intValue() != 0 && isInnerLink(menu))
{
routerPath = innerLinkReplaceEach(routerPath);
}
// 非外链并且是一级目录(类型为目录)
if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
&& UserConstants.NO_FRAME.equals(menu.getIsFrame()))
{
routerPath = "/" + menu.getPath();
}
// 非外链并且是一级目录(类型为菜单)
else if (isMenuFrame(menu))
{
routerPath = "/";
}
return routerPath;
}
/**
* 获取组件信息
*
* @param menu 菜单信息
* @return 组件信息
*/
public String getComponent(SysMenu menu)
{
String component = UserConstants.LAYOUT;
if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu))
{
component = menu.getComponent();
}
else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu))
{
component = UserConstants.INNER_LINK;
}
else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))
{
component = UserConstants.PARENT_VIEW;
}
return component;
}
/**
* 是否为菜单内部跳转
*
* @param menu 菜单信息
* @return 结果
*/
public boolean isMenuFrame(SysMenu menu)
{
return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
&& menu.getIsFrame().equals(UserConstants.NO_FRAME);
}
/**
* 是否为内链组件
*
* @param menu 菜单信息
* @return 结果
*/
public boolean isInnerLink(SysMenu menu)
{
return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath());
}
/**
* 是否为parent_view组件
*
* @param menu 菜单信息
* @return 结果
*/
public boolean isParentView(SysMenu menu)
{
return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
}
/**
* 根据父节点的ID获取所有子节点
*
* @param list 分类表
* @param parentId 传入的父节点ID
* @return String
*/
public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
{
List<SysMenu> returnList = new ArrayList<SysMenu>();
for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
{
SysMenu t = (SysMenu) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getParentId() == parentId)
{
recursionFn(list, t);
returnList.add(t);
}
}
return returnList;
}
/**
* 递归列表
*
* @param list 分类表
* @param t 子节点
*/
private void recursionFn(List<SysMenu> list, SysMenu t)
{
// 得到子节点列表
List<SysMenu> childList = getChildList(list, t);
t.setChildren(childList);
for (SysMenu tChild : childList)
{
if (hasChild(list, tChild))
{
recursionFn(list, tChild);
}
}
}
/**
* 得到子节点列表
*/
private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
{
List<SysMenu> tlist = new ArrayList<SysMenu>();
Iterator<SysMenu> it = list.iterator();
while (it.hasNext())
{
SysMenu n = (SysMenu) it.next();
if (n.getParentId().longValue() == t.getMenuId().longValue())
{
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List<SysMenu> list, SysMenu t)
{
return getChildList(list, t).size() > 0;
}
/**
* 内链域名特殊字符替换
*
* @return 替换后的内链域名
*/
public String innerLinkReplaceEach(String path)
{
return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, "." },
new String[] { "", "", "", "/" });
}
}
@@ -0,0 +1,92 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.mapper.SysNoticeMapper;
import com.ruoyi.system.service.ISysNoticeService;
/**
* 公告 服务层实现
*
* @author ruoyi
*/
@Service
public class SysNoticeServiceImpl implements ISysNoticeService
{
@Autowired
private SysNoticeMapper noticeMapper;
/**
* 查询公告信息
*
* @param noticeId 公告ID
* @return 公告信息
*/
@Override
public SysNotice selectNoticeById(Long noticeId)
{
return noticeMapper.selectNoticeById(noticeId);
}
/**
* 查询公告列表
*
* @param notice 公告信息
* @return 公告集合
*/
@Override
public List<SysNotice> selectNoticeList(SysNotice notice)
{
return noticeMapper.selectNoticeList(notice);
}
/**
* 新增公告
*
* @param notice 公告信息
* @return 结果
*/
@Override
public int insertNotice(SysNotice notice)
{
return noticeMapper.insertNotice(notice);
}
/**
* 修改公告
*
* @param notice 公告信息
* @return 结果
*/
@Override
public int updateNotice(SysNotice notice)
{
return noticeMapper.updateNotice(notice);
}
/**
* 删除公告对象
*
* @param noticeId 公告ID
* @return 结果
*/
@Override
public int deleteNoticeById(Long noticeId)
{
return noticeMapper.deleteNoticeById(noticeId);
}
/**
* 批量删除公告信息
*
* @param noticeIds 需要删除的公告ID
* @return 结果
*/
@Override
public int deleteNoticeByIds(Long[] noticeIds)
{
return noticeMapper.deleteNoticeByIds(noticeIds);
}
}
@@ -0,0 +1,76 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.system.mapper.SysOperLogMapper;
import com.ruoyi.system.service.ISysOperLogService;
/**
* 操作日志 服务层处理
*
* @author ruoyi
*/
@Service
public class SysOperLogServiceImpl implements ISysOperLogService
{
@Autowired
private SysOperLogMapper operLogMapper;
/**
* 新增操作日志
*
* @param operLog 操作日志对象
*/
@Override
public void insertOperlog(SysOperLog operLog)
{
operLogMapper.insertOperlog(operLog);
}
/**
* 查询系统操作日志集合
*
* @param operLog 操作日志对象
* @return 操作日志集合
*/
@Override
public List<SysOperLog> selectOperLogList(SysOperLog operLog)
{
return operLogMapper.selectOperLogList(operLog);
}
/**
* 批量删除系统操作日志
*
* @param operIds 需要删除的操作日志ID
* @return 结果
*/
@Override
public int deleteOperLogByIds(Long[] operIds)
{
return operLogMapper.deleteOperLogByIds(operIds);
}
/**
* 查询操作日志详细
*
* @param operId 操作ID
* @return 操作日志对象
*/
@Override
public SysOperLog selectOperLogById(Long operId)
{
return operLogMapper.selectOperLogById(operId);
}
/**
* 清空操作日志
*/
@Override
public void cleanOperLog()
{
operLogMapper.cleanOperLog();
}
}
@@ -0,0 +1,178 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.mapper.SysPostMapper;
import com.ruoyi.system.mapper.SysUserPostMapper;
import com.ruoyi.system.service.ISysPostService;
/**
* 岗位信息 服务层处理
*
* @author ruoyi
*/
@Service
public class SysPostServiceImpl implements ISysPostService
{
@Autowired
private SysPostMapper postMapper;
@Autowired
private SysUserPostMapper userPostMapper;
/**
* 查询岗位信息集合
*
* @param post 岗位信息
* @return 岗位信息集合
*/
@Override
public List<SysPost> selectPostList(SysPost post)
{
return postMapper.selectPostList(post);
}
/**
* 查询所有岗位
*
* @return 岗位列表
*/
@Override
public List<SysPost> selectPostAll()
{
return postMapper.selectPostAll();
}
/**
* 通过岗位ID查询岗位信息
*
* @param postId 岗位ID
* @return 角色对象信息
*/
@Override
public SysPost selectPostById(Long postId)
{
return postMapper.selectPostById(postId);
}
/**
* 根据用户ID获取岗位选择框列表
*
* @param userId 用户ID
* @return 选中岗位ID列表
*/
@Override
public List<Long> selectPostListByUserId(Long userId)
{
return postMapper.selectPostListByUserId(userId);
}
/**
* 校验岗位名称是否唯一
*
* @param post 岗位信息
* @return 结果
*/
@Override
public boolean checkPostNameUnique(SysPost post)
{
Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
SysPost info = postMapper.checkPostNameUnique(post.getPostName());
if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验岗位编码是否唯一
*
* @param post 岗位信息
* @return 结果
*/
@Override
public boolean checkPostCodeUnique(SysPost post)
{
Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
SysPost info = postMapper.checkPostCodeUnique(post.getPostCode());
if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 通过岗位ID查询岗位使用数量
*
* @param postId 岗位ID
* @return 结果
*/
@Override
public int countUserPostById(Long postId)
{
return userPostMapper.countUserPostById(postId);
}
/**
* 删除岗位信息
*
* @param postId 岗位ID
* @return 结果
*/
@Override
public int deletePostById(Long postId)
{
return postMapper.deletePostById(postId);
}
/**
* 批量删除岗位信息
*
* @param postIds 需要删除的岗位ID
* @return 结果
*/
@Override
public int deletePostByIds(Long[] postIds)
{
for (Long postId : postIds)
{
SysPost post = selectPostById(postId);
if (countUserPostById(postId) > 0)
{
throw new ServiceException(String.format("%1$s已分配,不能删除", post.getPostName()));
}
}
return postMapper.deletePostByIds(postIds);
}
/**
* 新增保存岗位信息
*
* @param post 岗位信息
* @return 结果
*/
@Override
public int insertPost(SysPost post)
{
return postMapper.insertPost(post);
}
/**
* 修改保存岗位信息
*
* @param post 岗位信息
* @return 结果
*/
@Override
public int updatePost(SysPost post)
{
return postMapper.updatePost(post);
}
}
@@ -0,0 +1,424 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysRoleDept;
import com.ruoyi.system.domain.SysRoleMenu;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysRoleDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysRoleService;
/**
* 角色 业务层处理
*
* @author ruoyi
*/
@Service
public class SysRoleServiceImpl implements ISysRoleService
{
@Autowired
private SysRoleMapper roleMapper;
@Autowired
private SysRoleMenuMapper roleMenuMapper;
@Autowired
private SysUserRoleMapper userRoleMapper;
@Autowired
private SysRoleDeptMapper roleDeptMapper;
/**
* 根据条件分页查询角色数据
*
* @param role 角色信息
* @return 角色数据集合信息
*/
@Override
@DataScope(deptAlias = "d")
public List<SysRole> selectRoleList(SysRole role)
{
return roleMapper.selectRoleList(role);
}
/**
* 根据用户ID查询角色
*
* @param userId 用户ID
* @return 角色列表
*/
@Override
public List<SysRole> selectRolesByUserId(Long userId)
{
List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId);
List<SysRole> roles = selectRoleAll();
for (SysRole role : roles)
{
for (SysRole userRole : userRoles)
{
if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
{
role.setFlag(true);
break;
}
}
}
return roles;
}
/**
* 根据用户ID查询权限
*
* @param userId 用户ID
* @return 权限列表
*/
@Override
public Set<String> selectRolePermissionByUserId(Long userId)
{
List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
Set<String> permsSet = new HashSet<>();
for (SysRole perm : perms)
{
if (StringUtils.isNotNull(perm))
{
permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
}
}
return permsSet;
}
/**
* 查询所有角色
*
* @return 角色列表
*/
@Override
public List<SysRole> selectRoleAll()
{
return SpringUtils.getAopProxy(this).selectRoleList(new SysRole());
}
/**
* 根据用户ID获取角色选择框列表
*
* @param userId 用户ID
* @return 选中角色ID列表
*/
@Override
public List<Long> selectRoleListByUserId(Long userId)
{
return roleMapper.selectRoleListByUserId(userId);
}
/**
* 通过角色ID查询角色
*
* @param roleId 角色ID
* @return 角色对象信息
*/
@Override
public SysRole selectRoleById(Long roleId)
{
return roleMapper.selectRoleById(roleId);
}
/**
* 校验角色名称是否唯一
*
* @param role 角色信息
* @return 结果
*/
@Override
public boolean checkRoleNameUnique(SysRole role)
{
Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName());
if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验角色权限是否唯一
*
* @param role 角色信息
* @return 结果
*/
@Override
public boolean checkRoleKeyUnique(SysRole role)
{
Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey());
if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验角色是否允许操作
*
* @param role 角色信息
*/
@Override
public void checkRoleAllowed(SysRole role)
{
if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin())
{
throw new ServiceException("不允许操作超级管理员角色");
}
}
/**
* 校验角色是否有数据权限
*
* @param roleId 角色id
*/
@Override
public void checkRoleDataScope(Long roleId)
{
if (!SysUser.isAdmin(SecurityUtils.getUserId()))
{
SysRole role = new SysRole();
role.setRoleId(roleId);
List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role);
if (StringUtils.isEmpty(roles))
{
throw new ServiceException("没有权限访问角色数据!");
}
}
}
/**
* 通过角色ID查询角色使用数量
*
* @param roleId 角色ID
* @return 结果
*/
@Override
public int countUserRoleByRoleId(Long roleId)
{
return userRoleMapper.countUserRoleByRoleId(roleId);
}
/**
* 新增保存角色信息
*
* @param role 角色信息
* @return 结果
*/
@Override
@Transactional
public int insertRole(SysRole role)
{
// 新增角色信息
roleMapper.insertRole(role);
return insertRoleMenu(role);
}
/**
* 修改保存角色信息
*
* @param role 角色信息
* @return 结果
*/
@Override
@Transactional
public int updateRole(SysRole role)
{
// 修改角色信息
roleMapper.updateRole(role);
// 删除角色与菜单关联
roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
return insertRoleMenu(role);
}
/**
* 修改角色状态
*
* @param role 角色信息
* @return 结果
*/
@Override
public int updateRoleStatus(SysRole role)
{
return roleMapper.updateRole(role);
}
/**
* 修改数据权限信息
*
* @param role 角色信息
* @return 结果
*/
@Override
@Transactional
public int authDataScope(SysRole role)
{
// 修改角色信息
roleMapper.updateRole(role);
// 删除角色与部门关联
roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId());
// 新增角色和部门信息(数据权限)
return insertRoleDept(role);
}
/**
* 新增角色菜单信息
*
* @param role 角色对象
*/
public int insertRoleMenu(SysRole role)
{
int rows = 1;
// 新增用户与角色管理
List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
for (Long menuId : role.getMenuIds())
{
SysRoleMenu rm = new SysRoleMenu();
rm.setRoleId(role.getRoleId());
rm.setMenuId(menuId);
list.add(rm);
}
if (list.size() > 0)
{
rows = roleMenuMapper.batchRoleMenu(list);
}
return rows;
}
/**
* 新增角色部门信息(数据权限)
*
* @param role 角色对象
*/
public int insertRoleDept(SysRole role)
{
int rows = 1;
// 新增角色与部门(数据权限)管理
List<SysRoleDept> list = new ArrayList<SysRoleDept>();
for (Long deptId : role.getDeptIds())
{
SysRoleDept rd = new SysRoleDept();
rd.setRoleId(role.getRoleId());
rd.setDeptId(deptId);
list.add(rd);
}
if (list.size() > 0)
{
rows = roleDeptMapper.batchRoleDept(list);
}
return rows;
}
/**
* 通过角色ID删除角色
*
* @param roleId 角色ID
* @return 结果
*/
@Override
@Transactional
public int deleteRoleById(Long roleId)
{
// 删除角色与菜单关联
roleMenuMapper.deleteRoleMenuByRoleId(roleId);
// 删除角色与部门关联
roleDeptMapper.deleteRoleDeptByRoleId(roleId);
return roleMapper.deleteRoleById(roleId);
}
/**
* 批量删除角色信息
*
* @param roleIds 需要删除的角色ID
* @return 结果
*/
@Override
@Transactional
public int deleteRoleByIds(Long[] roleIds)
{
for (Long roleId : roleIds)
{
checkRoleAllowed(new SysRole(roleId));
checkRoleDataScope(roleId);
SysRole role = selectRoleById(roleId);
if (countUserRoleByRoleId(roleId) > 0)
{
throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName()));
}
}
// 删除角色与菜单关联
roleMenuMapper.deleteRoleMenu(roleIds);
// 删除角色与部门关联
roleDeptMapper.deleteRoleDept(roleIds);
return roleMapper.deleteRoleByIds(roleIds);
}
/**
* 取消授权用户角色
*
* @param userRole 用户和角色关联信息
* @return 结果
*/
@Override
public int deleteAuthUser(SysUserRole userRole)
{
return userRoleMapper.deleteUserRoleInfo(userRole);
}
/**
* 批量取消授权用户角色
*
* @param roleId 角色ID
* @param userIds 需要取消授权的用户数据ID
* @return 结果
*/
@Override
public int deleteAuthUsers(Long roleId, Long[] userIds)
{
return userRoleMapper.deleteUserRoleInfos(roleId, userIds);
}
/**
* 批量选择授权用户角色
*
* @param roleId 角色ID
* @param userIds 需要授权的用户数据ID
* @return 结果
*/
@Override
public int insertAuthUsers(Long roleId, Long[] userIds)
{
// 新增用户与角色管理
List<SysUserRole> list = new ArrayList<SysUserRole>();
for (Long userId : userIds)
{
SysUserRole ur = new SysUserRole();
ur.setUserId(userId);
ur.setRoleId(roleId);
list.add(ur);
}
return userRoleMapper.batchUserRole(list);
}
}
@@ -0,0 +1,96 @@
package com.ruoyi.system.service.impl;
import org.springframework.stereotype.Service;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.service.ISysUserOnlineService;
/**
* 在线用户 服务层处理
*
* @author ruoyi
*/
@Service
public class SysUserOnlineServiceImpl implements ISysUserOnlineService
{
/**
* 通过登录地址查询信息
*
* @param ipaddr 登录地址
* @param user 用户信息
* @return 在线用户信息
*/
@Override
public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user)
{
if (StringUtils.equals(ipaddr, user.getIpaddr()))
{
return loginUserToUserOnline(user);
}
return null;
}
/**
* 通过用户名称查询信息
*
* @param userName 用户名称
* @param user 用户信息
* @return 在线用户信息
*/
@Override
public SysUserOnline selectOnlineByUserName(String userName, LoginUser user)
{
if (StringUtils.equals(userName, user.getUsername()))
{
return loginUserToUserOnline(user);
}
return null;
}
/**
* 通过登录地址/用户名称查询信息
*
* @param ipaddr 登录地址
* @param userName 用户名称
* @param user 用户信息
* @return 在线用户信息
*/
@Override
public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
{
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
{
return loginUserToUserOnline(user);
}
return null;
}
/**
* 设置在线用户信息
*
* @param user 用户信息
* @return 在线用户
*/
@Override
public SysUserOnline loginUserToUserOnline(LoginUser user)
{
if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser()))
{
return null;
}
SysUserOnline sysUserOnline = new SysUserOnline();
sysUserOnline.setTokenId(user.getToken());
sysUserOnline.setUserName(user.getUsername());
sysUserOnline.setIpaddr(user.getIpaddr());
sysUserOnline.setLoginLocation(user.getLoginLocation());
sysUserOnline.setBrowser(user.getBrowser());
sysUserOnline.setOs(user.getOs());
sysUserOnline.setLoginTime(user.getLoginTime());
if (StringUtils.isNotNull(user.getUser().getDept()))
{
sysUserOnline.setDeptName(user.getUser().getDept().getDeptName());
}
return sysUserOnline;
}
}
@@ -0,0 +1,558 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.validation.Validator;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.system.mapper.*;
import com.ruoyi.wisdomarbitrate.domain.Arbitrator;
import com.ruoyi.wisdomarbitrate.mapper.CaseApplicationMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanValidators;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
/**
* 用户 业务层处理
*
* @author ruoyi
*/
@Service
public class SysUserServiceImpl implements ISysUserService {
private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
@Autowired
private SysUserMapper userMapper;
@Autowired
private SysRoleMapper roleMapper;
@Autowired
private SysDeptMapper sysDeptMapper;
@Autowired
private SysPostMapper postMapper;
@Autowired
private SysUserRoleMapper userRoleMapper;
@Autowired
private SysUserPostMapper userPostMapper;
@Autowired
private ISysConfigService configService;
@Autowired
private CaseApplicationMapper caseApplicationMapper;
@Autowired
protected Validator validator;
/**
* 根据条件分页查询用户列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user) {
return userMapper.selectUserList(user);
}
@Override
public List<SysUser> selectUserListByAdRole(Arbitrator arbitrator) {
List<SysUser> sysUsers = userMapper.selectUserListByAdRole(arbitrator);
if(sysUsers!=null&&sysUsers.size()>0){
for(SysUser sysUser: sysUsers){
Long userId = sysUser.getUserId();
int casenum = caseApplicationMapper.selectCasenum(userId.toString());
String nickName = sysUser.getNickName();
String nickNamenew = nickName + "(待办案件数量" + casenum + "个)";
sysUser.setNickNameAndNum(nickNamenew);
}
}
return sysUsers;
}
/**
* 根据条件分页查询已分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectAllocatedList(SysUser user) {
return userMapper.selectAllocatedList(user);
}
/**
* 根据条件分页查询未分配用户角色列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUnallocatedList(SysUser user) {
return userMapper.selectUnallocatedList(user);
}
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
@Override
public SysUser selectUserByUserName(String userName) {
return userMapper.selectUserByUserName(userName);
}
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
@Override
public SysUser selectUserById(Long userId) {
return userMapper.selectUserById(userId);
}
/**
* 查询用户所属角色组
*
* @param userName 用户名
* @return 结果
*/
@Override
public String selectUserRoleGroup(String userName) {
List<SysRole> list = roleMapper.selectRolesByUserName(userName);
if (CollectionUtils.isEmpty(list)) {
return StringUtils.EMPTY;
}
return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
}
/**
* 查询用户所属岗位组
*
* @param userName 用户名
* @return 结果
*/
@Override
public String selectUserPostGroup(String userName) {
List<SysPost> list = postMapper.selectPostsByUserName(userName);
if (CollectionUtils.isEmpty(list)) {
return StringUtils.EMPTY;
}
return list.stream().map(SysPost::getPostName).collect(Collectors.joining(","));
}
/**
* 校验用户名称是否唯一
*
* @param user 用户信息
* @return 结果
*/
@Override
public boolean checkUserNameUnique(SysUser user) {
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkUserNameUnique(user.getUserName());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验手机号码是否唯一
*
* @param user 用户信息
* @return
*/
@Override
public boolean checkPhoneUnique(SysUser user) {
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验email是否唯一
*
* @param user 用户信息
* @return
*/
@Override
public boolean checkEmailUnique(SysUser user) {
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkEmailUnique(user.getEmail());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 校验用户是否允许操作
*
* @param user 用户信息
*/
@Override
public void checkUserAllowed(SysUser user) {
if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
throw new ServiceException("不允许操作超级管理员用户");
}
}
/**
* 校验用户是否有数据权限
*
* @param userId 用户id
*/
@Override
public void checkUserDataScope(Long userId) {
if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
SysUser user = new SysUser();
user.setUserId(userId);
List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
if (StringUtils.isEmpty(users)) {
throw new ServiceException("没有权限访问用户数据!");
}
}
}
/**
* 新增保存用户信息
*
* @param user 用户信息
* @return 结果
*/
@Override
@Transactional
public AjaxResult insertUser(SysUser user) {
Long deptId = user.getDeptId();
Long[] postIds = user.getPostIds();
if (deptId != null) {
SysDept dept = sysDeptMapper.selectDeptById(deptId);
Integer deptType = dept.getDeptType();
if (deptType!=null && deptType.intValue() == 1) {
SysPost sysPost = postMapper.selectPostByPostCode("jbr");
Long postId = sysPost.getPostId();
if (postIds.length > 0) {
boolean isContain = Arrays.asList(postIds).contains(postId);
if (isContain) {
List<SysUser> sysUsers = userMapper.selectUserByDeptId(deptId);
if (sysUsers != null && sysUsers.size() > 0) {
return AjaxResult.error("部门类型为仲裁机构的部门的岗位为经办人的用户只能有一个!");
}
}
}
}
}
// 新增用户信息
int rows = userMapper.insertUser(user);
// 新增用户岗位关联
insertUserPost(user);
// 新增用户与角色管理
insertUserRole(user);
return AjaxResult.success("新建用户成功");
}
/**
* 注册用户信息
*
* @param user 用户信息
* @return 结果
*/
@Override
public boolean registerUser(SysUser user) {
return userMapper.insertUser(user) > 0;
}
/**
* 修改保存用户信息
*
* @param user 用户信息
* @return 结果
*/
@Override
@Transactional
public AjaxResult updateUser(SysUser user) {
Long deptId = user.getDeptId();
Long[] postIds = user.getPostIds();
if (deptId != null) {
SysDept dept = sysDeptMapper.selectDeptById(deptId);
Integer deptType = dept.getDeptType();
if (deptType != null && deptType.intValue() == 1) {
SysPost sysPost = postMapper.selectPostByPostCode("jbr");
Long postId = sysPost.getPostId();
if (postIds.length > 0) {
boolean isContain = Arrays.asList(postIds).contains(postId);
if (isContain) {
List<SysUser> sysUsers = userMapper.selectUserByDeptId(deptId);
if (sysUsers != null && sysUsers.size() > 0) {
return AjaxResult.error("部门类型为仲裁机构的部门的岗位为经办人的用户只能有一个!");
}
}
}
}
}
Long userId = user.getUserId();
// 删除用户与角色关联
userRoleMapper.deleteUserRoleByUserId(userId);
// 新增用户与角色管理
insertUserRole(user);
// 删除用户与岗位关联
userPostMapper.deleteUserPostByUserId(userId);
// 新增用户与岗位管理
insertUserPost(user);
userMapper.updateUser(user);
return AjaxResult.success("更新用户成功");
}
/**
* 用户授权角色
*
* @param userId 用户ID
* @param roleIds 角色组
*/
@Override
@Transactional
public void insertUserAuth(Long userId, Long[] roleIds) {
userRoleMapper.deleteUserRoleByUserId(userId);
insertUserRole(userId, roleIds);
}
/**
* 修改用户状态
*
* @param user 用户信息
* @return 结果
*/
@Override
public int updateUserStatus(SysUser user) {
return userMapper.updateUser(user);
}
/**
* 修改用户基本信息
*
* @param user 用户信息
* @return 结果
*/
@Override
public int updateUserProfile(SysUser user) {
return userMapper.updateUser(user);
}
/**
* 修改用户头像
*
* @param userName 用户名
* @param avatar 头像地址
* @return 结果
*/
@Override
public boolean updateUserAvatar(String userName, String avatar) {
return userMapper.updateUserAvatar(userName, avatar) > 0;
}
/**
* 重置用户密码
*
* @param user 用户信息
* @return 结果
*/
@Override
public int resetPwd(SysUser user) {
return userMapper.updateUser(user);
}
/**
* 重置用户密码
*
* @param userName 用户名
* @param password 密码
* @return 结果
*/
@Override
public int resetUserPwd(String userName, String password) {
return userMapper.resetUserPwd(userName, password);
}
/**
* 新增用户角色信息
*
* @param user 用户对象
*/
public void insertUserRole(SysUser user) {
this.insertUserRole(user.getUserId(), user.getRoleIds());
}
/**
* 新增用户岗位信息
*
* @param user 用户对象
*/
public void insertUserPost(SysUser user) {
Long[] posts = user.getPostIds();
if (StringUtils.isNotEmpty(posts)) {
// 新增用户与岗位管理
List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
for (Long postId : posts) {
SysUserPost up = new SysUserPost();
up.setUserId(user.getUserId());
up.setPostId(postId);
list.add(up);
}
userPostMapper.batchUserPost(list);
}
}
/**
* 新增用户角色信息
*
* @param userId 用户ID
* @param roleIds 角色组
*/
public void insertUserRole(Long userId, Long[] roleIds) {
if (StringUtils.isNotEmpty(roleIds)) {
// 新增用户与角色管理
List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
for (Long roleId : roleIds) {
SysUserRole ur = new SysUserRole();
ur.setUserId(userId);
ur.setRoleId(roleId);
list.add(ur);
}
userRoleMapper.batchUserRole(list);
}
}
/**
* 通过用户ID删除用户
*
* @param userId 用户ID
* @return 结果
*/
@Override
@Transactional
public int deleteUserById(Long userId) {
// 删除用户与角色关联
userRoleMapper.deleteUserRoleByUserId(userId);
// 删除用户与岗位表
userPostMapper.deleteUserPostByUserId(userId);
return userMapper.deleteUserById(userId);
}
/**
* 批量删除用户信息
*
* @param userIds 需要删除的用户ID
* @return 结果
*/
@Override
@Transactional
public int deleteUserByIds(Long[] userIds) {
for (Long userId : userIds) {
checkUserAllowed(new SysUser(userId));
checkUserDataScope(userId);
}
// 删除用户与角色关联
userRoleMapper.deleteUserRole(userIds);
// 删除用户与岗位关联
userPostMapper.deleteUserPost(userIds);
return userMapper.deleteUserByIds(userIds);
}
/**
* 导入用户数据
*
* @param userList 用户数据列表
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
* @param operName 操作用户
* @return 结果
*/
@Override
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
if (StringUtils.isNull(userList) || userList.size() == 0) {
throw new ServiceException("导入用户数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
String password = configService.selectConfigByKey("sys.user.initPassword");
for (SysUser user : userList) {
try {
// 验证是否存在这个用户
SysUser u = userMapper.selectUserByUserName(user.getUserName());
if (StringUtils.isNull(u)) {
BeanValidators.validateWithException(validator, user);
user.setPassword(SecurityUtils.encryptPassword(password));
user.setCreateBy(operName);
userMapper.insertUser(user);
successNum++;
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
} else if (isUpdateSupport) {
BeanValidators.validateWithException(validator, user);
checkUserAllowed(u);
checkUserDataScope(u.getUserId());
user.setUserId(u.getUserId());
user.setUpdateBy(operName);
userMapper.updateUser(user);
successNum++;
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
} else {
failureNum++;
failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
}
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
}
@@ -0,0 +1,22 @@
package com.ruoyi.wisdomarbitrate;
import lombok.Data;
import java.util.List;
@Data
public class StringIdsReq {
private List<String> ids;
/**
* 签署人账号(即仲裁员手机号)
*/
private String psnAccount;
/**
* 签署人id
*/
private String psnId ;
/**
* 机构账户
*/
private String orgId ;
}
@@ -0,0 +1,188 @@
package com.ruoyi.wisdomarbitrate.domain;
import lombok.Data;
@Data
public class Adjudication {
/**
* 申请人姓名
*/
private String appName;
/**
* 申请人性别
*/
private String appSex;
/**
* 申请人身份证号码
*/
private String appIDNo;
/**
* 申请人住所
*/
private String appAddress;
/**
* 申请人代理人姓名
*/
private String appAgentName;
/**
* 申请人代理人身份证
*/
private String appAgentIDNo;
/**
* 被申请人姓名
*/
private String resName;
/**
* 被申请人性别
*/
private String resSex;
/**
* 被申请人身份证号码
*/
private String resIDNo;
/**
* 被申请人住所
*/
private String resAddress;
/**
* 被申请人代理人姓名
*/
private String resAgentName;
/**
* 被申请人代理人身份证
*/
private String resAgentIDNo;
/**
* 案件名称
*/
private String caseName;
/**
* 仲裁员名称
*/
private String arbitratorName;
/**
* 开庭年
*/
private String hearYear;
/**
* 开庭月
*/
private String hearMonths;
/**
* 开庭日
*/
private String hearDay;
/**
* 申请人具体仲裁请求
*/
private String appArbitrationClaims;
/**
* 申请人证据名称
*/
private String appEvidenceName;
/**
* 申请人拟证事实
*/
private String appProveFacts;
/**
* 被申请人对申请人答辩内容
*/
private String resDefenseContentToApp;
/**
* 被申请人具体仲裁请求
*/
private String resArbitrationClaims;
/**
* 被申请人证据名称
*/
private String resEvidenceName;
/**
* 被申请人拟证事实
*/
private String resProveFacts;
/**
* 申请人对被申请人答辩内容
*/
private String appDefenseContentToRes;
/**
* 第三人答辩内容
*/
private String thirdDefenseContent;
/**
* 第三人证据名称
*/
private String thirdEvidenceName;
/**
* 第三人拟证事实
*/
private String thirdProveFacts;
/**
* 申请人对第三人答辩内容
*/
private String appDefenseContentToThird;
/**
* 被申请人对第三人答辩内容
*/
private String resDefenseContentToThird;
/**
* 证据认定
*/
private String evidenDetermi;
/**
* 认定事实
*/
private String factDetermi;
/**
* 综上所述
*/
private String caseSketch;
/**
* 本庭认为
*/
private String arbitrateThink;
/**
* 裁决如下
*/
private String rulingFollows;
/**
* 法律条款
*/
private String legalProvisions;
/**
* 首席仲裁
*/
private String umpire;
/**
* 仲裁员1
*/
private String arbitratorName1;
/**
* 仲裁员2
*/
private String arbitratorName2;
/**
* 年
*/
private String year;
/**
* 月
*/
private String months;
/**
* 日
*/
private String day;
/**
* 书记员
*/
private String clerk;
}
@@ -0,0 +1,76 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@Data
public class ArbitrateRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 案件申请id */
private Long caseAppliId;
/** 证据认定 */
private String evidenDetermi;
/** 认定事实 */
private String factDetermi;
/** 综上所述 */
private String caseSketch;
/** 本庭认为 */
private String arbitrateThink;
/** 裁决如下 */
private String rulingFollows;
/** 核验裁决书意见 */
private String verificaOpinion;
/** 审核裁决书意见 */
private String checkOpinion;
/** 仲裁员审核裁决书意见 */
private String arbitraCheckOpinion;
/** 裁决书附件id */
private Integer annexId;
/** 被申请人是否缺席 */
private Integer isAbsence;
/** 被申请人质证意见 */
private String responCrossOpin;
/** 申请人质证意见 */
private String applicaCrossOpin;
/** 申请人是否缺席 */
private Integer appliIsAbsen;
/** 被申请人质证意见 */
private String responDefenOpini;
/**
* 本案争议焦点
*/
private String caseFocus;
/**
* 本案事实
*/
private String caseFacts;
/**
* 被申请人对上述材料的质证意见
*/
private String respondentOpinion;
/**
* 申请人对上述材料的质证意见
*/
private String applicantOpinion;
/**
* 立案审查驳回原因
*/
private String caseCheckReject;
/**
* 仲裁员确认裁决书驳回
*/
private String arbitrateReject;
/**
* 部门长确认裁决书驳回
*/
private String deptorReject;
}
@@ -0,0 +1,123 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
public class Arbitrator extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 仲裁员姓名 */
private String arbitratorName;
/** 职称 */
private String title;
/** 职业 */
private String career;
/** 专业分类 */
private String professiClassifi;
/** 学历 */
private String education;
/** 所在地区 */
private String area;
/** 联系电话 */
private String telephone;
List<Long> idList;
public List<Long> getIdList() {
return idList;
}
public void setIdList(List<Long> idList) {
this.idList = idList;
}
public String getArbitratorName() {
return arbitratorName;
}
public void setArbitratorName(String arbitratorName) {
this.arbitratorName = arbitratorName;
}
/** 当前案件数量 */
private int currentCaseNum;
/** 已结案数量 */
private int closedCaseNum;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCareer() {
return career;
}
public void setCareer(String career) {
this.career = career;
}
public String getProfessiClassifi() {
return professiClassifi;
}
public void setProfessiClassifi(String professiClassifi) {
this.professiClassifi = professiClassifi;
}
public String getEducation() {
return education;
}
public void setEducation(String education) {
this.education = education;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public int getCurrentCaseNum() {
return currentCaseNum;
}
public void setCurrentCaseNum(int currentCaseNum) {
this.currentCaseNum = currentCaseNum;
}
public int getClosedCaseNum() {
return closedCaseNum;
}
public void setClosedCaseNum(int closedCaseNum) {
this.closedCaseNum = closedCaseNum;
}
}
@@ -0,0 +1,31 @@
package com.ruoyi.wisdomarbitrate.domain;
import lombok.Data;
import java.util.List;
/**
* @author wangqiong
* @description 批量操作案件
* @date 2023-10-20 14:49
*/
@Data
public class BatchCaseApplication {
private List<Long> ids;
/**
* 是否同意,0拒绝,1同意
*/
private Integer agreeOrNotCheck;
/**
* 1同意,0拒绝
*/
private Integer opinion;
/** 驳回原因 */
private String caseCheckReject;
/**
* 批号
*/
private String batchNumber;
}
@@ -0,0 +1,353 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.Date;
public class CaseAffiliate extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ID */
@Excel(name = "ID", cellType = Excel.ColumnType.NUMERIC, prompt = "ID")
private Long id;
/** 案件申请id */
private Long caseAppliId;
/**
* 案件申请日志id
*/
private Long caseAppliLogId;
/** 身份类型 */
private int identityType;
/** 姓名 */
@Excel(name = "姓名")
private String name;
/**
* 申请机构id
*/
private String applicationOrganId;
/**
* 申请机构名称
*/
private String applicationOrganName;
/**
* 法定代表人
*/
private String compLegalPerson;
/**
* 邮箱
*/
private String email;
/**
* 法定代表人职位
*/
private String compLegalperPost;
/**
* 被申请人性别
*/
private String responSex;
/**
* 被申请人出生年月日
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date responBirth;
/**
* 版本号
*/
private Integer version;
/**
* 改变的字段
*/
private String changeColumn;
/**
* 代理人邮箱
*/
private String agentEmail;
public String getAgentEmail() {
return agentEmail;
}
public void setAgentEmail(String agentEmail) {
this.agentEmail = agentEmail;
}
public String getChangeColumn() {
return changeColumn;
}
public void setChangeColumn(String changeColumn) {
this.changeColumn = changeColumn;
}
public Long getCaseAppliLogId() {
return caseAppliLogId;
}
public void setCaseAppliLogId(Long caseAppliLogId) {
this.caseAppliLogId = caseAppliLogId;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getResponBirth() {
return responBirth;
}
public void setResponBirth(Date responBirth) {
this.responBirth = responBirth;
}
public String getCompLegalPerson() {
return compLegalPerson;
}
public void setCompLegalPerson(String compLegalPerson) {
this.compLegalPerson = compLegalPerson;
}
public String getCompLegalperPost() {
return compLegalperPost;
}
public void setCompLegalperPost(String compLegalperPost) {
this.compLegalperPost = compLegalperPost;
}
public String getResponSex() {
return responSex;
}
public void setResponSex(String responSex) {
this.responSex = responSex;
}
/** 身份证号 */
@Excel(name = "身份证号")
private String identityNum;
/** 单位电话 */
@Excel(name = "单位电话")
private String workTelphone;
/** 联系电话 */
@Excel(name = "联系电话")
private String contactTelphone;
/** 联系地址 */
@Excel(name = "联系地址")
private String contactAddress;
/** 住所 */
@Excel(name = "住所")
private String residenAffili;
/** 申请人代理人职称 */
@Excel(name = "申请人代理人职称")
private String appliAgentTitle;
public String getResidenAffili() {
return residenAffili;
}
public void setResidenAffili(String residenAffili) {
this.residenAffili = residenAffili;
}
public String getAppliAgentTitle() {
return appliAgentTitle;
}
public void setAppliAgentTitle(String appliAgentTitle) {
this.appliAgentTitle = appliAgentTitle;
}
/** 单位地址 */
@Excel(name = "单位地址")
private String workAddress;
/** 代理人姓名 */
@Excel(name = "代理人姓名")
private String nameAgent;
/** 身份证号 */
@Excel(name = "代理人身份证号")
private String identityNumAgent;
/** 联系电话 */
@Excel(name = "代理人联系电话")
private String contactTelphoneAgent;
/** 联系地址 */
@Excel(name = "代理人联系地址")
private String contactAddressAgent;
/** 送达电子邮件 */
private String sendEmail;
private String userId;
private String applicantAgentUserId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getApplicantAgentUserId() {
return applicantAgentUserId;
}
public void setApplicantAgentUserId(String applicantAgentUserId) {
this.applicantAgentUserId = applicantAgentUserId;
}
/** 快递单号 */
private String trackNum;
public String getApplicationOrganId() {
return applicationOrganId;
}
public void setApplicationOrganId(String applicationOrganId) {
this.applicationOrganId = applicationOrganId;
}
public String getApplicationOrganName() {
return applicationOrganName;
}
public void setApplicationOrganName(String applicationOrganName) {
this.applicationOrganName = applicationOrganName;
}
public String getSendEmail() {
return sendEmail;
}
public void setSendEmail(String sendEmail) {
this.sendEmail = sendEmail;
}
public String getTrackNum() {
return trackNum;
}
public void setTrackNum(String trackNum) {
this.trackNum = trackNum;
}
public String getNameAgent() {
return nameAgent;
}
public void setNameAgent(String nameAgent) {
this.nameAgent = nameAgent;
}
public String getIdentityNumAgent() {
return identityNumAgent;
}
public void setIdentityNumAgent(String identityNumAgent) {
this.identityNumAgent = identityNumAgent;
}
public String getContactTelphoneAgent() {
return contactTelphoneAgent;
}
public void setContactTelphoneAgent(String contactTelphoneAgent) {
this.contactTelphoneAgent = contactTelphoneAgent;
}
public String getContactAddressAgent() {
return contactAddressAgent;
}
public void setContactAddressAgent(String contactAddressAgent) {
this.contactAddressAgent = contactAddressAgent;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCaseAppliId() {
return caseAppliId;
}
public void setCaseAppliId(Long caseAppliId) {
this.caseAppliId = caseAppliId;
}
public int getIdentityType() {
return identityType;
}
public void setIdentityType(int identityType) {
this.identityType = identityType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdentityNum() {
return identityNum;
}
public void setIdentityNum(String identityNum) {
this.identityNum = identityNum;
}
public String getWorkTelphone() {
return workTelphone;
}
public void setWorkTelphone(String workTelphone) {
this.workTelphone = workTelphone;
}
public String getContactTelphone() {
return contactTelphone;
}
public void setContactTelphone(String contactTelphone) {
this.contactTelphone = contactTelphone;
}
public String getContactAddress() {
return contactAddress;
}
public void setContactAddress(String contactAddress) {
this.contactAddress = contactAddress;
}
public String getWorkAddress() {
return workAddress;
}
public void setWorkAddress(String workAddress) {
this.workAddress = workAddress;
}
}
@@ -0,0 +1,421 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import com.ruoyi.wisdomarbitrate.domain.vo.ColumnValue;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class CaseApplication extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 查询案件时区分是否待办案件,0待办案件,1已办案件
*/
private String selectCaseStatus;
/** ID */
private Long id;
/** 案件名称 */
@Excel(name = "案件名称")
private String caseName;
/** 案件编号 */
// @Excel(name = "案件编号")
private String caseNum;
/** 案件标的 */
@Excel(name = "案件标的")
private BigDecimal caseSubjectAmount;
/**
* 模板id
*/
private Long templateId;
/** 立案日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date registerDate;
/** 仲裁方式 */
private Integer arbitratMethod;
/**
* 是否导入,0手动录入,1导入,默认0
*/
private Integer importFlag;
/** 仲裁方式名称 */
private String arbitratMethodName;
/** 案件状态 */
private Integer caseStatus;
/** 申请人是否书面审理 */
private Integer applicantIsWrittenHear;
/** 被申请人是否书面审理 */
private Integer respondentIsWrittenHear;
/** 开庭方式是否一致 */
private Integer arbitraMethodIssame;
/** 仲裁方式说明 */
private String arbitratMethodIllustrate;
/** 案件申请表ID */
private Long caseAppliId;
/** 开庭日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date hearDate;
/** 借款开始日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "借款开始日期")
private Date loanStartDate;
/** 借款结束日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "借款结束日期")
private Date loanEndDate;
/** 合同编号 */
@Excel(name = "合同编号")
private String contractNumber;
/** 申请人主张欠本金 */
@Excel(name = "申请人主张欠本金")
private BigDecimal claimPrinciOwed;
/** 申请人主张欠利息 */
@Excel(name = "申请人主张欠利息")
private BigDecimal claimInterestOwed;
/** 申请人主张违约金 */
@Excel(name = "申请人主张违约金")
private BigDecimal claimLiquidDamag;
/** 申请人请求仲裁庭裁决 */
@Excel(name = "申请人请求仲裁庭裁决",width = 36)
private String requestRule;
/** 是否财产保全申请 */
@Excel(name = "是否财产保全申请",width = 26,combo= {"是","否"},readConverterExp = "0=否,1=是")
private Integer properPreser;
/** 申请人仲裁请求及事实和理由 */
@Excel(name = "申请人仲裁请求及事实和理由",width = 36)
private String arbitratClaims;
/** 仲裁应缴费用 */
private BigDecimal feePayable;
/** 开始在线视频时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date beginVideoDate;
/** 在线视频人员 */
private String onlineVideoPerson;
/** 仲裁员id */
private String arbitratorId;
/** 仲裁员名称 */
private String arbitratorName;
/** 案件描述 */
private String caseDescribe;
/** 裁决书URL */
private String filearbitraUrl;
/** 是否同意组庭 */
private Integer isAgreePendTral;
/** 是否有异议需要举证 */
private Integer objectionAddEviden;
/** 是否需要开庭审理 */
private Integer openCourtHear;
/** 是否仲裁反请求 */
private Integer adjudicaCounter;
/**
* 仲裁反请求原因
*/
private String adjudicaCounterReason;
/** 被申请人是否缺席 */
private Integer isAbsence;
/** 是否管辖异议申请 */
private Integer objectiJuris;
/** 被申请人质证意见 */
private String responCrossOpin;
/** 被申请人的答辩意见 */
private String responDefenOpini;
/** 申请人是否缺席 */
private Integer appliIsAbsen;
/** 申请人质证意见 */
private String applicaCrossOpin;
/** 支付状态 */
private Integer paymentStatus;
/** 支付状态描述 */
private String paymentStatusName;
/**
* 支付方式code,0线上支付,1线下支付
*/
private Integer payTypeCode;
/**
* 支付方式name,0线上支付,1线下支付
*/
private String payTypeName;
/**
* 缴费凭证
*/
private List<CaseAttach> payOrderList;
// 导入校验失败信息
private StringBuilder errorMsg;
/**
* 是否锁定,0-否,1-是
*/
private Integer lockStatus;
/** 案件状态名称 */
private String caseStatusName;
/** 是否同意审核 */
private Integer agreeOrNotCheck;
/** 申请人名称 */
private String applicantName;
/** 被申请人名称 */
private String respondentName;
/**
* 用户身份证号
*/
private String idCard;
/**
* 用户id
*/
private String userId;
/**
* 登录用户用户名
*/
private String loginUserName;
private List<Long> deptIds;
/**
* 部门长状态
*/
private List<Integer> deptHeadStatus;
/**
* 代理人角色有关部门
*/
private List<Long> agentDeptIds;
/**
* 财务状态
*/
private Integer financeStatus;
/**
* 是否是被申请人,仲裁员,部门长,财务,代理人,0-否,1-是
*/
private Integer isOtherRole;
/**
* 案件日志id
*/
private Long caseLogId;
/** 仲裁结果 */
private String caseResult;
/** 是否指派仲裁员 */
private int pendingAppointArbotrar;
/** 案件关联人信息 */
private List<CaseAffiliate> caseAffiliates;
/** 案件仲裁员 */
private List<Arbitrator> arbitrators;
private List<Integer> caseStatusList;
private List<Integer> annexTypeList;
private Integer annexType;
/**
* 案件附件列表
*/
private List<CaseAttach> caseAttachList;
/** 仲裁记录 */
private ArbitrateRecord arbitrateRecord;
/** 身份类型 */
// @Excel(name = "身份类型")
private int identityType;
/**
* 申请人主体信息
*/
/** 姓名 */
@Excel(name = "申请人主体信息-申请人(机构)",width = 26)
private String name;
/** 身份证号 */
@Excel(name = "申请人主体信息-代码",width = 26)
private String identityNum;
/** 申请人主体信息-法定代表人 */
@Excel(name = "申请人主体信息-法定代表人",width = 26)
private String compLegalPerson;
/** 申请人主体信息-法定代表人 */
@Excel(name = "申请人主体信息-法定代表人职位",width = 26)
private String compLegalperPost;
/**
* 申请人主体信息-申请人(机构)id
*/
private String nameId;
/** 联系电话 */
@Excel(name = "申请人主体信息-联系电话",width = 26)
private String contactTelphone;
/** 联系地址 */
@Excel(name = "申请人主体信息-联系地址",width = 26)
private String contactAddress;
/** 单位电话 */
@Excel(name = "申请人主体信息-单位电话",width = 26)
private String workTelphone;
/** 单位地址 */
@Excel(name = "申请人主体信息-单位地址",width = 26)
private String workAddress;
/** 申请人住所 */
@Excel(name = "申请人主体信息-住所",width = 26)
private String residenAffiliAppli;
/** 申请人邮箱 */
@Excel(name = "申请人主体信息-邮箱",width = 26)
private String email;
/** 代理人姓名 */
@Excel(name = "申请人主体信息-代理人姓名",width = 26)
private String nameAgent;
/** 身份证号 */
@Excel(name = "申请人主体信息-代理人身份证号",width = 26)
private String identityNumAgent;
/** 联系电话 */
@Excel(name = "申请人主体信息-代理人联系电话",width = 26)
private String contactTelphoneAgent;
/** 联系地址 */
@Excel(name = "申请人主体信息-代理人联系地址",width = 26)
private String contactAddressAgent;
/** 申请人代理人职称 */
@Excel(name = "申请人主体信息-代理人职称",width = 26)
private String appliAgentTitle;
/**
* 被申请人主体信息
*/
/** 姓名 */
@Excel(name = "被申请人主体信息-申请人姓名",width = 26)
private String debtorName;
/** 身份证号 */
@Excel(name = "被申请人主体信息-身份证号",width = 26)
private String debtorIdentityNum;
/** 被申请人主体信息-性别 */
@Excel(name = "被申请人主体信息-性别",width = 26,combo= {"男","女"},readConverterExp = "0=男,1=女")
private String responSex;
/** 被申请人主体信息-出生年月日 */
@Excel(name = "被申请人主体信息-出生年月日",width = 26)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date responBirth;
/** 联系电话 */
@Excel(name = "被申请人主体信息-联系电话",width = 26)
private String debtorContactTelphone;
/** 联系地址 */
@Excel(name = "被申请人主体信息-联系地址",width = 26)
private String debtorContactAddress;
/** 被申请人住所 */
@Excel(name = "被申请人主体信息-住所",width = 26)
private String residenAffiliRespon;
/** 单位电话 */
@Excel(name = "被申请人主体信息-单位电话",width = 26)
private String debtorWorkTelphone;
/** 单位地址 */
@Excel(name = "被申请人主体信息-单位地址",width = 26)
private String debtorWorkAddress;
/** 邮箱 */
@Excel(name = "被申请人主体信息-邮箱",width = 26)
private String debtorEmail;
/** 代理人姓名 */
@Excel(name = "被申请人主体信息-代理人姓名",width = 26)
private String debtorNameAgent;
/** 身份证号 */
@Excel(name = "被申请人主体信息-代理人身份证号",width = 26)
private String debtorIdentityNumAgent;
/** 联系电话 */
@Excel(name = "被申请人主体信息-代理人联系电话",width = 26)
private String debtorContactTelphoneAgent;
/** 联系地址 */
@Excel(name = "被申请人主体信息-代理人联系地址",width = 26)
private String debtorContactAddressAgent;
/**
* 申请机构id
*/
private String applicationOrganId;
/**
* 版本号
*/
private Integer version;
/**
* 修改案件的提交状态,0-未提交,1-已提交,2-同意,3-拒绝,4-撤销
*/
private Integer updateSubmitStatus;
/** 合同名称 */
private String contractName;
/**
* 事实和理由
*/
private String facts;
/**
* 合同甲方
*/
private String partyA;
/**
* 利率
*/
private String interestRate;
/**
* 待还金额
*/
private String outstandingMoney;
/**
* 调解达成协议内容
*/
private String mediationAgreement;
/**
* 金融消费纠纷基本情况
*/
private String disputes;
/**
* 贷款类型
*/
private String loanType;
/**
* 贷款期限
*/
private String loanTerm;
/**
* 本案争议焦点
*/
private String caseFocus;
/**
* 本案事实
*/
private String caseFacts;
/**
* 被申请人对上述材料的质证意见
*/
private String respondentOpinion;
/**
* 申请人对上述材料的质证意见
*/
private String applicantOpinion;
/**
* 批号
*/
private Integer batchNumber;
/**
* 自定义字段
*/
private List<ColumnValue> columnValues;
/**
* 待办状态,0待办,1已办
*/
private Integer pendingStatus;
/** e签宝流程id */
private String signFlowId;;
}
@@ -0,0 +1,23 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class CaseApplicationPay {
/** 案件编号 */
private String caseNum;
/** 案件标的 */
private BigDecimal caseSubjectAmount;
/** 仲裁应缴费用 */
private BigDecimal feePayable;
/** 案件状态 */
private Integer caseStatus;
/**申请人 */
private String caseAppName;
/**被申请人 */
private String caseResName;
}
@@ -0,0 +1,58 @@
package com.ruoyi.wisdomarbitrate.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CaseAttach {
/**
* 附件id
*/
private Integer annexId;
/**
* 案件申请id
*/
private Long caseAppliId;
/**
* 案件记录id
*/
private Long caseAppliLogId;
/**
* 附件名称
*/
private String annexName;
/**
* 附件路径
*/
private String annexPath;
/**
* 附件类型,立案申请书(1)、申请人证据材料(2)、仲裁文书(3)、案件视频(4)、身份证件(5)、被申请人证据材料 (6)、庭审笔录(7)、缴费凭证(8)'
*/
private Integer annexType;
/**
* 备注
*/
private String note;
/**
* 用户id
*/
private Long userId;
/**
* 用户账户
*/
private String userName;
/**
* 印章状态(0未启用,1已启用)
*/
private Integer sealStatus;
/**
* 是否是证据上传,0-否,1-是
*/
private Integer isBatchUpload;
}
@@ -0,0 +1,60 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CaseEvidenceDirectory extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 父id
*/
private Long parentId;
/**
* 证据名称
*/
private String evidenceName;
/**
* 附件id
*/
private Integer annexId;
/**
* 级数
*/
private Integer series;
/**
* 案件id
*/
private Long caseId;
/** 子目录 */
private List<CaseEvidenceDirectory> children = new ArrayList<>();
/**
* 附件名称
*/
private String annexName;
/**
* 附件路径
*/
private String annexPath;
}
@@ -0,0 +1,9 @@
package com.ruoyi.wisdomarbitrate.domain;
import lombok.Data;
import java.util.List;
@Data
public class CaseIds {
private List<Long> ids;
}
@@ -0,0 +1,145 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.Date;
public class CaseLogRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 案件申请id */
private Long caseAppliId;
/** 案件节点 */
private Integer caseNode;
/** 案件节点时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date caseNodeTime;
/** 备注 */
private String notes;
/** 案件编号 */
private String caseNum;
/**
* 展示的内容
*/
private String content;
/**
* 用户昵称
*/
private String createNickName;
/**
* 角色名称
*/
private String roleName;
/**
* 下一个节点角色名称
*/
private String nextRoleName;
public String getNextRoleName() {
return nextRoleName;
}
public void setNextRoleName(String nextRoleName) {
this.nextRoleName = nextRoleName;
}
/**
* 节点名称
*/
private String caseNodeName;
public String getCaseNodeName() {
return caseNodeName;
}
public void setCaseNodeName(String caseNodeName) {
this.caseNodeName = caseNodeName;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getCaseNum() {
return caseNum;
}
public void setCaseNum(String caseNum) {
this.caseNum = caseNum;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCaseAppliId() {
return caseAppliId;
}
public void setCaseAppliId(Long caseAppliId) {
this.caseAppliId = caseAppliId;
}
public Integer getCaseNode() {
return caseNode;
}
public void setCaseNode(int caseNode) {
this.caseNode = caseNode;
}
public Date getCaseNodeTime() {
return caseNodeTime;
}
public void setCaseNodeTime(Date caseNodeTime) {
this.caseNodeTime = caseNodeTime;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public void setCaseNode(Integer caseNode) {
this.caseNode = caseNode;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getCreateNickName() {
return createNickName;
}
public void setCreateNickName(String nickName) {
this.createNickName = nickName;
}
}
@@ -0,0 +1,28 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@Data
public class CaseNumRule extends BaseEntity {
/** ID */
private Long id;
/** 类型 */
private Integer ruleType;
/** 前缀 */
private String prefixstr;
/** 时间格式 */
private Integer dateFormat;
/** 机构名称 */
private String deptName;
/** 机构名称首字符拼写 */
private String deptNameFirchar;
/** 当前编号 */
private String currentNum;
}
@@ -0,0 +1,45 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
@Data
public class CasePaymentRecord {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Integer id;
/**
* 案件id
*/
private Long caseId;
/**
* 订单号
*/
private String orderNumber;
/**
* 支付状态(0未支付,1已支付)
*/
private Integer paymentStatus;
/**
* 支付时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date paymentTime;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 支付方式 0线上支付,1线下支付
*/
private Integer payType;
}
@@ -0,0 +1,61 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
@Data
public class DeptIdentify extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 部门id */
private Long deptId;
/** 用户id */
private Long userId;
/** 机构名称 */
private String identifyName;
/** 认证状态 */
private Integer identifyStatus;
/** 认证时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date identifyDate;
/** 是否启用 */
private Integer isUse;
/** 经办人姓名 */
private String operName;
/** 经办人用户名 */
private String operUserName;
/** 经办人手机号 */
private String operPhone;
/** 机构账号ID */
private String orgId;
/** 认证授权流程ID */
private String authFlowId;
/** 部门认证链接 */
private String identifyUrl;
/** 机构信用代码 */
private String creditCode;
/** 法人姓名 */
private String legalPerName;
/** 法人手机号 */
private String legalPerPhone;
/** 机构类型(1 仲裁机构) */
private Integer identifyType;
/** 机构邮箱 */
private String identifyEmail;
/** 删除标志(0代表存在 2代表删除) */
private Integer delFlag;
}
@@ -0,0 +1,41 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
/**
* 抓取规则
*/
@Data
public class FatchRule extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long id;
private String batchNumber;
private String fileName;
private String startContent;
private String endContent;
private String column;
private String columnName;
private Integer isDefault;
private Long templateId;
private String databaseName;
/**
* 顺序,开始字段重复时,指定抓取第几个
*/
private Integer startContentRepeatOrder;
/**
* 结束字段重复时指定的顺序,默认1,只能>0填正整数
*/
private Integer endContentRepeatOrder;
/**
* 抓取方向,默认0,0-从前往后抓取,1-从后往前抓取
*/
private Integer fatchOrder;
}
@@ -0,0 +1,148 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
@Data
public class IdentityAuthentication extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 姓名 */
private String name;
/** 身份证号 */
private String identityNo;
/**
* 短信验证码
*/
private String VerifyCode;
private String passWord;
private String phone;
/**
* 邮箱
*/
private String email;
/**
* 身份证地址
*/
private String idAddress;
/** 认证时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date certificationTime;
/** 认证状态 */
private Integer certificationStatus;
public Integer getCertificationStatus() {
return certificationStatus;
}
public void setCertificationStatus(Integer certificationStatus) {
this.certificationStatus = certificationStatus;
}
/** 认证状态名称 */
private String certificationStatusName;
public String getCertificationStatusName() {
return certificationStatusName;
}
public void setCertificationStatusName(String certificationStatusName) {
this.certificationStatusName = certificationStatusName;
}
/** 用户ID */
private Long userId;
/** 用户账号 */
private String userName;
/**
* 用户昵称
*/
private String nickName;
/** EID商户id */
private String merchantId;
/** EidToken */
private String eidToken;
/** 请求 ID */
private String requestId;
public String getMerchantId() {
return merchantId;
}
public void setMerchantId(String merchantId) {
this.merchantId = merchantId;
}
public String getEidToken() {
return eidToken;
}
public void setEidToken(String eidToken) {
this.eidToken = eidToken;
}
public String getRequestId() {
return requestId;
}
public void setRequestId(String requestId) {
this.requestId = requestId;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdentityNo() {
return identityNo;
}
public void setIdentityNo(String identityNo) {
this.identityNo = identityNo;
}
public Date getCertificationTime() {
return certificationTime;
}
public void setCertificationTime(Date certificationTime) {
this.certificationTime = certificationTime;
}
}
@@ -0,0 +1,63 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @author wangqiong
* @description 预定会议
* @Version 1.0
* @date 2023-11-09 16:51
*/
@Data
public class ReservedConference {
/**
* id
*/
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 用户名
*/
private String userName;
/**
* 案件id
*/
private Long caseId;
/**
* 房间号
*/
private long roomId;
/**
* 预定会议开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleStartTime;
/**
* 预定会议结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleEndTime;
/**
* 是否超过5分钟
*/
private Boolean isBeforeFiveMinutes;
public ReservedConference() {
}
public ReservedConference(Long caseId, Long userId, long roomId, Date scheduleStartTime, Date scheduleEndTime) {
this.caseId = caseId;
this.userId = userId;
this.roomId = roomId;
this.scheduleStartTime = scheduleStartTime;
this.scheduleEndTime = scheduleEndTime;
}
}
@@ -0,0 +1,48 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@Data
public class SealManage extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long id;
/**
* 机构关联id
*/
private Long identifyId;
/**
* 印章名称
*/
private String sealName;
/**
* 印章id
*/
private String sealId;
/**
* 附件id
*/
private Integer annexId;
/**
* 印章审核状态(0未通过,1通过)
*/
private Integer sealStatus;
/**
* 印章使用状态(0禁用,1启用)
*/
private Integer isUse;
/**
* 附件路径
*/
private String annexPath;
}
@@ -0,0 +1,64 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SealSignRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ID */
private Long id;
/** 文件id */
private String fileid;
/** 文件名称 */
private String filename;
/** 流程id */
private String signFlowid;
/** 签名人账户 */
private String pensonAccount;
/** 签名人姓名 */
private String pensonName;
/** 机构名称 */
private String orgnizeName;
/** 机构经办人 */
private String orgnizeNamePsnAccount;
/** 机构经办人名称 */
private String orgnizeNamepsnName;
String fileDownloadUrl;
/** 流程状态 */
private Integer signFlowStatus;
/** 签名状态 */
private Integer psnsignStatus;
/** 用印状态 */
private Integer orgsignStatus;
/** 签名链接 */
private String signUrl;
/** 用印链接 */
private String sealUrl;
private Long caseAppliId;
/** 签名位置页数 */
private String positionPagepsn;
/** 签名位置x坐标 */
private double positionXpsn;
/** 签名位置y坐标 */
private double positionYpsn;
/** 印章位置页数 */
private String positionPageorg;
/** 印章位置x坐标 */
private double positionXorg;
/** 印章位置y坐标 */
private double positionYorg;
}
@@ -0,0 +1,115 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.Date;
public class SendMailRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long id;
/** 案件申请id */
private Long caseId;
/**
* 邮件名称
*/
private String mailName;
/**
* 邮件内容
*/
private String mailContent;
/**
* 邮件地址
*/
private String mailAddress;
/**
* 发送时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date sendTime;
/** 案件编号 */
private String caseNum;
/** 发送状态 */
private Integer sendStatus;
public Integer getSendStatus() {
return sendStatus;
}
public void setSendStatus(Integer sendStatus) {
this.sendStatus = sendStatus;
}
public String getCaseNum() {
return caseNum;
}
public void setCaseNum(String caseNum) {
this.caseNum = caseNum;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCaseId() {
return caseId;
}
public void setCaseId(Long caseId) {
this.caseId = caseId;
}
public String getMailName() {
return mailName;
}
public void setMailName(String mailName) {
this.mailName = mailName;
}
public String getMailContent() {
return mailContent;
}
public void setMailContent(String mailContent) {
this.mailContent = mailContent;
}
public String getMailAddress() {
return mailAddress;
}
public void setMailAddress(String mailAddress) {
this.mailAddress = mailAddress;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
}
@@ -0,0 +1,45 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SmsSendRecord extends BaseEntity {
/**
* ID
*/
private Long id;
/**
* 案件申请id
*/
private Long caseId;
/**
* 案件编号
*/
private String caseNum;
/**
* 手机号
*/
private String phone;
/**
* 发送时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date sendTime;
/**
* 发送内容
*/
private String sendContent;
/**
* 发送状态
*/
private Integer sendStatus;
}
@@ -0,0 +1,57 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.List;
@Data
public class TemplateManage extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long id;
/**
* 机构关联id
*/
private Long identifyId;
/**
* 模板名称
*/
private String temName;
/**
* 模板类型(1裁决书)
*/
private Integer temType;
/**
* 模板格式
*/
private String temFormat;
/**
* 文件名
*/
private String fileName;
/**
* 原模板路径
*/
private String temOrigPath;
/**
* 修订后模板路径
*/
private String temRevisPath;
/**
* 删除标志(0代表存在 2代表删除)
*/
private Integer delFlag;
/**
* 机构关联id
*/
private String identifyName;
List<FatchRule> fatchRules;
}
@@ -0,0 +1,33 @@
package com.ruoyi.wisdomarbitrate.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@Data
public class TemplateManual {
/**
* ID
*/
private Long id;
/**
* 模板名称
*/
private String name;
/**
* 模板内容,用{}作为占位符动态替换其内容
*/
private String content;
/**
* 模板类型,1-裁决内容,2-调解协议,3-金融消费纠纷基本情况
*/
private Integer type;
/**
* 删除标志(0代表存在 2代表删除)
*/
private Integer delFlag;
}
@@ -0,0 +1,255 @@
package com.ruoyi.wisdomarbitrate.domain.dto;
import lombok.Data;
import java.util.Date;
/**
* @author wangqiong
* @description 案件日志
* @date 2023-11-17 14:01
*/
@Data
public class CaseApplicationLogDTO {
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 案件编号
*/
private String caseNum;
/**
* 案件标的
*/
private Double caseSubjectAmount;
/**
* 立案日期
*/
private Date registerDate;
/**
* 仲裁方式,视频仲裁(1)、书面仲裁(2)
*/
private Long arbitratMethod;
/**
* 案件状态,立案申请(0)、待立案审查(1)、 待缴费(2)、待缴费确认(3)、 待案件质证(4)、
*/
private Integer caseStatus;
/**
* 开庭日期
*/
private Date hearDate;
/**
* 申请人仲裁请求及事实和理由
*/
private String arbitratClaims;
/**
* 借款开始日期
*/
private Date loanStartDate;
/**
* 借款结束日期
*/
private Date loanEndDate;
/**
* 申请人主张欠本金
*/
private Double claimPrinciOwed;
/**
* 申请人主张欠利息
*/
private Double claimInterestOwed;
/**
* 申请人主张违约金
*/
private Double claimLiquidDamag;
/**
* 仲裁应缴费用
*/
private Double feePayable;
/**
* 开始在线视频时间
*/
private Date beginVideoDate;
/**
* 在线视频人员
*/
private String onlineVideoPerson;
/**
* 合同编号
*/
private String contractNumber;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
/**
* 创建者
*/
private String createBy;
/**
* 仲裁员id
*/
private String arbitratorId;
/**
* 仲裁员名称
*/
private String arbitratorName;
/**
* 已确认组庭的仲裁员id
*/
private String pendedTrialArbitorid;
/**
* 是否指派仲裁员,1是,2否
*/
private Integer pendingAppointArbotrar;
/**
* 案件名称
*/
private String caseName;
/**
* 案件描述
*/
private String caseDescribe;
/**
* 仲裁结果
*/
private String caseResult;
/**
* 是否同意组庭,0否,1是
*/
private Integer isAgreePendTral;
/**
* 是否有异议需要举证,1是,0否
*/
private Integer objectionAddEviden;
/**
* 是否需要开庭审理,1是,0否
*/
private Integer openCourtHear;
/**
* paid_expenses
*/
private Double paidExpenses;
/**
* 裁决书URL
*/
private String filearbitraUrl;
/**
* 支付方式(0线上支付,1线下支付)
*/
private String payType;
/**
* 申请人请求仲裁庭裁决
*/
private String requestRule;
/**
* 是否仲裁反请求,1是,0否
*/
private Integer adjudicaCounter;
/**
* 是否财产保全申请,1是,0否
*/
private Integer properPreser;
/**
* 是否管辖异议申请,1是,0否
*/
private Integer objectiJuris;
/**
* 被申请人是否缺席,1是,0否
*/
private Integer isAbsence;
/**
* 被申请人质证意见
*/
private String responCrossOpin;
/**
* 申请人质证意见
*/
private String applicaCrossOpin;
/**
* 被申请人的答辩意见
*/
private String responDefenOpini;
/**
* 申请人是否缺席,1是,0否
*/
private Integer appliIsAbsen;
/**
* 是否锁定,0-否,1-是
*/
private Integer lockStatus;
/**
* 视频会议房间号id,多个用逗号拼接
*/
private String roomId;
/**
* 是否导入,0手动录入,1导入,默认0
*/
private Integer importFlag;
/**
* 版本号
*/
private Long version;
/**
* 修改案件的提交状态,0-未提交,1-已提交,2-同意,3,拒绝
*/
private Integer updateSubmitStatus;
}
@@ -0,0 +1,29 @@
package com.ruoyi.wisdomarbitrate.domain.dto;
import com.ruoyi.wisdomarbitrate.domain.CaseAttach;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 案件确认缴费传入对象
*/
@Data
public class CaseConfirmPayDTO {
/**
* 案件ids
*/
@NotNull(message = "案件id不能为空")
private List<Long> caseIds;
/**
* 支付方式 0线上支付,1线下支付
*/
private Integer payType;
/**
* 缴费凭证
*/
private List<CaseAttach> payOrderList;
}
@@ -0,0 +1,49 @@
package com.ruoyi.wisdomarbitrate.domain.dto;
import com.ruoyi.wisdomarbitrate.domain.Arbitrator;
import lombok.Data;
import java.util.List;
/**
* 案件质证传入对象
*/
@Data
public class CaseEvidenceDTO {
/**
* 案件id
*/
private Long caseId;
/**
* 是否有异议需要举证,1是,0否
*/
private Integer objectionAddEviden;
/**
* 是否需要开庭审理,1是,0否
*/
private Integer openCourtHear;
/**
* 是否指派仲裁员,1是,2否
*/
private Integer pendingAppointArbotrar;
/** 是否仲裁反请求 */
private Integer adjudicaCounter;
/**
* 仲裁反请求原因
*/
private String adjudicaCounterReason;
/** 是否管辖异议申请 */
private Integer objectiJuris;
/** 被申请人是否书面审理 */
private Integer respondentIsWrittenHear;
/**
* 案件仲裁员
*/
private List<Arbitrator> arbitrators;
}
@@ -0,0 +1,42 @@
package com.ruoyi.wisdomarbitrate.domain.dto;
import com.ruoyi.wisdomarbitrate.domain.CaseAttach;
import lombok.Data;
import java.util.List;
/**
* 案件缴费传入对象
*/
@Data
public class CasePayDTO {
/**
* 案件id
*/
private List<Long> caseIds;
/**
* 订单金额 单位:分
*/
private int totalFee;
/**
* 交易类型 native(扫码) / jsapi(小程序) / app / h5
*/
private String tradeType;
/**
* 支付方式 wxpay(微信) alipay(支付宝)
*/
private String platform;
/**
* 支付方式 0线上支付,1线下支付
*/
private Integer payType;
/**
* 缴费凭证
*/
private List<CaseAttach> payOrderList;
/**
* 批号
*/
private String batchNumber;
}
@@ -0,0 +1,24 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import com.ruoyi.wisdomarbitrate.domain.CaseApplication;
import com.ruoyi.wisdomarbitrate.domain.CaseLogRecord;
import com.ruoyi.wisdomarbitrate.mapper.CaseLogRecordMapper;
import lombok.Data;
import java.util.List;
@Data
public class ArchivesDetailVO {
/**
* 案件信息
*/
private CaseApplication caseApplication;
/**
* 案件日志信息
*/
private List<CaseLogRecord> caseLogRecordList;
/**
* 快递信息
*/
private List<LogisticsInfoVO> logisticsInfoVOList;
}
@@ -0,0 +1,26 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BookSendVO {
/**
* 案件id
* 申请人邮箱
* 被申请人邮箱
* 申请人快递编号
* 被申请人快递编号
*/
private Long id;
private String appEmail;
private String resEmail;
private String apptrackingNum;
private String restrackingNum;
}
@@ -0,0 +1,67 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import com.ruoyi.wisdomarbitrate.domain.CaseAttach;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CaseDetailVO {
/**
* ID
*/
private Long id;
/**
* 案件编号
*/
private String caseNum;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 被申请人姓名
*/
private String respondentName;
/**
* 借款开始日期
*/
private Date loanStartDate;
/**
* 借款结束日期
*/
private Date loanEndDate;
/**
* 案件标的
*/
private BigDecimal caseSubjectAmount;
/**
* 申请人主张欠本金
*/
private BigDecimal claimPrinciOwed;
/**
* 申请人主张欠利息
*/
private BigDecimal claimInterestOwed;
/**
* 申请人主张违约金
*/
private BigDecimal claimLiquidDamag;
/**
* 证据材料
*/
private List<CaseAttach> evidenceMaterialList;
/**
* 当前登录人身份类型
*/
private Integer identityType;
}
@@ -0,0 +1,200 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.wisdomarbitrate.domain.CaseEvidenceDirectory;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 目录查询返回类
*/
public class CaseEvidenceDirectoryVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 父id
*/
private Long parentId;
/**
* 证据名称
*/
private String evidenceName;
/**
* 附件id
*/
private Integer annexId;
/**
* 级数
*/
private Integer series;
/**
* 案件id
*/
private Long caseId;
/** 子目录 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<CaseEvidenceDirectory> children;
/**
* 附件名称
*/
private String annexName;
/**
* 附件路径
*/
private String annexPath;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime;
/**
* 创建者
*/
private String createBy;
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime;
public CaseEvidenceDirectoryVO(){
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getEvidenceName() {
return evidenceName;
}
public void setEvidenceName(String evidenceName) {
this.evidenceName = evidenceName;
}
public Integer getAnnexId() {
return annexId;
}
public void setAnnexId(Integer annexId) {
this.annexId = annexId;
}
public Integer getSeries() {
return series;
}
public void setSeries(Integer series) {
this.series = series;
}
public Long getCaseId() {
return caseId;
}
public void setCaseId(Long caseId) {
this.caseId = caseId;
}
public List<CaseEvidenceDirectory> getChildren() {
return children;
}
public void setChildren(List<CaseEvidenceDirectory> children) {
this.children = children;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getAnnexName() {
return annexName;
}
public void setAnnexName(String annexName) {
this.annexName = annexName;
}
public void setAnnexPath(String annexPath) {
this.annexPath = annexPath;
}
public CaseEvidenceDirectoryVO(CaseEvidenceDirectory caseEvidenceDirectory) {
this.id = caseEvidenceDirectory.getId();
this.parentId = caseEvidenceDirectory.getParentId();
this.evidenceName = caseEvidenceDirectory.getEvidenceName();
this.annexId = caseEvidenceDirectory.getAnnexId();
this.series = caseEvidenceDirectory.getSeries();
this.caseId = caseEvidenceDirectory.getCaseId();
this.children = caseEvidenceDirectory.getChildren();
this.createTime = caseEvidenceDirectory.getCreateTime();
this.createBy = caseEvidenceDirectory.getCreateBy();
this.updateBy = caseEvidenceDirectory.getUpdateBy();
this.updateTime = caseEvidenceDirectory.getUpdateTime();
this.annexName = caseEvidenceDirectory.getAnnexName();
this.annexPath = caseEvidenceDirectory.getAnnexPath();
}
}
@@ -0,0 +1,40 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class CaseEvidenceVO {
/**
* 案件id
*/
private Long id;
/**
* 案件编号
*/
private String caseNum;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 被申请人姓名
*/
private String respondentName;
/**
* 案件状态
*/
private Integer caseStatus;
/**
* 房间号
*/
private Long roomId;
/**
* 开庭时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleStartTime;
}
@@ -0,0 +1,26 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import com.ruoyi.wisdomarbitrate.domain.CaseApplication;
import com.ruoyi.wisdomarbitrate.domain.CaseApplicationPay;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class CasePayListVO {
/**
* 订单总金额
*/
private BigDecimal totalFee;
/**
* 案件总条数
*/
private int CaseTotal;
/**
* 案件订单列表
*/
private List<CaseApplicationPay> caseApplicationList;
}
@@ -0,0 +1,45 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import lombok.Data;
/**
* 动态配置字段表
*/
@Data
public class ColumnValue {
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 字段,同一个批号,column不可重复
*/
private String column;
/**
* 字段名
*/
private String name;
/**
* 字段值
*/
private String value;
/**
* 案件id
*/
private Long caseId;
/**
* 是否为自定义字段,0-否,1-是
*/
private Integer isDefault;
/**
* 案件日志表id
*/
private Long caseAppliLogId;
}
@@ -0,0 +1,37 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import com.ruoyi.wisdomarbitrate.domain.CaseApplication;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 案件前后对比
* @author wangqiong
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CompareCaseVO {
/**
* 该版本前的案件
*/
private CaseApplication beforeCase;
/**
* 该版本后的案件
*/
private CaseApplication afterCase;
/**
* 变化字段,多个用,拼接
*/
private String changeColumn;
/**
* 自定义字段变化字段,多个用,拼接
*/
private String columnValueChangeColumn;
}
@@ -0,0 +1,16 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import lombok.Data;
@Data
public class LogisticsInfoVO {
/**
* 案件关联人身份类型
*/
private Integer identityType;
/**
* 物流信息
*/
private String logisticsInfo;
}
@@ -0,0 +1,47 @@
package com.ruoyi.wisdomarbitrate.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author wangqiong
* @description 预约会议
* @date 2023-11-08 11:05
*/
@Data
public class ReservedConferenceVO {
/**
* 用户id
*/
private String ownerId;
/**
* 房间号id
*/
private Long roomId;
/**
* 会议开始时间
*/
@NotNull(message = "会议开始时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleStartTime;
/**
* 会议结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date scheduleEndTime;
/**
* 案件id
*/
@NotNull(message = "案件id不能为空")
private Long caseId;
/**
* html内容
*/
private String htmlContent;
}

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