init web
This commit is contained in:
parent
17356d0314
commit
80ed3eae1f
@ -92,7 +92,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.java.dev.jna</groupId>
|
<groupId>net.java.dev.jna</groupId>
|
||||||
<artifactId>jna</artifactId>
|
<artifactId>jna</artifactId>
|
||||||
<version>4.5.2</version>
|
<version>5.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.swagger</groupId>
|
<groupId>io.swagger</groupId>
|
||||||
|
@ -21,7 +21,7 @@ public abstract class KeyTemplateDTO {
|
|||||||
public static class Query extends PageQuery {
|
public static class Query extends PageQuery {
|
||||||
/**
|
/**
|
||||||
* 密钥类型
|
* 密钥类型
|
||||||
* @see com.sunyard.ssp.web.enums.KeyCategory#getCode()
|
* @see com.sunyard.chsm.enums.KeyCategory#getCode()
|
||||||
*/
|
*/
|
||||||
private String keyType;
|
private String keyType;
|
||||||
}
|
}
|
||||||
@ -63,24 +63,23 @@ public abstract class KeyTemplateDTO {
|
|||||||
private String name;
|
private String name;
|
||||||
/**
|
/**
|
||||||
* 密钥类型
|
* 密钥类型
|
||||||
* @see com.sunyard.ssp.web.enums.KeyCategory#getCode()
|
* @see com.sunyard.chsm.enums.KeyCategory#getCode()
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "密钥类型不能为空")
|
@NotBlank(message = "密钥类型不能为空")
|
||||||
private String keyType;
|
private String keyType;
|
||||||
/**
|
/**
|
||||||
* 密钥算法
|
* 密钥算法
|
||||||
* @see com.sunyard.ssp.web.enums.KeyAlg#getCode()
|
* @see com.sunyard.chsm.enums.KeyAlg#getCode()
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "密钥算法不能为空")
|
@NotBlank(message = "密钥算法不能为空")
|
||||||
private String keyAlg;
|
private String keyAlg;
|
||||||
/**
|
/**
|
||||||
* 密钥长度
|
* 密钥长度
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "密钥长度不能为空")
|
|
||||||
private Integer keyLength;
|
private Integer keyLength;
|
||||||
/**
|
/**
|
||||||
* 密钥用途
|
* 密钥用途
|
||||||
* @see com.sunyard.ssp.web.enums.KeyUsage#getCode()
|
* @see com.sunyard.chsm.enums.KeyUsage#getCode()
|
||||||
*/
|
*/
|
||||||
@NotEmpty(message = "密钥用途不能为空")
|
@NotEmpty(message = "密钥用途不能为空")
|
||||||
private List<String> keyUsages;
|
private List<String> keyUsages;
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
package com.sunyard.config;
|
package com.sunyard.config;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||||
|
import org.apache.ibatis.mapping.DatabaseIdProvider;
|
||||||
|
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author liulu
|
* @author liulu
|
||||||
* @since 2024/10/28
|
* @since 2024/10/28
|
||||||
@ -27,4 +33,24 @@ public class MyBatisConfig {
|
|||||||
return interceptor;
|
return interceptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DatabaseIdProvider databaseIdProvider() {
|
||||||
|
VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider(){
|
||||||
|
@Override
|
||||||
|
public String getDatabaseId(DataSource dataSource) {
|
||||||
|
String databaseId = super.getDatabaseId(dataSource);
|
||||||
|
if (StrUtil.isBlank(databaseId)){
|
||||||
|
throw new NullPointerException("多数据库标识为空,请检查数据库连接情况");
|
||||||
|
}
|
||||||
|
return databaseId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.put("Oracle","oracle");
|
||||||
|
properties.put("MySQL","mysql");
|
||||||
|
properties.put("DM","dm");
|
||||||
|
databaseIdProvider.setProperties(properties);
|
||||||
|
return databaseIdProvider;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.sunyard.ssp.modules.common;
|
||||||
|
|
||||||
|
import com.sunyard.ssp.common.Result;
|
||||||
|
import com.sunyard.ssp.common.vo.Captcha;
|
||||||
|
import com.sunyard.ssp.utils.CreateVerifyCode;
|
||||||
|
import com.sunyard.ssp.utils.ResultUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Exrickx
|
||||||
|
*/
|
||||||
|
@Api(description = "验证码接口")
|
||||||
|
@RequestMapping("/common/captcha")
|
||||||
|
@RestController
|
||||||
|
@Transactional
|
||||||
|
@Slf4j
|
||||||
|
public class CaptchaController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private StringRedisTemplate redisTemplate;
|
||||||
|
|
||||||
|
@RequestMapping(value = "/init",method = RequestMethod.GET)
|
||||||
|
@ApiOperation(value = "初始化验证码")
|
||||||
|
public Result<Object> initCaptcha() {
|
||||||
|
|
||||||
|
String captchaId = UUID.randomUUID().toString().replace("-","");
|
||||||
|
String code = new CreateVerifyCode().randomStr(4);
|
||||||
|
Captcha captcha = new Captcha();
|
||||||
|
captcha.setCaptchaId(captchaId);
|
||||||
|
captcha.setCode(code);
|
||||||
|
//缓存验证码
|
||||||
|
redisTemplate.opsForValue().set(captchaId,code,3L, TimeUnit.MINUTES);
|
||||||
|
return new ResultUtil<Object>().setData(captcha);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/draw/{captchaId}", method = RequestMethod.GET)
|
||||||
|
@ApiOperation(value = "根据验证码ID获取图片")
|
||||||
|
public void drawCaptcha(@PathVariable("captchaId") String captchaId, HttpServletResponse response) throws IOException {
|
||||||
|
|
||||||
|
// 得到验证码 生成指定验证码
|
||||||
|
String code=redisTemplate.opsForValue().get(captchaId);
|
||||||
|
CreateVerifyCode vCode = new CreateVerifyCode(116,36,4,10,code);
|
||||||
|
vCode.write(response.getOutputStream());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,319 @@
|
|||||||
|
package com.sunyard.ssp.modules.jna;
|
||||||
|
|
||||||
|
import com.sun.jna.Library;
|
||||||
|
import com.sun.jna.Native;
|
||||||
|
import com.sun.jna.Pointer;
|
||||||
|
import com.sun.jna.ptr.IntByReference;
|
||||||
|
import com.sun.jna.ptr.PointerByReference;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.enums.LibEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author sunyard
|
||||||
|
*/
|
||||||
|
public interface CipherJna extends Library {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载动态库
|
||||||
|
*/
|
||||||
|
CipherJna INSTANCE = Native.load(LibEnum.LIB_NAME.getValue(), CipherJna.class);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开设备
|
||||||
|
* @param phDeviceHandle 设备句柄
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_OpenDevice(PointerByReference phDeviceHandle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭设备
|
||||||
|
* @param hDeviceHandle 设备句柄
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_CloseDevice(Pointer hDeviceHandle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开会话
|
||||||
|
* @param hDeviceHandle 设备句柄
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_OpenSession(Pointer hDeviceHandle, PointerByReference phSessionHandle);
|
||||||
|
|
||||||
|
int SDF_ImportKey(Pointer hSessionHandle, byte[] pucKey, int uiKeyLen, PointerByReference phKeyhandle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭会话
|
||||||
|
* @param hSessionHandle 会话句柄
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_CloseSession(Pointer hSessionHandle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成随机数
|
||||||
|
* @param hSessionHandle 会话句柄
|
||||||
|
* @param uiLength 生成随机数长度
|
||||||
|
* @param pucRandom 存放随机数容器
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_GenerateRandom(Pointer hSessionHandle, int uiLength, byte[] pucRandom);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对称加密
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param hKeyHandle 密钥句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucIV IV数据
|
||||||
|
* @param pucData 待加密数据
|
||||||
|
* @param pucDataLength 待加密数据长度
|
||||||
|
* @param pucEncData 存放密文容器
|
||||||
|
* @param pucEncDataLength 密文长度
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_Encrypt(
|
||||||
|
Pointer phSessionHandle,
|
||||||
|
Pointer hKeyHandle,
|
||||||
|
int uiAlgID,
|
||||||
|
byte[] pucIV,
|
||||||
|
byte[] pucData,
|
||||||
|
int pucDataLength,
|
||||||
|
byte[] pucEncData,
|
||||||
|
IntByReference pucEncDataLength
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对称解密
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param hKeyHandle 密钥句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucIV IV数据
|
||||||
|
* @param purEncData 指向密文数据的指针
|
||||||
|
* @param encDataLength 密文数据长度
|
||||||
|
* @param pucData 输出明文数据
|
||||||
|
* @param pucDataLength 输出明文数据长度
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_Decrypt(
|
||||||
|
Pointer phSessionHandle,
|
||||||
|
Pointer hKeyHandle,
|
||||||
|
int uiAlgID,
|
||||||
|
byte[] pucIV,
|
||||||
|
byte[] purEncData,
|
||||||
|
int encDataLength,
|
||||||
|
byte[] pucData,
|
||||||
|
IntByReference pucDataLength
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成ECC密钥对
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param uiKeyBits 密钥长度
|
||||||
|
* @param pucPublicKey 输出的ECC公钥结构
|
||||||
|
* @param pucPrivateKey 输出的ECC私钥结构
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_GenerateKeyPair_ECC(
|
||||||
|
Pointer phSessionHandle,
|
||||||
|
int uiAlgID,
|
||||||
|
int uiKeyBits,
|
||||||
|
byte[] pucPublicKey,
|
||||||
|
byte[] pucPrivateKey
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成会话密钥并用外部ECC公钥加密输出,输出密钥句柄
|
||||||
|
* @param hSessionHandle 会话句柄
|
||||||
|
* @param uiKeyBits 密钥长度
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucPublicKey ECC公钥结构
|
||||||
|
* @param pucKey 密钥密文
|
||||||
|
* @param phKeyHandle 密钥句柄
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_GenerateKeyWithEPK_ECC(
|
||||||
|
Pointer hSessionHandle,
|
||||||
|
int uiKeyBits,
|
||||||
|
int uiAlgID,
|
||||||
|
byte[] pucPublicKey,
|
||||||
|
byte[] pucKey,
|
||||||
|
PointerByReference phKeyHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 杂凑运算初始化
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucPublicKey ECC公钥结构
|
||||||
|
* @param pucID 签名者的ID值
|
||||||
|
* @param pucIDlength 签名者ID的长度
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_HashInit(Pointer phSessionHandle, int uiAlgID, byte[] pucPublicKey, String pucID, int pucIDlength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 多包杂凑运算
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param pucData 输入的数据明文
|
||||||
|
* @param uiDataLength 输入的数据明文长度
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_HashUpdate(
|
||||||
|
Pointer phSessionHandle, // 使用IntByReference,因为SessionHandle可能是引用类型的
|
||||||
|
byte[] pucData, // 输入的明文数据作为字节数组
|
||||||
|
int uiDataLength // 明文数据长度
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MAC 计算
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param hKeyHadnle 密钥句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucIV IV数据
|
||||||
|
* @param purData 待计算MAC的数据
|
||||||
|
* @param pucDatalength 待计算MAC的数据长度
|
||||||
|
* @param pucMAC MAC值
|
||||||
|
* @param pucMACLength MAC值长度
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int SDF_CalculateMAC(Pointer phSessionHandle,
|
||||||
|
Pointer hKeyHadnle,
|
||||||
|
int uiAlgID,
|
||||||
|
byte[] pucIV,
|
||||||
|
byte[] purData,
|
||||||
|
int pucDatalength,
|
||||||
|
byte[] pucMAC,
|
||||||
|
IntByReference pucMACLength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 杂凑运算结束
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param pucHash 杂凑结果
|
||||||
|
* @param pucHashLength 杂凑结果长度
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_HashFinal(Pointer phSessionHandle, byte[] pucHash, IntByReference pucHashLength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 外部ECC签名
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucPublicKey ECC公钥结构
|
||||||
|
* @param pucData 输入的数据明文
|
||||||
|
* @param pucDataLength 输入的数据明文长度
|
||||||
|
* @param pucECCSignature 输出的签名值数据
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_ExternalSign_ECC(
|
||||||
|
Pointer phSessionHandle,
|
||||||
|
int uiAlgID,
|
||||||
|
byte[] pucPublicKey,
|
||||||
|
byte[] pucData,
|
||||||
|
int pucDataLength,
|
||||||
|
byte[] pucECCSignature
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 外部ECC验签
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucPublicKey ECC公钥结构
|
||||||
|
* @param pucData 输入的数据明文
|
||||||
|
* @param pucDataLength 输入的数据明文长度
|
||||||
|
* @param pucECCSignature 输入的签名值数据
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_ExternalVerify_ECC(Pointer phSessionHandle, int uiAlgID, byte[] pucPublicKey, byte[] pucData, int pucDataLength, byte[] pucECCSignature);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密钥加密
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucPublicKey ECC公钥结构
|
||||||
|
* @param pucData 输入的数据明文
|
||||||
|
* @param pucDatalength 输入的数据明文长度
|
||||||
|
* @param pucEncData 输出的密文数据
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_ExternalEncrypt_ECC(Pointer phSessionHandle, int uiAlgID, byte[] pucPublicKey, byte[] pucData, int pucDatalength, byte[] pucEncData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密钥解密
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiAlgID 算法标识
|
||||||
|
* @param pucPrivateKey ECC私钥结构
|
||||||
|
* @param pucEncData 输入的密文数据
|
||||||
|
* @param pucDataOut 输出的数据明文
|
||||||
|
* @param pucDatalength 输出的数据明文长度
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_ExternalDecrypt_ECC(Pointer phSessionHandle, int uiAlgID, byte[] pucPrivateKey, byte[] pucEncData, byte[] pucDataOut, IntByReference pucDatalength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成密钥协商数据
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiISKIndex 密码设备存储私钥的索引值
|
||||||
|
* @param uiKeyBits 要求协商的密钥长度
|
||||||
|
* @param pucSponsorID 参与密钥协商的发起方ID值
|
||||||
|
* @param uiSponsorIDLength 发起方ID长度
|
||||||
|
* @param pucSponsorPublicKey 返回的发起方ECC公钥结构
|
||||||
|
* @param pucSponsorTmpPublicKey 返回的发起方临时ECC公钥结构
|
||||||
|
* @param phAgreementHandle 返回的协商对象,用于计算协商密钥
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_GenerateAgreementDataWithECC(Pointer phSessionHandle, int uiISKIndex, int uiKeyBits,
|
||||||
|
String pucSponsorID, int uiSponsorIDLength,
|
||||||
|
byte[] pucSponsorPublicKey, byte[] pucSponsorTmpPublicKey,
|
||||||
|
PointerByReference phAgreementHandle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成密钥协商数据并计算密钥
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiISKIndex 密码设备存储私钥的索引值
|
||||||
|
* @param uiKeyBits 要求协商的密钥长度
|
||||||
|
* @param pucResponseID 参与密钥协商的响应方ID值
|
||||||
|
* @param uiResponseIDLength 响应方ID长度
|
||||||
|
* @param pucSponsorID 参与密钥协商的发起方ID值
|
||||||
|
* @param uiSponsorIDLength 发起方ID长度
|
||||||
|
* @param pucSponsorPublicKey 发起方ECC公钥结构
|
||||||
|
* @param pucSponsorTmpPublicKey 发起方临时ECC公钥结构
|
||||||
|
* @param pucResponsePublicKey 响应方ECC公钥结构
|
||||||
|
* @param pucResponseTmpPublicKey 响应方临时ECC公钥结构
|
||||||
|
* @param phKeyhandle 返回的密钥句柄
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int SDF_GenerateAgreementDataAndKeyWithECC(
|
||||||
|
Pointer phSessionHandle,
|
||||||
|
int uiISKIndex,
|
||||||
|
int uiKeyBits,
|
||||||
|
String pucResponseID,
|
||||||
|
int uiResponseIDLength,
|
||||||
|
String pucSponsorID,
|
||||||
|
int uiSponsorIDLength,
|
||||||
|
byte[] pucSponsorPublicKey,
|
||||||
|
byte[] pucSponsorTmpPublicKey,
|
||||||
|
byte[] pucResponsePublicKey,
|
||||||
|
byte[] pucResponseTmpPublicKey,
|
||||||
|
PointerByReference phKeyhandle
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取私钥访问权
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiKeyIndex 密码设备存储私钥的索引值
|
||||||
|
* @param pucPassword 使用私钥权限的标识码
|
||||||
|
* @param uiPwdLength 私钥访问控制码长度,不少于8字节
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_GetPrivateKeyAccessRight(Pointer phSessionHandle, int uiKeyIndex, String pucPassword, int uiPwdLength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 释放私钥访问权
|
||||||
|
* @param phSessionHandle 会话句柄
|
||||||
|
* @param uiKeyIndex 密码设备存储私钥的索引值
|
||||||
|
* @return int 响应码
|
||||||
|
*/
|
||||||
|
int SDF_ReleasePrivateKeyAccessRight(Pointer phSessionHandle, int uiKeyIndex);
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.sunyard.ssp.modules.monitor.transaction.controller;
|
||||||
|
|
||||||
|
import com.sunyard.ssp.common.Result;
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalParam;
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.service.TransactionService;
|
||||||
|
import com.sunyard.ssp.utils.ResultUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@Slf4j
|
||||||
|
@Api(description = "系统监控-交易监控", tags = "系统监控-交易监控")
|
||||||
|
@RequestMapping("/monitor/transaction")
|
||||||
|
@Transactional
|
||||||
|
public class TransactionController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TransactionService transactionService;
|
||||||
|
|
||||||
|
@RequestMapping(value = "/getTransactionData", method = RequestMethod.POST)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "获得交易监控的数据")
|
||||||
|
public Result<Object> getStaticInfo(@ModelAttribute StatisticalParam statisticalParam) {
|
||||||
|
Object result = transactionService.getTransactionData(statisticalParam);
|
||||||
|
return new ResultUtil<Object>().setData(result);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.sunyard.ssp.modules.monitor.transaction.entity;
|
||||||
|
|
||||||
|
public interface StatisticalConstant {
|
||||||
|
|
||||||
|
String STATISTICAL_METHOD_PIE_CHART = "pieChart";
|
||||||
|
|
||||||
|
String STATISTICAL_METHOD_LINE_CHART_TIME_INTERVAL= "lineChartTimeInterval";
|
||||||
|
|
||||||
|
String STATISTICAL_METHOD_LINE_CHART_KEY_GROUP = "lineChartKeyGroup";
|
||||||
|
|
||||||
|
String TIME_MONTH_FORMAT = "yyyy-mm";
|
||||||
|
|
||||||
|
String TIME_MONTH_WEAK_FORMAT = "yyyy-mm-w";
|
||||||
|
|
||||||
|
String TIME_WEAK_FORMAT = "yyyy-iw";
|
||||||
|
|
||||||
|
String TIME_DAY_FORMAT = "yyyy-mm-dd";
|
||||||
|
|
||||||
|
String TIME_HOUR_FORMAT = "yyyy-mm-dd HH24";
|
||||||
|
|
||||||
|
String TIME_METHOD_MONTH = "month";
|
||||||
|
|
||||||
|
String TIME_METHOD_DAY = "day";
|
||||||
|
|
||||||
|
String TIME_METHOD_WEAK = "week";
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package com.sunyard.ssp.modules.monitor.transaction.entity;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="", description="统计参数")
|
||||||
|
public class StatisticalParam {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "统计方式(lineChartTimeInterval-不带对称秘钥 lineChartKeyGroup-带对称秘钥)(必传)")
|
||||||
|
private String statisticalMethod;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "服务名")
|
||||||
|
private String server;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "渠道Id")
|
||||||
|
private String channelId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "方案Id")
|
||||||
|
private String solutionNumber;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "秘钥类型")
|
||||||
|
private String group;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "统计时间")
|
||||||
|
private String inputStatisticalTime;
|
||||||
|
|
||||||
|
private LocalDate sqlStatisticalTime;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "统计时间方式(月-month 周-weak 日-day)(必传)")
|
||||||
|
private String timeInterval;
|
||||||
|
|
||||||
|
private String timeIntervalFormat;
|
||||||
|
|
||||||
|
private String sqlStatisticalTimeFormat;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.sunyard.ssp.modules.monitor.transaction.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class StatisticalResult {
|
||||||
|
|
||||||
|
private Integer successCount;
|
||||||
|
|
||||||
|
private Integer failCount;
|
||||||
|
|
||||||
|
private String statisticalTime;
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
package com.sunyard.ssp.modules.monitor.transaction.mapper;
|
||||||
|
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalParam;
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalResult;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface StatisticalMapper {
|
||||||
|
|
||||||
|
// @Select("<script>" +
|
||||||
|
// " select SUM(SUCCESS_COUNT) as successCount,SUM(FAIL_COUNT) as failCount from SC_BUSINESS_STATISTICS\n" +
|
||||||
|
// " <where>\n" +
|
||||||
|
// " <if test=\"statisticalParam.server != null and statisticalParam.server != ''\">\n" +
|
||||||
|
// " and SERVER = #{statisticalParam.server}\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " <if test=\"statisticalParam.channelId != null\">\n" +
|
||||||
|
// " and CHANNEL_ID = #{statisticalParam.channelId}\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " <if test=\"statisticalParam.solutionId != null\">\n" +
|
||||||
|
// " and SOLUTION__ID = #{statisticalParam.solutionId}\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " <if test=\"statisticalParam.startTime != null and statisticalParam.endTime != null\">\n" +
|
||||||
|
// " and \"CURRENT_TIME\" between to_date(#{statisticalParam.startTime},'YYYY-MM-DD HH24:MI:SS') and to_date(#{statisticalParam.endTime},'YYYY-MM-DD HH24:MI:SS')\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " </where>" +
|
||||||
|
// "</script>")
|
||||||
|
StatisticalResult countPieChart(@Param("statisticalParam") StatisticalParam statisticalParam);
|
||||||
|
|
||||||
|
// @Select("<script>" +
|
||||||
|
// " select to_char(\"CURRENT_TIME\",'${statisticalParam.timeIntervalFormat}') as statisticalTime,\n" +
|
||||||
|
// " SUM(SUCCESS_COUNT) as successCount,\n" +
|
||||||
|
// " SUM(FAIL_COUNT) as failCount \n" +
|
||||||
|
// " from SC_BUSINESS_STATISTICS\n" +
|
||||||
|
// " <where>\n" +
|
||||||
|
// " <if test=\"statisticalParam.server != null and statisticalParam.server != ''\">\n" +
|
||||||
|
// " and SERVER = #{statisticalParam.server}\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " <if test=\"statisticalParam.channelId != null\">\n" +
|
||||||
|
// " and CHANNEL_ID = #{statisticalParam.channelId}\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " <if test=\"statisticalParam.solutionNumber != null\">\n" +
|
||||||
|
// " and SOLUTION_NUMBER = #{statisticalParam.solutionNumber}\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " <if test=\"statisticalParam.sqlStatisticalTime != null and statisticalParam.sqlStatisticalTimeFormat !=null\">\n" +
|
||||||
|
// " and to_char(TRUNC(\"CURRENT_TIME\"),'${statisticalParam.sqlStatisticalTimeFormat}') = (SELECT TO_CHAR (#{statisticalParam.sqlStatisticalTime}, '${statisticalParam.sqlStatisticalTimeFormat}') FROM DUAL)\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " </where>\n" +
|
||||||
|
// " group by to_char(\"CURRENT_TIME\",'${statisticalParam.timeIntervalFormat}')\n" +
|
||||||
|
// " order by to_char(\"CURRENT_TIME\",'${statisticalParam.timeIntervalFormat}')" +
|
||||||
|
// "</script>")
|
||||||
|
List<StatisticalResult> countLineChartByTimeInterval(@Param("statisticalParam") StatisticalParam statisticalParam);
|
||||||
|
|
||||||
|
// @Select("<script>" +
|
||||||
|
// " select to_char(\"CURRENT_TIME\",'${statisticalParam.timeIntervalFormat}') as statisticalTime ,SUM(SUCCESS_COUNT) as successCount,SUM(FAIL_COUNT) as failCount\n" +
|
||||||
|
// " from SC_BUSINESS_STATISTICS\n" +
|
||||||
|
// " <where>\n" +
|
||||||
|
// " <if test=\"statisticalParam.group != null and statisticalParam.group != ''\">\n" +
|
||||||
|
// " and \"GROUP\" = #{statisticalParam.group}\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " <if test=\"statisticalParam.sqlStatisticalTime != null and statisticalParam.sqlStatisticalTimeFormat !=null\">\n" +
|
||||||
|
// " and to_char(TRUNC(\"CURRENT_TIME\"),'${statisticalParam.sqlStatisticalTimeFormat}') = (SELECT TO_CHAR (#{statisticalParam.sqlStatisticalTime}, '${statisticalParam.sqlStatisticalTimeFormat}') FROM DUAL)\n" +
|
||||||
|
// " </if>\n" +
|
||||||
|
// " </where>\n" +
|
||||||
|
// " group by to_char(\"CURRENT_TIME\",'${statisticalParam.timeIntervalFormat}')\n" +
|
||||||
|
// " order by to_char(\"CURRENT_TIME\",'${statisticalParam.timeIntervalFormat}')" +
|
||||||
|
// "</script>")
|
||||||
|
List<StatisticalResult> countLineChartByKeyGroup(@Param("statisticalParam") StatisticalParam statisticalParam);
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.sunyard.ssp.modules.monitor.transaction.service;
|
||||||
|
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalParam;
|
||||||
|
|
||||||
|
public interface TransactionService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计
|
||||||
|
* @param statisticalParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Object getTransactionData(StatisticalParam statisticalParam);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
package com.sunyard.ssp.modules.monitor.transaction.serviceImpl;
|
||||||
|
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalConstant;
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalParam;
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalResult;
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.mapper.StatisticalMapper;
|
||||||
|
import com.sunyard.ssp.modules.monitor.transaction.service.TransactionService;
|
||||||
|
import com.sunyard.ssp.utils.DateUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
@Slf4j
|
||||||
|
public class StatisticalServiceImpl implements TransactionService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private StatisticalMapper statisticalMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getTransactionData(StatisticalParam statisticalParam) {
|
||||||
|
statisticalParam = dealWithTimeFormat(statisticalParam);
|
||||||
|
if (StatisticalConstant.STATISTICAL_METHOD_PIE_CHART.equals(statisticalParam.getStatisticalMethod())) {
|
||||||
|
return statisticalMapper.countPieChart(statisticalParam);
|
||||||
|
} else if (StatisticalConstant.STATISTICAL_METHOD_LINE_CHART_TIME_INTERVAL.equals(statisticalParam.getStatisticalMethod())) {
|
||||||
|
List<StatisticalResult> statisticalResults = statisticalMapper.countLineChartByTimeInterval(statisticalParam);
|
||||||
|
return dealReturnTimeFormat(statisticalResults, statisticalParam.getTimeInterval());
|
||||||
|
} else if (StatisticalConstant.STATISTICAL_METHOD_LINE_CHART_KEY_GROUP.equals(statisticalParam.getStatisticalMethod())) {
|
||||||
|
List<StatisticalResult> statisticalResults = statisticalMapper.countLineChartByKeyGroup(statisticalParam);
|
||||||
|
return dealReturnTimeFormat(statisticalResults, statisticalParam.getTimeInterval());
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理时间格式
|
||||||
|
*
|
||||||
|
* @param statisticalParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private StatisticalParam dealWithTimeFormat(StatisticalParam statisticalParam) {
|
||||||
|
statisticalParam.setSqlStatisticalTime(DateUtil.StringToDate(statisticalParam.getInputStatisticalTime()));
|
||||||
|
if (StatisticalConstant.TIME_METHOD_MONTH.equals(statisticalParam.getTimeInterval())) {
|
||||||
|
statisticalParam.setSqlStatisticalTimeFormat(StatisticalConstant.TIME_MONTH_FORMAT);
|
||||||
|
statisticalParam.setTimeIntervalFormat(StatisticalConstant.TIME_MONTH_WEAK_FORMAT);
|
||||||
|
} else if (StatisticalConstant.TIME_METHOD_WEAK.equals(statisticalParam.getTimeInterval())) {
|
||||||
|
statisticalParam.setSqlStatisticalTimeFormat(StatisticalConstant.TIME_WEAK_FORMAT);
|
||||||
|
statisticalParam.setTimeIntervalFormat(StatisticalConstant.TIME_DAY_FORMAT);
|
||||||
|
} else {
|
||||||
|
statisticalParam.setSqlStatisticalTimeFormat(StatisticalConstant.TIME_DAY_FORMAT);
|
||||||
|
statisticalParam.setTimeIntervalFormat(StatisticalConstant.TIME_HOUR_FORMAT);
|
||||||
|
}
|
||||||
|
return statisticalParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出来返回时间
|
||||||
|
*
|
||||||
|
* @param statisticalResults
|
||||||
|
* @param timeMethod
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<StatisticalResult> dealReturnTimeFormat(List<StatisticalResult> statisticalResults, String timeMethod) {
|
||||||
|
if (StatisticalConstant.TIME_METHOD_MONTH.equals(timeMethod)) {
|
||||||
|
statisticalResults.forEach(statisticalResult -> {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append(statisticalResult.getStatisticalTime());
|
||||||
|
stringBuilder.setCharAt(7, '月');
|
||||||
|
stringBuilder.insert(8, " 第");
|
||||||
|
stringBuilder.append("周");
|
||||||
|
statisticalResult.setStatisticalTime(stringBuilder.toString());
|
||||||
|
});
|
||||||
|
} else if (StatisticalConstant.TIME_METHOD_DAY.equals(timeMethod)) {
|
||||||
|
statisticalResults.forEach(statisticalResult -> {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append(statisticalResult.getStatisticalTime());
|
||||||
|
stringBuilder.append("时");
|
||||||
|
statisticalResult.setStatisticalTime(stringBuilder.toString());
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
return statisticalResults;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,230 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.controller;
|
||||||
|
|
||||||
|
import com.sun.jna.Pointer;
|
||||||
|
import com.sun.jna.ptr.PointerByReference;
|
||||||
|
import com.sunyard.proto.Util;
|
||||||
|
import com.sunyard.ssp.common.Result;
|
||||||
|
import com.sunyard.ssp.common.annotation.AuditControllerLog;
|
||||||
|
import com.sunyard.ssp.common.exception.SspwebException;
|
||||||
|
import com.sunyard.ssp.modules.jna.CipherJna;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachine;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachineVo;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.enums.RetEnum;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.service.ScCipherMachineService;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.utils.IniFileUpdater;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.paramconf.entity.ParamConf;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.paramconf.service.IParamConfService;
|
||||||
|
import com.sunyard.ssp.utils.ResultUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密码部件管理控制层
|
||||||
|
*
|
||||||
|
* @author admin
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
@Slf4j
|
||||||
|
@Api(description = "关键密码部件管理接口", tags = "关键密码部件管理")
|
||||||
|
@RequestMapping("/cipherMachine")
|
||||||
|
public class ScCipherMachineController {
|
||||||
|
@Autowired
|
||||||
|
private ScCipherMachineService scCipherMachineService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IParamConfService iParamConfService;
|
||||||
|
|
||||||
|
// @ControllerLog("获取关键密码部件部件")
|
||||||
|
@RequestMapping(value = "/query", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "获取关键密码部件部件")
|
||||||
|
public Result<ScCipherMachineVo> queryCipherMachine() {
|
||||||
|
log.info("get请求 /cipherMachine/query接口");
|
||||||
|
ScCipherMachineVo scCipherMachineVo = scCipherMachineService.queryCipherMachine();
|
||||||
|
log.info("获取密码部件功能响应结果:{}", scCipherMachineVo);
|
||||||
|
return new ResultUtil<ScCipherMachineVo>().setData(scCipherMachineVo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ControllerLog("添加关键密码部件配置")
|
||||||
|
@RequestMapping(value = "/add", method = RequestMethod.POST)
|
||||||
|
@AuditControllerLog(description = "添加关键密码部件配置",operateType = "增加")
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "添加关键密码部件配置")
|
||||||
|
public Result<Object> addCipherMachine(@RequestBody ScCipherMachine scCipherMachine) {
|
||||||
|
try {
|
||||||
|
ScCipherMachine scCipherMachineVo = scCipherMachineService.addCipherMachine(scCipherMachine);
|
||||||
|
IniFileUpdater.updateIniFile(scCipherMachine.getIp(),(String) scCipherMachine.getPort());
|
||||||
|
return new ResultUtil<>().setData(scCipherMachineVo);
|
||||||
|
} catch (SspwebException e) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(e.getMsg());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @ControllerLog("检测")
|
||||||
|
@RequestMapping(value = "/detection", method = RequestMethod.POST)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "检测")
|
||||||
|
public Result<Object> detection() {
|
||||||
|
int size = 16;
|
||||||
|
PointerByReference phDeviceHandle = new PointerByReference();
|
||||||
|
PointerByReference phSessionHandle = new PointerByReference();
|
||||||
|
int code = RetEnum.SUCCESS.getCode();
|
||||||
|
try {
|
||||||
|
|
||||||
|
// 打开设备
|
||||||
|
int ret = CipherJna.INSTANCE.SDF_OpenDevice(phDeviceHandle);
|
||||||
|
if (ret != code) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(ret, "打开设备失败,密码模块初始化失败");
|
||||||
|
}
|
||||||
|
Pointer hDeviceHandle = phDeviceHandle.getValue();
|
||||||
|
// 打开会话
|
||||||
|
ret = CipherJna.INSTANCE.SDF_OpenSession(hDeviceHandle, phSessionHandle);
|
||||||
|
if (ret != code) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(ret, "打开会话失败,密码模块初始化失败");
|
||||||
|
}
|
||||||
|
byte[] nakedSign = new byte[size];
|
||||||
|
// 生成随机数
|
||||||
|
ret = CipherJna.INSTANCE.SDF_GenerateRandom(phSessionHandle.getValue(), 16, nakedSign);
|
||||||
|
if (ret != code) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(ret, "生成随机数失败,密码模块初始化失败");
|
||||||
|
}
|
||||||
|
// 返回结果
|
||||||
|
String result = Util.bytes2HexString(nakedSign);
|
||||||
|
log.info("检测功能响应结果:{}", result);
|
||||||
|
return new ResultUtil<>().setData(result);
|
||||||
|
} catch (SspwebException e) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(e.getMsg());
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("检测异常:" + e);
|
||||||
|
return new ResultUtil<Object>().setErrorMsg("密码模块初始化失败");
|
||||||
|
} finally {
|
||||||
|
// 关闭会话
|
||||||
|
if (phSessionHandle.getValue() != null) {
|
||||||
|
int ret = CipherJna.INSTANCE.SDF_CloseSession(phSessionHandle.getValue());
|
||||||
|
if (ret != code) {
|
||||||
|
log.error("关闭会话失败:{}", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 关闭设备
|
||||||
|
if (phDeviceHandle.getValue() != null) {
|
||||||
|
int ret = CipherJna.INSTANCE.SDF_CloseDevice(phDeviceHandle.getValue());
|
||||||
|
if (ret != code) {
|
||||||
|
log.error("关闭设备失败:{}", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ControllerLog("密码模块初始化")
|
||||||
|
@RequestMapping(value = "/init", method = RequestMethod.POST)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "密码模块初始化")
|
||||||
|
public Result<Object> init() {
|
||||||
|
int size = 16;
|
||||||
|
PointerByReference phDeviceHandle = new PointerByReference();
|
||||||
|
PointerByReference phSessionHandle = new PointerByReference();
|
||||||
|
int code = RetEnum.SUCCESS.getCode();
|
||||||
|
try {
|
||||||
|
|
||||||
|
// // 打开设备
|
||||||
|
// int ret = CipherJna.INSTANCE.SDF_OpenDevice(phDeviceHandle);
|
||||||
|
// if (ret != code) {
|
||||||
|
// return new ResultUtil<Object>().setErrorMsg(ret, "打开设备失败");
|
||||||
|
// }
|
||||||
|
// Pointer hDeviceHandle = phDeviceHandle.getValue();
|
||||||
|
// // 打开会话
|
||||||
|
// ret = CipherJna.INSTANCE.SDF_OpenSession(hDeviceHandle, phSessionHandle);
|
||||||
|
// if (ret != code) {
|
||||||
|
// return new ResultUtil<Object>().setErrorMsg(ret, "打开会话失败");
|
||||||
|
// }
|
||||||
|
// byte[] nakedSign = new byte[size];
|
||||||
|
// // 生成随机数
|
||||||
|
// ret = CipherJna.INSTANCE.SDF_GenerateRandom(phSessionHandle.getValue(), 16, nakedSign);
|
||||||
|
// if (ret != code) {
|
||||||
|
// return new ResultUtil<Object>().setErrorMsg(ret, "生成随机数失败");
|
||||||
|
// }
|
||||||
|
// // 返回结果
|
||||||
|
// String result = Util.bytes2HexString(nakedSign);
|
||||||
|
// log.info("检测功能响应结果:{}", result);
|
||||||
|
ParamConf paramConf = iParamConfService.selectByKey("initStatus");
|
||||||
|
if (paramConf != null) {
|
||||||
|
paramConf.setValue("1");
|
||||||
|
iParamConfService.updateById(paramConf);
|
||||||
|
}
|
||||||
|
return new ResultUtil<>().setSuccessMsg("初始化成功");
|
||||||
|
} catch (SspwebException e) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(e.getMsg());
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("检测异常:" + e);
|
||||||
|
return new ResultUtil<Object>().setErrorMsg("检测失败");
|
||||||
|
} finally {
|
||||||
|
// 关闭会话
|
||||||
|
if (phSessionHandle.getValue() != null) {
|
||||||
|
int ret = CipherJna.INSTANCE.SDF_CloseSession(phSessionHandle.getValue());
|
||||||
|
if (ret != code) {
|
||||||
|
log.error("关闭会话失败:{}", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 关闭设备
|
||||||
|
if (phDeviceHandle.getValue() != null) {
|
||||||
|
int ret = CipherJna.INSTANCE.SDF_CloseDevice(phDeviceHandle.getValue());
|
||||||
|
if (ret != code) {
|
||||||
|
log.error("关闭设备失败:{}", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ControllerLog("密码模块初始化状态获取")
|
||||||
|
@RequestMapping(value = "/init/status", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "密码模块初始化状态获取")
|
||||||
|
public Result<Object> initStatus() {
|
||||||
|
ParamConf paramConf = iParamConfService.selectByKey("initStatus");
|
||||||
|
if (paramConf != null) {
|
||||||
|
return new ResultUtil<>().setData(paramConf.getValue());
|
||||||
|
} else {
|
||||||
|
return new ResultUtil<>().setErrorMsg("获取初始化状态失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// @ControllerLog("编辑关键密码部件配置")
|
||||||
|
@RequestMapping(value = "/edit", method = RequestMethod.PUT)
|
||||||
|
@AuditControllerLog(description = "编辑关键密码部件配置",operateType = "修改")
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "编辑关键密码部件配置")
|
||||||
|
public Result<Object> editCipherMachine(@RequestBody ScCipherMachine scCipherMachine) {
|
||||||
|
try {
|
||||||
|
log.info("put请求 /cipherMachine/edit 请求参数:{}", scCipherMachine);
|
||||||
|
ScCipherMachine scCipherMachineVo = scCipherMachineService.editCipherMachine(scCipherMachine);
|
||||||
|
log.info("编辑关键密码部件功能响应结果:{}", scCipherMachineVo);
|
||||||
|
IniFileUpdater.updateIniFile(scCipherMachine.getIp(),(String) scCipherMachine.getPort());
|
||||||
|
return new ResultUtil<>().setData(scCipherMachineVo);
|
||||||
|
} catch (SspwebException e) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(e.getMsg());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @ControllerLog("删除关键密码部件配置")
|
||||||
|
@RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)
|
||||||
|
@AuditControllerLog(description = "删除关键密码部件配置",operateType = "删除")
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "删除关键密码部件配置")
|
||||||
|
public Result<Object> deleteCipherMachine(@PathVariable("id") Long id) {
|
||||||
|
try {
|
||||||
|
log.info("delete请求 /cipherMachine/delete 请求参数:{}", id);
|
||||||
|
scCipherMachineService.deleteCipherMachine(id);
|
||||||
|
return new ResultUtil<>().setData(null);
|
||||||
|
} catch (SspwebException e) {
|
||||||
|
return new ResultUtil<Object>().setErrorMsg(e.getMsg());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.controller;
|
||||||
|
|
||||||
|
import com.sunyard.ssp.common.Result;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.paramconf.entity.ParamConf;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.paramconf.service.IParamConfService;
|
||||||
|
import com.sunyard.ssp.utils.ResultUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@Slf4j
|
||||||
|
@Api(description = "密码部件管理接口", tags = "全局密码模块状态显示")
|
||||||
|
@RequestMapping("/status")
|
||||||
|
public class StatusController {
|
||||||
|
@Autowired
|
||||||
|
IParamConfService iParamConfService;
|
||||||
|
|
||||||
|
// @ControllerLog("获取全局密码模块状态")
|
||||||
|
@RequestMapping(value = "/query", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "获取密码模块状态")
|
||||||
|
public Result<Object> queryStatus() {
|
||||||
|
/*
|
||||||
|
* status = 0 初始化状态; status = 1 密码主管状态; status = 2 密码主管状态; status = 3 自测试状态; status = 4 错误报警状态;
|
||||||
|
* status = 5 核准状态; status = 6 关键参数输入状态;status = 7 核准状态
|
||||||
|
*/
|
||||||
|
ParamConf status = iParamConfService.selectByKey("status");
|
||||||
|
return new ResultUtil<Object>().setData(status.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ControllerLog("修改全局密码模块状态")
|
||||||
|
@RequestMapping(value = "/set", method = RequestMethod.PUT)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation(value = "修改密码模块状态")
|
||||||
|
public Result<Object> setStatus(@RequestParam("value") String value) {
|
||||||
|
ParamConf status = iParamConfService.selectByKey("status");
|
||||||
|
status.setValue(value);
|
||||||
|
iParamConfService.updateById(status);
|
||||||
|
return new ResultUtil<Object>().setData(status.getValue());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,134 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密码部件配置
|
||||||
|
* @TableName SC_CIPHER_MACHINE
|
||||||
|
*/
|
||||||
|
@TableName(value ="SC_CIPHER_MACHINE")
|
||||||
|
@Data
|
||||||
|
public class ScCipherMachine implements Serializable {
|
||||||
|
/**
|
||||||
|
* 主键id
|
||||||
|
*/
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Object id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ip
|
||||||
|
*/
|
||||||
|
private String ip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 端口号
|
||||||
|
*/
|
||||||
|
private Object port;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改时间
|
||||||
|
*/
|
||||||
|
private Date updateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预留字段1
|
||||||
|
*/
|
||||||
|
private String c1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预留字段2
|
||||||
|
*/
|
||||||
|
private String c2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预留字段3
|
||||||
|
*/
|
||||||
|
private String c3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预留字段4
|
||||||
|
*/
|
||||||
|
private String c4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预留字段5
|
||||||
|
*/
|
||||||
|
private String c5;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object that) {
|
||||||
|
if (this == that) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (that == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getClass() != that.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ScCipherMachine other = (ScCipherMachine) that;
|
||||||
|
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
|
||||||
|
&& (this.getIp() == null ? other.getIp() == null : this.getIp().equals(other.getIp()))
|
||||||
|
&& (this.getPort() == null ? other.getPort() == null : this.getPort().equals(other.getPort()))
|
||||||
|
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
|
||||||
|
&& (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()))
|
||||||
|
&& (this.getC1() == null ? other.getC1() == null : this.getC1().equals(other.getC1()))
|
||||||
|
&& (this.getC2() == null ? other.getC2() == null : this.getC2().equals(other.getC2()))
|
||||||
|
&& (this.getC3() == null ? other.getC3() == null : this.getC3().equals(other.getC3()))
|
||||||
|
&& (this.getC4() == null ? other.getC4() == null : this.getC4().equals(other.getC4()))
|
||||||
|
&& (this.getC5() == null ? other.getC5() == null : this.getC5().equals(other.getC5()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
|
||||||
|
result = prime * result + ((getIp() == null) ? 0 : getIp().hashCode());
|
||||||
|
result = prime * result + ((getPort() == null) ? 0 : getPort().hashCode());
|
||||||
|
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
|
||||||
|
result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
|
||||||
|
result = prime * result + ((getC1() == null) ? 0 : getC1().hashCode());
|
||||||
|
result = prime * result + ((getC2() == null) ? 0 : getC2().hashCode());
|
||||||
|
result = prime * result + ((getC3() == null) ? 0 : getC3().hashCode());
|
||||||
|
result = prime * result + ((getC4() == null) ? 0 : getC4().hashCode());
|
||||||
|
result = prime * result + ((getC5() == null) ? 0 : getC5().hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(getClass().getSimpleName());
|
||||||
|
sb.append(" [");
|
||||||
|
sb.append("Hash = ").append(hashCode());
|
||||||
|
sb.append(", id=").append(id);
|
||||||
|
sb.append(", ip=").append(ip);
|
||||||
|
sb.append(", port=").append(port);
|
||||||
|
sb.append(", createTime=").append(createTime);
|
||||||
|
sb.append(", updateTime=").append(updateTime);
|
||||||
|
sb.append(", c1=").append(c1);
|
||||||
|
sb.append(", c2=").append(c2);
|
||||||
|
sb.append(", c3=").append(c3);
|
||||||
|
sb.append(", c4=").append(c4);
|
||||||
|
sb.append(", c5=").append(c5);
|
||||||
|
sb.append(", serialVersionUID=").append(serialVersionUID);
|
||||||
|
sb.append("]");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密码部件vo类
|
||||||
|
* @author admin
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ScCipherMachineVo implements Serializable{
|
||||||
|
/**
|
||||||
|
* 主键id
|
||||||
|
*/
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Object id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ip
|
||||||
|
*/
|
||||||
|
private String ip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 端口号
|
||||||
|
*/
|
||||||
|
private Object port;
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* c配置文件的枚举类
|
||||||
|
* @author admin
|
||||||
|
*/
|
||||||
|
public enum ConfigEnum {
|
||||||
|
/**
|
||||||
|
* 配置项头
|
||||||
|
*/
|
||||||
|
TARGET_SECTION("DEV-0")
|
||||||
|
,
|
||||||
|
/**
|
||||||
|
* 配置文件路径
|
||||||
|
*/
|
||||||
|
CONFIG_FILE_PATH("./config/SYD_SDF.ini");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配置项
|
||||||
|
*/
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
ConfigEnum(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 动态库枚举类
|
||||||
|
* @author admin
|
||||||
|
*/
|
||||||
|
public enum LibEnum {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 动态库路径
|
||||||
|
*/
|
||||||
|
LIB_PATH("./lib"),
|
||||||
|
LIB_NAME("sydsdf"),
|
||||||
|
LIB_CONFIG_FILE("./config/SYD_SDF.ini");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*/
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
LibEnum(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应码枚举类
|
||||||
|
* @author admin
|
||||||
|
*/
|
||||||
|
public enum RetEnum {
|
||||||
|
/**
|
||||||
|
* 成功
|
||||||
|
*/
|
||||||
|
SUCCESS(0, "成功");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应码
|
||||||
|
*/
|
||||||
|
private final int code;
|
||||||
|
/**
|
||||||
|
* 响应描述
|
||||||
|
*/
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
RetEnum(int code, String desc) {
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getDesc() {
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachine;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author admin
|
||||||
|
* @description 针对表【SC_CIPHER_MACHINE(密码部件配置)】的数据库操作Mapper
|
||||||
|
* @createDate 2024-05-16 14:20:57
|
||||||
|
* @Entity com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachine
|
||||||
|
*/
|
||||||
|
public interface ScCipherMachineMapper extends BaseMapper<ScCipherMachine> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachine;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachineVo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author admin
|
||||||
|
* @description 针对表【SC_CIPHER_MACHINE(密码部件配置)】的数据库操作Service
|
||||||
|
* @createDate 2024-05-16 14:20:57
|
||||||
|
*/
|
||||||
|
public interface ScCipherMachineService extends IService<ScCipherMachine> {
|
||||||
|
/**
|
||||||
|
* 查询密码部件配置
|
||||||
|
* @return 密码部件vo类 ScCipherMachine
|
||||||
|
*/
|
||||||
|
ScCipherMachineVo queryCipherMachine();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加密码部件配置
|
||||||
|
* @param scCipherMachine 密码部件配置
|
||||||
|
* @return scCipherMachine 添加后的结果
|
||||||
|
*/
|
||||||
|
ScCipherMachine addCipherMachine(ScCipherMachine scCipherMachine);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改密码部件配置
|
||||||
|
* @param scCipherMachine 密码部件配置
|
||||||
|
* @return scCipherMachine 添加后的结果
|
||||||
|
*/
|
||||||
|
ScCipherMachine editCipherMachine(ScCipherMachine scCipherMachine);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除密码部件配置
|
||||||
|
* @param id 要删除的id
|
||||||
|
*/
|
||||||
|
void deleteCipherMachine(Long id);
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.sunyard.ssp.common.exception.SspwebException;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachine;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.entity.ScCipherMachineVo;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.mapper.ScCipherMachineMapper;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.service.ScCipherMachineService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author admin
|
||||||
|
* @description 针对表【SC_CIPHER_MACHINE(密码部件配置)】的数据库操作Service实现
|
||||||
|
* @createDate 2024-05-16 14:20:57
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class ScCipherMachineServiceImpl extends ServiceImpl<ScCipherMachineMapper, ScCipherMachine>
|
||||||
|
implements ScCipherMachineService{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScCipherMachineVo queryCipherMachine() {
|
||||||
|
ScCipherMachine scCipherMachine = baseMapper.selectOne(new QueryWrapper<>());
|
||||||
|
ScCipherMachineVo scCipherMachineVo = new ScCipherMachineVo();
|
||||||
|
BeanUtil.copyProperties(scCipherMachine,scCipherMachineVo);
|
||||||
|
return scCipherMachineVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScCipherMachine addCipherMachine(ScCipherMachine scCipherMachine) {
|
||||||
|
if (Objects.isNull(scCipherMachine)){
|
||||||
|
throw new SspwebException("必要参数不能为空");
|
||||||
|
}
|
||||||
|
Long count = baseMapper.selectCount(new QueryWrapper<>());
|
||||||
|
if (count>=1){
|
||||||
|
throw new SspwebException("已经存在密码部件配置");
|
||||||
|
}
|
||||||
|
int insert = baseMapper.insert(scCipherMachine);
|
||||||
|
if (insert<=0){
|
||||||
|
throw new SspwebException("添加失败");
|
||||||
|
}
|
||||||
|
return scCipherMachine;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScCipherMachine editCipherMachine(ScCipherMachine scCipherMachine) {
|
||||||
|
if (Objects.isNull(scCipherMachine)){
|
||||||
|
throw new SspwebException("必要参数不能为空");
|
||||||
|
}
|
||||||
|
Long count = baseMapper.selectCount(new QueryWrapper<ScCipherMachine>().eq("id",scCipherMachine.getId()));
|
||||||
|
if (count<1){
|
||||||
|
throw new SspwebException("不存在密码部件配置");
|
||||||
|
}
|
||||||
|
int update = baseMapper.updateById(scCipherMachine);
|
||||||
|
if (update<=0){
|
||||||
|
throw new SspwebException("修改失败");
|
||||||
|
}
|
||||||
|
return scCipherMachine;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteCipherMachine(Long id) {
|
||||||
|
if (Objects.isNull(id)){
|
||||||
|
throw new SspwebException("必要参数不能为空");
|
||||||
|
}
|
||||||
|
int i = baseMapper.deleteById(id);
|
||||||
|
if (i<1){
|
||||||
|
throw new SspwebException("删除失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.cipherunit.utils;
|
||||||
|
|
||||||
|
import com.sunyard.ssp.modules.sysconf.cipherunit.enums.ConfigEnum;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ini文件更新工具类
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class IniFileUpdater {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新ini文件
|
||||||
|
*
|
||||||
|
* @param ip IP地址
|
||||||
|
* @param port 端口号
|
||||||
|
*/
|
||||||
|
public static void updateIniFile(String ip, String port) {
|
||||||
|
String filePath = ConfigEnum.CONFIG_FILE_PATH.getValue();
|
||||||
|
String targetSection = ConfigEnum.TARGET_SECTION.getValue();
|
||||||
|
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
|
||||||
|
StringBuilder content = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
boolean sectionFound = false;
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (line.trim().startsWith("[" + targetSection + "]")) {
|
||||||
|
// 找到目标部分
|
||||||
|
sectionFound = true;
|
||||||
|
content.append(line).append(System.lineSeparator());
|
||||||
|
|
||||||
|
// 修改[DEV-0]部分的配置
|
||||||
|
content.append("IP=").append(ip).append(System.lineSeparator());
|
||||||
|
content.append("PORT=").append(port).append(System.lineSeparator());
|
||||||
|
// 添加回车符
|
||||||
|
content.append(System.lineSeparator());
|
||||||
|
} else if (sectionFound && line.trim().startsWith("[")) {
|
||||||
|
// 目标部分已处理完毕,遇到下一个部分
|
||||||
|
sectionFound = false;
|
||||||
|
content.append(line).append(System.lineSeparator());
|
||||||
|
} else if (!sectionFound) {
|
||||||
|
// 非目标部分
|
||||||
|
content.append(line).append(System.lineSeparator());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将修改后的内容写回原始文件
|
||||||
|
FileWriter writer = new FileWriter(filePath);
|
||||||
|
writer.write(content.toString());
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
System.out.println("INI file updated successfully.");
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,140 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.sunyard.ssp.common.PageVo;
|
||||||
|
import com.sunyard.ssp.common.Result;
|
||||||
|
import com.sunyard.ssp.common.annotation.AuditControllerLog;
|
||||||
|
import com.sunyard.ssp.common.constant.SqlConstant;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDict;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.service.IScDictDataService;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.service.IScDictService;
|
||||||
|
import com.sunyard.ssp.utils.ResultUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.dao.DuplicateKeyException;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 前端控制器
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
@Slf4j
|
||||||
|
@RequestMapping("/sysconf/scDict")
|
||||||
|
@Transactional
|
||||||
|
@Api(description = "系统配置-字典管理", tags = "系统配置-字典管理")
|
||||||
|
public class ScDictController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IScDictService iScDictService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IScDictDataService iScDictDataService;
|
||||||
|
|
||||||
|
@RequestMapping(value = "/search", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("根据字典关键字查询")
|
||||||
|
public Result<List<ScDict>> search(@RequestParam String key) {
|
||||||
|
List<ScDict> scDicts = iScDictService.selectByKey(key);
|
||||||
|
return new ResultUtil<List<ScDict>>().setData(scDicts);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/getById", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("根据ID获取字典")
|
||||||
|
public Result<ScDict> get(@RequestParam String id) {
|
||||||
|
ScDict entity = iScDictService.getById(id);
|
||||||
|
return new ResultUtil<ScDict>().setData(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/getAll", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("获取所以字典(不分页)")
|
||||||
|
public Result<List<ScDict>> getAll() {
|
||||||
|
|
||||||
|
List<ScDict> list = iScDictService.list(new QueryWrapper<ScDict>().orderByAsc(SqlConstant.DB_SORT_COLUMN));
|
||||||
|
return new ResultUtil<List<ScDict>>().setData(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/page", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("获取所有字典(分页)")
|
||||||
|
public Result<IPage<ScDict>> getByPage(@ModelAttribute PageVo page) {
|
||||||
|
Page<ScDict> data = new Page<>(page.getPageNumber(), page.getPageSize());
|
||||||
|
IPage<ScDict> iPage = iScDictService.page(data);
|
||||||
|
return new ResultUtil<IPage<ScDict>>().setData(iPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/save", method = RequestMethod.POST)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("添加字典")
|
||||||
|
@AuditControllerLog(description = "添加字典", operateType = "新增")
|
||||||
|
public Result<ScDict> save(@ModelAttribute ScDict entity) {
|
||||||
|
Map checkData = iScDictService.checkInputForm(entity);
|
||||||
|
if (!(Boolean) checkData.get("status")) {
|
||||||
|
return new ResultUtil<ScDict>().setErrorMsg((String) checkData.get("message"));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
boolean e = iScDictService.save(entity);
|
||||||
|
if (!e) {
|
||||||
|
return new ResultUtil<ScDict>().setErrorMsg("添加失败");
|
||||||
|
}
|
||||||
|
return new ResultUtil<ScDict>().setSuccessMsg("添加成功");
|
||||||
|
} catch (DuplicateKeyException e) {
|
||||||
|
return new ResultUtil<ScDict>().setErrorMsg("字典名称或字典类型已经存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/update", method = RequestMethod.PUT)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("更新字典")
|
||||||
|
@AuditControllerLog(description = "更新字典", operateType = "更新")
|
||||||
|
public Result<UpdateChainWrapper<ScDict>> update(@ModelAttribute ScDict entity) {
|
||||||
|
Map checkData = iScDictService.checkInputForm(entity);
|
||||||
|
if (!(Boolean) checkData.get("status")) {
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDict>>().setErrorMsg((String) checkData.get("message"));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
boolean e = iScDictService.updateById(entity);
|
||||||
|
if (!e) {
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDict>>().setErrorMsg("更新失败");
|
||||||
|
}
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDict>>().setSuccessMsg("更新成功");
|
||||||
|
} catch (DuplicateKeyException e) {
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDict>>().setErrorMsg("字典名称或字典类型已经存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/deleteByIds", method = RequestMethod.DELETE)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("删除字典(批量)")
|
||||||
|
@AuditControllerLog(description = "删除字典", operateType = "删除")
|
||||||
|
public Result<Object> delAllByIds(@RequestParam String[] ids) {
|
||||||
|
|
||||||
|
for (String id : ids) {
|
||||||
|
iScDictService.removeById(id);
|
||||||
|
iScDictDataService.deleteByDictId(Long.valueOf(id));
|
||||||
|
}
|
||||||
|
return new ResultUtil<Object>().setSuccessMsg("批量通过id删除数据成功");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,171 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.sunyard.ssp.common.PageVo;
|
||||||
|
import com.sunyard.ssp.common.Result;
|
||||||
|
import com.sunyard.ssp.common.annotation.AuditControllerLog;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDictData;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.service.IScDictDataService;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.service.IScDictService;
|
||||||
|
import com.sunyard.ssp.utils.ResultUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.dao.DuplicateKeyException;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 前端控制器
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
@Slf4j
|
||||||
|
@RequestMapping("/sysconf/scDictData")
|
||||||
|
@Transactional
|
||||||
|
@Api(description = "系统配置-字典数据管理",tags = "系统配置-字典数据管理")
|
||||||
|
public class ScDictDataController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IScDictDataService iScDictDataService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IScDictService iScDictService;
|
||||||
|
|
||||||
|
@RequestMapping(value = "/getById",method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("根据Id获取字典数据")
|
||||||
|
public Result<ScDictData> get(@RequestParam String id){
|
||||||
|
|
||||||
|
ScDictData entity = iScDictDataService.getById(id);
|
||||||
|
log.info("根据Id获取字典数据");
|
||||||
|
return new ResultUtil<ScDictData>().setData(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/selectByType",method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("根据类型获取字典数据")
|
||||||
|
public Result<List<ScDictData>> selectByType(@RequestParam String type){
|
||||||
|
List<ScDictData> list = iScDictDataService.selectByDictType(type);
|
||||||
|
log.info("根据类型获取字典数据");
|
||||||
|
return new ResultUtil<List<ScDictData>>().setData(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/selectVersion",method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("根据类型获取系统版本号")
|
||||||
|
public Result selectVersion(){
|
||||||
|
List<ScDictData> list = iScDictDataService.selectByDictType("version");
|
||||||
|
if (Objects.isNull(list)||list.size()<=0) {
|
||||||
|
return new ResultUtil<>().setErrorMsg("未获取到版本号");
|
||||||
|
}
|
||||||
|
ScDictData scDictData = list.get(0);
|
||||||
|
log.info("根据类型获取字典数据");
|
||||||
|
return new ResultUtil<>().setData(scDictData.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("条件查询接口")
|
||||||
|
@RequestMapping(value = "/queryList",method = RequestMethod.POST)
|
||||||
|
@ResponseBody
|
||||||
|
public Result<IPage<ScDictData>> queryList(@RequestBody ScDictData scDictData){
|
||||||
|
try {
|
||||||
|
IPage<ScDictData> scDictDataIPage = iScDictDataService.queryList(scDictData);
|
||||||
|
log.info("条件查询接口");
|
||||||
|
return new ResultUtil<IPage<ScDictData>>().setData(scDictDataIPage);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error(e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/getAll",method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("获取全部字典数据(不分页)")
|
||||||
|
public Result<List<ScDictData>> getAll(){
|
||||||
|
List<ScDictData> list = iScDictDataService.list();
|
||||||
|
return new ResultUtil<List<ScDictData>>().setData(list);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/page",method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("获取全部字典数据(分页)")
|
||||||
|
public Result<IPage<ScDictData>> getByPage(@ModelAttribute PageVo page){
|
||||||
|
Page<ScDictData> data = new Page<>( page.getPageNumber(),page.getPageSize());
|
||||||
|
IPage<ScDictData> iPage = iScDictDataService.page(data);
|
||||||
|
return new ResultUtil<IPage<ScDictData>>().setData(iPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/save",method = RequestMethod.POST)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("添加字典数据")
|
||||||
|
@AuditControllerLog(description = "添加字典数据",operateType = "新增")
|
||||||
|
public Result<ScDictData> save(@ModelAttribute ScDictData entity){
|
||||||
|
Map checkData = iScDictDataService.checkInputData(entity);
|
||||||
|
if(!(Boolean)checkData.get("status")){
|
||||||
|
return new ResultUtil<ScDictData>().setErrorMsg((String)checkData.get("message"));
|
||||||
|
}
|
||||||
|
entity.setCreateTime(LocalDateTime.now());
|
||||||
|
try {
|
||||||
|
boolean e = iScDictDataService.save(entity);
|
||||||
|
if (!e) {
|
||||||
|
return new ResultUtil<ScDictData>().setErrorMsg("添加失败");
|
||||||
|
}
|
||||||
|
return new ResultUtil<ScDictData>().setSuccessMsg("添加成功");
|
||||||
|
}catch (DuplicateKeyException e){
|
||||||
|
return new ResultUtil<ScDictData>().setErrorMsg("数据名称已经存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/update",method = RequestMethod.PUT)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("更新字典数据")
|
||||||
|
@AuditControllerLog(description = "更新字典数据",operateType = "更新")
|
||||||
|
public Result<UpdateChainWrapper<ScDictData>> update(@ModelAttribute ScDictData entity){
|
||||||
|
Map checkData = iScDictDataService.checkInputData(entity);
|
||||||
|
if(!(Boolean)checkData.get("status")){
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDictData>>().setErrorMsg((String)checkData.get("message"));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
boolean e = iScDictDataService.updateById(entity);
|
||||||
|
if (!e) {
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDictData>>().setErrorMsg("更新失败");
|
||||||
|
}
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDictData>>().setSuccessMsg("更新成功");
|
||||||
|
}catch (DuplicateKeyException e){
|
||||||
|
return new ResultUtil<UpdateChainWrapper<ScDictData>>().setErrorMsg("数据名称已经存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/deleteByIds",method = RequestMethod.DELETE)
|
||||||
|
@ResponseBody
|
||||||
|
@ApiOperation("根据字典数据ID删除数据(批量)")
|
||||||
|
@AuditControllerLog(description = "删除字典数据",operateType = "删除")
|
||||||
|
public Result<Object> delAllByIds(@RequestParam String[] ids){
|
||||||
|
|
||||||
|
for(String id:ids){
|
||||||
|
iScDictDataService.removeById(id);
|
||||||
|
}
|
||||||
|
return new ResultUtil<Object>().setSuccessMsg("批量通过id删除数据成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@TableName("SC_DICT")
|
||||||
|
public class ScDict implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId("ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@TableField("CREATE_TIME")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
@TableField("DESCRIPTION")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字典名称
|
||||||
|
*/
|
||||||
|
@TableField("TITLE")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字典类型
|
||||||
|
*/
|
||||||
|
@TableField("TYPE")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作用范围(仅对平台创建字典有效) 1 全部 2 隐藏
|
||||||
|
*/
|
||||||
|
@TableField("SCOPE")
|
||||||
|
private Integer scope;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序值
|
||||||
|
*/
|
||||||
|
@TableField("SORT_ORDER")
|
||||||
|
private Double sortOrder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字典数据,非表映射关系
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private List<ScDictData> scDictDataList;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.sunyard.ssp.common.PageVo;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@TableName("SC_DICT_DATA")
|
||||||
|
@ApiModel(value="", description="")
|
||||||
|
public class ScDictData extends PageVo implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId("ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建时间")
|
||||||
|
@TableField("CREATE_TIME")
|
||||||
|
// @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
@TableField("DESCRIPTION")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属字典
|
||||||
|
*/
|
||||||
|
@TableField("DICT_ID")
|
||||||
|
private Long dictId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序值
|
||||||
|
*/
|
||||||
|
@TableField("SORT_ORDER")
|
||||||
|
private Double sortOrder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用 0启用 -1禁用
|
||||||
|
*/
|
||||||
|
@TableField("STATUS")
|
||||||
|
private Long status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据名称
|
||||||
|
*/
|
||||||
|
@TableField("TITLE")
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据值
|
||||||
|
*/
|
||||||
|
@TableField("VALUE")
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDictData;
|
||||||
|
import org.apache.ibatis.annotations.Delete;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Mapper 接口
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
public interface ScDictDataMapper extends BaseMapper<ScDictData> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按条件查询数据字典
|
||||||
|
* @param iPage 分页
|
||||||
|
* @param scDictData 条件参数
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Select("<script>" +
|
||||||
|
" select * from Sc_DICT_DATA\n" +
|
||||||
|
" <where>\n" +
|
||||||
|
" <if test=\"scDictData.dictId != null\">\n" +
|
||||||
|
" and DICT_ID = #{scDictData.dictId}\n" +
|
||||||
|
" </if>\n" +
|
||||||
|
" <if test=\"scDictData.title != null and scDictData.title != ''\">\n" +
|
||||||
|
" and TITLE like '%${scDictData.title}%'\n" +
|
||||||
|
" </if>\n" +
|
||||||
|
" <if test=\"scDictData.status != null\">\n" +
|
||||||
|
" and STATUS = #{scDictData.status}\n" +
|
||||||
|
" </if>\n" +
|
||||||
|
" </where>\n" +
|
||||||
|
" order by ${scDictData.sort} ${scDictData.order} ,CREATE_TIME desc"+
|
||||||
|
"</script>")
|
||||||
|
List<ScDictData> queryList(IPage<ScDictData> iPage,@Param("scDictData") ScDictData scDictData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据字典id 获取字典数据
|
||||||
|
* @param scDictId 字典边ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Select("<script>"+
|
||||||
|
"select * from Sc_DICT_DATA where DICT_ID = #{ scDictId } and STATUS = 0 order by SORT_ORDER asc"+
|
||||||
|
"</script>")
|
||||||
|
List<ScDictData> selectByDictId(@Param("scDictId") Long scDictId);
|
||||||
|
|
||||||
|
|
||||||
|
@Delete("<script>"+
|
||||||
|
"delete from Sc_DICT_DATA where DICT_ID = #{ scDictId }"+
|
||||||
|
"</script>")
|
||||||
|
void deleteByDictId(@Param("scDictId") Long scDictId);
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDict;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Mapper 接口
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
public interface ScDictMapper extends BaseMapper<ScDict> {
|
||||||
|
|
||||||
|
@Select("<script>" +
|
||||||
|
"select * from SC_DICT where type = #{type}"+
|
||||||
|
"</script>")
|
||||||
|
ScDict selectByType(@Param("type") String type);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDictData;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 服务类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
public interface IScDictDataService extends IService<ScDictData> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取字典数据列表
|
||||||
|
* @param scDictData 查询参数
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
IPage<ScDictData> queryList(ScDictData scDictData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据字典类型返回字典数据
|
||||||
|
* @param type 字典类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ScDictData> selectByDictType(String type);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过字典ID删除字典数据
|
||||||
|
* @param dictId
|
||||||
|
*/
|
||||||
|
void deleteByDictId(Long dictId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测传入数据
|
||||||
|
* @param scDictData
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map checkInputData(ScDictData scDictData);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDict;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 服务类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
public interface IScDictService extends IService<ScDict> {
|
||||||
|
|
||||||
|
List<ScDict> selectByKey(String key);
|
||||||
|
|
||||||
|
Map checkInputForm(ScDict scDict);
|
||||||
|
}
|
@ -0,0 +1,116 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.serviceimpl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.sunyard.ssp.common.constant.SqlConstant;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDict;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDictData;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.mapper.ScDictDataMapper;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.mapper.ScDictMapper;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.service.IScDictDataService;
|
||||||
|
import com.sunyard.ssp.utils.CommonUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 服务实现类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class ScDictDataServiceImpl extends ServiceImpl<ScDictDataMapper, ScDictData> implements IScDictDataService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ScDictDataMapper scDictDataMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ScDictMapper scDictMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage<ScDictData> queryList(ScDictData scDictData){
|
||||||
|
if(scDictData.getSort()==null || scDictData.getSort()==""){
|
||||||
|
scDictData.setSort(SqlConstant.DB_SORT_COLUMN);
|
||||||
|
}else {
|
||||||
|
String sort = CommonUtil.underscoreName(scDictData.getSort());
|
||||||
|
scDictData.setSort(sort);
|
||||||
|
}
|
||||||
|
Page<ScDictData> scDictDataPage = new Page<>(scDictData.getPageNumber(),scDictData.getPageSize());
|
||||||
|
IPage<ScDictData> scDictDataIPage = scDictDataPage.setRecords(scDictDataMapper.queryList(scDictDataPage,scDictData));
|
||||||
|
return scDictDataIPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ScDictData> selectByDictType(String type) {
|
||||||
|
ScDict scDict = scDictMapper.selectByType(type);
|
||||||
|
List<ScDictData> scDictDataList = new ArrayList<>();
|
||||||
|
if(scDict != null){
|
||||||
|
scDictDataList = scDictDataMapper.selectByDictId(scDict.getId());
|
||||||
|
}
|
||||||
|
return scDictDataList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteByDictId(Long dictId) {
|
||||||
|
scDictDataMapper.deleteByDictId(dictId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map checkInputData(ScDictData scDictData) {
|
||||||
|
Map result = new HashMap();
|
||||||
|
|
||||||
|
//检测数据是否为空
|
||||||
|
if(scDictData == null){
|
||||||
|
result.put("status",false);
|
||||||
|
result.put("message","传入数据不合法");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//检测字段是否为空
|
||||||
|
if(scDictData.getDictId()==null || scDictData.getTitle()== null || scDictData.getValue()==null){
|
||||||
|
result.put("status",false);
|
||||||
|
result.put("message","传入数据不合法");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//检测字典标题是否超过上限
|
||||||
|
if(scDictData.getTitle().length()>255){
|
||||||
|
result.put("status",false);
|
||||||
|
result.put("message","名称字符超过上限");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//检测字典数据值是否超过上限
|
||||||
|
if(scDictData.getValue().length()>255){
|
||||||
|
result.put("status",false);
|
||||||
|
result.put("message","数据值字符超过上限");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//检测描述是否超过上限
|
||||||
|
if(scDictData.getDescription()!=null) {
|
||||||
|
if (scDictData.getDescription().length() > 255) {
|
||||||
|
result.put("status", false);
|
||||||
|
result.put("message", "备注字符超过上限");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.put("status",true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
package com.sunyard.ssp.modules.sysconf.dict.serviceimpl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.sunyard.ssp.common.constant.SqlConstant;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.entity.ScDict;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.mapper.ScDictMapper;
|
||||||
|
import com.sunyard.ssp.modules.sysconf.dict.service.IScDictService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 服务实现类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author fyc
|
||||||
|
* @since 2020-03-13
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class ScDictServiceImpl extends ServiceImpl<ScDictMapper, ScDict> implements IScDictService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ScDictMapper scDictMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ScDict> selectByKey(String key) {
|
||||||
|
QueryWrapper queryWrapper = new QueryWrapper<ScDict>().like("TITLE",key).orderByAsc(SqlConstant.DB_SORT_COLUMN);
|
||||||
|
List<ScDict> dicts = scDictMapper.selectList(queryWrapper);
|
||||||
|
return dicts;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map checkInputForm(ScDict scDict) {
|
||||||
|
Map result = new HashMap();
|
||||||
|
//是否为空检测
|
||||||
|
if(scDict == null){
|
||||||
|
result.put("status",false);
|
||||||
|
result.put("message","传入数据不合法");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//字典名称长度检测
|
||||||
|
if(scDict.getTitle().length()>255){
|
||||||
|
result.put("status",false);
|
||||||
|
result.put("message","字典名称字符超出上限");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
//字典类型长度检测
|
||||||
|
if(scDict.getType().length()>255){
|
||||||
|
result.put("status",false);
|
||||||
|
result.put("message","字典类型字符超出上限");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//备注字符长度检测
|
||||||
|
if(scDict.getDescription()!=null) {
|
||||||
|
if (scDict.getDescription().length() > 255) {
|
||||||
|
result.put("status", false);
|
||||||
|
result.put("message", "备注字符超出上限");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.put("status",true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -19,9 +19,9 @@ import java.util.List;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface ParamConfMapper extends BaseMapper<ParamConf> {
|
public interface ParamConfMapper extends BaseMapper<ParamConf> {
|
||||||
|
|
||||||
// @Select("<script>"+
|
@Select("<script>"+
|
||||||
// " select * from SC_PARAM_CONF where KEY = #{key}"+
|
" select * from SC_PARAM_CONF where KEY = #{key}"+
|
||||||
// "</script>")
|
"</script>")
|
||||||
ParamConf selectByKey(@Param("key")String key);
|
ParamConf selectByKey(@Param("key")String key);
|
||||||
|
|
||||||
@Select("<script>"+
|
@Select("<script>"+
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.sunyard.ssp.modules.user.mapper.ScPermissionMapper">
|
||||||
|
|
||||||
|
<!-- 通用查询映射结果 -->
|
||||||
|
<resultMap id="BaseResultMap" type="com.sunyard.ssp.modules.user.entity.ScPermission">
|
||||||
|
<id column="ID" property="id" />
|
||||||
|
<result column="DESCRIPTION" property="description" />
|
||||||
|
<result column="NAME" property="name" />
|
||||||
|
<result column="PARENT_ID" property="parentId" />
|
||||||
|
<result column="P_TYPE" property="pType" />
|
||||||
|
<result column="SORT_ORDER" property="sortOrder" />
|
||||||
|
<result column="COMPONENT" property="component" />
|
||||||
|
<result column="PATH" property="path" />
|
||||||
|
<result column="TITLE" property="title" />
|
||||||
|
<result column="ICON" property="icon" />
|
||||||
|
<result column="P_LEVEL" property="pLevel" />
|
||||||
|
<result column="BUTTON_TYPE" property="buttonType" />
|
||||||
|
<result column="P_STATUS" property="pStatus" />
|
||||||
|
<result column="URL" property="url" />
|
||||||
|
<result column="NEED_VERIFY" property="needVerify"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!-- 通用查询结果列 -->
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
ID, DESCRIPTION, NAME, PARENT_ID, P_TYPE, SORT_ORDER, COMPONENT, PATH, TITLE, ICON, P_LEVEL, BUTTON_TYPE, P_STATUS, URL, NEED_VERIFY
|
||||||
|
</sql>
|
||||||
|
<sql id="FindByParent_Column_List">
|
||||||
|
tp.id,
|
||||||
|
tp.description,
|
||||||
|
tp.name,
|
||||||
|
tp.parent_id,
|
||||||
|
tp.p_type,
|
||||||
|
tp.sort_order,
|
||||||
|
tp.component,
|
||||||
|
tp.path,
|
||||||
|
tp.title,
|
||||||
|
tp.icon,
|
||||||
|
tp.p_level,
|
||||||
|
tp.button_type,
|
||||||
|
tp.p_status,
|
||||||
|
tp.url,
|
||||||
|
tp.need_verify
|
||||||
|
</sql>
|
||||||
|
<select id="findByUserId" resultType="com.sunyard.ssp.modules.user.entity.ScPermission">
|
||||||
|
SELECT DISTINCT tp.*
|
||||||
|
FROM sc_user u
|
||||||
|
LEFT JOIN sc_user_role ur ON u.id = ur.user_id
|
||||||
|
LEFT JOIN sc_role_permission rp ON ur.role_id = rp.role_id
|
||||||
|
LEFT JOIN sc_permission tp ON tp.id = rp.permission_id
|
||||||
|
WHERE u.id = #{userId} AND tp.p_status = 0
|
||||||
|
ORDER BY tp.sort_order ASC
|
||||||
|
</select>
|
||||||
|
<select id="findByLevelOrderBySortOrder" resultType="com.sunyard.ssp.modules.user.entity.ScPermission">
|
||||||
|
SELECT DISTINCT tp.* from sc_permission tp
|
||||||
|
WHERE
|
||||||
|
tp.p_level = #{level}
|
||||||
|
order by tp.sort_order
|
||||||
|
</select>
|
||||||
|
<select id="findByParentIdOrderBySortOrder" resultType="com.sunyard.ssp.modules.user.entity.ScPermission">
|
||||||
|
SELECT DISTINCT tp.* from sc_permission tp
|
||||||
|
where
|
||||||
|
tp.parent_id = #{parentId}
|
||||||
|
order by tp.sort_order
|
||||||
|
</select>
|
||||||
|
<select id="findAll" resultType="com.sunyard.ssp.modules.user.entity.ScPermission">
|
||||||
|
select <include refid="Base_Column_List"></include> from sc_permission
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.sunyard.ssp.modules.user.mapper.ScPositionMapper">
|
||||||
|
|
||||||
|
<!-- 通用查询映射结果 -->
|
||||||
|
<resultMap id="BaseResultMap" type="com.sunyard.ssp.modules.user.entity.ScPosition">
|
||||||
|
<result column="ID" property="id" />
|
||||||
|
<result column="NAME" property="name" />
|
||||||
|
<result column="STATUS" property="status" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!-- 通用查询结果列 -->
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
ID, NAME, STATUS
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="getNameById" resultType="java.lang.String">
|
||||||
|
select name from sc_position where id = #{0}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
128
chsm-web-manage/src/main/resources/mapper/user/ScUserMapper.xml
Normal file
128
chsm-web-manage/src/main/resources/mapper/user/ScUserMapper.xml
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.sunyard.ssp.modules.user.mapper.ScUserMapper">
|
||||||
|
|
||||||
|
<!-- 通用查询映射结果 -->
|
||||||
|
<resultMap id="BaseResultMap" type="com.sunyard.ssp.modules.user.entity.ScUser">
|
||||||
|
<result column="ID" property="id"/>
|
||||||
|
<result column="USERNAME" property="username"/>
|
||||||
|
<result column="PASSWORD" property="password"/>
|
||||||
|
<result column="REALNAME" property="realname"/>
|
||||||
|
<result column="ORGANIZATION_ID" property="organizationId"/>
|
||||||
|
<result column="TEL" property="tel"/>
|
||||||
|
<result column="EMAIL" property="email"/>
|
||||||
|
<result column="STATUS" property="status"/>
|
||||||
|
<result column="UPDATE_TIME" property="updateTime"/>
|
||||||
|
<result column="PASS_UPDATE_TIME" property="passUpdateTime"/>
|
||||||
|
<result column="POSITION_ID" property="positionId"/>
|
||||||
|
<result column="AVATAR" property="avatar"/>
|
||||||
|
<result column="SEX" property="sex"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="UserResultMap" type="com.sunyard.ssp.modules.user.entity.ScUser">
|
||||||
|
<result column="id" property="id"/>
|
||||||
|
<result column="username" property="username"/>
|
||||||
|
<result column="password" property="password"/>
|
||||||
|
<result column="realname" property="realname"/>
|
||||||
|
<result column="organization_id" property="organizationId"/>
|
||||||
|
<result column="tel" property="tel"/>
|
||||||
|
<result column="email" property="email"/>
|
||||||
|
<result column="status" property="status"/>
|
||||||
|
<result column="update_time" property="updateTime"/>
|
||||||
|
<result column="pass_update_time" property="passUpdateTime"/>
|
||||||
|
<result column="position_id" property="positionId"/>
|
||||||
|
<result column="avatar" property="avatar"/>
|
||||||
|
<result column="sex" property="sex"/>
|
||||||
|
<result column="u_publickey" property="uPublickey"/>
|
||||||
|
|
||||||
|
<association property="positionName" select="com.sunyard.ssp.modules.user.mapper.ScPositionMapper.getNameById"
|
||||||
|
column="position_id"/>
|
||||||
|
|
||||||
|
<collection property="roles" ofType="com.sunyard.ssp.modules.user.entity.ScRole">
|
||||||
|
<result column="role_id" property="id"/>
|
||||||
|
<result column="role_name" property="name"/>
|
||||||
|
<result column="role_default_role" property="defaultRole"/>
|
||||||
|
<result column="role_data_type" property="dataType"/>
|
||||||
|
<result column="role_description" property="description"/>
|
||||||
|
</collection>
|
||||||
|
<collection property="permissions" ofType="com.sunyard.ssp.modules.user.entity.ScPermission">
|
||||||
|
<result column="permission_id" property="id"/>
|
||||||
|
<result column="permission_name" property="name"/>
|
||||||
|
<result column="permission_parent_id" property="parentId"/>
|
||||||
|
<result column="permission_type" property="pType"/>
|
||||||
|
<result column="permission_sort_order" property="sortOrder"/>
|
||||||
|
<result column="permission_component" property="component"/>
|
||||||
|
<result column="permission_path" property="path"/>
|
||||||
|
<result column="permission_title" property="title"/>
|
||||||
|
<result column="permission_icon" property="icon"/>
|
||||||
|
<result column="permission_level" property="pLevel"/>
|
||||||
|
<result column="permission_button_type" property="buttonType"/>
|
||||||
|
<result column="permission_status" property="pStatus"/>
|
||||||
|
<result column="permission_url" property="url"/>
|
||||||
|
<result column="permission_need_verify" property="needVerify"/>
|
||||||
|
</collection>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!-- 通用查询结果列 -->
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
ID
|
||||||
|
, USERNAME, PASSWORD, REALNAME, ORGANIZATION_ID, TEL, EMAIL, STATUS, UPDATE_TIME, POSITION_ID, AVATAR, SEX, PASS_UPDATE_TIME
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<sql id="User_Vo_Column_List">
|
||||||
|
tu
|
||||||
|
.
|
||||||
|
id
|
||||||
|
,
|
||||||
|
tu.username,
|
||||||
|
tu.realname,
|
||||||
|
tu.organization_id,
|
||||||
|
tu.tel,
|
||||||
|
tu.email,
|
||||||
|
tu.status,
|
||||||
|
tu.update_time,
|
||||||
|
tu.pass_update_time,
|
||||||
|
tu.position_id,
|
||||||
|
tu.password,
|
||||||
|
tu.sex,
|
||||||
|
tu.avatar,
|
||||||
|
tu.u_publickey,
|
||||||
|
tr.id as role_id,
|
||||||
|
tr.name as role_name,
|
||||||
|
tr.default_role as role_default_role,
|
||||||
|
tr.data_type as role_data_type,
|
||||||
|
tr.description as role_description,
|
||||||
|
tp.id as permission_id,
|
||||||
|
tp.name as permission_name,
|
||||||
|
tp.parent_id as permission_parent_id,
|
||||||
|
tp.p_type as permission_type,
|
||||||
|
tp.sort_order as permission_sort_order,
|
||||||
|
tp.component as permission_component,
|
||||||
|
tp.path as permission_path,
|
||||||
|
tp.title as permission_title,
|
||||||
|
tp.icon as permission_icon,
|
||||||
|
tp.p_level as permission_level,
|
||||||
|
tp.button_type as permission_button_type,
|
||||||
|
tp.p_status as permission_status,
|
||||||
|
tp.url as permission_url,
|
||||||
|
tp.need_verify as permission_need_verify
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="findByUsername" resultMap="UserResultMap">
|
||||||
|
select DISTINCT
|
||||||
|
<include refid="User_Vo_Column_List"/>
|
||||||
|
from sc_user tu
|
||||||
|
left join sc_user_role tur on tu.id = tur.user_id
|
||||||
|
left join sc_role_permission trp on tur.role_id = trp.role_id
|
||||||
|
left join sc_permission tp on tp.id = trp.permission_id
|
||||||
|
left join sc_role tr on tr.id = tur.role_id
|
||||||
|
where username = #{username}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findall" resultMap="UserResultMap">
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List"/>
|
||||||
|
from sc_user
|
||||||
|
</select>
|
||||||
|
</mapper>
|
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.sunyard.ssp.modules.user.mapper.ScUserRoleMapper">
|
||||||
|
|
||||||
|
<!-- 通用查询映射结果 -->
|
||||||
|
<resultMap id="BaseResultMap" type="com.sunyard.ssp.modules.user.entity.ScUserRole">
|
||||||
|
<result column="ID" property="id" />
|
||||||
|
<result column="ROLE_ID" property="roleId" />
|
||||||
|
<result column="USER_ID" property="userId" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!-- 通用查询结果列 -->
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
ID, ROLE_ID, USER_ID
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="findByUserId" resultType="com.sunyard.ssp.modules.user.entity.ScRole">
|
||||||
|
SELECT r.id id, name, r.data_type
|
||||||
|
FROM sc_user_role ur
|
||||||
|
LEFT JOIN sc_role r
|
||||||
|
ON ur.role_id = r.id
|
||||||
|
WHERE user_Id = #{userId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findDepIdsByUserId" resultType="java.lang.String">
|
||||||
|
SELECT DISTINCT rd.department_id
|
||||||
|
FROM sc_role_department rd
|
||||||
|
WHERE role_id IN
|
||||||
|
( SELECT ur.role_id FROM sc_user_role ur WHERE ur.user_id = #{userId} )
|
||||||
|
</select>
|
||||||
|
</mapper>
|
@ -0,0 +1,217 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.sunyard.ssp.modules.monitor.transaction.mapper.StatisticalMapper">
|
||||||
|
|
||||||
|
<!-- 通用查询映射结果 -->
|
||||||
|
<resultMap id="BaseResultMap" type="com.sunyard.ssp.modules.monitor.transaction.entity.StatisticalResult">
|
||||||
|
<id column="successCount" property="successCount"/>
|
||||||
|
<result column="failCount" property="failCount"/>
|
||||||
|
<result column="statisticalTime" property="statisticalTime"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="countPieChart" resultMap="BaseResultMap" databaseId="mysql">
|
||||||
|
select SUM (SUCCESS_COUNT) as successCount,SUM (FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.server != null and statisticalParam.server != ''">
|
||||||
|
and SERVER = #{statisticalParam.server}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.channelId != null">
|
||||||
|
and CHANNEL_ID = #{statisticalParam.channelId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.solutionId != null">
|
||||||
|
and SOLUTION__ID = #{statisticalParam.solutionId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.startTime != null and statisticalParam.endTime != null">
|
||||||
|
and `CURRENT_TIME` between str_to_date(#{statisticalParam.startTime},'%Y-%m-%d %H:%i:%s') and to_date(#{statisticalParam.endTime},'%Y-%m-%d %H:%i:%s')
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
<select id="countPieChart" resultMap="BaseResultMap" databaseId="oracle">
|
||||||
|
select SUM (SUCCESS_COUNT) as successCount,SUM (FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.server != null and statisticalParam.server != ''">
|
||||||
|
and SERVER = #{statisticalParam.server}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.channelId != null">
|
||||||
|
and CHANNEL_ID = #{statisticalParam.channelId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.solutionId != null">
|
||||||
|
and SOLUTION__ID = #{statisticalParam.solutionId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.startTime != null and statisticalParam.endTime != null">
|
||||||
|
and "CURRENT_TIME" between to_date(#{statisticalParam.startTime},'YYYY-MM-DD HH24:MI:SS') and to_date(#{statisticalParam.endTime},'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="countPieChart" resultMap="BaseResultMap" databaseId="dm">
|
||||||
|
select SUM (SUCCESS_COUNT) as successCount,SUM (FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.server != null and statisticalParam.server != ''">
|
||||||
|
and SERVER = #{statisticalParam.server}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.channelId != null">
|
||||||
|
and CHANNEL_ID = #{statisticalParam.channelId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.solutionId != null">
|
||||||
|
and SOLUTION__ID = #{statisticalParam.solutionId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.startTime != null and statisticalParam.endTime != null">
|
||||||
|
and "CURRENT_TIME" between to_date(#{statisticalParam.startTime},'YYYY-MM-DD HH24:MI:SS') and to_date(#{statisticalParam.endTime},'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="countLineChartByTimeInterval" resultMap="BaseResultMap" databaseId="mysql">
|
||||||
|
select
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'month'">
|
||||||
|
CONCAT(DATE_FORMAT(`CURRENT_TIME`, '%Y-%m-'),(DAY(`CURRENT_TIME`)+WEEKDAY(`CURRENT_TIME`-INTERVAL DAY(`CURRENT_TIME`) DAY)) DIV 7 + 1) as statisticalTime ,
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'week'">
|
||||||
|
DATE_FORMAT(`CURRENT_TIME`,'%Y-%m-%d') as statisticalTime,
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'day'">
|
||||||
|
DATE_FORMAT(`CURRENT_TIME`,'%Y-%m-%d %H') as statisticalTime,
|
||||||
|
</if>
|
||||||
|
SUM(SUCCESS_COUNT) as successCount,
|
||||||
|
SUM(FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.server != null and statisticalParam.server != ''">
|
||||||
|
and SERVER = #{statisticalParam.server}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.channelId != null">
|
||||||
|
and CHANNEL_ID = #{statisticalParam.channelId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.solutionNumber != null">
|
||||||
|
and SOLUTION_NUMBER = #{statisticalParam.solutionNumber}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'month'">
|
||||||
|
and DATE_FORMAT(`CURRENT_TIME`,'%Y-%m') = date_format(#{statisticalParam.sqlStatisticalTime}, '%Y-%m')
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'week'">
|
||||||
|
and DATE_FORMAT(`CURRENT_TIME`,'%x-%v') = date_format(#{statisticalParam.sqlStatisticalTime}, '%x-%v')
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'day'">
|
||||||
|
and DATE_FORMAT(`CURRENT_TIME`,'%Y-%m-%d') = date_format(#{statisticalParam.sqlStatisticalTime}, '%Y-%m-%d')
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
group by statisticalTime
|
||||||
|
order by statisticalTime
|
||||||
|
</select>
|
||||||
|
<select id="countLineChartByTimeInterval" resultMap="BaseResultMap" databaseId="oracle">
|
||||||
|
select to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}') as statisticalTime,
|
||||||
|
SUM(SUCCESS_COUNT) as successCount,
|
||||||
|
SUM(FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.server != null and statisticalParam.server != ''">
|
||||||
|
and SERVER = #{statisticalParam.server}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.channelId != null">
|
||||||
|
and CHANNEL_ID = #{statisticalParam.channelId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.solutionNumber != null">
|
||||||
|
and SOLUTION_NUMBER = #{statisticalParam.solutionNumber}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.sqlStatisticalTime != null and statisticalParam.sqlStatisticalTimeFormat !=null">
|
||||||
|
and to_char(TRUNC("CURRENT_TIME"),'${statisticalParam.sqlStatisticalTimeFormat}') = (SELECT TO_CHAR (#{statisticalParam.sqlStatisticalTime}, '${statisticalParam.sqlStatisticalTimeFormat}') FROM DUAL)
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
group by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
order by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="countLineChartByTimeInterval" resultMap="BaseResultMap" databaseId="dm">
|
||||||
|
select to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}') as statisticalTime,
|
||||||
|
SUM(SUCCESS_COUNT) as successCount,
|
||||||
|
SUM(FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.server != null and statisticalParam.server != ''">
|
||||||
|
and SERVER = #{statisticalParam.server}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.channelId != null">
|
||||||
|
and CHANNEL_ID = #{statisticalParam.channelId}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.solutionNumber != null">
|
||||||
|
and SOLUTION_NUMBER = #{statisticalParam.solutionNumber}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.sqlStatisticalTime != null and statisticalParam.sqlStatisticalTimeFormat !=null">
|
||||||
|
and to_char(TRUNC("CURRENT_TIME"),'${statisticalParam.sqlStatisticalTimeFormat}') = (SELECT TO_CHAR (#{statisticalParam.sqlStatisticalTime}, '${statisticalParam.sqlStatisticalTimeFormat}') FROM DUAL)
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
group by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
order by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="countLineChartByKeyGroup" resultMap="BaseResultMap" databaseId="mysql">
|
||||||
|
select
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'month'">
|
||||||
|
CONCAT(DATE_FORMAT(`CURRENT_TIME`, '%Y-%m-'),(DAY(`CURRENT_TIME`)+WEEKDAY(`CURRENT_TIME`-INTERVAL DAY(`CURRENT_TIME`) DAY)) DIV 7 + 1) as statisticalTime ,
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'week'">
|
||||||
|
DATE_FORMAT(`CURRENT_TIME`,'%Y-%m-%d') as statisticalTime,
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'day'">
|
||||||
|
DATE_FORMAT(`CURRENT_TIME`,'%Y-%m-%d %H') as statisticalTime,
|
||||||
|
</if>
|
||||||
|
SUM(SUCCESS_COUNT) as successCount,
|
||||||
|
SUM(FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.group != null and statisticalParam.group != ''">
|
||||||
|
and "GROUP" = #{statisticalParam.group}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'month'">
|
||||||
|
and DATE_FORMAT(`CURRENT_TIME`,'%Y-%m') = date_format(#{statisticalParam.sqlStatisticalTime}, '%Y-%m')
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'week'">
|
||||||
|
and DATE_FORMAT(`CURRENT_TIME`,'%x-%v') = date_format(#{statisticalParam.sqlStatisticalTime}, '%x-%v')
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.timeInterval != null and statisticalParam.timeInterval == 'day'">
|
||||||
|
and DATE_FORMAT(`CURRENT_TIME`,'%Y-%m-%d') = date_format(#{statisticalParam.sqlStatisticalTime}, '%Y-%m-%d')
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
group by statisticalTime
|
||||||
|
order by statisticalTime
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="countLineChartByKeyGroup" resultMap="BaseResultMap" databaseId="oracle">
|
||||||
|
select to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}') as statisticalTime ,
|
||||||
|
SUM(SUCCESS_COUNT) as successCount,
|
||||||
|
SUM(FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.group != null and statisticalParam.group != ''">
|
||||||
|
and "GROUP" = #{statisticalParam.group}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.sqlStatisticalTime != null and statisticalParam.sqlStatisticalTimeFormat !=null">
|
||||||
|
and to_char(TRUNC("CURRENT_TIME"),'${statisticalParam.sqlStatisticalTimeFormat}') = (SELECT TO_CHAR (#{statisticalParam.sqlStatisticalTime}, '${statisticalParam.sqlStatisticalTimeFormat}') FROM DUAL)
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
group by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
order by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="countLineChartByKeyGroup" resultMap="BaseResultMap" databaseId="dm">
|
||||||
|
select to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}') as statisticalTime ,
|
||||||
|
SUM(SUCCESS_COUNT) as successCount,
|
||||||
|
SUM(FAIL_COUNT) as failCount
|
||||||
|
from SC_BUSINESS_STATISTICS
|
||||||
|
<where>
|
||||||
|
<if test="statisticalParam.group != null and statisticalParam.group != ''">
|
||||||
|
and "GROUP" = #{statisticalParam.group}
|
||||||
|
</if>
|
||||||
|
<if test="statisticalParam.sqlStatisticalTime != null and statisticalParam.sqlStatisticalTimeFormat !=null">
|
||||||
|
and to_char(TRUNC("CURRENT_TIME"),'${statisticalParam.sqlStatisticalTimeFormat}') = (SELECT TO_CHAR (#{statisticalParam.sqlStatisticalTime}, '${statisticalParam.sqlStatisticalTimeFormat}') FROM DUAL)
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
group by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
order by to_char("CURRENT_TIME",'${statisticalParam.timeIntervalFormat}')
|
||||||
|
</select>
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue
Block a user