From 31b9bd8cb38340083ddc3b9aa725e3eb94182246 Mon Sep 17 00:00:00 2001
From: bunny <1319900154@qq.com>
Date: Fri, 11 Oct 2024 16:47:15 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=BAmapper=E5=8A=A0=E4=B8=8Aand,?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=E7=94=9F?=
=?UTF-8?q?=E6=88=90=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../resources/vms/server/resourceMapper.vm | 2 +-
.../src/main/resources/vms/web/hook.vm | 22 +++++++++
.../src/main/resources/vms/web/index.vm | 23 ++++++++--
.../exception/GlobalExceptionHandler.java | 10 +++-
.../bunny/dao/pojo/result/ResultCodeEnum.java | 1 +
.../controller/EmailUsersController.java | 4 +-
.../bunny/services/factory/EmailFactory.java | 21 +++++++++
.../service/impl/EmailUsersServiceImpl.java | 25 ++++++++++
service/src/main/resources/application.yml | 2 +-
.../src/main/resources/mapper/DeptMapper.xml | 6 +--
.../resources/mapper/EmailTemplateMapper.xml | 46 +++++++++----------
.../resources/mapper/EmailUsersMapper.xml | 12 ++---
.../src/main/resources/mapper/FilesMapper.xml | 27 +++++------
.../src/main/resources/mapper/I18nMapper.xml | 6 +--
.../main/resources/mapper/MenuIconMapper.xml | 4 +-
.../src/main/resources/mapper/PowerMapper.xml | 6 +--
.../src/main/resources/mapper/RoleMapper.xml | 4 +-
.../main/resources/mapper/RouterMapper.xml | 4 +-
.../src/main/resources/mapper/UserMapper.xml | 16 +++----
.../test/java/cn/bunny/service/Solution.java | 35 ++++++++++++++
20 files changed, 201 insertions(+), 75 deletions(-)
create mode 100644 service/src/test/java/cn/bunny/service/Solution.java
diff --git a/common/common-generator/src/main/resources/vms/server/resourceMapper.vm b/common/common-generator/src/main/resources/vms/server/resourceMapper.vm
index 6c77bce..066f075 100644
--- a/common/common-generator/src/main/resources/vms/server/resourceMapper.vm
+++ b/common/common-generator/src/main/resources/vms/server/resourceMapper.vm
@@ -22,7 +22,7 @@
#foreach($field in $pageQueryMap)
- $field.column like CONCAT('%',#{dto.${field.property}},'%')
+ and $field.column like CONCAT('%',#{dto.${field.property}},'%')
#end
diff --git a/common/common-generator/src/main/resources/vms/web/hook.vm b/common/common-generator/src/main/resources/vms/web/hook.vm
index 09f7ba4..bcb3b4c 100644
--- a/common/common-generator/src/main/resources/vms/web/hook.vm
+++ b/common/common-generator/src/main/resources/vms/web/hook.vm
@@ -8,6 +8,8 @@ import type { FormItemProps } from '${typesPath}';
import { $t } from '@/plugins/i18n';
export const formRef = ref();
+// 删除ids
+export const deleteIds = ref([]);
const ${lowercaseName}Store = use${originalName}Store();
/**
@@ -103,3 +105,23 @@ export const onDelete = async (row: any) => {
await ${lowercaseName}Store.delete${originalName}([id]);
await onSearch();
};
+
+/**
+ * 批量删除
+ */
+export const onDeleteBatch = async () => {
+ const ids = deleteIds.value;
+
+ // 是否确认删除
+ const result = await messageBox({
+ title: $t('confirm_delete'),
+ showMessage: false,
+ confirmMessage: undefined,
+ cancelMessage: $t('cancel_delete'),
+ });
+ if (!result) return;
+
+ // 删除数据
+ await ${lowercaseName}Store.delete${originalName}(ids);
+ await onSearch();
+};
\ No newline at end of file
diff --git a/common/common-generator/src/main/resources/vms/web/index.vm b/common/common-generator/src/main/resources/vms/web/index.vm
index a26a69a..527217e 100644
--- a/common/common-generator/src/main/resources/vms/web/index.vm
+++ b/common/common-generator/src/main/resources/vms/web/index.vm
@@ -4,7 +4,7 @@
import PureTableBar from '@/components/TableBar/src/bar';
import AddFill from '@iconify-icons/ri/add-circle-line';
import PureTable from '@pureadmin/table';
- import { onAdd, onDelete, onSearch, onUpdate } from '${hookPath}';
+ import { onAdd, onDelete, onSearch, onUpdate, deleteIds } from '${hookPath}';
import Delete from '@iconify-icons/ep/delete';
import EditPen from '@iconify-icons/ep/edit-pen';
import Refresh from '@iconify-icons/ep/refresh';
@@ -34,19 +34,27 @@
await onSearch();
};
+/**
+ * * 选择多行
+ * @param rows
+ */
+const onSelectionChange = (rows: Array) => {
+ deleteIds.value = rows.map((row: any) => row.id);
+};
+
/**
* 重置表单
* @param formEl
*/
- const resetForm = async formEl => {
+const resetForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
formEl.resetFields();
await onSearch();
- };
+};
- onMounted(() => {
+onMounted(() => {
onSearch();
- });
+});
@@ -66,6 +74,11 @@
{{ $t('add_new') }}
+
+
+
+ {{ $t('delete_batches') }}
+
diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java b/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java
index f939b85..1ae83fd 100644
--- a/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java
+++ b/common/service-utils/src/main/java/cn/bunny/common/service/exception/GlobalExceptionHandler.java
@@ -41,8 +41,16 @@ public class GlobalExceptionHandler {
// 解析异常
String jsonParseError = "JSON parse error (.*)";
Matcher jsonParseErrorMatcher = Pattern.compile(jsonParseError).matcher(message);
- if (jsonParseErrorMatcher.find())
+ if (jsonParseErrorMatcher.find()) {
return Result.error(null, 500, "JSON解析异常 " + jsonParseErrorMatcher.group(1));
+ }
+
+ // 数据过大
+ String dataTooLongError = "Data too long for column (.*?) at row 1";
+ Matcher dataTooLongErrorMatcher = Pattern.compile(dataTooLongError).matcher(message);
+ if (dataTooLongErrorMatcher.find()) {
+ return Result.error(null, 500, dataTooLongErrorMatcher.group(1) + " 字段数据过大");
+ }
return Result.error(null, 500, "服务器异常");
}
diff --git a/dao/src/main/java/cn/bunny/dao/pojo/result/ResultCodeEnum.java b/dao/src/main/java/cn/bunny/dao/pojo/result/ResultCodeEnum.java
index 8bfe6da..5f56477 100644
--- a/dao/src/main/java/cn/bunny/dao/pojo/result/ResultCodeEnum.java
+++ b/dao/src/main/java/cn/bunny/dao/pojo/result/ResultCodeEnum.java
@@ -31,6 +31,7 @@ public enum ResultCodeEnum {
EMAIL_CODE_EMPTY(201, "邮箱验证码过期或不存在"),
DATA_EXIST(201, "数据已存在"),
DATA_NOT_EXIST(201, "数据不存在"),
+ EMAIL_EXIST(201, "邮箱已存在"),
REQUEST_IS_EMPTY(201, "请求数据为空"),
DATA_TOO_LARGE(201, "请求数据为空"),
USER_IS_EMPTY(201, "用户不存在"),
diff --git a/service/src/main/java/cn/bunny/services/controller/EmailUsersController.java b/service/src/main/java/cn/bunny/services/controller/EmailUsersController.java
index 17ba043..5b43671 100644
--- a/service/src/main/java/cn/bunny/services/controller/EmailUsersController.java
+++ b/service/src/main/java/cn/bunny/services/controller/EmailUsersController.java
@@ -66,9 +66,9 @@ public class EmailUsersController {
@Operation(summary = "更新邮箱用户状态", description = "更新邮箱用户状态")
@PutMapping("updateEmailUserStatus")
- public Mono> updateEmailUserStatus(@Valid @RequestBody EmailUserUpdateStatusDto dto) {
+ public Result updateEmailUserStatus(@Valid @RequestBody EmailUserUpdateStatusDto dto) {
emailUsersService.updateEmailUserStatus(dto);
- return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
+ return Result.success(ResultCodeEnum.UPDATE_SUCCESS);
}
@Operation(summary = "删除邮箱用户发送配置", description = "删除邮箱用户发送配置")
diff --git a/service/src/main/java/cn/bunny/services/factory/EmailFactory.java b/service/src/main/java/cn/bunny/services/factory/EmailFactory.java
index bbc7cbb..772f137 100644
--- a/service/src/main/java/cn/bunny/services/factory/EmailFactory.java
+++ b/service/src/main/java/cn/bunny/services/factory/EmailFactory.java
@@ -3,22 +3,29 @@ package cn.bunny.services.factory;
import cn.bunny.common.service.exception.BunnyException;
import cn.bunny.common.service.utils.mail.MailSenderUtil;
import cn.bunny.dao.entity.system.EmailTemplate;
+import cn.bunny.dao.entity.system.EmailUsers;
import cn.bunny.dao.pojo.common.EmailSend;
import cn.bunny.dao.pojo.common.EmailSendInit;
import cn.bunny.dao.pojo.common.EmailTemplateTypes;
import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.services.mapper.EmailTemplateMapper;
+import cn.bunny.services.mapper.EmailUsersMapper;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.mail.MessagingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class EmailFactory {
+
@Autowired
private EmailTemplateMapper emailTemplateMapper;
+
+ @Autowired
+ private EmailUsersMapper emailUsersMapper;
/**
* 生成邮箱验证码
@@ -58,4 +65,18 @@ public class EmailFactory {
return code;
}
+
+ /**
+ * 判断邮箱是否添加
+ *
+ * @param isDefault 邮箱是否为默认
+ */
+ public void updateEmailUserDefault(Boolean isDefault) {
+ EmailUsers emailUsers = new EmailUsers();
+ // 判断状态,如果是默认将所有的内容都设为false
+ if (isDefault) {
+ emailUsers.setIsDefault(false);
+ emailUsersMapper.update(emailUsers, Wrappers.lambdaUpdate().eq(EmailUsers::getIsDefault, true));
+ }
+ }
}
\ No newline at end of file
diff --git a/service/src/main/java/cn/bunny/services/service/impl/EmailUsersServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/EmailUsersServiceImpl.java
index 4e52a50..4a25a05 100644
--- a/service/src/main/java/cn/bunny/services/service/impl/EmailUsersServiceImpl.java
+++ b/service/src/main/java/cn/bunny/services/service/impl/EmailUsersServiceImpl.java
@@ -1,20 +1,26 @@
package cn.bunny.services.service.impl;
+import cn.bunny.common.service.exception.BunnyException;
import cn.bunny.dao.dto.system.email.EmailUserUpdateStatusDto;
import cn.bunny.dao.dto.system.email.EmailUsersAddDto;
import cn.bunny.dao.dto.system.email.EmailUsersDto;
import cn.bunny.dao.dto.system.email.EmailUsersUpdateDto;
import cn.bunny.dao.entity.system.EmailUsers;
import cn.bunny.dao.pojo.result.PageResult;
+import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.dao.vo.system.email.EmailUsersVo;
+import cn.bunny.services.factory.EmailFactory;
import cn.bunny.services.mapper.EmailUsersMapper;
import cn.bunny.services.service.EmailUsersService;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.validation.Valid;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -27,8 +33,12 @@ import java.util.List;
* @since 2024-10-10 15:19:22
*/
@Service
+@Transactional
public class EmailUsersServiceImpl extends ServiceImpl implements EmailUsersService {
+ @Autowired
+ private EmailFactory emailFactory;
+
/**
* * 邮箱用户发送配置 服务实现类
*
@@ -62,12 +72,21 @@ public class EmailUsersServiceImpl extends ServiceImpl emailUsersList = list(Wrappers.lambdaQuery().eq(EmailUsers::getEmail, dto.getEmail()));
+ if (!emailUsersList.isEmpty()) throw new BunnyException(ResultCodeEnum.EMAIL_EXIST);
+
+ // 更新邮箱默认状态
+ emailFactory.updateEmailUserDefault(dto.getIsDefault());
+
// 保存数据
EmailUsers emailUsers = new EmailUsers();
BeanUtils.copyProperties(dto, emailUsers);
save(emailUsers);
}
+
/**
* 更新邮箱用户发送配置
*
@@ -75,6 +94,9 @@ public class EmailUsersServiceImpl extends ServiceImpl
- parent_id like CONCAT('%',#{dto.parentId},'%')
+ and parent_id like CONCAT('%',#{dto.parentId},'%')
- dept_name like CONCAT('%',#{dto.deptName},'%')
+ and dept_name like CONCAT('%',#{dto.deptName},'%')
- summary like CONCAT('%',#{dto.summary},'%')
+ and summary like CONCAT('%',#{dto.summary},'%')
order by update_time
diff --git a/service/src/main/resources/mapper/EmailTemplateMapper.xml b/service/src/main/resources/mapper/EmailTemplateMapper.xml
index affb546..4353098 100644
--- a/service/src/main/resources/mapper/EmailTemplateMapper.xml
+++ b/service/src/main/resources/mapper/EmailTemplateMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -28,18 +28,18 @@
from sys_email_template
-
- template_name like CONCAT('%',#{dto.templateName},'%')
-
-
- subject like CONCAT('%',#{dto.subject},'%')
-
-
- body like CONCAT('%',#{dto.body},'%')
-
-
- type like CONCAT('%',#{dto.type},'%')
-
+
+ and template_name like CONCAT('%',#{dto.templateName},'%')
+
+
+ and subject like CONCAT('%',#{dto.subject},'%')
+
+
+ and body like CONCAT('%',#{dto.body},'%')
+
+
+ and type like CONCAT('%',#{dto.type},'%')
+
order by update_time desc
diff --git a/service/src/main/resources/mapper/EmailUsersMapper.xml b/service/src/main/resources/mapper/EmailUsersMapper.xml
index f84430c..4cdc7e3 100644
--- a/service/src/main/resources/mapper/EmailUsersMapper.xml
+++ b/service/src/main/resources/mapper/EmailUsersMapper.xml
@@ -31,22 +31,22 @@
from sys_email_users
- email like CONCAT('%',#{dto.email},'%')
+ and email like CONCAT('%',#{dto.email},'%')
- email_template like CONCAT('%',#{dto.emailTemplate},'%')
+ and email_template like CONCAT('%',#{dto.emailTemplate},'%')
- host like CONCAT('%',#{dto.host},'%')
+ and host like CONCAT('%',#{dto.host},'%')
- port like CONCAT('%',#{dto.port},'%')
+ and port like CONCAT('%',#{dto.port},'%')
- smtp_agreement like CONCAT('%',#{dto.smtpAgreement},'%')
+ and smtp_agreement like CONCAT('%',#{dto.smtpAgreement},'%')
- order by update_time desc
+ order by create_time desc
diff --git a/service/src/main/resources/mapper/FilesMapper.xml b/service/src/main/resources/mapper/FilesMapper.xml
index 82312d6..ea7d3bd 100644
--- a/service/src/main/resources/mapper/FilesMapper.xml
+++ b/service/src/main/resources/mapper/FilesMapper.xml
@@ -24,21 +24,22 @@
diff --git a/service/src/main/resources/mapper/I18nMapper.xml b/service/src/main/resources/mapper/I18nMapper.xml
index 62dcdda..abdf4e9 100644
--- a/service/src/main/resources/mapper/I18nMapper.xml
+++ b/service/src/main/resources/mapper/I18nMapper.xml
@@ -37,13 +37,13 @@
from sys_i18n
- key_name like CONCAT('%',#{dto.keyName},'%')
+ and key_name like CONCAT('%',#{dto.keyName},'%')
- translation like CONCAT('%',#{dto.translation},'%')
+ and translation like CONCAT('%',#{dto.translation},'%')
- type_name like CONCAT('%',#{dto.typeName},'%')
+ and type_name like CONCAT('%',#{dto.typeName},'%')
order by update_time
diff --git a/service/src/main/resources/mapper/MenuIconMapper.xml b/service/src/main/resources/mapper/MenuIconMapper.xml
index 506a1dd..641f3de 100644
--- a/service/src/main/resources/mapper/MenuIconMapper.xml
+++ b/service/src/main/resources/mapper/MenuIconMapper.xml
@@ -26,10 +26,10 @@
from sys_menu_icon
- icon_code like CONCAT('%',#{dto.iconCode},'%')
+ and icon_code like CONCAT('%',#{dto.iconCode},'%')
- icon_name like CONCAT('%',#{dto.iconName},'%')
+ and icon_name like CONCAT('%',#{dto.iconName},'%')
order by update_time desc
diff --git a/service/src/main/resources/mapper/PowerMapper.xml b/service/src/main/resources/mapper/PowerMapper.xml
index c992c51..2872bb5 100644
--- a/service/src/main/resources/mapper/PowerMapper.xml
+++ b/service/src/main/resources/mapper/PowerMapper.xml
@@ -28,13 +28,13 @@
from sys_power
- power_code like CONCAT('%',#{dto.powerCode},'%')
+ and power_code like CONCAT('%',#{dto.powerCode},'%')
- power_name like CONCAT('%',#{dto.powerName},'%')
+ and power_name like CONCAT('%',#{dto.powerName},'%')
- request_url like CONCAT('%',#{dto.requestUrl},'%')
+ and request_url like CONCAT('%',#{dto.requestUrl},'%')
order by update_time desc
diff --git a/service/src/main/resources/mapper/RoleMapper.xml b/service/src/main/resources/mapper/RoleMapper.xml
index 5e7cc13..eb24f63 100644
--- a/service/src/main/resources/mapper/RoleMapper.xml
+++ b/service/src/main/resources/mapper/RoleMapper.xml
@@ -26,10 +26,10 @@
from sys_role
- role_code like CONCAT('%',#{dto.roleCode},'%')
+ and role_code like CONCAT('%',#{dto.roleCode},'%')
- description like CONCAT('%',#{dto.description},'%')
+ and description like CONCAT('%',#{dto.description},'%')
order by update_time
diff --git a/service/src/main/resources/mapper/RouterMapper.xml b/service/src/main/resources/mapper/RouterMapper.xml
index 8b6de10..1064802 100644
--- a/service/src/main/resources/mapper/RouterMapper.xml
+++ b/service/src/main/resources/mapper/RouterMapper.xml
@@ -70,10 +70,10 @@
from sys_router
- title like CONCAT('%',#{dto.title},'%')
+ and title like CONCAT('%',#{dto.title},'%')
- visible = #{dto.visible}
+ and visible = #{dto.visible}
order by router_rank
diff --git a/service/src/main/resources/mapper/UserMapper.xml b/service/src/main/resources/mapper/UserMapper.xml
index 85b0a46..ccb2c78 100644
--- a/service/src/main/resources/mapper/UserMapper.xml
+++ b/service/src/main/resources/mapper/UserMapper.xml
@@ -35,28 +35,28 @@
from sys_user user left join sys_user_dept user_dept on user.id = user_dept.user_id
- username like CONCAT('%',#{dto.username},'%')
+ and username like CONCAT('%',#{dto.username},'%')
- nick_name like CONCAT('%',#{dto.nickName},'%')
+ and nick_name like CONCAT('%',#{dto.nickName},'%')
- email like CONCAT('%',#{dto.email},'%')
+ and email like CONCAT('%',#{dto.email},'%')
- phone like CONCAT('%',#{dto.phone},'%')
+ and phone like CONCAT('%',#{dto.phone},'%')
- sex = #{dto.sex}
+ and sex = #{dto.sex}
- summary like CONCAT('%',#{dto.summary},'%')
+ and summary like CONCAT('%',#{dto.summary},'%')
- status = #{dto.status}
+ and status = #{dto.status}
- user_dept.dept_id in
+ and user_dept.dept_id in
#{id}
diff --git a/service/src/test/java/cn/bunny/service/Solution.java b/service/src/test/java/cn/bunny/service/Solution.java
new file mode 100644
index 0000000..f0029b2
--- /dev/null
+++ b/service/src/test/java/cn/bunny/service/Solution.java
@@ -0,0 +1,35 @@
+package cn.bunny.service;
+
+import java.util.HashSet;
+import java.util.Set;
+
+class Solution {
+ public int longestConsecutive(int[] nums) {
+ if (nums.length == 0) {
+ return 0;
+ }
+
+ Set numSet = new HashSet<>();
+ for (int num : nums) {
+ numSet.add(num);
+ }
+
+ int longestStreak = 0;
+
+ for (int num : numSet) {
+ if (!numSet.contains(num - 1)) {
+ int currentStreak = 1;
+
+ while (numSet.contains(num + 1)) {
+ num++;
+ currentStreak++;
+ }
+
+ // 更新最长连续序列长度
+ longestStreak = Math.max(longestStreak, currentStreak);
+ }
+ }
+
+ return longestStreak;
+ }
+}
\ No newline at end of file