Explorar o código

Merge remote-tracking branch 'gogs-major/dev/tys'

Huanyi hai 4 días
pai
achega
b37d7a7cae

+ 14 - 0
pom.xml

@@ -78,6 +78,20 @@
                 <nacos.ip>127.0.0.1</nacos.ip>
             </properties>
         </profile>
+        <profile>
+            <id>tys</id>
+            <properties>
+                <profiles.active>tys</profiles.active>
+                <nacos.server>127.0.0.1:8848</nacos.server>
+                <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
+                <nacos.config.group>DEFAULT_GROUP</nacos.config.group>
+                <nacos.username>nacos</nacos.username>
+                <nacos.password>nacos</nacos.password>
+                <logstash.address>127.0.0.1:4560</logstash.address>
+                <discovery.ip>127.0.0.1</discovery.ip>
+                <nacos.ip>127.0.0.1</nacos.ip>
+            </properties>
+        </profile>
         <profile>
             <id>Production</id>
             <properties>

+ 2 - 1
ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfiguration.java

@@ -27,7 +27,8 @@ public class SecurityConfiguration implements WebMvcConfigurer {
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         // 注册路由拦截器,自定义验证规则
-        registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");
+        registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**")
+                .excludePathPatterns("/merchant/audit/register", "/merchant/audit/categories");
     }
 
     /**

+ 1 - 0
ruoyi-gateway/src/main/java/org/dromara/gateway/filter/AuthFilter.java

@@ -40,6 +40,7 @@ public class AuthFilter {
                 // 登录校验 -- 拦截所有路由
                 SaRouter.match("/**")
                     .notMatch(ignoreWhite.getWhites())
+                    .notMatch("/system/merchant/audit/**", "/system/agreement/**")
                     .check(r -> {
                         ServerHttpRequest request = SaReactorSyncHolder.getExchange().getRequest();
                         // 检查是否登录 是否有token

+ 35 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMerchantAuditController.java

@@ -0,0 +1,35 @@
+package org.dromara.system.controller.system;
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.system.domain.bo.SysMerchantAuditBo;
+import org.dromara.system.service.ISysMerchantAuditService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import cn.dev33.satoken.annotation.SaIgnore;
+
+/**
+ * 商家注册审核Controller
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/merchant/audit")
+public class SysMerchantAuditController extends BaseController {
+
+    private final ISysMerchantAuditService merchantAuditService;
+
+    /**
+     * 注册
+     */
+    @SaIgnore
+    @PostMapping("/register")
+    public R<Void> register(@Validated(AddGroup.class) @RequestBody SysMerchantAuditBo bo) {
+        return toAjax(merchantAuditService.submitApply(bo));
+    }
+}

+ 77 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysMerchantAudit.java

@@ -0,0 +1,77 @@
+package org.dromara.system.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 商家注册审核对象 sys_merchant_audit
+ *
+ * @author Antigravity
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_merchant_audit")
+@InterceptorIgnore(tenantLine = "true")
+public class SysMerchantAudit extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    /**
+     * 企业名称
+     */
+    private String companyName;
+
+
+    /**
+     * 用户账号
+     */
+    private String username;
+
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 登录密码
+     */
+    private String password;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 状态 (0:待审核, 1:已通过, 2:已驳回)
+     */
+    private Integer status;
+
+    /**
+     * 驳回原因
+     */
+    private String rejectReason;
+
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+}

+ 81 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMerchantAuditBo.java

@@ -0,0 +1,81 @@
+package org.dromara.system.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.system.domain.SysMerchantAudit;
+
+/**
+ * 商家注册审核业务对象 sys_merchant_audit
+ *
+ * @author Antigravity
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = SysMerchantAudit.class, reverseConvertGenerate = false)
+public class SysMerchantAuditBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    @NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
+    private Long id;
+
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    /**
+     * 企业名称
+     */
+    @NotBlank(message = "企业名称不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String companyName;
+
+
+    /**
+     * 用户账号
+     */
+    @NotBlank(message = "用户账号不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String username;
+
+    /**
+     * 姓名
+     */
+    @NotBlank(message = "姓名不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String name;
+
+    /**
+     * 登录密码
+     */
+    @NotBlank(message = "登录密码不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String password;
+
+    /**
+     * 确认密码
+     */
+    @NotBlank(message = "确认密码不能为空", groups = {AddGroup.class})
+    private String confirmPassword;
+
+    /**
+     * 邮箱
+     */
+    @NotBlank(message = "邮箱不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String email;
+
+    /**
+     * 状态 (0:待审核, 1:已通过, 2:已驳回)
+     */
+    private Integer status;
+
+    /**
+     * 驳回原因
+     */
+    private String rejectReason;
+
+}

+ 69 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMerchantAuditVo.java

@@ -0,0 +1,69 @@
+package org.dromara.system.domain.vo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.system.domain.SysMerchantAudit;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 商家注册审核视图对象 sys_merchant_audit
+ *
+ * @author Antigravity
+ */
+@Data
+@AutoMapper(target = SysMerchantAudit.class)
+public class SysMerchantAuditVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    /**
+     * 企业名称
+     */
+    private String companyName;
+
+
+    /**
+     * 用户账号
+     */
+    private String username;
+
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 状态 (0:待审核, 1:已通过, 2:已驳回)
+     */
+    private Integer status;
+
+    /**
+     * 驳回原因
+     */
+    private String rejectReason;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 16 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMerchantAuditMapper.java

@@ -0,0 +1,16 @@
+package org.dromara.system.mapper;
+
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.system.domain.SysMerchantAudit;
+import org.dromara.system.domain.vo.SysMerchantAuditVo;
+
+/**
+ * 商家注册审核Mapper接口
+ *
+ * @author Antigravity
+ */
+@InterceptorIgnore(tenantLine = "true")
+public interface SysMerchantAuditMapper extends BaseMapperPlus<SysMerchantAudit, SysMerchantAuditVo> {
+
+}

+ 17 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMerchantAuditService.java

@@ -0,0 +1,17 @@
+package org.dromara.system.service;
+
+import org.dromara.system.domain.bo.SysMerchantAuditBo;
+
+/**
+ * 商家注册审核Service接口
+ *
+ * @author Antigravity
+ */
+public interface ISysMerchantAuditService {
+
+    /**
+     * 提交商家入驻申请
+     */
+    Boolean submitApply(SysMerchantAuditBo bo);
+
+}

+ 89 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMerchantAuditServiceImpl.java

@@ -0,0 +1,89 @@
+package org.dromara.system.service.impl;
+
+import cn.hutool.crypto.digest.BCrypt;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.platform.Platform;
+import org.dromara.common.tenant.helper.TenantHelper;
+import org.dromara.system.domain.SysMerchantAudit;
+import org.dromara.system.domain.SysTenant;
+import org.dromara.system.domain.SysUser;
+import org.dromara.system.domain.bo.SysMerchantAuditBo;
+import org.dromara.system.mapper.SysMerchantAuditMapper;
+import org.dromara.common.mybatis.helper.DataPermissionHelper;
+import org.dromara.system.mapper.SysTenantMapper;
+import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.system.service.ISysMerchantAuditService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 商家注册审核Service业务层处理
+ *
+ * @author Antigravity
+ */
+@RequiredArgsConstructor
+@Service
+public class SysMerchantAuditServiceImpl implements ISysMerchantAuditService {
+
+    private final SysMerchantAuditMapper baseMapper;
+    private final SysUserMapper userMapper;
+    private final SysTenantMapper tenantMapper;
+
+    /**
+     * 提交商家入驻申请
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean submitApply(SysMerchantAuditBo bo) {
+        // 0. 校验密码是否一致
+        if (!bo.getPassword().equals(bo.getConfirmPassword())) {
+            throw new ServiceException("两次输入的密码不一致");
+        }
+
+        // 1. 校验商户名称是否已存在于租户表中
+        boolean tenantExist = tenantMapper.exists(new LambdaQueryWrapper<SysTenant>()
+            .eq(SysTenant::getCompanyName, bo.getCompanyName())
+        );
+        if (tenantExist) {
+            throw new ServiceException("企业名称已存在,请重新输入");
+        }
+
+        // 2. 校验用户账号是否已存在于系统用户表中
+        boolean userExist = TenantHelper.ignore(() ->
+            DataPermissionHelper.ignore(() ->
+                userMapper.exists(new LambdaQueryWrapper<SysUser>()
+                    .eq(SysUser::getUserName, bo.getUsername())
+                    .eq(SysUser::getPlatformId, Platform.MERCHANT.getId()))
+            )
+        );
+        if (userExist) {
+            throw new ServiceException("用户账号已注册,请重新输入");
+        }
+
+        // 3. 校验是否存在待审核的相同申请(企业名称)
+        boolean auditCompanyExist = baseMapper.exists(new LambdaQueryWrapper<SysMerchantAudit>()
+            .eq(SysMerchantAudit::getCompanyName, bo.getCompanyName())
+            .eq(SysMerchantAudit::getStatus, 0)
+        );
+        if (auditCompanyExist) {
+            throw new ServiceException("该企业入驻申请正在审核中,请勿重复提交");
+        }
+
+        // 4. 校验是否存在待审核的相同申请(用户账号)
+        boolean auditUsernameExist = baseMapper.exists(new LambdaQueryWrapper<SysMerchantAudit>()
+            .eq(SysMerchantAudit::getUsername, bo.getUsername())
+            .eq(SysMerchantAudit::getStatus, 0)
+        );
+        if (auditUsernameExist) {
+            throw new ServiceException("该用户账号的入驻申请正在审核中,请勿重复提交");
+        }
+
+        SysMerchantAudit audit = MapstructUtils.convert(bo, SysMerchantAudit.class);
+        audit.setPassword(BCrypt.hashpw(bo.getPassword()));
+        audit.setStatus(0); // 待审核
+        return baseMapper.insert(audit) > 0;
+    }
+}

+ 2 - 0
script/config/nacos/application-common.yml

@@ -312,3 +312,5 @@ tenant:
     - flf_balance_log
     - flf_reward_log
     - flf_exception
+    - sys_merchant_audit
+

+ 3 - 0
script/config/nacos/ruoyi-gateway.yml

@@ -15,6 +15,9 @@ security:
       - /*/error
       - /csrf
       - /warm-flow-ui/**
+      - /system/merchant/audit/register
+      - /system/merchant/audit/categories
+
 
 spring:
   cloud:

+ 20 - 0
script/sql/business/create.sql

@@ -412,3 +412,23 @@ CREATE TABLE pet_system.sys_notice
     update_by     bigint(20) COMMENT '更新者',
     update_time   datetime COMMENT '更新时间'
 ) ENGINE = innoDB COMMENT = '系统通知信息表';
+
+CREATE TABLE `pet_system`.`sys_merchant_audit`
+(
+    `id`             bigint PRIMARY KEY NOT NULL COMMENT '主键ID',
+    `avatar`         varchar(500)                DEFAULT NULL COMMENT '头像',
+    `company_name`   varchar(128)       NOT NULL COMMENT '企业名称',
+    `username`       varchar(64)        NOT NULL COMMENT '用户账号',
+    `name`           varchar(64)        NOT NULL COMMENT '姓名',
+    `password`       varchar(128)       NOT NULL COMMENT '登录密码',
+    `email`          varchar(128)                DEFAULT NULL COMMENT '邮箱',
+    `status`         tinyint            NOT NULL DEFAULT 0 COMMENT '状态 (0:待审核, 1:已通过, 2:已驳回)',
+    `reject_reason`  varchar(500)                DEFAULT NULL COMMENT '驳回原因',
+    `del_flag`       char(1)                     DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+    `create_dept`    bigint(20)                  DEFAULT NULL COMMENT '创建部门',
+    `create_by`      bigint(20)                  DEFAULT NULL COMMENT '创建者',
+    `create_time`    datetime                    DEFAULT NULL COMMENT '创建时间',
+    `update_by`      bigint(20)                  DEFAULT NULL COMMENT '更新者',
+    `update_time`    datetime                    DEFAULT NULL COMMENT '更新时间'
+) ENGINE = InnoDB COMMENT = '注册表';
+