Skip to content

Commit 96d498f

Browse files
author
zhuoda
committed
v3.12【新增】标签页Chome模式;【优化】优化很多细节
1 parent 56517b6 commit 96d498f

File tree

77 files changed

+2713
-910
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+2713
-910
lines changed

smart-admin-api-java17-springboot3/.gitignore

-35
This file was deleted.

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminSmartJobController.java

+16
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ public ResponseDTO<PageResult<SmartJobVO>> queryJob(@RequestBody @Valid SmartJob
5252
return jobService.queryJob(queryForm);
5353
}
5454

55+
@Operation(summary = "定时任务-添加任务 @huke")
56+
@PostMapping("/job/add")
57+
@RepeatSubmit
58+
public ResponseDTO<String> addJob(@RequestBody @Valid SmartJobAddForm addForm) {
59+
RequestUser requestUser = SmartRequestUtil.getRequestUser();
60+
addForm.setUpdateName(requestUser.getUserName());
61+
return jobService.addJob(addForm);
62+
}
63+
5564
@Operation(summary = "定时任务-更新-任务信息 @huke")
5665
@PostMapping("/job/update")
5766
@RepeatSubmit
@@ -70,6 +79,13 @@ public ResponseDTO<String> updateJobEnabled(@RequestBody @Valid SmartJobEnabledU
7079
return jobService.updateJobEnabled(updateForm);
7180
}
7281

82+
@Operation(summary = "定时任务-删除 @zhuoda")
83+
@GetMapping("/job/delete")
84+
@RepeatSubmit
85+
public ResponseDTO<String> deleteJob(@RequestParam Integer jobId) {
86+
return jobService.deleteJob(jobId, SmartRequestUtil.getRequestUser());
87+
}
88+
7389
@Operation(summary = "定时任务-执行记录-分页查询 @huke")
7490
@PostMapping("/job/log/query")
7591
public ResponseDTO<PageResult<SmartJobLogVO>> queryJobLog(@RequestBody @Valid SmartJobLogQueryForm queryForm) {

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DataSourceConfig.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.baomidou.mybatisplus.core.config.GlobalConfig;
1111
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
1212
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
13-
import jakarta.annotation.Resource;
1413
import lombok.extern.slf4j.Slf4j;
1514
import net.lab1024.sa.base.common.domain.DataScopePlugin;
1615
import net.lab1024.sa.base.handler.MybatisPlusFillHandler;
@@ -25,6 +24,7 @@
2524
import org.springframework.context.annotation.Conditional;
2625
import org.springframework.context.annotation.Configuration;
2726
import org.springframework.context.annotation.Primary;
27+
import org.springframework.core.io.Resource;
2828
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
2929

3030
import javax.sql.DataSource;
@@ -92,10 +92,10 @@ public class DataSourceConfig {
9292
@Value("${spring.datasource.druid.method.pointcut}")
9393
String methodPointcut;
9494

95-
@Resource
95+
@jakarta.annotation.Resource
9696
private MybatisPlusInterceptor paginationInterceptor;
9797

98-
@Resource
98+
@jakarta.annotation.Resource
9999
private DataScopePlugin dataScopePlugin;
100100

101101
@Bean
@@ -136,7 +136,7 @@ public SqlSessionFactory sqlSessionFactory() throws Exception {
136136
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
137137
factoryBean.setDataSource(druidDataSource());
138138
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
139-
org.springframework.core.io.Resource[] resources = resolver.getResources("classpath*:/mapper/**/*.xml");
139+
Resource[] resources = resolver.getResources("classpath*:/mapper/**/*.xml");
140140
factoryBean.setMapperLocations(resources);
141141

142142
// 设置 MyBatis-Plus 分页插件 注意此处myBatisPlugin一定要放在后面

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/JsonConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.time.format.DateTimeParseException;
1919

2020
/**
21-
* Json 序列化配置
21+
* json 序列化配置
2222
*
2323
* @Author 1024创新实验室-主任: 卓大
2424
* @Date 2017-11-28 15:21:10

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/RedisConfig.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,19 @@ public class RedisConfig {
3333

3434
@Bean
3535
public RedisTemplate<String, Object> redisTemplate() {
36-
36+
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
3737
ObjectMapper om = new ObjectMapper();
3838
om.registerModule(new JavaTimeModule())
3939
.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
4040
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
4141
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
4242
.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
4343
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
44-
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(om, Object.class);
44+
4545
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
4646
// enableDefaultTyping 官方已弃用 所以改为 activateDefaultTyping
4747
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
48+
jackson2JsonRedisSerializer.setObjectMapper(om);
4849
RedisTemplate<String, Object> template = new RedisTemplate<>();
4950
template.setConnectionFactory(factory);
5051
template.setKeySerializer(new StringRedisSerializer());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package net.lab1024.sa.base.config;
2+
3+
import cn.dev33.satoken.config.SaTokenConfig;
4+
import jakarta.annotation.Resource;
5+
import net.lab1024.sa.base.module.support.securityprotect.service.Level3ProtectConfigService;
6+
import org.springframework.context.annotation.Configuration;
7+
8+
/**
9+
*
10+
* 三级等保配置初始化后最低活跃频率全局配置
11+
*
12+
* @Author 1024创新实验室-创始人兼主任:卓大
13+
* @Date 2024/11/24
14+
* @Wechat zhuoda1024
15+
16+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a> ,Since 2012
17+
*/
18+
19+
@Configuration
20+
public class TokenConfig {
21+
22+
@Resource
23+
private Level3ProtectConfigService level3ProtectConfigService;
24+
25+
// 此配置会覆盖 sa-base.yaml 中的配置
26+
@Resource
27+
public void configSaToken(SaTokenConfig config) {
28+
29+
config.setActiveTimeout(level3ProtectConfigService.getLoginActiveTimeoutSeconds());
30+
}
31+
32+
33+
}

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/UrlConfig.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.springframework.context.annotation.Bean;
1414
import org.springframework.context.annotation.Configuration;
1515
import org.springframework.web.method.HandlerMethod;
16+
import org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition;
1617
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
1718
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
1819

@@ -47,11 +48,12 @@ public Map<Method, Set<String>> methodUrlMap() {
4748
Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
4849
for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : map.entrySet()) {
4950
RequestMappingInfo requestMappingInfo = entry.getKey();
50-
if(requestMappingInfo.getPatternsCondition() == null){
51+
PathPatternsRequestCondition pathPatternsCondition = requestMappingInfo.getPathPatternsCondition();
52+
if(pathPatternsCondition == null){
5153
continue;
5254
}
5355

54-
Set<String> urls = requestMappingInfo.getPatternsCondition().getPatterns();
56+
Set<String> urls = pathPatternsCondition.getPatternValues();
5557
if (CollectionUtils.isEmpty(urls)) {
5658
continue;
5759
}

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/captcha/CaptchaService.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ public class CaptchaService {
4242

4343
@Resource
4444
private DefaultKaptcha defaultKaptcha;
45-
@Autowired
45+
46+
@Resource
4647
private SystemEnvironment systemEnvironment;
48+
4749
@Resource
4850
private RedisService redisService;
4951

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/codegenerator/service/variable/backend/domain/EntityVariableService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* @Date 2022/9/29 17:20:41
1515
* @Wechat zhuoda1024
1616
17-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
17+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
1818
*/
1919

2020
public class EntityVariableService extends CodeGenerateBaseVariableService {

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/module/support/dict/service/DictService.java

+39-39
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* @Date 2022/5/26 19:40:55
2929
* @Wechat zhuoda1024
3030
31-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
31+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
3232
*/
3333
@Service
3434
public class DictService {
@@ -39,10 +39,6 @@ public class DictService {
3939
private DictValueDao dictValueDao;
4040
@Resource
4141
private DictCacheService dictCacheService;
42-
/**
43-
* CODE锁
44-
*/
45-
private static final Interner<String> CODE_POOL = Interners.newWeakInterner();
4642

4743

4844
/**
@@ -51,15 +47,15 @@ public class DictService {
5147
* @param keyAddForm
5248
* @return
5349
*/
54-
public ResponseDTO<String> keyAdd(DictKeyAddForm keyAddForm) {
55-
synchronized (CODE_POOL.intern(keyAddForm.getKeyCode())) {
56-
DictKeyEntity dictKeyEntity = dictKeyDao.selectByCode(keyAddForm.getKeyCode(), false);
57-
if (dictKeyEntity != null) {
58-
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
59-
}
60-
dictKeyEntity = SmartBeanUtil.copy(keyAddForm, DictKeyEntity.class);
61-
dictKeyDao.insert(dictKeyEntity);
50+
public synchronized ResponseDTO<String> keyAdd(DictKeyAddForm keyAddForm) {
51+
DictKeyEntity dictKeyEntity = dictKeyDao.selectByCode(keyAddForm.getKeyCode(), false);
52+
if (dictKeyEntity != null) {
53+
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
6254
}
55+
dictKeyEntity = SmartBeanUtil.copy(keyAddForm, DictKeyEntity.class);
56+
dictKeyDao.insert(dictKeyEntity);
57+
//刷新缓存
58+
dictCacheService.cacheRefresh();
6359
return ResponseDTO.ok();
6460
}
6561

@@ -69,15 +65,15 @@ public ResponseDTO<String> keyAdd(DictKeyAddForm keyAddForm) {
6965
* @param valueAddForm
7066
* @return
7167
*/
72-
public ResponseDTO<String> valueAdd(DictValueAddForm valueAddForm) {
73-
synchronized (CODE_POOL.intern(valueAddForm.getValueCode())) {
74-
DictValueEntity dictValueEntity = dictValueDao.selectByCode(valueAddForm.getValueCode(), false);
75-
if (dictValueEntity != null) {
76-
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
77-
}
78-
dictValueEntity = SmartBeanUtil.copy(valueAddForm, DictValueEntity.class);
79-
dictValueDao.insert(dictValueEntity);
68+
public synchronized ResponseDTO<String> valueAdd(DictValueAddForm valueAddForm) {
69+
DictValueEntity dictValueEntity = dictValueDao.selectByCode(valueAddForm.getValueCode(), false);
70+
if (dictValueEntity != null) {
71+
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
8072
}
73+
dictValueEntity = SmartBeanUtil.copy(valueAddForm, DictValueEntity.class);
74+
dictValueDao.insert(dictValueEntity);
75+
//刷新缓存
76+
dictCacheService.cacheRefresh();
8177
return ResponseDTO.ok();
8278
}
8379

@@ -87,15 +83,15 @@ public ResponseDTO<String> valueAdd(DictValueAddForm valueAddForm) {
8783
* @param keyUpdateForm
8884
* @return
8985
*/
90-
public ResponseDTO<String> keyEdit(DictKeyUpdateForm keyUpdateForm) {
91-
synchronized (CODE_POOL.intern(keyUpdateForm.getKeyCode())) {
92-
DictKeyEntity dictKeyEntity = dictKeyDao.selectByCode(keyUpdateForm.getKeyCode(), false);
93-
if (dictKeyEntity != null && !dictKeyEntity.getDictKeyId().equals(keyUpdateForm.getDictKeyId())) {
94-
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
95-
}
96-
DictKeyEntity dictKeyUpdateEntity = SmartBeanUtil.copy(keyUpdateForm, DictKeyEntity.class);
97-
dictKeyDao.updateById(dictKeyUpdateEntity);
86+
public synchronized ResponseDTO<String> keyEdit(DictKeyUpdateForm keyUpdateForm) {
87+
DictKeyEntity dictKeyEntity = dictKeyDao.selectByCode(keyUpdateForm.getKeyCode(), false);
88+
if (dictKeyEntity != null && !dictKeyEntity.getDictKeyId().equals(keyUpdateForm.getDictKeyId())) {
89+
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
9890
}
91+
DictKeyEntity dictKeyUpdateEntity = SmartBeanUtil.copy(keyUpdateForm, DictKeyEntity.class);
92+
dictKeyDao.updateById(dictKeyUpdateEntity);
93+
//刷新缓存
94+
dictCacheService.cacheRefresh();
9995
return ResponseDTO.ok();
10096
}
10197

@@ -105,19 +101,19 @@ public ResponseDTO<String> keyEdit(DictKeyUpdateForm keyUpdateForm) {
105101
* @param valueUpdateForm
106102
* @return
107103
*/
108-
public ResponseDTO<String> valueEdit(DictValueUpdateForm valueUpdateForm) {
104+
public synchronized ResponseDTO<String> valueEdit(DictValueUpdateForm valueUpdateForm) {
109105
DictKeyEntity dictKeyEntity = dictKeyDao.selectById(valueUpdateForm.getDictKeyId());
110106
if (dictKeyEntity == null || dictKeyEntity.getDeletedFlag()) {
111107
return ResponseDTO.userErrorParam("key不能存在");
112108
}
113-
synchronized (CODE_POOL.intern(valueUpdateForm.getValueCode())) {
114-
DictValueEntity dictValueEntity = dictValueDao.selectByCode(valueUpdateForm.getValueCode(), false);
115-
if (dictValueEntity != null && !dictValueEntity.getDictValueId().equals(valueUpdateForm.getDictValueId())) {
116-
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
117-
}
118-
DictValueEntity dictValueUpdateEntity = SmartBeanUtil.copy(valueUpdateForm, DictValueEntity.class);
119-
dictValueDao.updateById(dictValueUpdateEntity);
109+
DictValueEntity dictValueEntity = dictValueDao.selectByCode(valueUpdateForm.getValueCode(), false);
110+
if (dictValueEntity != null && !dictValueEntity.getDictValueId().equals(valueUpdateForm.getDictValueId())) {
111+
return ResponseDTO.error(UserErrorCode.ALREADY_EXIST);
120112
}
113+
DictValueEntity dictValueUpdateEntity = SmartBeanUtil.copy(valueUpdateForm, DictValueEntity.class);
114+
dictValueDao.updateById(dictValueUpdateEntity);
115+
//刷新缓存
116+
dictCacheService.cacheRefresh();
121117
return ResponseDTO.ok();
122118
}
123119

@@ -127,11 +123,13 @@ public ResponseDTO<String> valueEdit(DictValueUpdateForm valueUpdateForm) {
127123
* @param keyIdList
128124
* @return
129125
*/
130-
public ResponseDTO<String> keyDelete(List<Long> keyIdList) {
126+
public synchronized ResponseDTO<String> keyDelete(List<Long> keyIdList) {
131127
if (CollectionUtils.isEmpty(keyIdList)) {
132128
return ResponseDTO.ok();
133129
}
134130
dictKeyDao.updateDeletedFlagByIdList(keyIdList, true);
131+
//刷新缓存
132+
dictCacheService.cacheRefresh();
135133
return ResponseDTO.ok();
136134
}
137135

@@ -141,11 +139,13 @@ public ResponseDTO<String> keyDelete(List<Long> keyIdList) {
141139
* @param valueIdList
142140
* @return
143141
*/
144-
public ResponseDTO<String> valueDelete(List<Long> valueIdList) {
142+
public synchronized ResponseDTO<String> valueDelete(List<Long> valueIdList) {
145143
if (CollectionUtils.isEmpty(valueIdList)) {
146144
return ResponseDTO.ok();
147145
}
148146
dictValueDao.updateDeletedFlagByIdList(valueIdList, true);
147+
//刷新缓存
148+
dictCacheService.cacheRefresh();
149149
return ResponseDTO.ok();
150150
}
151151

0 commit comments

Comments
 (0)