优化验证码、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.common.util.SmartRequestUtil;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.RepeatSubmitAspect; 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.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;

View File

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

View File

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

View File

@ -6,10 +6,10 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import net.lab1024.smartadmin.service.module.business.category.CategoryDao; 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.business.goods.constant.GoodsTypeEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldBigDecimalValue; import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldBigDecimal;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldDoc; import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldDoc;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldEnumValue; import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldSqlValue; import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldSql;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -32,8 +32,8 @@ public class GoodsEntity {
* *
* @see GoodsTypeEnum * @see GoodsTypeEnum
*/ */
@FieldDoc("商品类型") @DataTracerFieldDoc("商品类型")
@FieldEnumValue(enumClass = GoodsTypeEnum.class) @DataTracerFieldEnum(enumClass = GoodsTypeEnum.class)
private Integer goodsType; 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; private Long categoryId;
/** /**
* 商品名称 * 商品名称
*/ */
@FieldDoc("商品名称") @DataTracerFieldDoc("商品名称")
private String goodsName; private String goodsName;
/** /**
@ -61,8 +61,8 @@ public class GoodsEntity {
/** /**
* 商品价格 * 商品价格
*/ */
@FieldDoc("商品价格") @DataTracerFieldDoc("商品价格")
@FieldBigDecimalValue @DataTracerFieldBigDecimal
private BigDecimal price; private BigDecimal price;
/** /**
@ -73,7 +73,7 @@ public class GoodsEntity {
/** /**
* 上架状态 * 上架状态
*/ */
@FieldDoc("上架状态") @DataTracerFieldDoc("上架状态")
private Boolean shelvesFlag; 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.Api;
import io.swagger.annotations.ApiOperation; 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.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst; import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -19,19 +20,19 @@ import java.util.List;
*/ */
@RestController @RestController
@Api(tags = {SwaggerTagConst.Admin.MANAGER_SYSTEM_CACHE}) @Api(tags = {SwaggerTagConst.Admin.MANAGER_SYSTEM_CACHE})
public class CacheController { public class CacheController extends SupportBaseController {
@Autowired @Autowired
private CacheService systemCacheService; private CacheService systemCacheService;
@ApiOperation(value = "获取所有缓存", notes = "@author 罗伊") @ApiOperation(value = "获取所有缓存 @author 罗伊")
@GetMapping("/cache/names") @GetMapping("/cache/names")
public ResponseDTO<List<String>> cacheNames() { public ResponseDTO<List<String>> cacheNames() {
return ResponseDTO.ok(systemCacheService.cacheNames()); return ResponseDTO.ok(systemCacheService.cacheNames());
} }
@ApiOperation(value = "移除某个缓存", notes = "@author 罗伊") @ApiOperation(value = "移除某个缓存 @author 罗伊")
@GetMapping("/cache/remove/{cacheName}") @GetMapping("/cache/remove/{cacheName}")
public ResponseDTO<String> removeCache(@PathVariable String cacheName) { public ResponseDTO<String> removeCache(@PathVariable String cacheName) {
systemCacheService.removeCache(cacheName); systemCacheService.removeCache(cacheName);
@ -39,7 +40,7 @@ public class CacheController {
} }
@ApiOperation(value = "获取某个缓存的所有key", notes = "@author 罗伊") @ApiOperation(value = "获取某个缓存的所有key @author 罗伊")
@GetMapping("/cache/keys/{cacheName}") @GetMapping("/cache/keys/{cacheName}")
public ResponseDTO<List<String>> cacheKeys(@PathVariable String cacheName) { public ResponseDTO<List<String>> cacheKeys(@PathVariable String cacheName) {
return ResponseDTO.ok(systemCacheService.cacheKey(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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.common.annoation.NoNeedLogin; 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.controller.SupportBaseController;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; 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 net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/** /**
* 图形验证码业务 路由 * 图形验证码业务
* *
* @author listen * @author 胡克
* @date 2021/08/31 20:00 * @date 2021/08/31 20:00
*/ */
@Api(tags = SwaggerTagConst.Support.CAPTCHA) @Api(tags = SwaggerTagConst.Support.CAPTCHA)
@ -26,10 +26,10 @@ public class CaptchaController extends SupportBaseController {
private CaptchaService captchaService; private CaptchaService captchaService;
@NoNeedLogin @NoNeedLogin
@ApiOperation("获取图形验证码 by listen") @ApiOperation("获取图形验证码 @author 胡克")
@GetMapping("/captcha") @GetMapping("/captcha")
public ResponseDTO<CaptchaVO> generateCaptcha() { 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.SystemErrorCode;
import net.lab1024.smartadmin.service.common.code.UserErrorCode; import net.lab1024.smartadmin.service.common.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.constant.StringConst; 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.constant.RedisKeyConst;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; 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.captcha.domain.CaptchaVO;
import net.lab1024.smartadmin.service.module.support.redis.RedisService; import net.lab1024.smartadmin.service.module.support.redis.RedisService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -30,6 +32,11 @@ import java.util.UUID;
@Service @Service
public class CaptchaService { public class CaptchaService {
/**
* 过期时间65秒
*/
private static final long EXPIRE_SECOND = 65L;
@Autowired @Autowired
private DefaultKaptcha defaultKaptcha; private DefaultKaptcha defaultKaptcha;
@ -37,21 +44,22 @@ public class CaptchaService {
private RedisService redisService; private RedisService redisService;
/** /**
* 获取生成图形验证码 * 生成图形验证码
* 默认 1 分钟有效期 * 默认 1 分钟有效期
* *
* @return * @return
*/ */
public ResponseDTO<CaptchaVO> generateCaptcha() { public CaptchaVO generateCaptcha() {
String base64Code;
String captchaText = defaultKaptcha.createText(); String captchaText = defaultKaptcha.createText();
BufferedImage image = defaultKaptcha.createImage(captchaText); BufferedImage image = defaultKaptcha.createImage(captchaText);
String base64Code;
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) { try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
ImageIO.write(image, "jpg", os); ImageIO.write(image, "jpg", os);
base64Code = Base64Utils.encodeToString(os.toByteArray()); base64Code = Base64Utils.encodeToString(os.toByteArray());
} catch (Exception e) { } catch (Exception e) {
log.error("verificationCode exception:", e); log.error("generateCaptcha error:", e);
return ResponseDTO.error(SystemErrorCode.SYSTEM_ERROR, "generate captcha error" ); throw new BusinessException("生成验证码错误");
} }
// uuid 唯一标识 // uuid 唯一标识
String uuid = UUID.randomUUID().toString().replace("-", StringConst.EMPTY_STR); String uuid = UUID.randomUUID().toString().replace("-", StringConst.EMPTY_STR);
@ -62,33 +70,36 @@ public class CaptchaService {
* 默认有效时长 80s * 默认有效时长 80s
*/ */
CaptchaVO captchaVO = new CaptchaVO(); CaptchaVO captchaVO = new CaptchaVO();
captchaVO.setCaptchaId(uuid); captchaVO.setCaptchaUUid(uuid);
captchaVO.setCaptchaImg("data:image/png;base64," + base64Code); captchaVO.setCaptchaBase64Image("data:image/png;base64," + base64Code);
redisService.set(buildCaptchaRedisKey(uuid), captchaText, 80L); redisService.set(buildCaptchaRedisKey(uuid), captchaText, EXPIRE_SECOND);
return ResponseDTO.ok(captchaVO); return captchaVO;
} }
/** /**
* 校验图形验证码 * 校验图形验证码
* *
* @param captchaId * @param captchaForm
* @param captcha
* @return * @return
*/ */
public ResponseDTO<String> checkCaptcha(String captchaId, String captcha) { public ResponseDTO<String> checkCaptcha(CaptchaForm captchaForm) {
if (StringUtils.isBlank(captchaId) || StringUtils.isBlank(captcha)) { if (StringUtils.isBlank(captchaForm.getCaptchaUuid()) || StringUtils.isBlank(captchaForm.getCaptchaCode())) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "请输入正确验证码" ); return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "请输入正确验证码");
} }
String redisKey = buildCaptchaRedisKey(captchaId); /**
String redisCode = redisService.get(redisKey); * 1校验redis里的验证码
if (StringUtils.isBlank(redisCode)) { * 2校验成功后删除redis
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码错误或已过期,请刷新重试" ); */
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)) { if (!Objects.equals(redisCaptchaCode, captchaForm.getCaptchaCode())) {
return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码错误或已过期,请刷新重试" ); return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "验证码错误,请输入正确的验证码");
} }
// 校验通过 移除 // 删除已使用的验证码
redisService.delete(redisKey); redisService.delete(redisCaptchaKey);
return ResponseDTO.ok(); 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; 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.NoiseProducer;
import com.google.code.kaptcha.util.Configurable; 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.text.WordRenderer;
import com.google.code.kaptcha.util.Configurable; 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 io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
/** /**
* 图形验证码 VO * 图形验证码 表单
* *
* @author 胡克 * @author zhuoda
* @date 2021/8/31 20:52
*/ */
@Data @Data
public class CaptchaForm { public class CaptchaForm {
@ApiModelProperty @ApiModelProperty(value = "验证码")
@NotBlank(message = "验证码标识不能为空" ) @NotBlank(message = "验证码不能为空")
private String captchaId; private String captchaCode;
@ApiModelProperty @ApiModelProperty(value = "验证码uuid标识")
@NotBlank(message = "验证码不能为空" ) @NotBlank(message = "验证码uuid标识不能为空")
private String captcha; private String captchaUuid;
} }

View File

@ -12,9 +12,9 @@ import lombok.Data;
@Data @Data
public class CaptchaVO { public class CaptchaVO {
@ApiModelProperty("验证码标识" ) @ApiModelProperty("验证码唯一标识" )
private String captchaId; private String captchaUUid;
@ApiModelProperty("验证码图片" ) @ApiModelProperty("验证码Base64图片" )
private String captchaImg; 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.controller.SupportBaseController;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.constant.SwaggerTagConst; 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 net.lab1024.smartadmin.service.module.support.datascope.service.DataScopeService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; 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 com.google.common.collect.Maps;
import net.lab1024.smartadmin.service.common.util.SmartStringUtil; 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 net.lab1024.smartadmin.service.module.support.datascope.service.DataScopeSqlConfigService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.mapping.*; import org.apache.ibatis.mapping.*;
@ -49,7 +49,7 @@ public class MyBatisPlugin implements Interceptor {
if (dataScopeSqlConfigService == null) { if (dataScopeSqlConfigService == null) {
return invocation.proceed(); return invocation.proceed();
} }
DataScopeSqlConfigDTO sqlConfigDTO = dataScopeSqlConfigService.getSqlConfig(path); DataScopeSqlConfig sqlConfigDTO = dataScopeSqlConfigService.getSqlConfig(path);
if (sqlConfigDTO != null) { if (sqlConfigDTO != null) {
Map<String, Object> paramMap = this.getParamList(sqlConfigDTO.getParamName(), parameter); Map<String, Object> paramMap = this.getParamList(sqlConfigDTO.getParamName(), parameter);
BoundSql newBoundSql = copyFromBoundSql(mappedStatement, boundSql, this.joinSql(originalSql, paramMap, sqlConfigDTO)); BoundSql newBoundSql = copyFromBoundSql(mappedStatement, boundSql, this.joinSql(originalSql, paramMap, sqlConfigDTO));
@ -83,7 +83,7 @@ public class MyBatisPlugin implements Interceptor {
return paramMap; 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) { if (null == sqlConfigDTO) {
return sql; 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 io.swagger.annotations.ApiModelProperty;
import lombok.Builder; import lombok.Builder;
@ -16,7 +16,7 @@ import lombok.Data;
*/ */
@Data @Data
@Builder @Builder
public class DataScopeDTO { public class DataScope {
@ApiModelProperty("数据范围类型") @ApiModelProperty("数据范围类型")
private Integer dataScopeType; 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 io.swagger.annotations.ApiModelProperty;
import lombok.Data; 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 lombok.Data;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeTypeEnum; 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 * @since JDK1.8
*/ */
@Data @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 io.swagger.annotations.ApiModelProperty;
import lombok.Builder; import lombok.Builder;
@ -20,6 +20,7 @@ public class DataScopeViewTypeVO {
@ApiModelProperty("可见范围") @ApiModelProperty("可见范围")
private Integer viewType; private Integer viewType;
@ApiModelProperty("可见范围名称") @ApiModelProperty("可见范围名称")
private String viewTypeName; 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.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeTypeEnum; 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.DataScopeViewTypeEnum;
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.domain.dto.DataScopeDTO; import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScope;
import net.lab1024.smartadmin.service.module.support.datascope.domain.dto.DataScopeViewTypeVO; import net.lab1024.smartadmin.service.module.support.datascope.domain.DataScopeViewTypeVO;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
@ -32,7 +32,7 @@ public class DataScopeService {
* @return * @return
*/ */
public ResponseDTO<List<DataScopeAndViewTypeVO>> dataScopeList() { public ResponseDTO<List<DataScopeAndViewTypeVO>> dataScopeList() {
List<DataScopeDTO> dataScopeList = this.getDataScopeType(); List<DataScope> dataScopeList = this.getDataScopeType();
List<DataScopeAndViewTypeVO> dataScopeAndTypeList = SmartBeanUtil.copyList(dataScopeList, DataScopeAndViewTypeVO.class); List<DataScopeAndViewTypeVO> dataScopeAndTypeList = SmartBeanUtil.copyList(dataScopeList, DataScopeAndViewTypeVO.class);
List<DataScopeViewTypeVO> typeList = this.getViewType(); List<DataScopeViewTypeVO> typeList = this.getViewType();
dataScopeAndTypeList.forEach(e -> { dataScopeAndTypeList.forEach(e -> {
@ -59,16 +59,16 @@ public class DataScopeService {
return viewTypeList; return viewTypeList;
} }
public List<DataScopeDTO> getDataScopeType() { public List<DataScope> getDataScopeType() {
List<DataScopeDTO> dataScopeTypeList = Lists.newArrayList(); List<DataScope> dataScopeTypeList = Lists.newArrayList();
DataScopeTypeEnum[] enums = DataScopeTypeEnum.class.getEnumConstants(); DataScopeTypeEnum[] enums = DataScopeTypeEnum.class.getEnumConstants();
DataScopeDTO dataScopeDTO; DataScope dataScope;
for (DataScopeTypeEnum typeEnum : enums) { for (DataScopeTypeEnum typeEnum : enums) {
dataScopeDTO = dataScope =
DataScopeDTO.builder().dataScopeType(typeEnum.getValue()).dataScopeTypeDesc(typeEnum.getDesc()).dataScopeTypeName(typeEnum.getName()).dataScopeTypeSort(typeEnum.getSort()).build(); DataScope.builder().dataScopeType(typeEnum.getValue()).dataScopeTypeDesc(typeEnum.getDesc()).dataScopeTypeName(typeEnum.getName()).dataScopeTypeSort(typeEnum.getSort()).build();
dataScopeTypeList.add(dataScopeDTO); 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); dataScopeTypeList.sort(comparator);
return dataScopeTypeList; 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.DataScopeTypeEnum;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeViewTypeEnum; 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.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 net.lab1024.smartadmin.service.module.support.datascope.strategy.DataScopePowerStrategy;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@ -47,7 +47,7 @@ public class DataScopeSqlConfigService {
private static final String DEPARTMENT_PARAM = "#departmentIds"; private static final String DEPARTMENT_PARAM = "#departmentIds";
private ConcurrentHashMap<String, DataScopeSqlConfigDTO> dataScopeMethodMap = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, DataScopeSqlConfig> dataScopeMethodMap = new ConcurrentHashMap<>();
@Autowired @Autowired
private DataScopeViewService dataScopeViewService; private DataScopeViewService dataScopeViewService;
@ -69,13 +69,13 @@ public class DataScopeSqlConfigService {
* *
* @return * @return
*/ */
private Map<String, DataScopeSqlConfigDTO> refreshDataScopeMethodMap() { private Map<String, DataScopeSqlConfig> refreshDataScopeMethodMap() {
Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage(scanPackage)).setScanners(new MethodAnnotationsScanner())); Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage(scanPackage)).setScanners(new MethodAnnotationsScanner()));
Set<Method> methods = reflections.getMethodsAnnotatedWith(DataScope.class); Set<Method> methods = reflections.getMethodsAnnotatedWith(DataScope.class);
for (Method method : methods) { for (Method method : methods) {
DataScope dataScopeAnnotation = method.getAnnotation(DataScope.class); DataScope dataScopeAnnotation = method.getAnnotation(DataScope.class);
if (dataScopeAnnotation != null) { if (dataScopeAnnotation != null) {
DataScopeSqlConfigDTO configDTO = new DataScopeSqlConfigDTO(); DataScopeSqlConfig configDTO = new DataScopeSqlConfig();
configDTO.setDataScopeType(dataScopeAnnotation.dataScopeType()); configDTO.setDataScopeType(dataScopeAnnotation.dataScopeType());
configDTO.setJoinSql(dataScopeAnnotation.joinSql()); configDTO.setJoinSql(dataScopeAnnotation.joinSql());
configDTO.setWhereIndex(dataScopeAnnotation.whereIndex()); configDTO.setWhereIndex(dataScopeAnnotation.whereIndex());
@ -94,8 +94,8 @@ public class DataScopeSqlConfigService {
* @param method * @param method
* @return * @return
*/ */
public DataScopeSqlConfigDTO getSqlConfig(String method) { public DataScopeSqlConfig getSqlConfig(String method) {
DataScopeSqlConfigDTO sqlConfigDTO = this.dataScopeMethodMap.get(method); DataScopeSqlConfig sqlConfigDTO = this.dataScopeMethodMap.get(method);
return sqlConfigDTO; return sqlConfigDTO;
} }
@ -105,7 +105,7 @@ public class DataScopeSqlConfigService {
* @param sqlConfigDTO * @param sqlConfigDTO
* @return * @return
*/ */
public String getJoinSql(Map<String, Object> paramMap, DataScopeSqlConfigDTO sqlConfigDTO) { public String getJoinSql(Map<String, Object> paramMap, DataScopeSqlConfig sqlConfigDTO) {
DataScopeTypeEnum dataScopeTypeEnum = sqlConfigDTO.getDataScopeType(); DataScopeTypeEnum dataScopeTypeEnum = sqlConfigDTO.getDataScopeType();
String joinSql = sqlConfigDTO.getJoinSql(); String joinSql = sqlConfigDTO.getJoinSql();
Long employeeId = SmartRequestUtil.getRequestEmployeeId(); 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.common.util.SmartBaseEnumUtil;
import net.lab1024.smartadmin.service.module.support.datascope.constant.DataScopeTypeEnum; 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.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.department.service.DepartmentService;
import net.lab1024.smartadmin.service.module.system.employee.EmployeeDao; import net.lab1024.smartadmin.service.module.system.employee.EmployeeDao;
import net.lab1024.smartadmin.service.module.system.employee.domain.entity.EmployeeEntity; import net.lab1024.smartadmin.service.module.system.employee.domain.entity.EmployeeEntity;
@ -121,16 +121,16 @@ public class DataScopeViewService {
return DataScopeViewTypeEnum.ME; return DataScopeViewTypeEnum.ME;
} }
//未设置角色数据范围 默认本人 //未设置角色数据范围 默认本人
List<DataScopeRoleEntity> dataScopeRoleList = roleDataScopeDao.listByRoleIdList(roleIdList); List<RoleDataScopeEntity> dataScopeRoleList = roleDataScopeDao.listByRoleIdList(roleIdList);
if (CollectionUtils.isEmpty(dataScopeRoleList)) { if (CollectionUtils.isEmpty(dataScopeRoleList)) {
return DataScopeViewTypeEnum.ME; return DataScopeViewTypeEnum.ME;
} }
Map<Integer, List<DataScopeRoleEntity>> listMap = dataScopeRoleList.stream().collect(Collectors.groupingBy(DataScopeRoleEntity::getDataScopeType)); Map<Integer, List<RoleDataScopeEntity>> listMap = dataScopeRoleList.stream().collect(Collectors.groupingBy(RoleDataScopeEntity::getDataScopeType));
List<DataScopeRoleEntity> viewLevelList = listMap.getOrDefault(dataScopeTypeEnum.getValue(), Lists.newArrayList()); List<RoleDataScopeEntity> viewLevelList = listMap.getOrDefault(dataScopeTypeEnum.getValue(), Lists.newArrayList());
if (CollectionUtils.isEmpty(viewLevelList)) { if (CollectionUtils.isEmpty(viewLevelList)) {
return DataScopeViewTypeEnum.ME; 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); return SmartBaseEnumUtil.getEnumByValue(maxLevel.getViewType(), DataScopeViewTypeEnum.class);
} }

View File

@ -1,7 +1,7 @@
package net.lab1024.smartadmin.service.module.support.datascope.strategy; 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.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; import java.util.Map;
@ -23,5 +23,5 @@ public abstract class DataScopePowerStrategy {
* @param sqlConfigDTO * @param sqlConfigDTO
* @return * @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.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@ -12,6 +12,6 @@ import java.lang.annotation.Target;
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface FieldBigDecimalValue { public @interface DataTracerFieldBigDecimal {
int scale() default 2; 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.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@ -12,7 +12,7 @@ import java.lang.annotation.Target;
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface FieldDoc { public @interface DataTracerFieldDoc {
/** /**
* 本属性的注释信息 * 本属性的注释信息
* @return * @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; import net.lab1024.smartadmin.service.common.enumeration.BaseEnum;
@ -14,7 +14,7 @@ import java.lang.annotation.Target;
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface FieldEnumValue { public @interface DataTracerFieldEnum {
Class<? extends BaseEnum> enumClass() default BaseEnum.class; 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; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -14,7 +14,7 @@ import java.lang.annotation.Target;
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @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.Api;
import io.swagger.annotations.ApiOperation; 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.controller.SystemBaseController;
import net.lab1024.smartadmin.service.common.domain.PageResult; import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; 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.domain.DataTracerVO;
import net.lab1024.smartadmin.service.module.support.datatracer.service.DataTracerService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -31,7 +32,7 @@ public class DataTracerController extends SystemBaseController {
@ApiOperation("分页查询业务操作日志 - by listen") @ApiOperation("分页查询业务操作日志 - by listen")
@PostMapping("/data/tracer/log/query") @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); 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.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.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.module.support.datatracer.domain.DataTracerVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -33,5 +33,5 @@ public interface DataTracerDao extends BaseMapper<DataTracerEntity> {
* @param queryForm * @param queryForm
* @return * @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 * @date 2020/8/25 16:03
*/ */
@Data @Data
public class DataTracerDTO { public class DataTracerForm {
/** /**
* 业务id * 业务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 * @date 2021/8/17 8:47
*/ */
@Data @Data
public class DataTracerQuery extends PageParam { public class DataTracerQueryForm extends PageParam {
@ApiModelPropertyEnum(DataTracerBusinessTypeEnum.class) @ApiModelPropertyEnum(DataTracerBusinessTypeEnum.class)
private Integer businessType; 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 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 net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerEntity;
import org.springframework.stereotype.Service; 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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -6,10 +6,10 @@ import com.google.common.base.CaseFormat;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldBigDecimalValue; import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldBigDecimal;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldDoc; import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldDoc;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldEnumValue; import net.lab1024.smartadmin.service.module.support.datatracer.annoation.DataTracerFieldEnum;
import net.lab1024.smartadmin.service.module.support.datatracer.anno.FieldSqlValue; 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.module.support.datatracer.constant.DataTracerOperateTypeEnum;
import net.lab1024.smartadmin.service.common.util.SmartBaseEnumUtil; import net.lab1024.smartadmin.service.common.util.SmartBaseEnumUtil;
import net.lab1024.smartadmin.service.common.util.SmartBigDecimalUtil; import net.lab1024.smartadmin.service.common.util.SmartBigDecimalUtil;
@ -267,13 +267,13 @@ public class DataTracerFieldService {
if (fieldValue == null) { if (fieldValue == null) {
return ""; return "";
} }
FieldEnumValue fieldEnumValue = field.getAnnotation(FieldEnumValue.class); DataTracerFieldEnum dataTracerFieldEnum = field.getAnnotation(DataTracerFieldEnum.class);
FieldSqlValue fieldSqlValue = field.getAnnotation(FieldSqlValue.class); DataTracerFieldSql dataTracerFieldSql = field.getAnnotation(DataTracerFieldSql.class);
if (fieldEnumValue != null) { if (dataTracerFieldEnum != null) {
return SmartBaseEnumUtil.getEnumDescByValue(fieldValue, fieldEnumValue.enumClass()); return SmartBaseEnumUtil.getEnumDescByValue(fieldValue, dataTracerFieldEnum.enumClass());
} }
if (fieldSqlValue != null) { if (dataTracerFieldSql != null) {
return this.getRelateDisplayValue(fieldValue, fieldSqlValue); return this.getRelateDisplayValue(fieldValue, dataTracerFieldSql);
} }
if (fieldValue instanceof Date) { if (fieldValue instanceof Date) {
LocalDateTime localDateTime = SmartLocalDateUtil.toLocalDateTime((Date) fieldValue); LocalDateTime localDateTime = SmartLocalDateUtil.toLocalDateTime((Date) fieldValue);
@ -286,9 +286,9 @@ public class DataTracerFieldService {
return SmartLocalDateUtil.format((LocalDate) fieldValue, SmartDateFormatterEnum.YMD); return SmartLocalDateUtil.format((LocalDate) fieldValue, SmartDateFormatterEnum.YMD);
} }
if (fieldValue instanceof BigDecimal) { if (fieldValue instanceof BigDecimal) {
FieldBigDecimalValue fieldBigDecimalValue = field.getAnnotation(FieldBigDecimalValue.class); DataTracerFieldBigDecimal dataTracerFieldBigDecimal = field.getAnnotation(DataTracerFieldBigDecimal.class);
if (fieldBigDecimalValue != null) { if (dataTracerFieldBigDecimal != null) {
BigDecimal value = SmartBigDecimalUtil.setScale((BigDecimal) fieldValue, fieldBigDecimalValue.scale()); BigDecimal value = SmartBigDecimalUtil.setScale((BigDecimal) fieldValue, dataTracerFieldBigDecimal.scale());
return value.toString(); return value.toString();
} }
} }
@ -301,16 +301,16 @@ public class DataTracerFieldService {
* @param fieldValue * @param fieldValue
* @return * @return
*/ */
private String getRelateDisplayValue(Object fieldValue, FieldSqlValue fieldSqlValue) { private String getRelateDisplayValue(Object fieldValue, DataTracerFieldSql dataTracerFieldSql) {
Class<? extends BaseMapper> relateMapper = fieldSqlValue.relateMapper(); Class<? extends BaseMapper> relateMapper = dataTracerFieldSql.relateMapper();
BaseMapper mapper = applicationContext.getBean(relateMapper); BaseMapper mapper = applicationContext.getBean(relateMapper);
if (mapper == null) { if (mapper == null) {
return ""; return "";
} }
String relateFieldValue = fieldValue.toString(); String relateFieldValue = fieldValue.toString();
QueryWrapper qw = new QueryWrapper(); QueryWrapper qw = new QueryWrapper();
qw.select(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldSqlValue.relateDisplayColumn())); qw.select(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dataTracerFieldSql.relateDisplayColumn()));
qw.eq(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldSqlValue.relateColumn()), relateFieldValue); qw.eq(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dataTracerFieldSql.relateColumn()), relateFieldValue);
List<Object> displayValue = mapper.selectObjs(qw); List<Object> displayValue = mapper.selectObjs(qw);
if (CollectionUtils.isEmpty(displayValue)) { if (CollectionUtils.isEmpty(displayValue)) {
return ""; return "";
@ -331,7 +331,7 @@ public class DataTracerFieldService {
if (null != desc) { if (null != desc) {
return desc; return desc;
} }
FieldDoc operateField = field.getAnnotation(FieldDoc.class); DataTracerFieldDoc operateField = field.getAnnotation(DataTracerFieldDoc.class);
if (operateField != null) { if (operateField != null) {
desc = operateField.value(); desc = operateField.value();
} else { } else {
@ -450,7 +450,7 @@ public class DataTracerFieldService {
Field[] declaredFields = tempClass.getDeclaredFields(); Field[] declaredFields = tempClass.getDeclaredFields();
for (Field field : declaredFields) { for (Field field : declaredFields) {
// 过虑出有注解字段 // 过虑出有注解字段
if (!field.isAnnotationPresent(FieldDoc.class)) { if (!field.isAnnotationPresent(DataTracerFieldDoc.class)) {
continue; continue;
} }
field.setAccessible(true); 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.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -6,10 +6,12 @@ import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.service.common.domain.PageResult; import net.lab1024.smartadmin.service.common.domain.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; 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.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.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.module.support.datatracer.domain.DataTracerVO;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil; import net.lab1024.smartadmin.service.common.util.SmartPageUtil;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@ -36,12 +38,12 @@ public class DataTracerService {
/** /**
* 保存操作日志 * 保存操作日志
* *
* @param dataTracerDTO * @param dataTracerForm
* @param operatorId 操作人id * @param operatorId 操作人id
* @param operatorName 操作人名称 * @param operatorName 操作人名称
*/ */
public void saveOperateRecord(DataTracerDTO dataTracerDTO, Long operatorId, String operatorName) { public void saveOperateRecord(DataTracerForm dataTracerForm, Long operatorId, String operatorName) {
DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerDTO, operatorId, operatorName); DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerForm, operatorId, operatorName);
dataTracerDao.insert(dataTracerEntity); dataTracerDao.insert(dataTracerEntity);
} }
@ -52,13 +54,13 @@ public class DataTracerService {
* @param operatorId * @param operatorId
* @param operatorName * @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)) { if (CollectionUtils.isEmpty(dataTracerList)) {
return; return;
} }
List<DataTracerEntity> recordEntityList = Lists.newArrayList(); List<DataTracerEntity> recordEntityList = Lists.newArrayList();
for (DataTracerDTO dataTracerDTO : dataTracerList) { for (DataTracerForm dataTracerForm : dataTracerList) {
DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerDTO, operatorId, operatorName); DataTracerEntity dataTracerEntity = this.convertEntity(dataTracerForm, operatorId, operatorName);
recordEntityList.add(dataTracerEntity); recordEntityList.add(dataTracerEntity);
} }
dataTracerManger.saveBatch(recordEntityList); dataTracerManger.saveBatch(recordEntityList);
@ -67,25 +69,25 @@ public class DataTracerService {
/** /**
* dto 转实体对象 * dto 转实体对象
* *
* @param dataTracerDTO * @param dataTracerForm
* @param operatorId * @param operatorId
* @param operatorName * @param operatorName
* @return * @return
*/ */
private DataTracerEntity convertEntity(DataTracerDTO dataTracerDTO, Long operatorId, String operatorName) { private DataTracerEntity convertEntity(DataTracerForm dataTracerForm, Long operatorId, String operatorName) {
DataTracerEntity recordEntity = new DataTracerEntity(); DataTracerEntity recordEntity = new DataTracerEntity();
recordEntity.setBusinessId(dataTracerDTO.getBusinessId()); recordEntity.setBusinessId(dataTracerForm.getBusinessId());
recordEntity.setBusinessType(dataTracerDTO.getBusinessType().getValue()); recordEntity.setBusinessType(dataTracerForm.getBusinessType().getValue());
recordEntity.setBusinessTypeDesc(dataTracerDTO.getBusinessType().getDesc()); recordEntity.setBusinessTypeDesc(dataTracerForm.getBusinessType().getDesc());
recordEntity.setOperateType((Integer) dataTracerDTO.getOperateType().getValue()); recordEntity.setOperateType((Integer) dataTracerForm.getOperateType().getValue());
recordEntity.setOperateTypeDesc(dataTracerDTO.getOperateType().getDesc()); recordEntity.setOperateTypeDesc(dataTracerForm.getOperateType().getDesc());
recordEntity.setOperateContent(dataTracerDTO.getOperateContent()); recordEntity.setOperateContent(dataTracerForm.getOperateContent());
recordEntity.setOperatorId(operatorId); recordEntity.setOperatorId(operatorId);
recordEntity.setOperatorName(operatorName); recordEntity.setOperatorName(operatorName);
if (dataTracerDTO.getExtraData() != null) { if (dataTracerForm.getExtraData() != null) {
recordEntity.setExtraData(JSON.toJSONString(dataTracerDTO.getExtraData())); recordEntity.setExtraData(JSON.toJSONString(dataTracerForm.getExtraData()));
} }
recordEntity.setCreateTime(dataTracerDTO.getOperateTime()); recordEntity.setCreateTime(dataTracerForm.getOperateTime());
return recordEntity; return recordEntity;
} }
@ -107,7 +109,7 @@ public class DataTracerService {
* @param queryForm * @param queryForm
* @return * @return
*/ */
public ResponseDTO<PageResult<DataTracerVO>> query(DataTracerQuery queryForm) { public ResponseDTO<PageResult<DataTracerVO>> query(DataTracerQueryForm queryForm) {
Page page = SmartPageUtil.convert2PageQuery(queryForm); Page page = SmartPageUtil.convert2PageQuery(queryForm);
List<DataTracerVO> list = dataTracerDao.query(page, queryForm); List<DataTracerVO> list = dataTracerDao.query(page, queryForm);
PageResult<DataTracerVO> pageResult = SmartPageUtil.convert2PageResult(page, list); 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.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.controller.SupportBaseController; 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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; 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.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; 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.HeartBeatRecord;
import net.lab1024.smartadmin.service.module.support.heartbeat.core.IHeartBeatRecordHandler; import net.lab1024.smartadmin.service.module.support.heartbeat.core.IHeartBeatRecordHandler;
import net.lab1024.smartadmin.service.common.util.SmartBeanUtil; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; 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.PageResult;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; import net.lab1024.smartadmin.service.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; 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.IdType;
import com.baomidou.mybatisplus.annotation.TableId; 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 io.swagger.annotations.ApiModelProperty;
import lombok.Data; 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.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.swagger.SwaggerTagConst; 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.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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -27,7 +27,7 @@ public class OperateLogController extends SupportBaseController {
@ApiOperation(value = "分页查询 @author 罗伊") @ApiOperation(value = "分页查询 @author 罗伊")
@PostMapping("/userOperateLog/page/query") @PostMapping("/userOperateLog/page/query")
public ResponseDTO<PageResult<OperateLogDTO>> queryByPage(@RequestBody OperateLogQuery queryForm) { public ResponseDTO<PageResult<OperateLogDTO>> queryByPage(@RequestBody OperateLogQueryForm queryForm) {
return operateLogService.queryByPage(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.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -25,7 +25,7 @@ public interface OperateLogDao extends BaseMapper<OperateLogEntity> {
* @param queryForm * @param queryForm
* @return UserOperateLogEntity * @return UserOperateLogEntity
*/ */
List<OperateLogEntity> queryByPage(Page page, @Param("query") OperateLogQuery queryForm); List<OperateLogEntity> queryByPage(Page page, @Param("query") OperateLogQueryForm queryForm);
/** /**
* 根据id删除 * 根据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.common.domain.ResponseDTO;
import net.lab1024.smartadmin.service.module.support.operatelog.domain.OperateLogEntity; 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.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.SmartBeanUtil;
import net.lab1024.smartadmin.service.common.util.SmartPageUtil; import net.lab1024.smartadmin.service.common.util.SmartPageUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -29,7 +29,7 @@ public class OperateLogService {
* @description 分页查询 * @description 分页查询
* @date 2019-05-15 11:32:14 * @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); Page page = SmartPageUtil.convert2PageQuery(queryForm);
List<OperateLogEntity> logEntityList = operateLogDao.queryByPage(page, queryForm); List<OperateLogEntity> logEntityList = operateLogDao.queryByPage(page, queryForm);
PageResult<OperateLogDTO> pageResult = SmartPageUtil.convert2PageResult(page, logEntityList, OperateLogDTO.class); PageResult<OperateLogDTO> pageResult = SmartPageUtil.convert2PageResult(page, logEntityList, OperateLogDTO.class);

View File

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

View File

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

View File

@ -1,8 +1,10 @@
package net.lab1024.smartadmin.service.module.support.repeatsubmit; 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.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.domain.ResponseDTO; 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.annoation.RepeatSubmit;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.ticket.AbstractRepeatSubmitTicket;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
@ -20,6 +22,7 @@ import java.lang.reflect.Method;
* @date * @date
*/ */
@Aspect @Aspect
@Slf4j
public class RepeatSubmitAspect { public class RepeatSubmitAspect {
private AbstractRepeatSubmitTicket repeatSubmitTicket; private AbstractRepeatSubmitTicket repeatSubmitTicket;
@ -50,7 +53,7 @@ public class RepeatSubmitAspect {
if (StringUtils.isEmpty(ticket)) { if (StringUtils.isEmpty(ticket)) {
return point.proceed(); return point.proceed();
} }
Long timeStamp = this.repeatSubmitTicket.ticketTimeStamp(ticket); Long timeStamp = this.repeatSubmitTicket.getTicketTimestamp(ticket);
if (timeStamp != null) { if (timeStamp != null) {
Method method = ((MethodSignature) point.getSignature()).getMethod(); Method method = ((MethodSignature) point.getSignature()).getMethod();
RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class);
@ -64,7 +67,9 @@ public class RepeatSubmitAspect {
try { try {
obj = point.proceed(); obj = point.proceed();
this.repeatSubmitTicket.putTicket(ticket); this.repeatSubmitTicket.putTicket(ticket);
}catch (Throwable throwable){ } catch (Throwable throwable) {
log.error("", throwable);
} finally {
this.repeatSubmitTicket.removeTicket(ticket); this.repeatSubmitTicket.removeTicket(ticket);
} }
return obj; 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; import java.util.function.Function;
/** /**
* [ ] * [ ]
* *
* @author yandanyang * @author 罗伊
* @date 2021/10/9 19:10 * @date 2021/10/9 19:10
*/ */
public abstract class AbstractRepeatSubmitTicket { public abstract class AbstractRepeatSubmitTicket {
@ -33,18 +32,18 @@ public abstract class AbstractRepeatSubmitTicket {
* @param ticket * @param ticket
* @return * @return
*/ */
abstract Long ticketTimeStamp(String ticket); public abstract Long getTicketTimestamp(String ticket);
/** /**
* 设置本次请求时间 * 设置本次请求时间
* @param ticket * @param ticket
*/ */
abstract void putTicket(String ticket); public abstract void putTicket(String ticket);
/** /**
* 移除凭证 * 移除凭证
* @param 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.Cache;
import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Caffeine;
import net.lab1024.smartadmin.service.module.support.repeatsubmit.annoation.RepeatSubmit; import net.lab1024.smartadmin.service.module.support.repeatsubmit.annoation.RepeatSubmit;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
@ -30,7 +29,7 @@ public class RepeatSubmitCaffeineTicket extends AbstractRepeatSubmitTicket {
} }
@Override @Override
public Long ticketTimeStamp(String ticket) { public Long getTicketTimestamp(String ticket) {
return cache.getIfPresent(ticket); return cache.getIfPresent(ticket);
} }
@ -41,7 +40,7 @@ public class RepeatSubmitCaffeineTicket extends AbstractRepeatSubmitTicket {
} }
@Override @Override
void removeTicket(String ticket) { public void removeTicket(String ticket) {
cache.invalidate(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 net.lab1024.smartadmin.service.module.support.repeatsubmit.annoation.RepeatSubmit;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
@ -23,10 +23,10 @@ public class RepeatSubmitRedisTicket extends AbstractRepeatSubmitTicket {
} }
@Override @Override
public Long ticketTimeStamp(String ticket) { public Long getTicketTimestamp(String ticket) {
Long timeStamp = System.currentTimeMillis(); Long timeStamp = System.currentTimeMillis();
boolean setFlag = redisValueOperations.setIfAbsent(ticket, String.valueOf(timeStamp), RepeatSubmit.MAX_INTERVAL, TimeUnit.MILLISECONDS); boolean setFlag = redisValueOperations.setIfAbsent(ticket, String.valueOf(timeStamp), RepeatSubmit.MAX_INTERVAL, TimeUnit.MILLISECONDS);
if(!setFlag){ if (!setFlag) {
timeStamp = Long.valueOf(redisValueOperations.get(ticket)); timeStamp = Long.valueOf(redisValueOperations.get(ticket));
} }
return timeStamp; return timeStamp;
@ -35,11 +35,11 @@ public class RepeatSubmitRedisTicket extends AbstractRepeatSubmitTicket {
@Override @Override
public void putTicket(String ticket) { public void putTicket(String ticket) {
redisValueOperations.getOperations().delete(ticket); redisValueOperations.getOperations().delete(ticket);
this.ticketTimeStamp(ticket); this.getTicketTimestamp(ticket);
} }
@Override @Override
void removeTicket(String ticket) { public void removeTicket(String ticket) {
redisValueOperations.getOperations().delete(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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.service.common.controller.SystemBaseController; 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.common.util.SmartRequestUtil;
import net.lab1024.smartadmin.service.module.support.captcha.domain.CaptchaVO;
import net.lab1024.smartadmin.service.module.system.login.service.LoginService; import net.lab1024.smartadmin.service.module.system.login.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; 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 io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length;
import net.lab1024.smartadmin.service.common.util.SmartVerificationUtil; 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.NotBlank;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
@ -15,7 +16,7 @@ import javax.validation.constraints.Pattern;
* @date 2017年12月19日上午11:49:46 * @date 2017年12月19日上午11:49:46
*/ */
@Data @Data
public class LoginForm { public class LoginForm extends CaptchaForm {
@ApiModelProperty(example = "sa") @ApiModelProperty(example = "sa")
@NotBlank(message = "登录名不能为空") @NotBlank(message = "登录名不能为空")
@ -27,14 +28,6 @@ public class LoginForm {
@Pattern(regexp = SmartVerificationUtil.PWD_REGEXP, message = "请输入6-15位密码(数字|大小写字母|小数点)") @Pattern(regexp = SmartVerificationUtil.PWD_REGEXP, message = "请输入6-15位密码(数字|大小写字母|小数点)")
private String password; 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 = "登录终端") @ApiModelProperty(value = "登录终端")
@Length(max = 30, message = "登录终端最多30字符") @Length(max = 30, message = "登录终端最多30字符")

View File

@ -1,14 +1,12 @@
package net.lab1024.smartadmin.service.module.system.login.service; package net.lab1024.smartadmin.service.module.system.login.service;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import lombok.extern.slf4j.Slf4j; 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.code.UserErrorCode;
import net.lab1024.smartadmin.service.common.constant.StringConst; 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.domain.ResponseDTO;
import net.lab1024.smartadmin.service.common.util.SmartBeanUtil; 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.dao.DepartmentDao;
import net.lab1024.smartadmin.service.module.system.department.domain.entity.DepartmentEntity; import net.lab1024.smartadmin.service.module.system.department.domain.entity.DepartmentEntity;
import net.lab1024.smartadmin.service.module.system.employee.EmployeeDao; 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.menu.service.MenuEmployeeService;
import net.lab1024.smartadmin.service.module.system.systemconfig.SystemConfigKeyEnum; import net.lab1024.smartadmin.service.module.system.systemconfig.SystemConfigKeyEnum;
import net.lab1024.smartadmin.service.module.system.systemconfig.SystemConfigService; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.UUID;
/** /**
* @author zhuoda * @author zhuoda
* @version 2.0 * @version 2.0
@ -54,10 +44,7 @@ public class LoginService {
private JwtService jwtService; private JwtService jwtService;
@Autowired @Autowired
private DefaultKaptcha defaultKaptcha; private CaptchaService captchaService;
@Autowired
private RedisService redisService;
@Autowired @Autowired
private MenuEmployeeService menuEmployeeService; private MenuEmployeeService menuEmployeeService;
@ -73,18 +60,11 @@ public class LoginService {
* @return 返回用户登录信息 * @return 返回用户登录信息
*/ */
public ResponseDTO<LoginResultVO> login(LoginForm loginForm) { public ResponseDTO<LoginResultVO> login(LoginForm loginForm) {
// 校验 验证码
/** ResponseDTO<String> checkCaptcha = captchaService.checkCaptcha(loginForm);
* 1校验redis里的验证码 if (!checkCaptcha.getOk()) {
* 2校验成功后删除redis return ResponseDTO.error(checkCaptcha);
*/
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, "验证码错误");
} }
// 删除已使用的验证码
redisService.delete(redisCaptchaKey);
/** /**
* 验证账号和账号状态 * 验证账号和账号状态
@ -136,6 +116,7 @@ public class LoginService {
* @return * @return
*/ */
public ResponseDTO<String> logoutByToken(Long employeeId) { public ResponseDTO<String> logoutByToken(Long employeeId) {
//TODO 卓大 清除缓存等
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
@ -145,32 +126,7 @@ public class LoginService {
* @return * @return
*/ */
public ResponseDTO<CaptchaVO> getCaptcha() { public ResponseDTO<CaptchaVO> getCaptcha() {
String uuid = UUID.randomUUID().toString().replace("-", StringConst.EMPTY_STR); return ResponseDTO.ok(captchaService.generateCaptcha());
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);
} }
/** /**

View File

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; 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; import java.util.List;
@ -20,21 +20,21 @@ import java.util.List;
*/ */
@Mapper @Mapper
@Component @Component
public interface RoleDataScopeDao extends BaseMapper<DataScopeRoleEntity> { public interface RoleDataScopeDao extends BaseMapper<RoleDataScopeEntity> {
/** /**
* 获取某个角色的设置信息 * 获取某个角色的设置信息
* @param roleId * @param roleId
* @return * @return
*/ */
List<DataScopeRoleEntity> listByRoleId(@Param("roleId") Long roleId); List<RoleDataScopeEntity> listByRoleId(@Param("roleId") Long roleId);
/** /**
* 获取某批角色的所有数据范围配置信息 * 获取某批角色的所有数据范围配置信息
* @param roleIdList * @param roleIdList
* @return * @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 * @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.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@ -19,7 +19,7 @@ import java.time.LocalDateTime;
*/ */
@Data @Data
@TableName("t_role_data_scope") @TableName("t_role_data_scope")
public class DataScopeRoleEntity { public class RoleDataScopeEntity {
/** /**
* 主键id * 主键id
*/ */

View File

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

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!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" <select id="selectRecord"
resultType="net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerVO"> resultType="net.lab1024.smartadmin.service.module.support.datatracer.domain.DataTracerVO">

View File

@ -27,11 +27,11 @@
</where> </where>
</update> </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 * from t_heart_beat_record where project_path = #{projectPath} and server_ip = #{serverIp} and process_no =#{processNo}
</select> </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 SELECT
* *
FROM 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"> <!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"> <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="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} select id,data_scope_type,view_type,role_id,update_time,create_time from t_role_data_scope where role_id = #{roleId}