xucaiqin 5 mesiacov pred
rodič
commit
11d88ffe92
26 zmenil súbory, kde vykonal 864 pridanie a 153 odobranie
  1. 20 4
      pom.xml
  2. 12 0
      src/main/java/com/sckw/access/config/MybatisPlusConfig.java
  3. 60 20
      src/main/java/com/sckw/access/controller/TBarrierGateController.java
  4. 78 11
      src/main/java/com/sckw/access/controller/TVisitorController.java
  5. 76 11
      src/main/java/com/sckw/access/controller/TWhitelistController.java
  6. 3 0
      src/main/java/com/sckw/access/domain/Base.java
  7. 19 0
      src/main/java/com/sckw/access/domain/BasePage.java
  8. 43 0
      src/main/java/com/sckw/access/domain/para/BarrierGateQuery.java
  9. 5 10
      src/main/java/com/sckw/access/domain/para/BarrierGateSave.java
  10. 0 15
      src/main/java/com/sckw/access/domain/para/BasePage.java
  11. 36 0
      src/main/java/com/sckw/access/domain/para/TVisitorQuery.java
  12. 57 0
      src/main/java/com/sckw/access/domain/para/TVisitorSave.java
  13. 30 0
      src/main/java/com/sckw/access/domain/para/TWhitelistQuery.java
  14. 45 0
      src/main/java/com/sckw/access/domain/para/TWhitelistSave.java
  15. 32 0
      src/main/java/com/sckw/access/domain/para/VisitorApproveSave.java
  16. 49 0
      src/main/java/com/sckw/access/domain/vo/BarrierGateVo.java
  17. 101 0
      src/main/java/com/sckw/access/domain/vo/VisitorVo.java
  18. 74 0
      src/main/java/com/sckw/access/domain/vo/WhitelistVo.java
  19. 19 19
      src/main/java/com/sckw/access/entity/TBarrierGate.java
  20. 11 8
      src/main/java/com/sckw/access/entity/TVisitor.java
  21. 21 23
      src/main/java/com/sckw/access/entity/TWhitelist.java
  22. 0 2
      src/main/java/com/sckw/access/service/TVisitorService.java
  23. 1 1
      src/main/resources/application-dev.yml
  24. 57 0
      src/main/resources/application-local.yml
  25. 1 1
      src/main/resources/application.yml
  26. 14 28
      src/main/resources/logback.xml

+ 20 - 4
pom.xml

@@ -15,7 +15,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <spring-boot.version>3.4.7</spring-boot.version>
         <maven-clean-plugin.version>3.2.0</maven-clean-plugin.version>
-        <start-class>com.sckw.robot.RobotApplication</start-class>
+        <start-class>com.sckw.access.AccessApplication</start-class>
         <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
         <maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
         <maven-resources-plugin.version>3.3.0</maven-resources-plugin.version>
@@ -31,6 +31,13 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-bom</artifactId>
+                <version>3.5.12</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -71,9 +78,14 @@
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
-            <version>4.4.0</version>
+            <version>4.5.0</version>
+        </dependency>
+        <!--解决knife4j使用@RestControllerAdvice后文档打不开的问题-->
+        <dependency>
+            <groupId>org.springdoc</groupId>
+            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+            <version>2.7.0</version>
         </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
@@ -120,7 +132,11 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
-            <version>3.5.12</version>
+        </dependency>
+        <!--mybatis-plus 引入独立出来的分页插件-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-jsqlparser</artifactId>
         </dependency>
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>

+ 12 - 0
src/main/java/com/sckw/access/config/MybatisPlusConfig.java

@@ -1,12 +1,24 @@
 package com.sckw.access.config;
 
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+
 /**
  * 分页配置
  */
 @Configuration
 public class MybatisPlusConfig {
 
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+
+        // 分页插件
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
 
+        return interceptor;
+    }
 }

+ 60 - 20
src/main/java/com/sckw/access/controller/TBarrierGateController.java

@@ -1,47 +1,87 @@
 package com.sckw.access.controller;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.sckw.access.domain.para.BarrierGateSave;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.access.domain.vo.BarrierGateVo;
 import com.sckw.access.entity.TBarrierGate;
 import com.sckw.access.service.TBarrierGateService;
 import com.sckw.access.util.R;
+import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
 
 
 /**
  * 道闸管理表
- *
- * @author xxxxx
  */
 @RestController
 @RequestMapping("/barrierGate")
 @Tag(name = "道闸管理")
 public class TBarrierGateController {
-    /**
-     * 服务对象
-     */
     @Resource
     private TBarrierGateService tBarrierGateService;
 
     /**
-     * 通过主键查询单条数据
-     *
-     * @param id 主键
-     * @return 单条数据
+     * 列表查询
      */
-    @GetMapping("page")
-    public R<Object> page(Integer id) {
-        return R.ok(tBarrierGateService.getById(id));
+    @GetMapping("/list")
+    @Operation(summary = "列表查询", description = "查询已启用的道闸")
+    public R<Object> list() {
+        List<TBarrierGate> list = tBarrierGateService.list(new LambdaQueryWrapper<TBarrierGate>().eq(TBarrierGate::getStatus, 1).select(TBarrierGate::getId, TBarrierGate::getName, TBarrierGate::getStatus, TBarrierGate::getLocation, TBarrierGate::getType, TBarrierGate::getCategory));
+        List<BarrierGateVo> barrierGateVos = BeanUtil.copyToList(list, BarrierGateVo.class);
+        return R.ok(barrierGateVos);
     }
 
-    @PostMapping("save")
-    public R<Boolean> save(@RequestBody @Validated BarrierGateSave barrierGateSave) {
-        TBarrierGate save = BeanUtil.toBean(barrierGateSave, TBarrierGate.class);
-        return R.ok(tBarrierGateService.save(save));
-    }
+//    /**
+//     * 分页查询
+//     *
+//     * @param barrierGateQuery 查询参数
+//     * @return 分页数据
+//     */
+//    @GetMapping("/page")
+//    @Operation(summary = "分页查询")
+//    public R<Page<TBarrierGate>> page(@ParameterObject BarrierGateQuery barrierGateQuery) {
+//        return R.ok(tBarrierGateService.page(new Page<>(barrierGateQuery.getPageNo(), barrierGateQuery.getPageSize()), new LambdaQueryWrapper<TBarrierGate>().like(StrUtil.isNotBlank(barrierGateQuery.getName()), TBarrierGate::getName, barrierGateQuery.getName()).like(StrUtil.isNotBlank(barrierGateQuery.getLocation()), TBarrierGate::getLocation, barrierGateQuery.getLocation()).eq(Objects.nonNull(barrierGateQuery.getType()), TBarrierGate::getType, barrierGateQuery.getType()).eq(Objects.nonNull(barrierGateQuery.getStatus()), TBarrierGate::getStatus, barrierGateQuery.getStatus())));
+//    }
+//
+//    /**
+//     * 保存
+//     */
+//    @Operation(summary = "保存")
+//    @PostMapping("/save")
+//    public R<Boolean> save(@RequestBody @Validated BarrierGateSave barrierGateSave) {
+//        TBarrierGate save = BeanUtil.toBean(barrierGateSave, TBarrierGate.class);
+//        save.setCreateTime(LocalDateTime.now());
+//        return R.ok(tBarrierGateService.save(save));
+//    }
+//
+//    /**
+//     * 修改
+//     *
+//     * @param barrierGateSave
+//     * @return
+//     */
+//    @Operation(summary = "修改")
+//    @PostMapping("/update")
+//    public R<Boolean> update(@RequestBody @Validated BarrierGateSave barrierGateSave) {
+//        TBarrierGate update = BeanUtil.toBean(barrierGateSave, TBarrierGate.class);
+//        update.setUpdateTime(LocalDateTime.now());
+//        return R.ok(tBarrierGateService.updateById(update));
+//    }
+//
+//    /**
+//     * 删除
+//     */
+//    @Operation(summary = "删除")
+//    @DeleteMapping("/delete")
+//    public R<Boolean> delete(@RequestParam("id") Long id) {
+//        return R.ok(tBarrierGateService.removeById(id));
+//    }
 
 
 }

+ 78 - 11
src/main/java/com/sckw/access/controller/TVisitorController.java

@@ -1,36 +1,103 @@
 package com.sckw.access.controller;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sckw.access.domain.para.TVisitorQuery;
+import com.sckw.access.domain.para.TVisitorSave;
+import com.sckw.access.domain.para.VisitorApproveSave;
+import com.sckw.access.domain.vo.VisitorVo;
 import com.sckw.access.entity.TVisitor;
+import com.sckw.access.exception.BusinessException;
 import com.sckw.access.service.TVisitorService;
+import com.sckw.access.util.R;
+import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * 访客管理表
- *
- * @author xxxxx
  */
 @RestController
 @RequestMapping("/visitor")
 @Tag(name = "访客管理")
 public class TVisitorController {
-    /**
-     * 服务对象
-     */
     @Resource
     private TVisitorService tVisitorService;
 
     /**
-     * 通过主键查询单条数据
+     * 分页查询
+     *
+     * @param visitorQuery 查询参数
+     * @return 分页数据
+     */
+    @GetMapping("/page")
+    @Operation(summary = "分页查询")
+    public R<Object> page(@ParameterObject TVisitorQuery visitorQuery) {
+        Page<TVisitor> page = tVisitorService.page(new Page<>(visitorQuery.getPageNo(), visitorQuery.getPageSize()), new LambdaQueryWrapper<TVisitor>().like(StrUtil.isNotBlank(visitorQuery.getName()), TVisitor::getName, visitorQuery.getName()).like(StrUtil.isNotBlank(visitorQuery.getLicensePlate()), TVisitor::getLicensePlate, visitorQuery.getLicensePlate()).eq(Objects.nonNull(visitorQuery.getVehicleType()), TVisitor::getVehicleType, visitorQuery.getVehicleType()).like(StrUtil.isNotBlank(visitorQuery.getApproverName()), TVisitor::getApproverName, visitorQuery.getApproverName()).like(StrUtil.isNotBlank(visitorQuery.getApproverMobile()), TVisitor::getApproverMobile, visitorQuery.getApproverMobile()).eq(Objects.nonNull(visitorQuery.getApprovalStatus()), TVisitor::getApprovalStatus, visitorQuery.getApprovalStatus()));
+        List<VisitorVo> list = page.getRecords().stream().map(d -> {
+            VisitorVo bean = BeanUtil.toBean(d, VisitorVo.class);
+            if (StrUtil.isNotBlank(d.getBarrierIds())) {
+                bean.setBarrierIds(JSONArray.parseArray(d.getBarrierIds(), String.class));
+            }
+            return bean;
+        }).toList();
+        Page<VisitorVo> visitorVoPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        visitorVoPage.setRecords(list);
+        return R.ok(visitorVoPage);
+    }
+
+
+    /**
+     * 新增访客记录
      *
-     * @param id 主键
-     * @return 单条数据
+     * @param visitorSave
      */
-    @GetMapping("selectOne")
-    public TVisitor selectOne(Integer id) {
-        return tVisitorService.getById(id);
+    @Operation(summary = "新增访客记录")
+    @PostMapping("/save")
+    public R<Boolean> save(@RequestBody @Validated TVisitorSave visitorSave) {
+        TVisitor save = BeanUtil.toBean(visitorSave, TVisitor.class);
+        save.setApplyTime(LocalDateTime.now());
+        save.setCreateTime(LocalDateTime.now());
+        save.setBarrierIds(JSONObject.toJSONString(visitorSave.getBarrierIds()));
+        return R.ok(tVisitorService.save(save));
     }
 
+    /**
+     * 审批
+     *
+     * @param visitorApproveSave
+     * @return
+     */
+    @Operation(summary = "审批", description = "访客审批")
+    @PostMapping("/approve")
+    public R<Boolean> approve(@RequestBody @Validated VisitorApproveSave visitorApproveSave) {
+        TVisitor byId = tVisitorService.getById(visitorApproveSave.getId());
+        if (Objects.isNull(byId)) {
+            throw new BusinessException("访客记录不存在");
+        }
+        byId.setApprovalStatus(visitorApproveSave.getApprovalStatus());
+        byId.setApprovalReason(visitorApproveSave.getApprovalReason());
+        byId.setUpdateTime(LocalDateTime.now());
+        return R.ok(tVisitorService.updateById(byId));
+    }
+
+    /**
+     * 删除
+     */
+    @Operation(summary = "删除")
+    @DeleteMapping("/delete")
+    public R<Boolean> delete(@RequestParam("id") Long id) {
+        return R.ok(tVisitorService.removeById(id));
+    }
 }

+ 76 - 11
src/main/java/com/sckw/access/controller/TWhitelistController.java

@@ -1,36 +1,101 @@
 package com.sckw.access.controller;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sckw.access.domain.para.TWhitelistQuery;
+import com.sckw.access.domain.para.TWhitelistSave;
+import com.sckw.access.domain.vo.WhitelistVo;
 import com.sckw.access.entity.TWhitelist;
 import com.sckw.access.service.TWhitelistService;
+import com.sckw.access.util.R;
+import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * 道闸白名单表
- *
- * @author xxxxx
  */
 @RestController
 @RequestMapping("/whitelist")
 @Tag(name = "道闸白名单")
 public class TWhitelistController {
-    /**
-     * 服务对象
-     */
     @Resource
     private TWhitelistService tWhitelistService;
 
     /**
-     * 通过主键查询单条数据
+     * 分页查询
+     *
+     * @param whitelistQuery 查询参数
+     * @return 分页数据
+     */
+    @GetMapping("/page")
+    @Operation(summary = "分页查询")
+    public R<Page<WhitelistVo>> page(@ParameterObject TWhitelistQuery whitelistQuery) {
+        Page<TWhitelist> page1 = tWhitelistService.page(new Page<>(whitelistQuery.getPageNo(),whitelistQuery.getPageSize()), new LambdaQueryWrapper<TWhitelist>()
+                .like(StrUtil.isNotBlank(whitelistQuery.getName()), TWhitelist::getName, whitelistQuery.getName())
+                .like(StrUtil.isNotBlank(whitelistQuery.getLicensePlate()), TWhitelist::getLicensePlate, whitelistQuery.getLicensePlate())
+                .eq(Objects.nonNull(whitelistQuery.getVehicleType()), TWhitelist::getVehicleType, whitelistQuery.getVehicleType())
+                .like(StrUtil.isNotBlank(whitelistQuery.getPhone()), TWhitelist::getPhone, whitelistQuery.getPhone())
+                .eq(Objects.nonNull(whitelistQuery.getStatus()), TWhitelist::getStatus, whitelistQuery.getStatus())
+
+        );
+        List<WhitelistVo> list = page1.getRecords().stream().map(d -> {
+            WhitelistVo bean = BeanUtil.toBean(d, WhitelistVo.class);
+            bean.setBarrierIds(JSONArray.parseArray(d.getBarrierIds(), String.class));
+            return bean;
+        }).toList();
+        Page<WhitelistVo> whitelistVoPage = new Page<>(page1.getCurrent(), page1.getSize(), page1.getTotal());
+        whitelistVoPage.setRecords(list);
+        return R.ok(whitelistVoPage);
+    }
+
+    /**
+     * 保存
      *
-     * @param id 主键
-     * @return 单条数据
+     * @param whitelistSave
+     * @return
      */
-    @GetMapping("selectOne")
-    public TWhitelist selectOne(Integer id) {
-        return tWhitelistService.getById(id);
+    @Operation(summary = "保存")
+    @PostMapping("/save")
+    public R<Boolean> save(@RequestBody @Validated TWhitelistSave whitelistSave) {
+        TWhitelist save = BeanUtil.toBean(whitelistSave, TWhitelist.class);
+        save.setCreateTime(LocalDateTime.now());
+        save.setBarrierIds(JSONObject.toJSONString(whitelistSave.getBarrierIds()));
+        return R.ok(tWhitelistService.save(save));
     }
 
+    /**
+     * 修改
+     *
+     * @param whitelistSave
+     * @return
+     */
+    @Operation(summary = "修改")
+    @PostMapping("/update")
+    public R<Boolean> update(@RequestBody @Validated TWhitelistSave whitelistSave) {
+        TWhitelist update = BeanUtil.toBean(whitelistSave, TWhitelist.class);
+        update.setUpdateTime(LocalDateTime.now());
+        update.setBarrierIds(JSONObject.toJSONString(whitelistSave.getBarrierIds()));
+        return R.ok(tWhitelistService.updateById(update));
+    }
+
+    /**
+     * 删除
+     */
+    @Operation(summary = "删除")
+    @DeleteMapping("/delete")
+    public R<Boolean> delete(@RequestParam("id") Long id) {
+        return R.ok(tWhitelistService.removeById(id));
+    }
 }

+ 3 - 0
src/main/java/com/sckw/access/domain/Base.java

@@ -1,6 +1,7 @@
 package com.sckw.access.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
@@ -27,6 +28,7 @@ public class Base {
      */
     @TableField(value = "create_time")
     @Schema(description="创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime createTime;
 
     /**
@@ -41,6 +43,7 @@ public class Base {
      */
     @TableField(value = "update_time")
     @Schema(description="更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime updateTime;
 
     /**

+ 19 - 0
src/main/java/com/sckw/access/domain/BasePage.java

@@ -0,0 +1,19 @@
+package com.sckw.access.domain;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author xucaiqin
+ * @date 2025-07-24 13:13:16
+ */
+@Schema(description = "分页参数")
+@Getter
+@Setter
+public class BasePage {
+    @Schema(description = "当前页", defaultValue = "1", required = true)
+    private Integer pageNo = 1;
+    @Schema(description = "每页大小", defaultValue = "10", required = true)
+    private Integer pageSize = 10;
+}

+ 43 - 0
src/main/java/com/sckw/access/domain/para/BarrierGateQuery.java

@@ -0,0 +1,43 @@
+package com.sckw.access.domain.para;
+
+import com.sckw.access.domain.BasePage;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author xucaiqin
+ * @date 2025-07-24 11:45:20
+ */
+@Schema(description = "道闸管理")
+@Getter
+@Setter
+public class BarrierGateQuery extends BasePage {
+
+
+
+    /**
+     * 道闸名称
+     */
+    @Schema(description = "道闸名称")
+    private String name;
+
+    /**
+     * 道闸位置
+     */
+    @Schema(description = "道闸位置")
+    private String location;
+
+    /**
+     * 道闸性质 1-进 2-出
+     */
+    @Schema(description = "道闸性质 1-进 2-出")
+    private Integer type;
+
+    /**
+     * 启用标识 1-启用 2-禁用
+     */
+    @Schema(description = "启用标识 1-启用 2-禁用")
+    private Integer status;
+
+}

+ 5 - 10
src/main/java/com/sckw/access/domain/para/BarrierGateSave.java

@@ -1,14 +1,11 @@
 package com.sckw.access.domain.para;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.time.LocalDateTime;
 
 /**
 * @date 2025-07-24 11:45:20
@@ -24,16 +21,13 @@ public class BarrierGateSave {
     @Schema(description="id")
     private Long id;
 
-    /**
-     * 编号
-     */
-    @Schema(description="编号")
-    private String code;
+
 
     /**
      * 道闸名称
      */
     @Schema(description="道闸名称")
+    @NotBlank(message = "道闸名称不能为空")
     private String name;
 
     /**
@@ -46,6 +40,7 @@ public class BarrierGateSave {
      * 道闸性质 1-进 2-出
      */
     @Schema(description="道闸性质 1-进 2-出")
+    @NotNull(message = "道闸性质不能为空")
     private Integer type;
 
     /**

+ 0 - 15
src/main/java/com/sckw/access/domain/para/BasePage.java

@@ -1,15 +0,0 @@
-package com.sckw.access.domain.para;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @author xucaiqin
- * @date 2025-07-24 13:13:16
- */
-@Getter
-@Setter
-public class BasePage {
-    private Integer pageNo;
-    private Integer pageSize;
-}

+ 36 - 0
src/main/java/com/sckw/access/domain/para/TVisitorQuery.java

@@ -0,0 +1,36 @@
+package com.sckw.access.domain.para;
+
+import com.sckw.access.domain.BasePage;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 访客管理分页查询参数
+ */
+@Getter
+@Setter
+@Schema(description = "访客管理分页查询参数")
+public class TVisitorQuery extends BasePage {
+
+
+
+    @Schema(description = "访客姓名")
+    private String name;
+
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    @Schema(description = "车辆类型 1-货车 2-私家车")
+    private Integer vehicleType;
+
+    @Schema(description = "审批人姓名")
+    private String approverName;
+
+    @Schema(description = "审批人手机")
+    private String approverMobile;
+
+    @Schema(description = "审批状态")
+    private Integer approvalStatus;
+
+} 

+ 57 - 0
src/main/java/com/sckw/access/domain/para/TVisitorSave.java

@@ -0,0 +1,57 @@
+package com.sckw.access.domain.para;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 访客管理保存/修改参数
+ */
+@Getter
+@Setter
+@Schema(description = "访客管理保存/修改参数")
+public class TVisitorSave {
+    @Schema(description = "主键id")
+    private Long id;
+
+    @NotBlank(message = "访客姓名不能为空")
+    @Schema(description = "访客姓名")
+    private String name;
+
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    @Schema(description = "人员照片URL")
+    private String photoUrl;
+
+    @Schema(description = "车辆类型 1-货车 2-私家车")
+    private Integer vehicleType;
+
+    @Schema(description = "申请进入时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime applyEntryTime;
+
+    @Schema(description = "申请出门时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime applyExitTime;
+
+    @Schema(description = "通过道闸")
+    private List<String> barrierIds;
+
+    @Schema(description = "审批人姓名")
+    @NotBlank(message = "审批人姓名不能为空")
+    private String approverName;
+
+    @Schema(description = "审批人手机")
+    @NotBlank(message = "审批人手机不能为空")
+    private String approverMobile;
+
+} 

+ 30 - 0
src/main/java/com/sckw/access/domain/para/TWhitelistQuery.java

@@ -0,0 +1,30 @@
+package com.sckw.access.domain.para;
+
+import com.sckw.access.domain.BasePage;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 白名单分页查询参数
+ */
+@Getter
+@Setter
+@Schema(description = "白名单分页查询参数")
+public class TWhitelistQuery extends BasePage {
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    @Schema(description = "车辆类型 1-货车 2-私家车")
+    private Integer vehicleType;
+
+    @Schema(description="联系电话")
+    private String phone;
+
+    @Schema(description="状态")
+    private Integer status;
+} 

+ 45 - 0
src/main/java/com/sckw/access/domain/para/TWhitelistSave.java

@@ -0,0 +1,45 @@
+package com.sckw.access.domain.para;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 白名单保存/修改参数
+ */
+@Getter
+@Setter
+@Schema(description = "白名单保存/修改参数")
+public class TWhitelistSave {
+    @Schema(description = "主键id")
+    private Long id;
+
+    @Schema(description = "姓名")
+    private String name;
+    @Schema(description = "车牌号")
+    private String licensePlate;
+    @Schema(description = "车辆类型 1-货车 2-私家车")
+    private Integer vehicleType;
+    @Schema(description = "联系电话")
+    private String phone;
+    @Schema(description = "适用道闸")
+    private List<String> barrierIds;
+
+    @Schema(description = "有效期开始")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime validFrom;
+
+    @Schema(description = "有效期结束")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime validTo;
+
+    @Schema(description = "状态 1-启用 2-停用")
+    private Integer status;
+} 

+ 32 - 0
src/main/java/com/sckw/access/domain/para/VisitorApproveSave.java

@@ -0,0 +1,32 @@
+package com.sckw.access.domain.para;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 审批参数
+ */
+@Getter
+@Setter
+@Schema(description = "审批参数")
+public class VisitorApproveSave {
+    @NotNull(message = "id不能为空")
+    @Schema(description = "主键id")
+    private Long id;
+    /**
+     * 审批状态
+     */
+    @NotNull(message = "审批状态不能为空")
+    @Schema(description = "审批状态 1-待审批 2-审批通过 3-审批不通过")
+    private Integer approvalStatus;
+
+    /**
+     * 审批原因
+     */
+    @Schema(description = "审批原因")
+//    @NotBlank(message = "审批原因不能为空")
+    private String approvalReason;
+
+} 

+ 49 - 0
src/main/java/com/sckw/access/domain/vo/BarrierGateVo.java

@@ -0,0 +1,49 @@
+package com.sckw.access.domain.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 道闸管理
+ *
+ * @author xucaiqin
+ * @date 2025-07-24 11:45:20
+ */
+
+@Schema(description = "道闸管理表")
+@Getter
+@Setter
+public class BarrierGateVo {
+    /**
+     * id
+     */
+    @Schema(description = "id")
+    private Long id;
+
+
+    /**
+     * 道闸名称
+     */
+    @Schema(description = "道闸名称")
+    private String name;
+
+    /**
+     * 道闸位置
+     */
+    @Schema(description = "道闸位置")
+    private String location;
+
+    /**
+     * 道闸性质 1-进 2-出
+     */
+    @Schema(description = "道闸性质 1-进 2-出")
+    private Integer type;
+
+    /**
+     * 启用标识 1-启用 2-禁用
+     */
+    @Schema(description = "启用标识 1-启用 2-禁用")
+    private Integer status;
+
+}

+ 101 - 0
src/main/java/com/sckw/access/domain/vo/VisitorVo.java

@@ -0,0 +1,101 @@
+package com.sckw.access.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 访客管理表
+ *
+ * @author xucaiqin
+ * @date 2025-07-24 13:54:15
+ */
+@Schema(description = "访客管理表")
+@Getter
+@Setter
+public class VisitorVo {
+    /**
+     * id
+     */
+    @Schema(description = "id")
+    private Long id;
+
+    /**
+     * 访客姓名
+     */
+    @Schema(description = "访客姓名")
+    private String name;
+
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    /**
+     * 人员相片URL
+     */
+    @Schema(description = "人员相片URL")
+    private String photoUrl;
+
+    /**
+     * 车辆类型
+     */
+    @Schema(description = "车辆类型 1-货车 2-私家车")
+    private Integer vehicleType;
+
+    /**
+     * 申请进入时间
+     */
+    @Schema(description = "申请进入时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime applyEntryTime;
+
+    /**
+     * 申请出门时间
+     */
+    @Schema(description = "申请出门时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime applyExitTime;
+
+    /**
+     * 通过道闸
+     */
+    @Schema(description = "通过道闸")
+    private List<String> barrierIds;
+
+    /**
+     * 审批人姓名
+     */
+    @Schema(description = "审批人姓名")
+    private String approverName;
+
+    /**
+     * 审批人手机
+     */
+    @Schema(description = "审批人手机")
+    private String approverMobile;
+
+    /**
+     * 审批状态
+     */
+    @Schema(description = "审批状态 1-待审批 2-审批通过 3-审批不通过")
+    private Integer approvalStatus;
+
+    /**
+     * 审批原因
+     */
+    @Schema(description = "审批原因")
+    private String approvalReason;
+
+    /**
+     * 申请时间
+     */
+    @Schema(description = "申请时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime applyTime;
+}

+ 74 - 0
src/main/java/com/sckw/access/domain/vo/WhitelistVo.java

@@ -0,0 +1,74 @@
+package com.sckw.access.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 道闸白名单表
+ *
+ * @author xucaiqin
+ * @date 2025-07-24 11:45:20
+ */
+@Schema(description = "道闸白名单表")
+@Getter
+@Setter
+public class WhitelistVo  {
+    /**
+     * id
+     */
+    @Schema(description = "id")
+    private Long id;
+
+
+    /**
+     * 姓名
+     */
+    @Schema(description = "姓名")
+    private String name;
+
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    /**
+     * 车辆类型
+     */
+    @Schema(description = "车辆类型 1-货车 2-私家车")
+    private Integer vehicleType;
+
+    /**
+     * 联系电话
+     */
+    @Schema(description = "联系电话")
+    private String phone;
+
+    @Schema(description = "道闸")
+    private List<String> barrierIds;
+
+    /**
+     * 有效期开始
+     */
+    @Schema(description = "有效期开始")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime validFrom;
+
+    /**
+     * 有效期结束
+     */
+    @Schema(description = "有效期结束")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime validTo;
+
+    /**
+     * 状态
+     */
+    @Schema(description = "状态 1-启用 2-停用")
+    private Integer status;
+}

+ 19 - 19
src/main/java/com/sckw/access/entity/TBarrierGate.java

@@ -6,18 +6,18 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckw.access.domain.Base;
 import io.swagger.v3.oas.annotations.media.Schema;
-import java.time.LocalDateTime;
 import lombok.Getter;
 import lombok.Setter;
 
 /**
-* @date 2025-07-24 11:45:20
-* @author xucaiqin
-*/
+ * @date 2025-07-24 11:45:20
+ * @author xucaiqin
+ */
+
 /**
-    * 道闸管理表
-    */
-@Schema(description="道闸管理表")
+ * 道闸管理表
+ */
+@Schema(description = "道闸管理表")
 @Getter
 @Setter
 @TableName(value = "t_barrier_gate")
@@ -26,42 +26,42 @@ public class TBarrierGate extends Base {
      * id
      */
     @TableId(value = "id", type = IdType.AUTO)
-    @Schema(description="id")
+    @Schema(description = "id")
     private Long id;
 
-    /**
-     * 编号
-     */
-    @TableField(value = "code")
-    @Schema(description="编号")
-    private String code;
-
     /**
      * 道闸名称
      */
     @TableField(value = "`name`")
-    @Schema(description="道闸名称")
+    @Schema(description = "道闸名称")
     private String name;
 
     /**
      * 道闸位置
      */
     @TableField(value = "`location`")
-    @Schema(description="道闸位置")
+    @Schema(description = "道闸位置")
     private String location;
 
     /**
      * 道闸性质 1-进 2-出
      */
     @TableField(value = "`type`")
-    @Schema(description="道闸性质 1-进 2-出")
+    @Schema(description = "道闸性质 1-进 2-出")
     private Integer type;
 
+    /**
+     * 类型  1-矿山 2-厂区
+     */
+    @TableField(value = "`category`")
+    @Schema(description = "类型  1-矿山 2-厂区")
+    private Integer category;
+
     /**
      * 启用标识 1-启用 2-禁用
      */
     @TableField(value = "`status`")
-    @Schema(description="启用标识 1-启用 2-禁用")
+    @Schema(description = "启用标识 1-启用 2-禁用")
     private Integer status;
 
 }

+ 11 - 8
src/main/java/com/sckw/access/entity/TVisitor.java

@@ -4,14 +4,14 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.sckw.access.domain.Base;
 import io.swagger.v3.oas.annotations.media.Schema;
-
-import java.time.LocalDateTime;
-
 import lombok.Getter;
 import lombok.Setter;
 
+import java.time.LocalDateTime;
+
 /**
  * 访客管理表
  *
@@ -24,10 +24,10 @@ import lombok.Setter;
 @TableName(value = "t_visitor")
 public class TVisitor extends Base {
     /**
-     * 编号
+     * id
      */
     @TableId(value = "id", type = IdType.AUTO)
-    @Schema(description = "编号")
+    @Schema(description = "id")
     private Long id;
 
     /**
@@ -55,14 +55,15 @@ public class TVisitor extends Base {
      * 车辆类型
      */
     @TableField(value = "vehicle_type")
-    @Schema(description = "车辆类型")
-    private Object vehicleType;
+    @Schema(description = "车辆类型 1-货车 2-私家车")
+    private Integer vehicleType;
 
     /**
      * 申请进入时间
      */
     @TableField(value = "apply_entry_time")
     @Schema(description = "申请进入时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime applyEntryTime;
 
     /**
@@ -70,6 +71,7 @@ public class TVisitor extends Base {
      */
     @TableField(value = "apply_exit_time")
     @Schema(description = "申请出门时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime applyExitTime;
 
     /**
@@ -97,7 +99,7 @@ public class TVisitor extends Base {
      * 审批状态
      */
     @TableField(value = "approval_status")
-    @Schema(description = "审批状态")
+    @Schema(description = "审批状态 1-待审批 2-审批通过 3-审批不通过")
     private Integer approvalStatus;
 
     /**
@@ -112,5 +114,6 @@ public class TVisitor extends Base {
      */
     @TableField(value = "apply_time")
     @Schema(description = "申请时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime applyTime;
 }

+ 21 - 23
src/main/java/com/sckw/access/entity/TWhitelist.java

@@ -4,20 +4,21 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.sckw.access.domain.Base;
 import io.swagger.v3.oas.annotations.media.Schema;
-import java.time.LocalDateTime;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.time.LocalDateTime;
+
 /**
-* @date 2025-07-24 11:45:20
-* @author xucaiqin
-*/
-/**
-    * 道闸白名单表
-    */
-@Schema(description="道闸白名单表")
+ * 道闸白名单表
+ *
+ * @author xucaiqin
+ * @date 2025-07-24 11:45:20
+ */
+@Schema(description = "道闸白名单表")
 @Getter
 @Setter
 @TableName(value = "t_whitelist")
@@ -26,69 +27,66 @@ public class TWhitelist extends Base {
      * id
      */
     @TableId(value = "id", type = IdType.AUTO)
-    @Schema(description="id")
+    @Schema(description = "id")
     private Long id;
 
-    /**
-     * 编号
-     */
-    @TableField(value = "code")
-    @Schema(description="编号")
-    private String code;
+
 
     /**
      * 姓名
      */
     @TableField(value = "`name`")
-    @Schema(description="姓名")
+    @Schema(description = "姓名")
     private String name;
 
     /**
      * 车牌号
      */
     @TableField(value = "license_plate")
-    @Schema(description="车牌号")
+    @Schema(description = "车牌号")
     private String licensePlate;
 
     /**
      * 车辆类型
      */
     @TableField(value = "vehicle_type")
-    @Schema(description="车辆类型")
+    @Schema(description = "车辆类型 1-货车 2-私家车")
     private Integer vehicleType;
 
     /**
      * 联系电话
      */
     @TableField(value = "phone")
-    @Schema(description="联系电话")
+    @Schema(description = "联系电话")
     private String phone;
 
     /**
      * 适用道闸
      */
     @TableField(value = "barrier_ids")
-    @Schema(description="适用道闸")
+    @Schema(description = "适用道闸")
     private String barrierIds;
 
     /**
      * 有效期开始
      */
     @TableField(value = "valid_from")
-    @Schema(description="有效期开始")
+    @Schema(description = "有效期开始")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime validFrom;
 
     /**
      * 有效期结束
      */
     @TableField(value = "valid_to")
-    @Schema(description="有效期结束")
+    @Schema(description = "有效期结束")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime validTo;
 
     /**
      * 状态
      */
     @TableField(value = "`status`")
-    @Schema(description="状态")
+    @Schema(description = "状态 1-启用 2-停用")
     private Integer status;
 }

+ 0 - 2
src/main/java/com/sckw/access/service/TVisitorService.java

@@ -1,8 +1,6 @@
 package com.sckw.access.service;
 
 import org.springframework.stereotype.Service;
-import jakarta.annotation.Resource;
-import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.access.entity.TVisitor;
 import com.sckw.access.mapper.TVisitorMapper;

+ 1 - 1
src/main/resources/application-dev.yml

@@ -46,7 +46,7 @@ knife4j:
 # 日志级别
 logging:
   level:
-    root: debug
+    root: info
     com.sckw.access: debug
 
 

+ 57 - 0
src/main/resources/application-local.yml

@@ -0,0 +1,57 @@
+spring:
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    type: com.alibaba.druid.pool.DruidDataSource
+    username: root
+    password: xucaiqin
+    url: jdbc:mysql://127.0.0.1:3306/access_control
+    druid:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+  data:
+    redis:
+      host: 127.0.0.1
+      password: xucaiqin
+      port: 6379
+      database: 12
+      lettuce:
+        pool:
+          enabled: true
+          max-active: 8
+          max-idle: 16
+          min-idle: 1
+# springdoc-openapi项目配置
+springdoc:
+  swagger-ui:
+    path: /swagger-ui.html
+    tags-sorter: alpha
+    operations-sorter: alpha
+  api-docs:
+    path: /v3/api-docs
+  group-configs:
+    - group: 'default'
+      paths-to-match: '/**'
+      packages-to-scan: com.sckw.access
+# knife4j的增强配置,不需要增强可以不配
+knife4j:
+  enable: false
+  setting:
+    language: zh_cn
+# 日志级别
+logging:
+  level:
+    root: info
+    com.sckw.access: debug
+
+
+# mybatis-plus 打印sql
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+

+ 1 - 1
src/main/resources/application.yml

@@ -5,7 +5,7 @@ spring:
   application:
     name: AccessControl
   profiles:
-    active: dev
+    active: local
   jackson:
     date-format: yyyy-MM-dd HH:mm:ss
     locale: zh

+ 14 - 28
src/main/resources/logback.xml

@@ -1,61 +1,51 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <!-- 日志存放路径 -->
-    <property name="log.path" value="/home/ruoyi/logs"/>
+    <property name="LOG_HOME" value="logs"/>
     <!-- 日志输出格式 -->
-    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
+    <property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
     <!--    logback 1.5.11 打印彩色日志至console的最新方法-->
-    <property name="log.console"
+    <property name="LOG_CONSOLE"
               value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n"/>
 
     <!-- 控制台输出 -->
     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
         <encoder>
-            <pattern>${log.console}</pattern>
+            <pattern>${LOG_CONSOLE}</pattern>
         </encoder>
     </appender>
 
     <!-- 系统日志输出 -->
     <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log.path}/sys-info.log</file>
-        <!-- 循环政策:基于时间创建日志文件 -->
+        <file>${LOG_HOME}/info/current.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志文件名格式 -->
-            <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
-            <!-- 日志最大的历史 60天 -->
-            <maxHistory>60</maxHistory>
+            <!-- 使用子目录按天归档 -->
+            <fileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>30</maxHistory>
         </rollingPolicy>
         <encoder>
-            <pattern>${log.pattern}</pattern>
+            <pattern>${LOG_PATTERN}</pattern>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 过滤的级别 -->
             <level>INFO</level>
-            <!-- 匹配时的操作:接收(记录) -->
             <onMatch>ACCEPT</onMatch>
-            <!-- 不匹配时的操作:拒绝(不记录) -->
             <onMismatch>DENY</onMismatch>
         </filter>
     </appender>
 
     <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log.path}/sys-error.log</file>
-        <!-- 循环政策:基于时间创建日志文件 -->
+        <file>${LOG_HOME}/error/current.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志文件名格式 -->
-            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
-            <!-- 日志最大的历史 60天 -->
-            <maxHistory>60</maxHistory>
+            <!-- 使用子目录按天归档 -->
+            <fileNamePattern>${LOG_HOME}/error/%d{yyyy-MM}/%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>30</maxHistory>
         </rollingPolicy>
         <encoder>
-            <pattern>${log.pattern}</pattern>
+            <pattern>${LOG_PATTERN}</pattern>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 过滤的级别 -->
             <level>ERROR</level>
-            <!-- 匹配时的操作:接收(记录) -->
             <onMatch>ACCEPT</onMatch>
-            <!-- 不匹配时的操作:拒绝(不记录) -->
             <onMismatch>DENY</onMismatch>
         </filter>
     </appender>
@@ -67,10 +57,6 @@
 
     <root level="info">
         <appender-ref ref="console"/>
-    </root>
-
-    <!--系统操作日志-->
-    <root level="info">
         <appender-ref ref="file_info"/>
         <appender-ref ref="file_error"/>
     </root>