优化验证码、cache、datascope、datatracker、reload、repeatsubmit

This commit is contained in:
zhuoda 2021-11-05 22:58:06 +08:00
parent a32bd96595
commit ab73f51a3e
62 changed files with 344 additions and 504 deletions

View File

@ -1,22 +0,0 @@
package net.lab1024.smartadmin.service.common.domain;
import lombok.Data;
/**
* 验证码
*
*/
@Data
public class CaptchaVO {
/**
* 验证码UUID
*/
private String uuid;
/**
* base64 验证码
*/
private String code;
}

View File

@ -1,156 +0,0 @@
package net.lab1024.smartadmin.service.config;
import com.google.code.kaptcha.NoiseProducer;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.text.WordRenderer;
import com.google.code.kaptcha.util.Config;
import com.google.code.kaptcha.util.Configurable;
import com.google.common.collect.Lists;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.image.BufferedImage;
import java.util.List;
import java.util.Properties;
import java.util.Random;
/**
* [ 验证码配置 ]
*
* @author zhuoda
*/
@Configuration
public class KaptchaConfig {
@Bean
public DefaultKaptcha getDefaultKaptcha() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
properties.setProperty("kaptcha.border", "no");
properties.setProperty("kaptcha.border.color", "34,114,200");
properties.setProperty("kaptcha.image.width", "125");
properties.setProperty("kaptcha.image.height", "45");
properties.setProperty("kaptcha.textproducer.char.string", "123456789");
properties.setProperty("kaptcha.textproducer.char.length", "4");
properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana");
properties.setProperty("kaptcha.textproducer.font.size", "38");
properties.setProperty("kaptcha.background.clear.from", "white");
properties.setProperty("kaptcha.background.clear.to", "white");
properties.setProperty("kaptcha.word.impl", KaptchaWordRenderer.class.getName());
properties.setProperty("kaptcha.noise.impl", KaptchaNoise.class.getName());
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
public static class KaptchaColor {
public static Color getColor() {
List<Color> colors = Lists.newArrayList();
colors.add(new Color(0, 135, 255));
colors.add(new Color(51, 153, 51));
colors.add(new Color(255, 102, 102));
colors.add(new Color(255, 153, 0));
colors.add(new Color(153, 102, 0));
colors.add(new Color(153, 102, 153));
colors.add(new Color(51, 153, 153));
colors.add(new Color(102, 102, 255));
colors.add(new Color(0, 102, 204));
colors.add(new Color(204, 51, 51));
colors.add(new Color(128, 153, 65));
Random random = new Random();
int colorIndex = random.nextInt(10);
return colors.get(colorIndex);
}
}
public class KaptchaNoise extends Configurable implements NoiseProducer {
public KaptchaNoise() {
}
@Override
public void makeNoise(BufferedImage image, float factorOne, float factorTwo, float factorThree, float factorFour) {
int width = image.getWidth();
int height = image.getHeight();
Graphics2D graph = (Graphics2D) image.getGraphics();
graph.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
graph.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
Random random = new Random();
int noiseLineNum = random.nextInt(3);
if (noiseLineNum == 0) {
noiseLineNum = 1;
}
for (int i = 0; i < noiseLineNum; i++) {
graph.setColor(KaptchaColor.getColor());
graph.drawLine(random.nextInt(width), random.nextInt(height), 10 + random.nextInt(20), 10 + random.nextInt(20));
}
graph.dispose();
}
}
public class KaptchaWordRenderer extends Configurable implements WordRenderer {
public KaptchaWordRenderer() {
}
@Override
public BufferedImage renderWord(String word, int width, int height) {
int fontSize = this.getConfig().getTextProducerFontSize();
Font[] fonts = this.getConfig().getTextProducerFonts(fontSize);
int charSpace = this.getConfig().getTextProducerCharSpace();
BufferedImage image = new BufferedImage(width, height, 2);
Graphics2D g2D = image.createGraphics();
g2D.setColor(Color.WHITE);
RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2D.setRenderingHints(hints);
g2D.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
FontRenderContext frc = g2D.getFontRenderContext();
Random random = new Random();
int startPosY = (height - fontSize) / 5 + fontSize;
char[] wordChars = word.toCharArray();
Font[] chosenFonts = new Font[wordChars.length];
int[] charWidths = new int[wordChars.length];
int widthNeeded = 0;
int startPosX;
for (startPosX = 0; startPosX < wordChars.length; ++startPosX) {
chosenFonts[startPosX] = fonts[random.nextInt(fonts.length)];
char[] charToDraw = new char[]{wordChars[startPosX]};
GlyphVector gv = chosenFonts[startPosX].createGlyphVector(frc, charToDraw);
charWidths[startPosX] = (int) gv.getVisualBounds().getWidth();
if (startPosX > 0) {
widthNeeded += 2;
}
widthNeeded += charWidths[startPosX];
}
startPosX = (width - widthNeeded) / 2;
for (int i = 0; i < wordChars.length; ++i) {
g2D.setColor(KaptchaColor.getColor());
g2D.setFont(chosenFonts[i].deriveFont(Font.PLAIN));
char[] charToDraw = new char[]{wordChars[i]};
g2D.drawChars(charToDraw, 0, charToDraw.length, startPosX, startPosY);
startPosX = startPosX + charWidths[i] + charSpace;
}
return image;
}
}
}

View File

@ -2,7 +2,7 @@ package net.lab1024.smartadmin.service.config;
import net.lab1024.smartadmin.service.common.util.SmartRequestUtil;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.RepeatSubmitAspect;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.RepeatSubmitCaffeineTicket;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.ticket.RepeatSubmitCaffeineTicket;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

View File

@ -1,7 +1,7 @@
package net.lab1024.smartadmin.service.config;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.module.support.reload.SmartReloadCommand;
import net.lab1024.smartadmin.service.module.support.reload.ReloadCommand;
import net.lab1024.smartadmin.service.module.support.reload.core.SmartReloadManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@ -18,14 +18,14 @@ import org.springframework.context.annotation.Configuration;
public class SmartReloadConfig {
@Autowired
private SmartReloadCommand smartReloadCommand;
private ReloadCommand reloadCommand;
@Bean
public SmartReloadManager initSmartReloadManager() {
/**
* 创建 Reload Manager 调度器
*/
SmartReloadManager smartReloadManager = new SmartReloadManager(smartReloadCommand);
SmartReloadManager smartReloadManager = new SmartReloadManager(reloadCommand);
return smartReloadManager;
}
}

View File

@ -3,12 +3,12 @@ package net.lab1024.smartadmin.service.module.business.goods;
import com.google.common.collect.Lists;
import net.lab1024.smartadmin.service.common.enumeration.BaseEnum;
import net.lab1024.smartadmin.service.module.business.goods.domain.GoodsEntity;
import net.lab1024.smartadmin.service.module.support.datatracer.DataTracerFieldService;
import net.lab1024.smartadmin.service.module.support.datatracer.DataTracerService;
import net.lab1024.smartadmin.service.module.support.datatracer.service.DataTracerFieldService;
import net.lab1024.smartadmin.service.module.support.datatracer.service.DataTracerService;
import net.lab1024.smartadmin.service.module.support.datatracer.constant.DataTracerBusinessTypeEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.constant.DataTracerOperateTypeEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerDTO;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerExtraDataDTO;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerForm;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerExtraData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@ -34,39 +34,39 @@ public class GoodsDataTracerService {
@Async
public void goodsAddRecord(GoodsEntity goodsEntity, LocalDateTime operateTime, Long operatorId, String operatorName) {
DataTracerDTO dataTracerDTO = new DataTracerDTO();
dataTracerDTO.setBusinessId(goodsEntity.getGoodsId());
dataTracerDTO.setBusinessType(DataTracerBusinessTypeEnum.GOODS);
dataTracerDTO.setOperateType(DataTracerOperateTypeEnum.Common.SAVE);
dataTracerDTO.setOperateContent(DataTracerOperateTypeEnum.Common.SAVE.getDesc());
dataTracerDTO.setOperateTime(operateTime);
dataTracerService.saveOperateRecord(dataTracerDTO, operatorId, operatorName);
DataTracerForm dataTracerForm = new DataTracerForm();
dataTracerForm.setBusinessId(goodsEntity.getGoodsId());
dataTracerForm.setBusinessType(DataTracerBusinessTypeEnum.GOODS);
dataTracerForm.setOperateType(DataTracerOperateTypeEnum.Common.SAVE);
dataTracerForm.setOperateContent(DataTracerOperateTypeEnum.Common.SAVE.getDesc());
dataTracerForm.setOperateTime(operateTime);
dataTracerService.saveOperateRecord(dataTracerForm, operatorId, operatorName);
}
@Async
public void goodsUpdateRecord(GoodsEntity originGoodsEntity, GoodsEntity newGoodsEntity, LocalDateTime operateTime, Long operatorId, String operatorName) {
String operateContent = dataTracerFieldService.beanParse(originGoodsEntity, newGoodsEntity);
DataTracerDTO dataTracerDTO = new DataTracerDTO();
dataTracerDTO.setBusinessId(originGoodsEntity.getGoodsId());
dataTracerDTO.setBusinessType(DataTracerBusinessTypeEnum.GOODS);
dataTracerDTO.setOperateType(DataTracerOperateTypeEnum.Common.UPDATE);
dataTracerDTO.setOperateContent(operateContent);
dataTracerDTO.setOperateTime(operateTime);
dataTracerDTO.setExtraData(new DataTracerExtraDataDTO(GoodsEntity.class, originGoodsEntity, newGoodsEntity));
dataTracerService.saveOperateRecord(dataTracerDTO, operatorId, operatorName);
DataTracerForm dataTracerForm = new DataTracerForm();
dataTracerForm.setBusinessId(originGoodsEntity.getGoodsId());
dataTracerForm.setBusinessType(DataTracerBusinessTypeEnum.GOODS);
dataTracerForm.setOperateType(DataTracerOperateTypeEnum.Common.UPDATE);
dataTracerForm.setOperateContent(operateContent);
dataTracerForm.setOperateTime(operateTime);
dataTracerForm.setExtraData(new DataTracerExtraData(GoodsEntity.class, originGoodsEntity, newGoodsEntity));
dataTracerService.saveOperateRecord(dataTracerForm, operatorId, operatorName);
}
@Async
public void batchRecord(List<Long> goodsIdList, String operateContent, BaseEnum operateType, LocalDateTime operateTime, Long operatorId, String operatorName) {
List<DataTracerDTO> dataTracerList = Lists.newArrayList();
List<DataTracerForm> dataTracerList = Lists.newArrayList();
for (Long goodsId : goodsIdList) {
DataTracerDTO dataTracerDTO = new DataTracerDTO();
dataTracerDTO.setBusinessId(goodsId);
dataTracerDTO.setBusinessType(DataTracerBusinessTypeEnum.GOODS);
dataTracerDTO.setOperateType(operateType);
dataTracerDTO.setOperateContent(operateContent);
dataTracerDTO.setOperateTime(operateTime);
dataTracerList.add(dataTracerDTO);
DataTracerForm dataTracerForm = new DataTracerForm();
dataTracerForm.setBusinessId(goodsId);
dataTracerForm.setBusinessType(DataTracerBusinessTypeEnum.GOODS);
dataTracerForm.setOperateType(operateType);
dataTracerForm.setOperateContent(operateContent);
dataTracerForm.setOperateTime(operateTime);
dataTracerList.add(dataTracerForm);
}
dataTracerService.saveBatchOperateRecord(dataTracerList, operatorId, operatorName);
}

View File

@ -6,10 +6,10 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import net.lab1024.smartadmin.service.module.business.category.CategoryDao;
import net.lab1024.smartadmin.service.module.business.goods.constant.GoodsTypeEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldBigDecimalValue;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldDoc;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldEnumValue;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldSqlValue;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldBigDecimal;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldDoc;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldSql;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@ -32,8 +32,8 @@ public class GoodsEntity {
*
* @see GoodsTypeEnum
*/
@FieldDoc("商品类型")
@FieldEnumValue(enumClass = GoodsTypeEnum.class)
@DataTracerFieldDoc("商品类型")
@DataTracerFieldEnum(enumClass = GoodsTypeEnum.class)
private Integer goodsType;
/**
@ -44,13 +44,13 @@ public class GoodsEntity {
/**
* 商品分类
*/
@FieldSqlValue(relateColumn = "categoryId",relateDisplayColumn = "categoryName",relateMapper = CategoryDao.class)
@DataTracerFieldSql(relateColumn = "categoryId",relateDisplayColumn = "categoryName",relateMapper = CategoryDao.class)
private Long categoryId;
/**
* 商品名称
*/
@FieldDoc("商品名称")
@DataTracerFieldDoc("商品名称")
private String goodsName;
/**
@ -61,8 +61,8 @@ public class GoodsEntity {
/**
* 商品价格
*/
@FieldDoc("商品价格")
@FieldBigDecimalValue
@DataTracerFieldDoc("商品价格")
@DataTracerFieldBigDecimal
private BigDecimal price;
/**
@ -73,7 +73,7 @@ public class GoodsEntity {
/**
* 上架状态
*/
@FieldDoc("上架状态")
@DataTracerFieldDoc("上架状态")
private Boolean shelvesFlag;
/**

View File

@ -2,6 +2,7 @@ package net.lab1024.smartadmin.service.module.support.cache;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.common.controller.SupportBaseController;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import org.springframework.beans.factory.annotation.Autowired;
@ -19,19 +20,19 @@ import java.util.List;
*/
@RestController
@Api(tags = {SwaggerTagConst.Admin.MANAGER_SYSTEM_CACHE})
public class CacheController {
public class CacheController extends SupportBaseController {
@Autowired
private CacheService systemCacheService;
@ApiOperation(value = "获取所有缓存", notes = "@author 罗伊")
@ApiOperation(value = "获取所有缓存 @author 罗伊")
@GetMapping("/cache/names")
public ResponseDTO<List<String>> cacheNames() {
return ResponseDTO.ok(systemCacheService.cacheNames());
}
@ApiOperation(value = "移除某个缓存", notes = "@author 罗伊")
@ApiOperation(value = "移除某个缓存 @author 罗伊")
@GetMapping("/cache/remove/{cacheName}")
public ResponseDTO<String> removeCache(@PathVariable String cacheName) {
systemCacheService.removeCache(cacheName);
@ -39,7 +40,7 @@ public class CacheController {
}
@ApiOperation(value = "获取某个缓存的所有key", notes = "@author 罗伊")
@ApiOperation(value = "获取某个缓存的所有key @author 罗伊")
@GetMapping("/cache/keys/{cacheName}")
public ResponseDTO<List<String>> cacheKeys(@PathVariable String cacheName) {
return ResponseDTO.ok(systemCacheService.cacheKey(cacheName));

View File

@ -4,18 +4,18 @@ package net.lab1024.smartadmin.service.module.support.captcha;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.common.annoation.NoNeedLogin;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import net.lab1024.smartadmin.service.common.controller.SupportBaseController;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 图形验证码业务 路由
* 图形验证码业务
*
* @author listen
* @author 胡克
* @date 2021/08/31 20:00
*/
@Api(tags = SwaggerTagConst.Support.CAPTCHA)
@ -26,10 +26,10 @@ public class CaptchaController extends SupportBaseController {
private CaptchaService captchaService;
@NoNeedLogin
@ApiOperation("获取图形验证码 by listen")
@ApiOperation("获取图形验证码 @author 胡克")
@GetMapping("/captcha")
public ResponseDTO<CaptchaVO> generateCaptcha() {
return captchaService.generateCaptcha();
return ResponseDTO.ok(captchaService.generateCaptcha());
}
}

View File

@ -5,8 +5,10 @@ import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.common.code.SystemErrorCode;
import net.lab1024.smartadmin.service.common.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.constant.StringConst;
import net.lab1024.smartadmin.service.common.exception.BusinessException;
import net.lab1024.smartadmin.service.constant.RedisKeyConst;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaForm;
import net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaVO;
import net.lab1024.smartadmin.service.module.support.redis.RedisService;
import org.apache.commons.lang3.StringUtils;
@ -30,6 +32,11 @@ import java.util.UUID;
@Service
public class CaptchaService {
/**
* 过期时间65秒
*/
private static final long EXPIRE_SECOND = 65L;
@Autowired
private DefaultKaptcha defaultKaptcha;
@ -37,21 +44,22 @@ public class CaptchaService {
private RedisService redisService;
/**
* 获取生成图形验证码
* 生成图形验证码
* 默认 1 分钟有效期
*
* @return
*/
public ResponseDTO<CaptchaVO> generateCaptcha() {
String base64Code;
public CaptchaVO generateCaptcha() {
String captchaText = defaultKaptcha.createText();
BufferedImage image = defaultKaptcha.createImage(captchaText);
String base64Code;
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
ImageIO.write(image, "jpg", os);
base64Code = Base64Utils.encodeToString(os.toByteArray());
} catch (Exception e) {
log.error("verificationCode exception:", e);
return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, "generate captcha error" );
log.error("generateCaptcha error:", e);
throw new BusinessException("生成验证码错误");
}
// uuid 唯一标识
String uuid = UUID.randomUUID().toString().replace("-", StringConst.EMPTY_STR);
@ -62,33 +70,36 @@ public class CaptchaService {
* 默认有效时长 80s
*/
CaptchaVO captchaVO = new CaptchaVO();
captchaVO.setCaptchaId(uuid);
captchaVO.setCaptchaImg("data:image/png;base64," + base64Code);
redisService.set(buildCaptchaRedisKey(uuid), captchaText, 80L);
return ResponseDTO.ok(captchaVO);
captchaVO.setCaptchaUUid(uuid);
captchaVO.setCaptchaBase64Image("data:image/png;base64," + base64Code);
redisService.set(buildCaptchaRedisKey(uuid), captchaText, EXPIRE_SECOND);
return captchaVO;
}
/**
* 校验图形验证码
*
* @param captchaId
* @param captcha
* @param captchaForm
* @return
*/
public ResponseDTO<String> checkCaptcha(String captchaId, String captcha) {
if (StringUtils.isBlank(captchaId) || StringUtils.isBlank(captcha)) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "请输入正确验证码" );
public ResponseDTO<String> checkCaptcha(CaptchaForm captchaForm) {
if (StringUtils.isBlank(captchaForm.getCaptchaUuid()) || StringUtils.isBlank(captchaForm.getCaptchaCode())) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "请输入正确验证码");
}
String redisKey = buildCaptchaRedisKey(captchaId);
String redisCode = redisService.get(redisKey);
if (StringUtils.isBlank(redisCode)) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码错误或已过期,请刷新重试" );
/**
* 1校验redis里的验证码
* 2校验成功后删除redis
*/
String redisCaptchaKey = buildCaptchaRedisKey(captchaForm.getCaptchaUuid());
String redisCaptchaCode = redisService.get(redisCaptchaKey);
if (StringUtils.isBlank(redisCaptchaCode)) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码已过期,请刷新重试");
}
if (!Objects.equals(redisCode, captcha)) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码错误或已过期,请刷新重试" );
if (!Objects.equals(redisCaptchaCode, captchaForm.getCaptchaCode())) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码错误,请输入正确的验证码");
}
// 校验通过 移除
redisService.delete(redisKey);
// 删除已使用的验证码
redisService.delete(redisCaptchaKey);
return ResponseDTO.ok();
}

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.captcha.render;
package net.lab1024.smartadmin.service.module.support.captcha.config;
import com.google.common.collect.Lists;

View File

@ -0,0 +1,44 @@
package net.lab1024.smartadmin.service.module.support.captcha.config;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import net.lab1024.smartadmin.service.module.support.captcha.config.CaptchaNoise;
import net.lab1024.smartadmin.service.module.support.captcha.config.CaptchaWordRenderer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
/**
* [ 验证码配置 ]
*
* @author zhuoda
*/
@Configuration
public class CaptchaConfig {
@Bean
public DefaultKaptcha getDefaultKaptcha() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
properties.setProperty("kaptcha.border", "no");
properties.setProperty("kaptcha.border.color", "34,114,200");
properties.setProperty("kaptcha.image.width", "125");
properties.setProperty("kaptcha.image.height", "45");
properties.setProperty("kaptcha.textproducer.char.string", "123456789");
properties.setProperty("kaptcha.textproducer.char.length", "4");
properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana");
properties.setProperty("kaptcha.textproducer.font.size", "38");
properties.setProperty("kaptcha.background.clear.from", "white");
properties.setProperty("kaptcha.background.clear.to", "white");
properties.setProperty("kaptcha.word.impl", CaptchaWordRenderer.class.getName());
properties.setProperty("kaptcha.noise.impl", CaptchaNoise.class.getName());
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.captcha.render;
package net.lab1024.smartadmin.service.module.support.captcha.config;
import com.google.code.kaptcha.NoiseProducer;
import com.google.code.kaptcha.util.Configurable;

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.captcha.render;
package net.lab1024.smartadmin.service.module.support.captcha.config;
import com.google.code.kaptcha.text.WordRenderer;
import com.google.code.kaptcha.util.Configurable;

View File

@ -2,23 +2,23 @@ package net.lab1024.smartadmin.service.module.support.captcha.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* 图形验证码 VO
* 图形验证码 表单
*
* @author 胡克
* @date 2021/8/31 20:52
* @author zhuoda
*/
@Data
public class CaptchaForm {
@ApiModelProperty
@NotBlank(message = "验证码标识不能为空" )
private String captchaId;
@ApiModelProperty(value = "验证码")
@NotBlank(message = "验证码不能为空")
private String captchaCode;
@ApiModelProperty
@NotBlank(message = "验证码不能为空" )
private String captcha;
@ApiModelProperty(value = "验证码uuid标识")
@NotBlank(message = "验证码uuid标识不能为空")
private String captchaUuid;
}

View File

@ -12,9 +12,9 @@ import lombok.Data;
@Data
public class CaptchaVO {
@ApiModelProperty("验证码标识" )
private String captchaId;
@ApiModelProperty("验证码唯一标识" )
private String captchaUUid;
@ApiModelProperty("验证码图片" )
private String captchaImg;
@ApiModelProperty("验证码Base64图片" )
private String captchaBase64Image;
}

View File

@ -5,7 +5,7 @@ import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.common.controller.SupportBaseController;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.constant.SwaggerTagConst;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeAndViewTypeVO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScopeAndViewTypeVO;
import net.lab1024.smartadmin.service.module.support.datascope.service.DataScopeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;

View File

@ -2,7 +2,7 @@ package net.lab1024.smartadmin.service.module.support.datascope;
import com.google.common.collect.Maps;
import net.lab1024.smartadmin.service.common.util.SmartStringUtil;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeSqlConfigDTO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScopeSqlConfig;
import net.lab1024.smartadmin.service.module.support.datascope.service.DataScopeSqlConfigService;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.mapping.*;
@ -49,7 +49,7 @@ public class MyBatisPlugin implements Interceptor {
if (dataScopeSqlConfigService == null) {
return invocation.proceed();
}
DataScopeSqlConfigDTO sqlConfigDTO = dataScopeSqlConfigService.getSqlConfig(path);
DataScopeSqlConfig sqlConfigDTO = dataScopeSqlConfigService.getSqlConfig(path);
if (sqlConfigDTO != null) {
Map<String, Object> paramMap = this.getParamList(sqlConfigDTO.getParamName(), parameter);
BoundSql newBoundSql = copyFromBoundSql(mappedStatement, boundSql, this.joinSql(originalSql, paramMap, sqlConfigDTO));
@ -83,7 +83,7 @@ public class MyBatisPlugin implements Interceptor {
return paramMap;
}
private String joinSql(String sql, Map<String, Object> paramMap, DataScopeSqlConfigDTO sqlConfigDTO) {
private String joinSql(String sql, Map<String, Object> paramMap, DataScopeSqlConfig sqlConfigDTO) {
if (null == sqlConfigDTO) {
return sql;
}

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datascope.domain.dto;
package net.lab1024.smartadmin.service.module.support.datascope.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
@ -16,7 +16,7 @@ import lombok.Data;
*/
@Data
@Builder
public class DataScopeDTO {
public class DataScope {
@ApiModelProperty("数据范围类型")
private Integer dataScopeType;

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datascope.domain.dto;
package net.lab1024.smartadmin.service.module.support.datascope.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datascope.domain.dto;
package net.lab1024.smartadmin.service.module.support.datascope.domain;
import lombok.Data;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeTypeEnum;
@ -15,7 +15,7 @@ import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScop
* @since JDK1.8
*/
@Data
public class DataScopeSqlConfigDTO {
public class DataScopeSqlConfig {
/**
* 数据范围类型

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datascope.domain.dto;
package net.lab1024.smartadmin.service.module.support.datascope.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
@ -20,6 +20,7 @@ public class DataScopeViewTypeVO {
@ApiModelProperty("可见范围")
private Integer viewType;
@ApiModelProperty("可见范围名称")
private String viewTypeName;

View File

@ -6,9 +6,9 @@ import org.springframework.stereotype.Service;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeViewTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeAndViewTypeVO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeDTO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeViewTypeVO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScopeAndViewTypeVO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScope;
import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScopeViewTypeVO;
import java.util.Comparator;
import java.util.List;
@ -32,7 +32,7 @@ public class DataScopeService {
* @return
*/
public ResponseDTO<List<DataScopeAndViewTypeVO>> dataScopeList() {
List<DataScopeDTO> dataScopeList = this.getDataScopeType();
List<DataScope> dataScopeList = this.getDataScopeType();
List<DataScopeAndViewTypeVO> dataScopeAndTypeList = SmartBeanUtil.copyList(dataScopeList, DataScopeAndViewTypeVO.class);
List<DataScopeViewTypeVO> typeList = this.getViewType();
dataScopeAndTypeList.forEach(e -> {
@ -59,16 +59,16 @@ public class DataScopeService {
return viewTypeList;
}
public List<DataScopeDTO> getDataScopeType() {
List<DataScopeDTO> dataScopeTypeList = Lists.newArrayList();
public List<DataScope> getDataScopeType() {
List<DataScope> dataScopeTypeList = Lists.newArrayList();
DataScopeTypeEnum[] enums = DataScopeTypeEnum.class.getEnumConstants();
DataScopeDTO dataScopeDTO;
DataScope dataScope;
for (DataScopeTypeEnum typeEnum : enums) {
dataScopeDTO =
DataScopeDTO.builder().dataScopeType(typeEnum.getValue()).dataScopeTypeDesc(typeEnum.getDesc()).dataScopeTypeName(typeEnum.getName()).dataScopeTypeSort(typeEnum.getSort()).build();
dataScopeTypeList.add(dataScopeDTO);
dataScope =
DataScope.builder().dataScopeType(typeEnum.getValue()).dataScopeTypeDesc(typeEnum.getDesc()).dataScopeTypeName(typeEnum.getName()).dataScopeTypeSort(typeEnum.getSort()).build();
dataScopeTypeList.add(dataScope);
}
Comparator<DataScopeDTO> comparator = (h1, h2) -> h1.getDataScopeTypeSort().compareTo(h2.getDataScopeTypeSort());
Comparator<DataScope> comparator = (h1, h2) -> h1.getDataScopeTypeSort().compareTo(h2.getDataScopeTypeSort());
dataScopeTypeList.sort(comparator);
return dataScopeTypeList;
}

View File

@ -16,7 +16,7 @@ import net.lab1024.smartadmin.service.module.support.datascope.DataScope;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeViewTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeWhereInTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeSqlConfigDTO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScopeSqlConfig;
import net.lab1024.smartadmin.service.module.support.datascope.strategy.DataScopePowerStrategy;
import javax.annotation.PostConstruct;
@ -47,7 +47,7 @@ public class DataScopeSqlConfigService {
private static final String DEPARTMENT_PARAM = "#departmentIds";
private ConcurrentHashMap<String, DataScopeSqlConfigDTO> dataScopeMethodMap = new ConcurrentHashMap<>();
private ConcurrentHashMap<String, DataScopeSqlConfig> dataScopeMethodMap = new ConcurrentHashMap<>();
@Autowired
private DataScopeViewService dataScopeViewService;
@ -69,13 +69,13 @@ public class DataScopeSqlConfigService {
*
* @return
*/
private Map<String, DataScopeSqlConfigDTO> refreshDataScopeMethodMap() {
private Map<String, DataScopeSqlConfig> refreshDataScopeMethodMap() {
Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage(scanPackage)).setScanners(new MethodAnnotationsScanner()));
Set<Method> methods = reflections.getMethodsAnnotatedWith(DataScope.class);
for (Method method : methods) {
DataScope dataScopeAnnotation = method.getAnnotation(DataScope.class);
if (dataScopeAnnotation != null) {
DataScopeSqlConfigDTO configDTO = new DataScopeSqlConfigDTO();
DataScopeSqlConfig configDTO = new DataScopeSqlConfig();
configDTO.setDataScopeType(dataScopeAnnotation.dataScopeType());
configDTO.setJoinSql(dataScopeAnnotation.joinSql());
configDTO.setWhereIndex(dataScopeAnnotation.whereIndex());
@ -94,8 +94,8 @@ public class DataScopeSqlConfigService {
* @param method
* @return
*/
public DataScopeSqlConfigDTO getSqlConfig(String method) {
DataScopeSqlConfigDTO sqlConfigDTO = this.dataScopeMethodMap.get(method);
public DataScopeSqlConfig getSqlConfig(String method) {
DataScopeSqlConfig sqlConfigDTO = this.dataScopeMethodMap.get(method);
return sqlConfigDTO;
}
@ -105,7 +105,7 @@ public class DataScopeSqlConfigService {
* @param sqlConfigDTO
* @return
*/
public String getJoinSql(Map<String, Object> paramMap, DataScopeSqlConfigDTO sqlConfigDTO) {
public String getJoinSql(Map<String, Object> paramMap, DataScopeSqlConfig sqlConfigDTO) {
DataScopeTypeEnum dataScopeTypeEnum = sqlConfigDTO.getDataScopeType();
String joinSql = sqlConfigDTO.getJoinSql();
Long employeeId = SmartRequestUtil.getRequestEmployeeId();

View File

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import net.lab1024.smartadmin.service.common.util.SmartBaseEnumUtil;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeViewTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.domain.entity.DataScopeRoleEntity;
import net.lab1024.smartadmin.service.module.system.role.domain.entity.RoleDataScopeEntity;
import net.lab1024.smartadmin.service.module.system.department.service.DepartmentService;
import net.lab1024.smartadmin.service.module.system.employee.EmployeeDao;
import net.lab1024.smartadmin.service.module.system.employee.domain.entity.EmployeeEntity;
@ -121,16 +121,16 @@ public class DataScopeViewService {
return DataScopeViewTypeEnum.ME;
}
//未设置角色数据范围 默认本人
List<DataScopeRoleEntity> dataScopeRoleList = roleDataScopeDao.listByRoleIdList(roleIdList);
List<RoleDataScopeEntity> dataScopeRoleList = roleDataScopeDao.listByRoleIdList(roleIdList);
if (CollectionUtils.isEmpty(dataScopeRoleList)) {
return DataScopeViewTypeEnum.ME;
}
Map<Integer, List<DataScopeRoleEntity>> listMap = dataScopeRoleList.stream().collect(Collectors.groupingBy(DataScopeRoleEntity::getDataScopeType));
List<DataScopeRoleEntity> viewLevelList = listMap.getOrDefault(dataScopeTypeEnum.getValue(), Lists.newArrayList());
Map<Integer, List<RoleDataScopeEntity>> listMap = dataScopeRoleList.stream().collect(Collectors.groupingBy(RoleDataScopeEntity::getDataScopeType));
List<RoleDataScopeEntity> viewLevelList = listMap.getOrDefault(dataScopeTypeEnum.getValue(), Lists.newArrayList());
if (CollectionUtils.isEmpty(viewLevelList)) {
return DataScopeViewTypeEnum.ME;
}
DataScopeRoleEntity maxLevel = viewLevelList.stream().max(Comparator.comparing(e -> SmartBaseEnumUtil.getEnumByValue(e.getViewType(), DataScopeViewTypeEnum.class).getLevel())).get();
RoleDataScopeEntity maxLevel = viewLevelList.stream().max(Comparator.comparing(e -> SmartBaseEnumUtil.getEnumByValue(e.getViewType(), DataScopeViewTypeEnum.class).getLevel())).get();
return SmartBaseEnumUtil.getEnumByValue(maxLevel.getViewType(), DataScopeViewTypeEnum.class);
}

View File

@ -1,7 +1,7 @@
package net.lab1024.smartadmin.service.module.support.datascope.strategy;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeViewTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeSqlConfigDTO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScopeSqlConfig;
import java.util.Map;
@ -23,5 +23,5 @@ public abstract class DataScopePowerStrategy {
* @param sqlConfigDTO
* @return
*/
public abstract String getCondition(DataScopeViewTypeEnum viewTypeEnum, Map<String, Object> paramMap, DataScopeSqlConfigDTO sqlConfigDTO);
public abstract String getCondition(DataScopeViewTypeEnum viewTypeEnum, Map<String, Object> paramMap, DataScopeSqlConfig sqlConfigDTO);
}

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datatracer.anno;
package net.lab1024.smartadmin.service.module.support.datatracer.annoation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -12,6 +12,6 @@ import java.lang.annotation.Target;
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldBigDecimalValue {
public @interface DataTracerFieldBigDecimal {
int scale() default 2;
}

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datatracer.anno;
package net.lab1024.smartadmin.service.module.support.datatracer.annoation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -12,7 +12,7 @@ import java.lang.annotation.Target;
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldDoc {
public @interface DataTracerFieldDoc {
/**
* 本属性的注释信息
* @return

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datatracer.anno;
package net.lab1024.smartadmin.service.module.support.datatracer.annoation;
import net.lab1024.smartadmin.service.common.enumeration.BaseEnum;
@ -14,7 +14,7 @@ import java.lang.annotation.Target;
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldEnumValue {
public @interface DataTracerFieldEnum {
Class<? extends BaseEnum> enumClass() default BaseEnum.class;

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datatracer.anno;
package net.lab1024.smartadmin.service.module.support.datatracer.annoation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -14,7 +14,7 @@ import java.lang.annotation.Target;
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldSqlValue {
public @interface DataTracerFieldSql {
/**
* 关联字段名称

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datatracer;
package net.lab1024.smartadmin.service.module.support.datatracer.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -6,8 +6,9 @@ import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import net.lab1024.smartadmin.service.common.controller.SystemBaseController;
import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerQuery;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerQueryForm;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerVO;
import net.lab1024.smartadmin.service.module.support.datatracer.service.DataTracerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -31,7 +32,7 @@ public class DataTracerController extends SystemBaseController {
@ApiOperation("分页查询业务操作日志 - by listen")
@PostMapping("/data/tracer/log/query")
public ResponseDTO<PageResult<DataTracerVO>> query(@Valid @RequestBody DataTracerQuery queryForm) {
public ResponseDTO<PageResult<DataTracerVO>> query(@Valid @RequestBody DataTracerQueryForm queryForm) {
return dataTracerService.query(queryForm);
}
}

View File

@ -1,9 +1,9 @@
package net.lab1024.smartadmin.service.module.support.datatracer;
package net.lab1024.smartadmin.service.module.support.datatracer.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerEntity;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerQuery;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerQueryForm;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -33,5 +33,5 @@ public interface DataTracerDao extends BaseMapper<DataTracerEntity> {
* @param queryForm
* @return
*/
List<DataTracerVO> query(Page page, @Param("query") DataTracerQuery queryForm);
List<DataTracerVO> query(Page page, @Param("query") DataTracerQueryForm queryForm);
}

View File

@ -0,0 +1,34 @@
package net.lab1024.smartadmin.service.module.support.datatracer.domain;
import lombok.Data;
/**
* [ ]
*
* @author 罗伊
* @date 2020/8/25 17:23
*/
@Data
public class DataTracerExtraData {
/**
* 对象所属类
*/
private Class objectClass;
/**
* 原对象
*/
private Object originObject;
/**
* 新对象
*/
private Object newObject;
public DataTracerExtraData(Class objectClass, Object originObject, Object newObject) {
this.objectClass = objectClass;
this.originObject = originObject;
this.newObject = newObject;
}
}

View File

@ -1,34 +0,0 @@
package net.lab1024.smartadmin.service.module.support.datatracer.domain;
import lombok.Data;
/**
* [ ]
*
* @author 罗伊
* @date 2020/8/25 17:23
*/
@Data
public class DataTracerExtraDataDTO {
/**
* 对象所属类
*/
private Class clazz;
/**
* 原对象
*/
private Object originObj;
/**
* 新对象
*/
private Object newObj;
public DataTracerExtraDataDTO(Class clazz, Object originObj, Object newObj) {
this.clazz = clazz;
this.originObj = originObj;
this.newObj = newObj;
}
}

View File

@ -13,7 +13,7 @@ import java.time.LocalDateTime;
* @date 2020/8/25 16:03
*/
@Data
public class DataTracerDTO {
public class DataTracerForm {
/**
* 业务id
@ -43,6 +43,6 @@ public class DataTracerDTO {
/**
* 扩展信息
*/
private DataTracerExtraDataDTO extraData;
private DataTracerExtraData extraData;
}

View File

@ -15,7 +15,7 @@ import javax.validation.constraints.NotNull;
* @date 2021/8/17 8:47
*/
@Data
public class DataTracerQuery extends PageParam {
public class DataTracerQueryForm extends PageParam {
@ApiModelPropertyEnum(DataTracerBusinessTypeEnum.class)
private Integer businessType;

View File

@ -1,6 +1,7 @@
package net.lab1024.smartadmin.service.module.support.datatracer;
package net.lab1024.smartadmin.service.module.support.datatracer.manager;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.lab1024.smartadmin.service.module.support.datatracer.dao.DataTracerDao;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerEntity;
import org.springframework.stereotype.Service;

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datatracer;
package net.lab1024.smartadmin.service.module.support.datatracer.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -6,10 +6,10 @@ import com.google.common.base.CaseFormat;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldBigDecimalValue;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldDoc;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldEnumValue;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldSqlValue;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldBigDecimal;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldDoc;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldSql;
import net.lab1024.smartadmin.service.module.support.datatracer.constant.DataTracerOperateTypeEnum;
import net.lab1024.smartadmin.service.common.util.SmartBaseEnumUtil;
import net.lab1024.smartadmin.service.common.util.SmartBigDecimalUtil;
@ -267,13 +267,13 @@ public class DataTracerFieldService {
if (fieldValue == null) {
return "";
}
FieldEnumValue fieldEnumValue = field.getAnnotation(FieldEnumValue.class);
FieldSqlValue fieldSqlValue = field.getAnnotation(FieldSqlValue.class);
if (fieldEnumValue != null) {
return SmartBaseEnumUtil.getEnumDescByValue(fieldValue, fieldEnumValue.enumClass());
DataTracerFieldEnum dataTracerFieldEnum = field.getAnnotation(DataTracerFieldEnum.class);
DataTracerFieldSql dataTracerFieldSql = field.getAnnotation(DataTracerFieldSql.class);
if (dataTracerFieldEnum != null) {
return SmartBaseEnumUtil.getEnumDescByValue(fieldValue, dataTracerFieldEnum.enumClass());
}
if (fieldSqlValue != null) {
return this.getRelateDisplayValue(fieldValue, fieldSqlValue);
if (dataTracerFieldSql != null) {
return this.getRelateDisplayValue(fieldValue, dataTracerFieldSql);
}
if (fieldValue instanceof Date) {
LocalDateTime localDateTime = SmartLocalDateUtil.toLocalDateTime((Date) fieldValue);
@ -286,9 +286,9 @@ public class DataTracerFieldService {
return SmartLocalDateUtil.format((LocalDate) fieldValue, SmartDateFormatterEnum.YMD);
}
if (fieldValue instanceof BigDecimal) {
FieldBigDecimalValue fieldBigDecimalValue = field.getAnnotation(FieldBigDecimalValue.class);
if (fieldBigDecimalValue != null) {
BigDecimal value = SmartBigDecimalUtil.setScale((BigDecimal) fieldValue, fieldBigDecimalValue.scale());
DataTracerFieldBigDecimal dataTracerFieldBigDecimal = field.getAnnotation(DataTracerFieldBigDecimal.class);
if (dataTracerFieldBigDecimal != null) {
BigDecimal value = SmartBigDecimalUtil.setScale((BigDecimal) fieldValue, dataTracerFieldBigDecimal.scale());
return value.toString();
}
}
@ -301,16 +301,16 @@ public class DataTracerFieldService {
* @param fieldValue
* @return
*/
private String getRelateDisplayValue(Object fieldValue, FieldSqlValue fieldSqlValue) {
Class<? extends BaseMapper> relateMapper = fieldSqlValue.relateMapper();
private String getRelateDisplayValue(Object fieldValue, DataTracerFieldSql dataTracerFieldSql) {
Class<? extends BaseMapper> relateMapper = dataTracerFieldSql.relateMapper();
BaseMapper mapper = applicationContext.getBean(relateMapper);
if (mapper == null) {
return "";
}
String relateFieldValue = fieldValue.toString();
QueryWrapper qw = new QueryWrapper();
qw.select(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldSqlValue.relateDisplayColumn()));
qw.eq(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldSqlValue.relateColumn()), relateFieldValue);
qw.select(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dataTracerFieldSql.relateDisplayColumn()));
qw.eq(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dataTracerFieldSql.relateColumn()), relateFieldValue);
List<Object> displayValue = mapper.selectObjs(qw);
if (CollectionUtils.isEmpty(displayValue)) {
return "";
@ -331,7 +331,7 @@ public class DataTracerFieldService {
if (null != desc) {
return desc;
}
FieldDoc operateField = field.getAnnotation(FieldDoc.class);
DataTracerFieldDoc operateField = field.getAnnotation(DataTracerFieldDoc.class);
if (operateField != null) {
desc = operateField.value();
} else {
@ -450,7 +450,7 @@ public class DataTracerFieldService {
Field[] declaredFields = tempClass.getDeclaredFields();
for (Field field : declaredFields) {
// 过虑出有注解字段
if (!field.isAnnotationPresent(FieldDoc.class)) {
if (!field.isAnnotationPresent(DataTracerFieldDoc.class)) {
continue;
}
field.setAccessible(true);

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datatracer;
package net.lab1024.smartadmin.service.module.support.datatracer.service;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -6,10 +6,12 @@ import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.datatracer.dao.DataTracerDao;
import net.lab1024.smartadmin.service.module.support.datatracer.manager.DataTracerManger;
import net.lab1024.smartadmin.service.module.support.datatracer.constant.DataTracerBusinessTypeEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerDTO;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerForm;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerEntity;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerQuery;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerQueryForm;
import net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerVO;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil;
import org.apache.commons.collections4.CollectionUtils;
@ -36,12 +38,12 @@ public class DataTracerService {
/**
* 保存操作日志
*
* @param dataTracerDTO
* @param dataTracerForm
* @param operatorId 操作人id
* @param operatorName 操作人名称
*/
public void saveOperateRecord(DataTracerDTO dataTracerDTO, Long operatorId, String operatorName) {
DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerDTO, operatorId, operatorName);
public void saveOperateRecord(DataTracerForm dataTracerForm, Long operatorId, String operatorName) {
DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerForm, operatorId, operatorName);
dataTracerDao.insert(dataTracerEntity);
}
@ -52,13 +54,13 @@ public class DataTracerService {
* @param operatorId
* @param operatorName
*/
public void saveBatchOperateRecord(List<DataTracerDTO> dataTracerList, Long operatorId, String operatorName) {
public void saveBatchOperateRecord(List<DataTracerForm> dataTracerList, Long operatorId, String operatorName) {
if (CollectionUtils.isEmpty(dataTracerList)) {
return;
}
List<DataTracerEntity> recordEntityList = Lists.newArrayList();
for (DataTracerDTO dataTracerDTO : dataTracerList) {
DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerDTO, operatorId, operatorName);
for (DataTracerForm dataTracerForm : dataTracerList) {
DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerForm, operatorId, operatorName);
recordEntityList.add(dataTracerEntity);
}
dataTracerManger.saveBatch(recordEntityList);
@ -67,25 +69,25 @@ public class DataTracerService {
/**
* dto 转实体对象
*
* @param dataTracerDTO
* @param dataTracerForm
* @param operatorId
* @param operatorName
* @return
*/
private DataTracerEntity convertEntity(DataTracerDTO dataTracerDTO, Long operatorId, String operatorName) {
private DataTracerEntity convertEntity(DataTracerForm dataTracerForm, Long operatorId, String operatorName) {
DataTracerEntity recordEntity = new DataTracerEntity();
recordEntity.setBusinessId(dataTracerDTO.getBusinessId());
recordEntity.setBusinessType(dataTracerDTO.getBusinessType().getValue());
recordEntity.setBusinessTypeDesc(dataTracerDTO.getBusinessType().getDesc());
recordEntity.setOperateType((Integer) dataTracerDTO.getOperateType().getValue());
recordEntity.setOperateTypeDesc(dataTracerDTO.getOperateType().getDesc());
recordEntity.setOperateContent(dataTracerDTO.getOperateContent());
recordEntity.setBusinessId(dataTracerForm.getBusinessId());
recordEntity.setBusinessType(dataTracerForm.getBusinessType().getValue());
recordEntity.setBusinessTypeDesc(dataTracerForm.getBusinessType().getDesc());
recordEntity.setOperateType((Integer) dataTracerForm.getOperateType().getValue());
recordEntity.setOperateTypeDesc(dataTracerForm.getOperateType().getDesc());
recordEntity.setOperateContent(dataTracerForm.getOperateContent());
recordEntity.setOperatorId(operatorId);
recordEntity.setOperatorName(operatorName);
if (dataTracerDTO.getExtraData() != null) {
recordEntity.setExtraData(JSON.toJSONString(dataTracerDTO.getExtraData()));
if (dataTracerForm.getExtraData() != null) {
recordEntity.setExtraData(JSON.toJSONString(dataTracerForm.getExtraData()));
}
recordEntity.setCreateTime(dataTracerDTO.getOperateTime());
recordEntity.setCreateTime(dataTracerForm.getOperateTime());
return recordEntity;
}
@ -107,7 +109,7 @@ public class DataTracerService {
* @param queryForm
* @return
*/
public ResponseDTO<PageResult<DataTracerVO>> query(DataTracerQuery queryForm) {
public ResponseDTO<PageResult<DataTracerVO>> query(DataTracerQueryForm queryForm) {
Page page = SmartPageUtil.convert2PageQuery(queryForm);
List<DataTracerVO> list = dataTracerDao.query(page, queryForm);
PageResult<DataTracerVO> pageResult = SmartPageUtil.convert2PageResult(page, list);

View File

@ -7,6 +7,7 @@ import net.lab1024.smartadmin.service.common.domain.PageParam;
import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.controller.SupportBaseController;
import net.lab1024.smartadmin.service.module.support.heartbeat.domain.HeartBeatRecordVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

View File

@ -2,6 +2,8 @@ package net.lab1024.smartadmin.service.module.support.heartbeat;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.smartadmin.service.module.support.heartbeat.domain.HeartBeatRecordEntity;
import net.lab1024.smartadmin.service.module.support.heartbeat.domain.HeartBeatRecordVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

View File

@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.module.support.heartbeat.core.HeartBeatRecord;
import net.lab1024.smartadmin.service.module.support.heartbeat.core.IHeartBeatRecordHandler;
import net.lab1024.smartadmin.service.common.util.SmartBeanUtil;
import net.lab1024.smartadmin.service.module.support.heartbeat.domain.HeartBeatRecordEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@ -6,6 +6,7 @@ import net.lab1024.smartadmin.service.common.domain.PageParam;
import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil;
import net.lab1024.smartadmin.service.module.support.heartbeat.domain.HeartBeatRecordVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.heartbeat;
package net.lab1024.smartadmin.service.module.support.heartbeat.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.heartbeat;
package net.lab1024.smartadmin.service.module.support.heartbeat.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -7,7 +7,7 @@ import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogDTO;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogQuery;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogQueryForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -27,7 +27,7 @@ public class OperateLogController extends SupportBaseController {
@ApiOperation(value = "分页查询 @author 罗伊")
@PostMapping("/userOperateLog/page/query")
public ResponseDTO<PageResult<OperateLogDTO>> queryByPage(@RequestBody OperateLogQuery queryForm) {
public ResponseDTO<PageResult<OperateLogDTO>> queryByPage(@RequestBody OperateLogQueryForm queryForm) {
return operateLogService.queryByPage(queryForm);
}

View File

@ -3,7 +3,7 @@ package net.lab1024.smartadmin.service.module.support.operatelog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.OperateLogEntity;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogQuery;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogQueryForm;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
@ -25,7 +25,7 @@ public interface OperateLogDao extends BaseMapper<OperateLogEntity> {
* @param queryForm
* @return UserOperateLogEntity
*/
List<OperateLogEntity> queryByPage(Page page, @Param("query") OperateLogQuery queryForm);
List<OperateLogEntity> queryByPage(Page page, @Param("query") OperateLogQueryForm queryForm);
/**
* 根据id删除

View File

@ -5,7 +5,7 @@ import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.OperateLogEntity;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogDTO;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogQuery;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.dto.OperateLogQueryForm;
import net.lab1024.smartadmin.service.common.util.SmartBeanUtil;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,7 +29,7 @@ public class OperateLogService {
* @description 分页查询
* @date 2019-05-15 11:32:14
*/
public ResponseDTO<PageResult<OperateLogDTO>> queryByPage(OperateLogQuery queryForm) {
public ResponseDTO<PageResult<OperateLogDTO>> queryByPage(OperateLogQueryForm queryForm) {
Page page = SmartPageUtil.convert2PageQuery(queryForm);
List<OperateLogEntity> logEntityList = operateLogDao.queryByPage(page, queryForm);
PageResult<OperateLogDTO> pageResult = SmartPageUtil.convert2PageResult(page, logEntityList, OperateLogDTO.class);

View File

@ -10,7 +10,7 @@ import lombok.Data;
* @author 罗伊
*/
@Data
public class OperateLogQuery extends PageParam {
public class OperateLogQueryForm extends PageParam {
@ApiModelProperty("开始日期")

View File

@ -20,7 +20,7 @@ import java.util.List;
* @date 2018/02/10 09:18
*/
@Component
public class SmartReloadCommand extends AbstractSmartReloadCommand {
public class ReloadCommand extends AbstractSmartReloadCommand {
@Autowired
private ReloadItemDao reloadItemDao;

View File

@ -1,8 +1,10 @@
package net.lab1024.smartadmin.service.module.support.repeatsubmit;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.common.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.annoation.RepeatSubmit;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.ticket.AbstractRepeatSubmitTicket;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
@ -20,6 +22,7 @@ import java.lang.reflect.Method;
* @date
*/
@Aspect
@Slf4j
public class RepeatSubmitAspect {
private AbstractRepeatSubmitTicket repeatSubmitTicket;
@ -50,7 +53,7 @@ public class RepeatSubmitAspect {
if (StringUtils.isEmpty(ticket)) {
return point.proceed();
}
Long timeStamp = this.repeatSubmitTicket.ticketTimeStamp(ticket);
Long timeStamp = this.repeatSubmitTicket.getTicketTimestamp(ticket);
if (timeStamp != null) {
Method method = ((MethodSignature) point.getSignature()).getMethod();
RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class);
@ -64,7 +67,9 @@ public class RepeatSubmitAspect {
try {
obj = point.proceed();
this.repeatSubmitTicket.putTicket(ticket);
}catch (Throwable throwable){
} catch (Throwable throwable) {
log.error("", throwable);
} finally {
this.repeatSubmitTicket.removeTicket(ticket);
}
return obj;

View File

@ -1,12 +1,11 @@
package net.lab1024.smartadmin.service.module.support.repeatsubmit;
package net.lab1024.smartadmin.service.module.support.repeatsubmit.ticket;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
/**
* [ ]
*
* @author yandanyang
* @author 罗伊
* @date 2021/10/9 19:10
*/
public abstract class AbstractRepeatSubmitTicket {
@ -33,18 +32,18 @@ public abstract class AbstractRepeatSubmitTicket {
* @param ticket
* @return
*/
abstract Long ticketTimeStamp(String ticket);
public abstract Long getTicketTimestamp(String ticket);
/**
* 设置本次请求时间
* @param ticket
*/
abstract void putTicket(String ticket);
public abstract void putTicket(String ticket);
/**
* 移除凭证
* @param ticket
*/
abstract void removeTicket(String ticket);
public abstract void removeTicket(String ticket);
}

View File

@ -1,9 +1,8 @@
package net.lab1024.smartadmin.service.module.support.repeatsubmit;
package net.lab1024.smartadmin.service.module.support.repeatsubmit.ticket;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.annoation.RepeatSubmit;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@ -30,7 +29,7 @@ public class RepeatSubmitCaffeineTicket extends AbstractRepeatSubmitTicket {
}
@Override
public Long ticketTimeStamp(String ticket) {
public Long getTicketTimestamp(String ticket) {
return cache.getIfPresent(ticket);
}
@ -41,7 +40,7 @@ public class RepeatSubmitCaffeineTicket extends AbstractRepeatSubmitTicket {
}
@Override
void removeTicket(String ticket) {
public void removeTicket(String ticket) {
cache.invalidate(ticket);
}
}

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.repeatsubmit;
package net.lab1024.smartadmin.service.module.support.repeatsubmit.ticket;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.annoation.RepeatSubmit;
import org.springframework.data.redis.core.ValueOperations;
@ -23,10 +23,10 @@ public class RepeatSubmitRedisTicket extends AbstractRepeatSubmitTicket {
}
@Override
public Long ticketTimeStamp(String ticket) {
public Long getTicketTimestamp(String ticket) {
Long timeStamp = System.currentTimeMillis();
boolean setFlag = redisValueOperations.setIfAbsent(ticket, String.valueOf(timeStamp), RepeatSubmit.MAX_INTERVAL, TimeUnit.MILLISECONDS);
if(!setFlag){
if (!setFlag) {
timeStamp = Long.valueOf(redisValueOperations.get(ticket));
}
return timeStamp;
@ -35,11 +35,11 @@ public class RepeatSubmitRedisTicket extends AbstractRepeatSubmitTicket {
@Override
public void putTicket(String ticket) {
redisValueOperations.getOperations().delete(ticket);
this.ticketTimeStamp(ticket);
this.getTicketTimestamp(ticket);
}
@Override
void removeTicket(String ticket) {
public void removeTicket(String ticket) {
redisValueOperations.getOperations().delete(ticket);
}
}

View File

@ -3,8 +3,8 @@ package net.lab1024.smartadmin.service.module.system.login.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.common.controller.SystemBaseController;
import net.lab1024.smartadmin.service.common.domain.CaptchaVO;
import net.lab1024.smartadmin.service.common.util.SmartRequestUtil;
import net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaVO;
import net.lab1024.smartadmin.service.module.system.login.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;

View File

@ -2,8 +2,9 @@ package net.lab1024.smartadmin.service.module.system.login.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import net.lab1024.smartadmin.service.common.util.SmartVerificationUtil;
import net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaForm;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@ -15,7 +16,7 @@ import javax.validation.constraints.Pattern;
* @date 2017年12月19日上午11:49:46
*/
@Data
public class LoginForm {
public class LoginForm extends CaptchaForm {
@ApiModelProperty(example = "sa")
@NotBlank(message = "登录名不能为空")
@ -27,14 +28,6 @@ public class LoginForm {
@Pattern(regexp = SmartVerificationUtil.PWD_REGEXP, message = "请输入6-15位密码(数字|大小写字母|小数点)")
private String password;
@ApiModelProperty(value = "验证码")
@Length(max = 6, message = "验证码最多6字符")
@NotBlank(message = "验证码不能为空")
private String captchaCode;
@ApiModelProperty(value = "验证码uuid")
@Length(max = 50, message = "验证码id最多6字符")
private String captchaUuid;
@ApiModelProperty(value = "登录终端")
@Length(max = 30, message = "登录终端最多30字符")

View File

@ -1,14 +1,12 @@
package net.lab1024.smartadmin.service.module.system.login.service;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.common.code.SystemErrorCode;
import net.lab1024.smartadmin.service.common.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.constant.StringConst;
import net.lab1024.smartadmin.service.common.domain.CaptchaVO;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.util.SmartBeanUtil;
import net.lab1024.smartadmin.service.constant.RedisKeyConst;
import net.lab1024.smartadmin.service.module.support.captcha.CaptchaService;
import net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaVO;
import net.lab1024.smartadmin.service.module.system.department.dao.DepartmentDao;
import net.lab1024.smartadmin.service.module.system.department.domain.entity.DepartmentEntity;
import net.lab1024.smartadmin.service.module.system.employee.EmployeeDao;
@ -21,17 +19,9 @@ import net.lab1024.smartadmin.service.module.system.menu.domain.bo.MenuLoginBO;
import net.lab1024.smartadmin.service.module.system.menu.service.MenuEmployeeService;
import net.lab1024.smartadmin.service.module.system.systemconfig.SystemConfigKeyEnum;
import net.lab1024.smartadmin.service.module.system.systemconfig.SystemConfigService;
import net.lab1024.smartadmin.service.module.support.redis.RedisService;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.UUID;
/**
* @author zhuoda
* @version 2.0
@ -54,10 +44,7 @@ public class LoginService {
private JwtService jwtService;
@Autowired
private DefaultKaptcha defaultKaptcha;
@Autowired
private RedisService redisService;
private CaptchaService captchaService;
@Autowired
private MenuEmployeeService menuEmployeeService;
@ -73,18 +60,11 @@ public class LoginService {
* @return 返回用户登录信息
*/
public ResponseDTO<LoginResultVO> login(LoginForm loginForm) {
/**
* 1校验redis里的验证码
* 2校验成功后删除redis
*/
String redisCaptchaKey = RedisKeyConst.Support.CAPTCHA + loginForm.getCaptchaUuid();
String redisCaptchaValue = redisService.get(redisCaptchaKey);
if (StringUtils.isBlank(redisCaptchaValue) || !StringUtils.equalsIgnoreCase(loginForm.getCaptchaCode(), redisCaptchaValue)) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码错误");
// 校验 验证码
ResponseDTO<String> checkCaptcha = captchaService.checkCaptcha(loginForm);
if (!checkCaptcha.getOk()) {
return ResponseDTO.error(checkCaptcha);
}
// 删除已使用的验证码
redisService.delete(redisCaptchaKey);
/**
* 验证账号和账号状态
@ -136,6 +116,7 @@ public class LoginService {
* @return
*/
public ResponseDTO<String> logoutByToken(Long employeeId) {
//TODO 卓大 清除缓存等
return ResponseDTO.ok();
}
@ -145,32 +126,7 @@ public class LoginService {
* @return
*/
public ResponseDTO<CaptchaVO> getCaptcha() {
String uuid = UUID.randomUUID().toString().replace("-", StringConst.EMPTY_STR);
String captchaText = defaultKaptcha.createText();
String base64Code;
BufferedImage image = defaultKaptcha.createImage(captchaText);
ByteArrayOutputStream outputStream = null;
try {
outputStream = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", outputStream);
base64Code = Base64.encodeBase64String(outputStream.toByteArray());
} catch (Exception e) {
log.error("verificationCode exception .{}", e);
return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR);
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (Exception e) {
log.error("verificationCode outputStream close exception .{}", e);
}
}
}
CaptchaVO captchaVO = new CaptchaVO();
captchaVO.setUuid(uuid);
captchaVO.setCode("data:image/png;base64," + base64Code);
redisService.set(RedisKeyConst.Support.CAPTCHA + uuid, captchaText, 60);
return ResponseDTO.ok(captchaVO);
return ResponseDTO.ok(captchaService.generateCaptcha());
}
/**

View File

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import net.lab1024.smartadmin.service.module.support.datascope.domain.entity.DataScopeRoleEntity;
import net.lab1024.smartadmin.service.module.system.role.domain.entity.RoleDataScopeEntity;
import java.util.List;
@ -20,21 +20,21 @@ import java.util.List;
*/
@Mapper
@Component
public interface RoleDataScopeDao extends BaseMapper<DataScopeRoleEntity> {
public interface RoleDataScopeDao extends BaseMapper<RoleDataScopeEntity> {
/**
* 获取某个角色的设置信息
* @param roleId
* @return
*/
List<DataScopeRoleEntity> listByRoleId(@Param("roleId") Long roleId);
List<RoleDataScopeEntity> listByRoleId(@Param("roleId") Long roleId);
/**
* 获取某批角色的所有数据范围配置信息
* @param roleIdList
* @return
*/
List<DataScopeRoleEntity> listByRoleIdList(@Param("roleIdList") List<Long> roleIdList);
List<RoleDataScopeEntity> listByRoleIdList(@Param("roleIdList") List<Long> roleIdList);
/**
* 删除某个角色的设置信息
@ -48,5 +48,5 @@ public interface RoleDataScopeDao extends BaseMapper<DataScopeRoleEntity> {
* 批量添加设置信息
* @param list
*/
void batchInsert(@Param("list")List<DataScopeRoleEntity> list);
void batchInsert(@Param("list")List<RoleDataScopeEntity> list);
}

View File

@ -1,4 +1,4 @@
package net.lab1024.smartadmin.service.module.support.datascope.domain.entity;
package net.lab1024.smartadmin.service.module.system.role.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
@ -19,7 +19,7 @@ import java.time.LocalDateTime;
*/
@Data
@TableName("t_role_data_scope")
public class DataScopeRoleEntity {
public class RoleDataScopeEntity {
/**
* 主键id
*/

View File

@ -7,7 +7,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import net.lab1024.smartadmin.service.common.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.datascope.domain.entity.DataScopeRoleEntity;
import net.lab1024.smartadmin.service.module.system.role.domain.entity.RoleDataScopeEntity;
import net.lab1024.smartadmin.service.module.system.role.dao.RoleDataScopeDao;
import net.lab1024.smartadmin.service.module.system.role.domain.form.RoleDataScopeUpdateForm;
import net.lab1024.smartadmin.service.module.system.role.domain.vo.RoleDataScopeVO;
@ -33,11 +33,11 @@ public class RoleDataScopeService {
* @return
*/
public ResponseDTO<List<RoleDataScopeVO>> getRoleDataScopeList(Long roleId) {
List<DataScopeRoleEntity> dataScopeRoleEntityList = roleDataScopeDao.listByRoleId(roleId);
if (CollectionUtils.isEmpty(dataScopeRoleEntityList)) {
List<RoleDataScopeEntity> roleDataScopeEntityList = roleDataScopeDao.listByRoleId(roleId);
if (CollectionUtils.isEmpty(roleDataScopeEntityList)) {
return ResponseDTO.ok(Lists.newArrayList());
}
List<RoleDataScopeVO> roleDataScopeList = SmartBeanUtil.copyList(dataScopeRoleEntityList, RoleDataScopeVO.class);
List<RoleDataScopeVO> roleDataScopeList = SmartBeanUtil.copyList(roleDataScopeEntityList, RoleDataScopeVO.class);
return ResponseDTO.ok(roleDataScopeList);
}
@ -53,10 +53,10 @@ public class RoleDataScopeService {
if (CollectionUtils.isEmpty(batchSetList)) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "缺少配置信息");
}
List<DataScopeRoleEntity> dataScopeRoleEntityList = SmartBeanUtil.copyList(batchSetList, DataScopeRoleEntity.class);
dataScopeRoleEntityList.forEach(e -> e.setRoleId(roleDataScopeUpdateForm.getRoleId()));
List<RoleDataScopeEntity> roleDataScopeEntityList = SmartBeanUtil.copyList(batchSetList, RoleDataScopeEntity.class);
roleDataScopeEntityList.forEach(e -> e.setRoleId(roleDataScopeUpdateForm.getRoleId()));
roleDataScopeDao.deleteByRoleId(roleDataScopeUpdateForm.getRoleId());
roleDataScopeDao.batchInsert(dataScopeRoleEntityList);
roleDataScopeDao.batchInsert(roleDataScopeEntityList);
return ResponseDTO.ok();
}
}

View File

@ -1,6 +1,6 @@
<?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="net.lab1024.smartadmin.service.module.support.datatracer.DataTracerDao">
<mapper namespace="net.lab1024.smartadmin.service.module.support.datatracer.dao.DataTracerDao">
<select id="selectRecord"
resultType="net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerVO">

View File

@ -27,11 +27,11 @@
</where>
</update>
<select id="query" resultType="net.lab1024.smartadmin.service.module.support.heartbeat.HeartBeatRecordEntity">
<select id="query" resultType="net.lab1024.smartadmin.service.module.support.heartbeat.domain.HeartBeatRecordEntity">
select * from t_heart_beat_record where project_path = #{projectPath} and server_ip = #{serverIp} and process_no =#{processNo}
</select>
<select id="pageQuery" resultType="net.lab1024.smartadmin.service.module.support.heartbeat.HeartBeatRecordVO">
<select id="pageQuery" resultType="net.lab1024.smartadmin.service.module.support.heartbeat.domain.HeartBeatRecordVO">
SELECT
*
FROM

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.lab1024.smartadmin.service.module.system.role.dao.RoleDataScopeDao">
<resultMap id="DataScopeRoleEntity" type="net.lab1024.smartadmin.service.module.support.datascope.domain.entity.DataScopeRoleEntity"></resultMap>
<resultMap id="DataScopeRoleEntity" type="net.lab1024.smartadmin.service.module.system.role.domain.entity.RoleDataScopeEntity"></resultMap>
<select id="listByRoleId" resultMap="DataScopeRoleEntity">
select id,data_scope_type,view_type,role_id,update_time,create_time from t_role_data_scope where role_id = #{roleId}