dengsixing 1 hete
commit
1f6e1576b4
78 módosított fájl, 5430 hozzáadás és 0 törlés
  1. 33 0
      .gitignore
  2. 189 0
      pom.xml
  3. 18 0
      src/main/java/com/project/hyb/AdminServeApplication.java
  4. 12 0
      src/main/java/com/project/hyb/biz/bean/CityExhibitionCount.java
  5. 14 0
      src/main/java/com/project/hyb/biz/bean/DocumentContentVO.java
  6. 31 0
      src/main/java/com/project/hyb/biz/bean/ExhibitionQueryCondition.java
  7. 117 0
      src/main/java/com/project/hyb/biz/controller/ArtArtworksController.java
  8. 21 0
      src/main/java/com/project/hyb/biz/controller/ArtAttachmentsController.java
  9. 52 0
      src/main/java/com/project/hyb/biz/controller/CollCollectionCluesController.java
  10. 128 0
      src/main/java/com/project/hyb/biz/controller/NewsPublishController.java
  11. 21 0
      src/main/java/com/project/hyb/biz/controller/SysAttachmentsController.java
  12. 49 0
      src/main/java/com/project/hyb/biz/controller/h5/AppAntiqueController.java
  13. 17 0
      src/main/java/com/project/hyb/biz/convert/CreatePermissionRequestToPermission.java
  14. 807 0
      src/main/java/com/project/hyb/biz/domain/dto/ArtArtworksDto.java
  15. 115 0
      src/main/java/com/project/hyb/biz/domain/dto/NewsPublishDto.java
  16. 45 0
      src/main/java/com/project/hyb/biz/domain/dto/PermissionDto.java
  17. 791 0
      src/main/java/com/project/hyb/biz/domain/entity/ArtArtworks.java
  18. 263 0
      src/main/java/com/project/hyb/biz/domain/entity/ArtAttachments.java
  19. 123 0
      src/main/java/com/project/hyb/biz/domain/entity/CollCollectionClues.java
  20. 107 0
      src/main/java/com/project/hyb/biz/domain/entity/NewsPublish.java
  21. 54 0
      src/main/java/com/project/hyb/biz/domain/entity/Permission.java
  22. 98 0
      src/main/java/com/project/hyb/biz/domain/entity/SysAttachments.java
  23. 71 0
      src/main/java/com/project/hyb/biz/domain/request/AddCollCollectionCluesRequest.java
  24. 42 0
      src/main/java/com/project/hyb/biz/domain/request/ArtArtworksPageRequest.java
  25. 49 0
      src/main/java/com/project/hyb/biz/domain/request/CreatePermissionRequest.java
  26. 21 0
      src/main/java/com/project/hyb/biz/domain/request/NewsPublicPageRequest.java
  27. 81 0
      src/main/java/com/project/hyb/biz/generate/AutoGenerate.java
  28. 24 0
      src/main/java/com/project/hyb/biz/mapper/ArtArtworksMapper.java
  29. 18 0
      src/main/java/com/project/hyb/biz/mapper/ArtAttachmentsMapper.java
  30. 18 0
      src/main/java/com/project/hyb/biz/mapper/CollCollectionCluesMapper.java
  31. 18 0
      src/main/java/com/project/hyb/biz/mapper/NewsPublishMapper.java
  32. 23 0
      src/main/java/com/project/hyb/biz/mapper/PermissionMapper.java
  33. 18 0
      src/main/java/com/project/hyb/biz/mapper/SysAttachmentsMapper.java
  34. 29 0
      src/main/java/com/project/hyb/biz/service/ArtArtworksService.java
  35. 16 0
      src/main/java/com/project/hyb/biz/service/ArtAttachmentsService.java
  36. 21 0
      src/main/java/com/project/hyb/biz/service/CollCollectionCluesService.java
  37. 16 0
      src/main/java/com/project/hyb/biz/service/NewsPublishService.java
  38. 77 0
      src/main/java/com/project/hyb/biz/service/PermissionService.java
  39. 16 0
      src/main/java/com/project/hyb/biz/service/SysAttachmentsService.java
  40. 89 0
      src/main/java/com/project/hyb/biz/service/impl/ArtArtworksServiceImpl.java
  41. 22 0
      src/main/java/com/project/hyb/biz/service/impl/ArtAttachmentsServiceImpl.java
  42. 79 0
      src/main/java/com/project/hyb/biz/service/impl/CollCollectionCluesServiceImpl.java
  43. 22 0
      src/main/java/com/project/hyb/biz/service/impl/NewsPublishServiceImpl.java
  44. 94 0
      src/main/java/com/project/hyb/biz/service/impl/PermissionServiceImpl.java
  45. 22 0
      src/main/java/com/project/hyb/biz/service/impl/SysAttachmentsServiceImpl.java
  46. 40 0
      src/main/java/com/project/hyb/biz/util/PermissionUtil.java
  47. 173 0
      src/main/java/com/project/hyb/biz/util/WordUtil.java
  48. 42 0
      src/main/java/com/project/hyb/common/constant/AuditStatus.java
  49. 9 0
      src/main/java/com/project/hyb/common/constant/CommonConstant.java
  50. 41 0
      src/main/java/com/project/hyb/common/constant/CommonStatus.java
  51. 36 0
      src/main/java/com/project/hyb/common/constant/PayStatus.java
  52. 16 0
      src/main/java/com/project/hyb/common/exception/BadRequestException.java
  53. 26 0
      src/main/java/com/project/hyb/common/exception/BizException.java
  54. 89 0
      src/main/java/com/project/hyb/common/exception/ExceptionHandlerConfigure.java
  55. 15 0
      src/main/java/com/project/hyb/common/httpclient/ForestClient.java
  56. 15 0
      src/main/java/com/project/hyb/common/json/BigDecimalSerializer.java
  57. 16 0
      src/main/java/com/project/hyb/common/mapstruct/MapstructConfigure.java
  58. 15 0
      src/main/java/com/project/hyb/common/mapstruct/MapstructConstant.java
  59. 33 0
      src/main/java/com/project/hyb/common/mybatis/MybatisPlusConfigure.java
  60. 44 0
      src/main/java/com/project/hyb/common/request/PageRequest.java
  61. 29 0
      src/main/java/com/project/hyb/common/response/BizResponseCode.java
  62. 31 0
      src/main/java/com/project/hyb/common/response/PageInfo.java
  63. 82 0
      src/main/java/com/project/hyb/common/response/R.java
  64. 54 0
      src/main/java/com/project/hyb/common/swagger/CustomConstants.java
  65. 79 0
      src/main/java/com/project/hyb/common/swagger/SwaggerConfig.java
  66. 66 0
      src/main/java/com/project/hyb/common/util/LocationUtil.java
  67. 66 0
      src/main/java/com/project/hyb/common/util/RsaUtil.java
  68. 10 0
      src/main/resources/application-h2.yml
  69. 24 0
      src/main/resources/application-local.yml
  70. 27 0
      src/main/resources/application-prod.yml
  71. 27 0
      src/main/resources/application-test.yml
  72. 63 0
      src/main/resources/application.yml
  73. 217 0
      src/main/resources/logback-spring.xml
  74. 34 0
      src/main/resources/mapper/biz/ArtArtworksMapper.xml
  75. 5 0
      src/main/resources/mapper/biz/ArtAttachmentsMapper.xml
  76. 5 0
      src/main/resources/mapper/biz/CollCollectionCluesMapper.xml
  77. 5 0
      src/main/resources/mapper/biz/NewsPublishMapper.xml
  78. 5 0
      src/main/resources/mapper/biz/SysAttachmentsMapper.xml

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 189 - 0
pom.xml

@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.12.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.project</groupId>
+    <artifactId>hyb</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>hyb</name>
+    <description>胡耀邦革命文物鉴赏</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <hutool.version>5.8.27</hutool.version>
+        <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
+        <mapstruct-helper-starter.version>1.0.0</mapstruct-helper-starter.version>
+        <sa-token.version>1.37.0</sa-token.version>
+        <mybatis-plus.version>3.5.6</mybatis-plus.version>
+<!--        <knife4j.version>4.5.0</knife4j.version>-->
+    </properties>
+
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>cn.dhbin</groupId>
+            <artifactId>mapstruct-helper-starter</artifactId>
+            <version>${mapstruct-helper-starter.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>${org.mapstruct.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct-processor</artifactId>
+            <version>${org.mapstruct.version}</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.dev33</groupId>
+            <artifactId>sa-token-spring-boot-starter</artifactId>
+            <version>1.34.0</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.dev33</groupId>
+            <artifactId>sa-token-jwt</artifactId>
+            <version>1.34.0</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>${hutool.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>2.0.9</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.25</version>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <scope>compile</scope>
+            <version>3.4.3.4</version>
+        </dependency>
+
+        <!--mybatis-plus代码生成器-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <scope>compile</scope>
+            <version>3.5.1</version>
+        </dependency>
+
+        <!--velocity模板-->
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate.validator</groupId>
+            <artifactId>hibernate-validator</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.yomahub</groupId>
+            <artifactId>tlog-web-spring-boot-starter</artifactId>
+            <version>1.5.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.dtflys.forest</groupId>
+            <artifactId>forest-spring-boot-starter</artifactId>
+            <version>1.7.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>4.2.0</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <finalName>${artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.3.12.RELEASE</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 18 - 0
src/main/java/com/project/hyb/AdminServeApplication.java

@@ -0,0 +1,18 @@
+package com.project.hyb;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * Application
+ *
+ * @author dhb
+ */
+@SpringBootApplication
+public class AdminServeApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(AdminServeApplication.class, args);
+    }
+
+}

+ 12 - 0
src/main/java/com/project/hyb/biz/bean/CityExhibitionCount.java

@@ -0,0 +1,12 @@
+package com.project.hyb.biz.bean;
+
+import lombok.Data;
+
+@Data
+public class CityExhibitionCount {
+
+    private String city;
+
+    private Integer count;
+
+}

+ 14 - 0
src/main/java/com/project/hyb/biz/bean/DocumentContentVO.java

@@ -0,0 +1,14 @@
+package com.project.hyb.biz.bean;
+
+import lombok.Data;
+
+@Data
+public class DocumentContentVO {
+
+    private String title;
+
+    private Integer index;
+
+    private String content;
+
+}

+ 31 - 0
src/main/java/com/project/hyb/biz/bean/ExhibitionQueryCondition.java

@@ -0,0 +1,31 @@
+package com.project.hyb.biz.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ExhibitionQueryCondition {
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private Integer online;
+
+    private Integer display;
+
+    private String city;
+
+    /**
+     * 是否要根据时间查询
+     */
+    private Long countByDate;
+
+}

+ 117 - 0
src/main/java/com/project/hyb/biz/controller/ArtArtworksController.java

@@ -0,0 +1,117 @@
+package com.project.hyb.biz.controller;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.project.hyb.biz.domain.dto.ArtArtworksDto;
+import com.project.hyb.biz.domain.entity.ArtArtworks;
+import com.project.hyb.biz.domain.entity.SysAttachments;
+import com.project.hyb.biz.domain.request.ArtArtworksPageRequest;
+import com.project.hyb.biz.service.ArtArtworksService;
+import com.project.hyb.biz.service.SysAttachmentsService;
+import com.project.hyb.common.response.PageInfo;
+import com.project.hyb.common.response.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Api(tags = "藏品")
+@RestController
+@RequestMapping("/hyb/artArtworks")
+public class ArtArtworksController {
+
+    @Autowired
+    private ArtArtworksService artArtworksService;
+    @Autowired
+    private SysAttachmentsService sysAttachmentsService;
+
+    @ApiOperation("首页藏品接口")
+    @GetMapping("index/page")
+    public R<PageInfo<ArtArtworksDto>> indexPage(ArtArtworksPageRequest request){
+        PageInfo<ArtArtworksDto> artArtworksDtoPageInfo = artArtworksService.pageArtArtworks(request);
+        if(CollUtil.isNotEmpty(artArtworksDtoPageInfo.getPageData())){
+            return R.ok(artArtworksDtoPageInfo);
+        }
+        request.setPageNo(1);
+        return R.ok(artArtworksService.pageArtArtworks(request));
+    }
+
+    @ApiOperation("藏品列表")
+    @GetMapping("list")
+    public R<List<ArtArtworksDto>> list(ArtArtworksPageRequest request){
+        List<ArtArtworks> list = artArtworksService.listArtArtworks(request);
+        if(CollUtil.isEmpty(list)){
+            return R.ok();
+        }
+        List<String> uuids = list.stream().map(v -> v.getArtworkUuid()).collect(Collectors.toList());
+        List<SysAttachments> attachs = sysAttachmentsService.list(
+                new LambdaQueryWrapper<SysAttachments>()
+                        .eq(SysAttachments::getModules, "artwork")
+                        .in(SysAttachments::getRecordid, uuids));
+
+        Map<String, List<SysAttachments>> map = new HashMap<>();
+        attachs.stream().forEach(v->{
+            List<SysAttachments> sysAttachments = map.get(v.getRecordid());
+            if(sysAttachments ==  null){
+                sysAttachments = new ArrayList<>();
+                map.put(v.getRecordid(), sysAttachments);
+            }
+            sysAttachments.add(v);
+        });
+        List<ArtArtworksDto> artArtworksDtos = BeanUtil.copyToList(list, ArtArtworksDto.class);
+        artArtworksDtos.stream().forEach(v->{
+            List<SysAttachments> sysAttachments = map.get(v.getArtworkUuid());
+            Set<Integer> categorys = new HashSet<>();
+            if(CollUtil.isNotEmpty(sysAttachments)){
+                for (SysAttachments sysAttachment : sysAttachments) {
+                    categorys.add(sysAttachment.getCategory());
+                }
+            }
+            if(categorys.size() == 0){
+                v.setDim(0);
+            }else if(categorys.size() == 2){
+                v.setDim(3);
+            }else{
+                if(categorys.contains(6)){
+                    v.setDim(2);
+                }else{
+                    v.setDim(1);
+                }
+            }
+        });
+        if(request.getDim() == 3){
+            return R.ok(artArtworksDtos);
+        }
+
+        return R.ok(artArtworksDtos.stream().filter(v->v.getDim().equals(request.getDim())).collect(Collectors.toList()));
+    }
+
+    @ApiOperation("获取分类列表")
+    @GetMapping("listCategory")
+    public R<List<String>> listCategory(){
+        return R.ok(artArtworksService.listCategory());
+    }
+
+    @ApiOperation("根据id获取")
+    @GetMapping("{id}")
+    public R<ArtArtworksDto> getById(@PathVariable Long id){
+        return R.ok(artArtworksService.getArtArtworkById(id));
+    }
+
+
+}
+

+ 21 - 0
src/main/java/com/project/hyb/biz/controller/ArtAttachmentsController.java

@@ -0,0 +1,21 @@
+package com.project.hyb.biz.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@RestController
+@RequestMapping("/pms/artAttachments")
+public class ArtAttachmentsController {
+
+}
+

+ 52 - 0
src/main/java/com/project/hyb/biz/controller/CollCollectionCluesController.java

@@ -0,0 +1,52 @@
+package com.project.hyb.biz.controller;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.UUID;
+import com.project.hyb.biz.domain.entity.CollCollectionClues;
+import com.project.hyb.biz.domain.request.AddCollCollectionCluesRequest;
+import com.project.hyb.biz.service.CollCollectionCluesService;
+import com.project.hyb.common.response.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * <p>
+ * 征集线索管理表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Api(tags = "文物征集")
+@RestController
+@RequestMapping("/hyb/collCollectionClues")
+public class CollCollectionCluesController {
+
+    @Autowired
+    private CollCollectionCluesService collCollectionCluesService;
+
+
+    @ApiOperation("新增")
+    @PostMapping("add")
+    public R<Void> addCollCollectionClues(@RequestParam("files") MultipartFile[] files, AddCollCollectionCluesRequest request) throws IOException {
+        collCollectionCluesService.addCollCollectionClues(files, request);
+        return R.ok();
+    }
+
+
+}
+

+ 128 - 0
src/main/java/com/project/hyb/biz/controller/NewsPublishController.java

@@ -0,0 +1,128 @@
+package com.project.hyb.biz.controller;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.project.hyb.biz.domain.dto.NewsPublishDto;
+import com.project.hyb.biz.domain.entity.ArtAttachments;
+import com.project.hyb.biz.domain.entity.NewsPublish;
+import com.project.hyb.biz.domain.request.NewsPublicPageRequest;
+import com.project.hyb.biz.service.ArtAttachmentsService;
+import com.project.hyb.biz.service.NewsPublishService;
+import com.project.hyb.common.exception.BizException;
+import com.project.hyb.common.response.BizResponseCode;
+import com.project.hyb.common.response.PageInfo;
+import com.project.hyb.common.response.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.websocket.server.PathParam;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 资讯发布表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Api(tags = "公布内容")
+@RestController
+@RequestMapping("/hyb/newsPublish")
+public class NewsPublishController {
+
+    @Autowired
+    private NewsPublishService newsPublishService;
+    @Autowired
+    private ArtAttachmentsService artAttachmentsService;
+
+    @ApiOperation("分页查询")
+    @GetMapping("page")
+    public R<PageInfo<NewsPublishDto>> page(NewsPublicPageRequest request){
+        LambdaQueryWrapper<NewsPublish> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.orderByDesc(NewsPublish::getId);
+        if(StrUtil.isNotEmpty(request.getSearchText())){
+            queryWrapper.like(NewsPublish::getTitle, request.getSearchText());
+        }
+        IPage<NewsPublishDto> convert = newsPublishService.page(new Page<>(request.getPageNo(), request.getPageSize()), queryWrapper).convert(v -> BeanUtil.toBean(v, NewsPublishDto.class));
+        //查询封面图
+        if(CollUtil.isNotEmpty(convert.getRecords())){
+            Set<Long> ids = convert.getRecords().stream().map(v -> v.getId()).collect(Collectors.toSet());
+            List<ArtAttachments> artAttachmentsList = artAttachmentsService.list(new LambdaQueryWrapper<ArtAttachments>()
+                    .eq(ArtAttachments::getModules, "news_publish")
+                    .in(ArtAttachments::getArtworkid, ids).orderByDesc(com.project.hyb.biz.domain.entity.ArtAttachments::getId));
+            if(CollUtil.isNotEmpty(artAttachmentsList)){
+                newPublic : for (NewsPublishDto record : convert.getRecords()) {
+                    artAttachment: for (ArtAttachments artAttachments : artAttachmentsList) {
+                            if(String.valueOf(record.getId()).equals(artAttachments.getArtworkid())){
+                                record.setThumbnail(artAttachments.getServerpath() + artAttachments.getServername());
+                                continue newPublic;
+                            }
+                    }
+                }
+            }
+
+        }
+
+        return R.ok(PageInfo.convert(convert));
+    }
+
+    @ApiOperation("根据id获取")
+    @GetMapping("{id}")
+    public R<NewsPublishDto> getNewsPublicById(@PathVariable Long id){
+        NewsPublish newsPublish = newsPublishService.getById(id);
+        if(Objects.isNull(newsPublish)){
+            throw new BizException(BizResponseCode.ERR_20001);
+        }
+        NewsPublishDto bean = BeanUtil.toBean(newsPublish, NewsPublishDto.class);
+        //查询封面图
+        List<ArtAttachments> artAttachmentsList = artAttachmentsService.list(new LambdaQueryWrapper<ArtAttachments>()
+                .eq(ArtAttachments::getModules, "news_publish")
+                .eq(ArtAttachments::getArtworkid, String.valueOf(bean.getId())).orderByDesc(ArtAttachments::getId));
+        if(CollUtil.isNotEmpty(artAttachmentsList)){
+            ArtAttachments artAttachments = artAttachmentsList.get(0);
+            String thumbnail = artAttachments.getServerpath() + artAttachments.getServername();
+            bean.setThumbnail(thumbnail);
+        }
+
+        return R.ok(bean);
+    }
+
+
+
+    @GetMapping("aaa")
+    public R<NewsPublishDto> aaa(){
+
+        NewsPublish newsPublish = newsPublishService.getById(31);
+        String title = newsPublish.getTitle();
+        for (int i = 0; i < 30; i++){
+            newsPublish.setId(null);
+            newsPublish.setTitle(title + (i + 1));
+            newsPublishService.save(newsPublish);
+        }
+
+        return R.ok();
+    }
+
+
+
+
+
+
+
+}
+

+ 21 - 0
src/main/java/com/project/hyb/biz/controller/SysAttachmentsController.java

@@ -0,0 +1,21 @@
+package com.project.hyb.biz.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@RestController
+@RequestMapping("/pms/sysAttachments")
+public class SysAttachmentsController {
+
+}
+

+ 49 - 0
src/main/java/com/project/hyb/biz/controller/h5/AppAntiqueController.java

@@ -0,0 +1,49 @@
+package com.project.hyb.biz.controller.h5;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "app-文物")
+@RestController
+@RequestMapping("/app/antique")
+public class AppAntiqueController {
+
+//    @Autowired
+//    private AntiqueService antiqueService;
+//
+//    @ApiOperation("保存")
+//    @PostMapping("add")
+//    public R<Long> add(@RequestBody @Valid AddAntiqueRequest request){
+//        return R.ok(antiqueService.add(request));
+//    }
+//
+//    @ApiOperation("根据id修改")
+//    @PatchMapping("{id}")
+//    public R<Void> update(@PathVariable Long id, @RequestBody @Valid UpdateAntiqueRequest request){
+//        antiqueService.updateAntiqueById(id,request);
+//        return R.ok();
+//    }
+//
+//    @ApiOperation("根据id批量删除")
+//    @DeleteMapping("batchDelete")
+//    public R<Void> batchDelete(@RequestBody @Valid BatchDeleteRequest request){
+//        antiqueService.batchDelete(request);
+//        return R.ok();
+//    }
+//
+//    @ApiOperation("分页查询")
+//    @GetMapping("page")
+//    public R<PageInfo<AntiqueDto>> page(AntiquePageRequest request){
+//
+//        if(Objects.isNull(request.getUserId())){
+//            throw new BadRequestException("用户id不能为空");
+//        }
+//        if(Objects.isNull(request.getEnv())){
+//            throw new BadRequestException("用户来源不能为空");
+//        }
+//
+//        return R.ok(antiqueService.queryAntique(request));
+//    }
+
+}

+ 17 - 0
src/main/java/com/project/hyb/biz/convert/CreatePermissionRequestToPermission.java

@@ -0,0 +1,17 @@
+package com.project.hyb.biz.convert;
+
+import static com.project.hyb.common.mapstruct.MapstructConstant.DEFAULT_COMPONENT_MODEL;
+
+import com.project.hyb.biz.domain.entity.Permission;
+import com.project.hyb.biz.domain.request.CreatePermissionRequest;
+import cn.dhbin.mapstruct.helper.core.BeanConvertMapper;
+import org.mapstruct.Mapper;
+
+/**
+ * CreatePermissionRequestToPermission
+ */
+@Mapper(componentModel = DEFAULT_COMPONENT_MODEL)
+public interface CreatePermissionRequestToPermission
+    extends BeanConvertMapper<CreatePermissionRequest, Permission> {
+
+}

+ 807 - 0
src/main/java/com/project/hyb/biz/domain/dto/ArtArtworksDto.java

@@ -0,0 +1,807 @@
+package com.project.hyb.biz.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Data
+public class ArtArtworksDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 藏品UUID
+     */
+    private String artworkUuid;
+
+    /**
+     * RFID编号
+     */
+    private String no;
+
+    /**
+     * 总登记号
+     */
+    private String registrationno;
+
+    /**
+     * 创建日期
+     */
+    private Date createdate;
+
+    /**
+     * 创建人
+     */
+    private String creater;
+
+    /**
+     * 编辑日期
+     */
+    private Date editdate;
+
+    /**
+     * 编辑人
+     */
+    private String editor;
+
+    /**
+     * 假删标识
+     */
+    private Integer recordstatus;
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty("名称")
+    private String name;
+
+    /**
+     * 作者编号
+     */
+    private String authorno;
+
+    /**
+     * 作者
+     */
+    @ApiModelProperty("作者")
+    private String author;
+
+    /**
+     * 年代
+     */
+    private String age;
+
+    /**
+     * 年代类型
+     */
+    private String agetype;
+
+    /**
+     * 完残程度
+     */
+    private String complete;
+
+    /**
+     * 尺寸
+     */
+    private String size;
+
+    /**
+     * 尺寸单位
+     */
+    private String sizeunit;
+
+    /**
+     * 实际数量
+     */
+    private BigDecimal actualquantity;
+
+    /**
+     * 数量单位
+     */
+    private String quantityunit;
+
+    /**
+     * 来源
+     */
+    private String sourceno;
+
+    /**
+     * 来源
+     */
+    private String source;
+
+    /**
+     * 收藏单位
+     */
+    private String collecompany;
+
+    /**
+     * 藏品类别
+     */
+    private String categoryno;
+
+    /**
+     * 分类
+     */
+    @ApiModelProperty("类别")
+    private String category;
+
+    /**
+     * 所在库房
+     */
+    private String warehouse;
+
+    /**
+     * 所在库位
+     */
+    private String location;
+
+    /**
+     * 所属库房
+     */
+    private String belongwarehouse;
+
+    /**
+     * 所属库位
+     */
+    private String belonglocation;
+
+    /**
+     * 题材
+     */
+    private String genre;
+
+    /**
+     * 编号
+     */
+    private String genreno;
+
+    /**
+     * 材质编号
+     */
+    private String textureno;
+
+    /**
+     * 材质
+     */
+    @ApiModelProperty("材质")
+    private String texture;
+
+    /**
+     * 是否锁定
+     */
+    private String islock;
+
+    /**
+     * 是否上报
+     */
+    private String isreport;
+
+    /**
+     * 作品状态
+     */
+    private String state1;
+
+    /**
+     * 状态2(备用字段)
+     */
+    private String state2;
+
+    /**
+     * 状态3(备用字段)
+     */
+    private String state3;
+
+    /**
+     * 缩略图
+     */
+    @ApiModelProperty("缩略图")
+    private String thumbnail;
+
+    /**
+     * 所属类型
+     */
+    private String belongtype;
+
+    /**
+     * 件数
+     */
+    private Integer piececount;
+
+    /**
+     * 副数
+     */
+    private Integer paircount;
+
+    /**
+     * 复核尺寸
+     */
+    private String checksize;
+
+    /**
+     * 题名
+     */
+    private String title;
+
+    /**
+     * 款识
+     */
+    private String kuanzhi;
+
+    /**
+     * 题跋
+     */
+    private String postscript;
+
+    /**
+     * 铭文
+     */
+    private String inscription;
+
+    /**
+     * 题签
+     */
+    private String sign;
+
+    /**
+     * 印鉴
+     */
+    private String seal;
+
+    /**
+     * 裱式
+     */
+    private String frame;
+
+    /**
+     * 完成程度
+     */
+    private String completion;
+
+    /**
+     * 备注
+     */
+    private String memo;
+
+    /**
+     * 质量
+     */
+    private String quality;
+
+    /**
+     * 入藏日期
+     */
+    private String entrydate;
+
+    /**
+     * 审核状态:0未审核;1审核中;2已审核;3退回
+     */
+    private Integer auditstate;
+
+    /**
+     * 审核日期
+     */
+    private Date auditdate;
+
+    /**
+     * 审核人
+     */
+    private String auditor;
+
+    /**
+     * 审核说明
+     */
+    private String auditcontent;
+
+    /**
+     * 入库类别
+     */
+    private String stkincategory;
+
+    /**
+     * 出库类别
+     */
+    private String stkoutcategory;
+
+    /**
+     * 价格
+     */
+    private Float price;
+
+    /**
+     * 来源
+     */
+    private String sourcememo;
+
+    /**
+     * 签约价格
+     */
+    private Float contractprice;
+
+    /**
+     * 实际成交价
+     */
+    private Float saleprice;
+
+    /**
+     * 拍卖行
+     */
+    private Integer auctionhouse;
+
+    /**
+     * 购买时间
+     */
+    private Date timebuying;
+
+    /**
+     * 国家
+     */
+    private String country;
+
+    /**
+     * 原始编号
+     */
+    private String originalno;
+
+    /**
+     * 出土登记号
+     */
+    private String digno;
+
+    /**
+     * 原名
+     */
+    private String originalname;
+
+    /**
+     * 年代1
+     */
+    @ApiModelProperty("年代1")
+    private String agetype1;
+
+    /**
+     * 年代2
+     */
+    @ApiModelProperty("年代2")
+    private String agetype2;
+
+    /**
+     * 年代3
+     */
+    @ApiModelProperty("年代3")
+    private String agetype3;
+
+    /**
+     * 年代4
+     */
+    @ApiModelProperty("年代4")
+    private String agetype4;
+
+    /**
+     * 出土时间
+     */
+    private Date digdate;
+
+    /**
+     * 质地类别1
+     */
+    private String texturetype1;
+
+    /**
+     * 质地类别2
+     */
+    private String texturetype2;
+
+    /**
+     * 考古时代
+     */
+    private String era;
+
+    /**
+     * 文物级别
+     */
+    @ApiModelProperty("级别")
+    private String grade;
+
+    /**
+     * 口径
+     */
+    private String caliber;
+
+    /**
+     * 厚度
+     */
+    private String thickness;
+
+    /**
+     * 保护优先等级
+     */
+    private String savestate;
+
+    /**
+     * 出土遗址
+     */
+    private String ruins;
+
+    /**
+     * 录入位置
+     */
+    private String grid;
+
+    /**
+     * 重量
+     */
+    private String weight;
+
+    /**
+     * 最大长度
+     */
+    private String maxlongth;
+
+    /**
+     * 最小长度
+     */
+    private String minlongth;
+
+    /**
+     * 最大宽度
+     */
+    private String maxwidth;
+
+    /**
+     * 最小宽度
+     */
+    private String minwidth;
+
+    /**
+     * 内径
+     */
+    private String indiameter;
+
+    /**
+     * 外径
+     */
+    private String outdiameter;
+
+    /**
+     * 高度
+     */
+    private String height;
+
+    /**
+     * 直径
+     */
+    private String diameter;
+
+    /**
+     * 底径
+     */
+    private String bottomdiameter;
+
+    /**
+     * 器物说明
+     */
+    @ApiModelProperty("藏品介绍")
+    private String intro;
+
+    /**
+     * 分类号后面的流水号
+     */
+    private Integer categoryserial;
+
+    /**
+     * 分类号
+     */
+    private String categorynumber;
+
+    /**
+     * 入馆登记号
+     */
+    private String entrylibraryno;
+
+    /**
+     * 入馆日期
+     */
+    private String entrylibrarydate;
+
+    /**
+     * 年代研究信息
+     */
+    private String ageresearch;
+
+    /**
+     * 地域类型
+     */
+    private String regiontype;
+
+    /**
+     * 地域
+     */
+    private String region;
+
+    /**
+     * 人文类型
+     */
+    private String humanitytype;
+
+    /**
+     * 人文
+     */
+    private String humanity;
+
+    /**
+     * 人物传略
+     */
+    private String biography;
+
+    /**
+     * 功能类别
+     */
+    private String functioncategory;
+
+    /**
+     * 传统数量
+     */
+    private BigDecimal traditionalquantity;
+
+    /**
+     * 传统数量单位
+     */
+    private String traditionalunit;
+
+    /**
+     * 容积
+     */
+    private String volume;
+
+    /**
+     * 形态特征
+     */
+    private String shapefeature;
+
+    /**
+     * 工艺技法
+     */
+    private String processtechnology;
+
+    /**
+     * 颜色
+     */
+    private String color;
+
+    /**
+     * 光泽
+     */
+    private String sheen;
+
+    /**
+     * 文字种类
+     */
+    private String characterstype;
+
+    /**
+     * 字体
+     */
+    private String font;
+
+    /**
+     * 字迹颜色
+     */
+    private String handwritingcolor;
+
+    /**
+     * 题识情况
+     */
+    private String labelsituation;
+
+    /**
+     * 附属物情况
+     */
+    private String appurtenancesituation;
+
+    /**
+     * 来源号
+     */
+    private String sourcenumber;
+
+    /**
+     * 来源单位或个人
+     */
+    private String sourcetype;
+
+    /**
+     * 搜集经过
+     */
+    private String getprocess;
+
+    /**
+     * 流传经历
+     */
+    private String spreadexperience;
+
+    /**
+     * 出土情况
+     */
+    private String digsituation;
+
+    /**
+     * 鉴定情况
+     */
+    private String dentifysituation;
+
+    /**
+     * 当前状况
+     */
+    private String currentsituation;
+
+    /**
+     * 保存条件
+     */
+    private String savacondition;
+
+    /**
+     * 损坏原因
+     */
+    private String damagecause;
+
+    /**
+     * 历次保护记录
+     */
+    private String protectrecord;
+
+    /**
+     * 主要利用情况记录
+     */
+    private String majoruserecord;
+
+    /**
+     * 展览环境
+     */
+    private String exhibitionenvironment;
+
+    /**
+     * 陈列尺寸
+     */
+    private String displaysize;
+
+    /**
+     * 展览工具
+     */
+    private String exhibitiontool;
+
+    /**
+     * 展览状态
+     */
+    private String exhibitionstatus;
+
+    /**
+     * 休眠期
+     */
+    private String dormanttime;
+
+    /**
+     * 独特标记
+     */
+    private String uniquemarker;
+
+    /**
+     * 你采取的保护措施
+     */
+    private String youprotectway;
+
+    /**
+     * 质量单位
+     */
+    private String qualityunit;
+
+    /**
+     * 观察检查记录
+     */
+    private String inspectrecord;
+
+    /**
+     * 保护修复记录
+     */
+    private String repairrecord;
+
+    /**
+     * 鉴定变更记录
+     */
+    private String identifyrecord;
+
+    /**
+     * 研究利用情况
+     */
+    private String userecord;
+
+    /**
+     * 事故情况记录
+     */
+    private String accidentrecord;
+
+    /**
+     * 藏品注销记录
+     */
+    private String cancelrecord;
+
+    /**
+     * 文献及研究论著目录
+     */
+    private String literaturecatalog;
+
+    /**
+     * 其他声像资料目录
+     */
+    private String otherimagecatalog;
+
+    /**
+     * 相关研究情况备注
+     */
+    private String relationresearchmemo;
+
+    /**
+     * 动态跟踪记录备注
+     */
+    private String dynamictracingrecord;
+
+    /**
+     * 卷内目录
+     */
+    private String filelist;
+
+    /**
+     * 提取退还记录
+     */
+    private String carryreturnrecord;
+
+    /**
+     * 保护优先等级
+     */
+    private String protectlevel;
+
+    /**
+     * 浏览次数
+     */
+    private Integer visitCount;
+
+    /**
+     * 点赞量
+     */
+    private Integer likeCount;
+
+    /**
+     * 钤印
+     */
+    private String officialSeal;
+
+    @ApiModelProperty("模型文件列表")
+    private List<String> modelFiles;
+
+    @ApiModelProperty("图片文件列表")
+    private List<String> imgFiles;
+
+    /**
+     * 1-二维,2-三维,3-全部
+     */
+    private Integer dim;
+
+
+}

+ 115 - 0
src/main/java/com/project/hyb/biz/domain/dto/NewsPublishDto.java

@@ -0,0 +1,115 @@
+package com.project.hyb.biz.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 资讯发布表
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Data
+public class NewsPublishDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 资讯标题
+     */
+    @ApiModelProperty("标题")
+    private String title;
+
+    /**
+     * 内容类型(1=公众号链接,2=富文本)
+     */
+    @ApiModelProperty("内容类型(1=公众号链接,2=富文本)")
+    private String contentType;
+
+    /**
+     * 内容(链接或HTML)
+     */
+    @ApiModelProperty("内容(链接或HTML)")
+    private String content;
+
+    /**
+     * 微信号发布时间
+     */
+    @ApiModelProperty("微信号发布时间")
+    private Date wechatPublishTime;
+
+    /**
+     * 平台发布时间
+     */
+    @ApiModelProperty("平台发布时间")
+    private Date platformPublishTime;
+
+    /**
+     * 创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 更新时间
+     */
+    private Date gmtModified;
+
+    /**
+     * 逻辑删除
+     */
+    private Boolean isDeleted;
+
+    /**
+     * 创建人uuid
+     */
+    private String creator;
+
+    /**
+     * 创建人
+     */
+    private String creatorName;
+
+    /**
+     * 更新人uuid
+     */
+    private String editor;
+
+    /**
+     * 更新人
+     */
+    private String editorName;
+
+    /**
+     * 删除人
+     */
+    private String deletedBy;
+
+    /**
+     * 删除时间
+     */
+    private Date gmtDeleted;
+
+    @ApiModelProperty("摘要")
+    private String description;
+
+    @ApiModelProperty("缩略图")
+    private String thumbnail;
+
+
+}

+ 45 - 0
src/main/java/com/project/hyb/biz/domain/dto/PermissionDto.java

@@ -0,0 +1,45 @@
+package com.project.hyb.biz.domain.dto;
+
+import lombok.Data;
+
+/**
+ * 权限
+ *
+ * @author dhb
+ */
+@Data
+public class PermissionDto {
+
+    private Long id;
+
+    private String name;
+
+    private String code;
+
+    private String type;
+
+    private Long parentId;
+
+    private String path;
+
+    private String redirect;
+
+    private String icon;
+
+    private String component;
+
+    private String layout;
+
+    private Boolean keepAlive;
+
+    private String method;
+
+    private String description;
+
+    private Boolean show;
+
+    private Boolean enable;
+
+    private Integer order;
+
+}

+ 791 - 0
src/main/java/com/project/hyb/biz/domain/entity/ArtArtworks.java

@@ -0,0 +1,791 @@
+package com.project.hyb.biz.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Getter
+@Setter
+@TableName("art_artworks")
+public class ArtArtworks implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 藏品UUID
+     */
+    private String artworkUuid;
+
+    /**
+     * RFID编号
+     */
+    private String no;
+
+    /**
+     * 总登记号
+     */
+    private String registrationno;
+
+    /**
+     * 创建日期
+     */
+    private Date createdate;
+
+    /**
+     * 创建人
+     */
+    private String creater;
+
+    /**
+     * 编辑日期
+     */
+    private Date editdate;
+
+    /**
+     * 编辑人
+     */
+    private String editor;
+
+    /**
+     * 假删标识
+     */
+    @TableLogic
+    private Integer recordstatus;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 作者编号
+     */
+    private String authorno;
+
+    /**
+     * 作者
+     */
+    private String author;
+
+    /**
+     * 年代
+     */
+    private String age;
+
+    /**
+     * 年代类型
+     */
+    private String agetype;
+
+    /**
+     * 完残程度
+     */
+    private String complete;
+
+    /**
+     * 尺寸
+     */
+    private String size;
+
+    /**
+     * 尺寸单位
+     */
+    private String sizeunit;
+
+    /**
+     * 实际数量
+     */
+    private BigDecimal actualquantity;
+
+    /**
+     * 数量单位
+     */
+    private String quantityunit;
+
+    /**
+     * 来源
+     */
+    private String sourceno;
+
+    /**
+     * 来源
+     */
+    private String source;
+
+    /**
+     * 收藏单位
+     */
+    private String collecompany;
+
+    /**
+     * 藏品类别
+     */
+    private String categoryno;
+
+    /**
+     * 分类
+     */
+    private String category;
+
+    /**
+     * 所在库房
+     */
+    private String warehouse;
+
+    /**
+     * 所在库位
+     */
+    private String location;
+
+    /**
+     * 所属库房
+     */
+    private String belongwarehouse;
+
+    /**
+     * 所属库位
+     */
+    private String belonglocation;
+
+    /**
+     * 题材
+     */
+    private String genre;
+
+    /**
+     * 编号
+     */
+    private String genreno;
+
+    /**
+     * 材质编号
+     */
+    private String textureno;
+
+    /**
+     * 材质
+     */
+    private String texture;
+
+    /**
+     * 是否锁定
+     */
+    private String islock;
+
+    /**
+     * 是否上报
+     */
+    private String isreport;
+
+    /**
+     * 作品状态
+     */
+    private String state1;
+
+    /**
+     * 状态2(备用字段)
+     */
+    private String state2;
+
+    /**
+     * 状态3(备用字段)
+     */
+    private String state3;
+
+    /**
+     * 缩略图
+     */
+    private String thumbnail;
+
+    /**
+     * 所属类型
+     */
+    private String belongtype;
+
+    /**
+     * 件数
+     */
+    private Integer piececount;
+
+    /**
+     * 副数
+     */
+    private Integer paircount;
+
+    /**
+     * 复核尺寸
+     */
+    private String checksize;
+
+    /**
+     * 题名
+     */
+    private String title;
+
+    /**
+     * 款识
+     */
+    private String kuanzhi;
+
+    /**
+     * 题跋
+     */
+    private String postscript;
+
+    /**
+     * 铭文
+     */
+    private String inscription;
+
+    /**
+     * 题签
+     */
+    private String sign;
+
+    /**
+     * 印鉴
+     */
+    private String seal;
+
+    /**
+     * 裱式
+     */
+    private String frame;
+
+    /**
+     * 完成程度
+     */
+    private String completion;
+
+    /**
+     * 备注
+     */
+    private String memo;
+
+    /**
+     * 质量
+     */
+    private String quality;
+
+    /**
+     * 入藏日期
+     */
+    private String entrydate;
+
+    /**
+     * 审核状态:0未审核;1审核中;2已审核;3退回
+     */
+    private Integer auditstate;
+
+    /**
+     * 审核日期
+     */
+    private Date auditdate;
+
+    /**
+     * 审核人
+     */
+    private String auditor;
+
+    /**
+     * 审核说明
+     */
+    private String auditcontent;
+
+    /**
+     * 入库类别
+     */
+    private String stkincategory;
+
+    /**
+     * 出库类别
+     */
+    private String stkoutcategory;
+
+    /**
+     * 价格
+     */
+    private Float price;
+
+    /**
+     * 来源
+     */
+    private String sourcememo;
+
+    /**
+     * 签约价格
+     */
+    private Float contractprice;
+
+    /**
+     * 实际成交价
+     */
+    private Float saleprice;
+
+    /**
+     * 拍卖行
+     */
+    private Integer auctionhouse;
+
+    /**
+     * 购买时间
+     */
+    private Date timebuying;
+
+    /**
+     * 国家
+     */
+    private String country;
+
+    /**
+     * 原始编号
+     */
+    private String originalno;
+
+    /**
+     * 出土登记号
+     */
+    private String digno;
+
+    /**
+     * 原名
+     */
+    private String originalname;
+
+    /**
+     * 年代1
+     */
+    private String agetype1;
+
+    /**
+     * 年代2
+     */
+    private String agetype2;
+
+    /**
+     * 年代3
+     */
+    private String agetype3;
+
+    /**
+     * 年代4
+     */
+    private String agetype4;
+
+    /**
+     * 出土时间
+     */
+    private Date digdate;
+
+    /**
+     * 质地类别1
+     */
+    private String texturetype1;
+
+    /**
+     * 质地类别2
+     */
+    private String texturetype2;
+
+    /**
+     * 考古时代
+     */
+    private String era;
+
+    /**
+     * 文物级别
+     */
+    private String grade;
+
+    /**
+     * 口径
+     */
+    private String caliber;
+
+    /**
+     * 厚度
+     */
+    private String thickness;
+
+    /**
+     * 保护优先等级
+     */
+    private String savestate;
+
+    /**
+     * 出土遗址
+     */
+    private String ruins;
+
+    /**
+     * 录入位置
+     */
+    private String grid;
+
+    /**
+     * 重量
+     */
+    private String weight;
+
+    /**
+     * 最大长度
+     */
+    private String maxlongth;
+
+    /**
+     * 最小长度
+     */
+    private String minlongth;
+
+    /**
+     * 最大宽度
+     */
+    private String maxwidth;
+
+    /**
+     * 最小宽度
+     */
+    private String minwidth;
+
+    /**
+     * 内径
+     */
+    private String indiameter;
+
+    /**
+     * 外径
+     */
+    private String outdiameter;
+
+    /**
+     * 高度
+     */
+    private String height;
+
+    /**
+     * 直径
+     */
+    private String diameter;
+
+    /**
+     * 底径
+     */
+    private String bottomdiameter;
+
+    /**
+     * 器物说明
+     */
+    private String intro;
+
+    /**
+     * 分类号后面的流水号
+     */
+    private Integer categoryserial;
+
+    /**
+     * 分类号
+     */
+    private String categorynumber;
+
+    /**
+     * 入馆登记号
+     */
+    private String entrylibraryno;
+
+    /**
+     * 入馆日期
+     */
+    private String entrylibrarydate;
+
+    /**
+     * 年代研究信息
+     */
+    private String ageresearch;
+
+    /**
+     * 地域类型
+     */
+    private String regiontype;
+
+    /**
+     * 地域
+     */
+    private String region;
+
+    /**
+     * 人文类型
+     */
+    private String humanitytype;
+
+    /**
+     * 人文
+     */
+    private String humanity;
+
+    /**
+     * 人物传略
+     */
+    private String biography;
+
+    /**
+     * 功能类别
+     */
+    private String functioncategory;
+
+    /**
+     * 传统数量
+     */
+    private BigDecimal traditionalquantity;
+
+    /**
+     * 传统数量单位
+     */
+    private String traditionalunit;
+
+    /**
+     * 容积
+     */
+    private String volume;
+
+    /**
+     * 形态特征
+     */
+    private String shapefeature;
+
+    /**
+     * 工艺技法
+     */
+    private String processtechnology;
+
+    /**
+     * 颜色
+     */
+    private String color;
+
+    /**
+     * 光泽
+     */
+    private String sheen;
+
+    /**
+     * 文字种类
+     */
+    private String characterstype;
+
+    /**
+     * 字体
+     */
+    private String font;
+
+    /**
+     * 字迹颜色
+     */
+    private String handwritingcolor;
+
+    /**
+     * 题识情况
+     */
+    private String labelsituation;
+
+    /**
+     * 附属物情况
+     */
+    private String appurtenancesituation;
+
+    /**
+     * 来源号
+     */
+    private String sourcenumber;
+
+    /**
+     * 来源单位或个人
+     */
+    private String sourcetype;
+
+    /**
+     * 搜集经过
+     */
+    private String getprocess;
+
+    /**
+     * 流传经历
+     */
+    private String spreadexperience;
+
+    /**
+     * 出土情况
+     */
+    private String digsituation;
+
+    /**
+     * 鉴定情况
+     */
+    private String dentifysituation;
+
+    /**
+     * 当前状况
+     */
+    private String currentsituation;
+
+    /**
+     * 保存条件
+     */
+    private String savacondition;
+
+    /**
+     * 损坏原因
+     */
+    private String damagecause;
+
+    /**
+     * 历次保护记录
+     */
+    private String protectrecord;
+
+    /**
+     * 主要利用情况记录
+     */
+    private String majoruserecord;
+
+    /**
+     * 展览环境
+     */
+    private String exhibitionenvironment;
+
+    /**
+     * 陈列尺寸
+     */
+    private String displaysize;
+
+    /**
+     * 展览工具
+     */
+    private String exhibitiontool;
+
+    /**
+     * 展览状态
+     */
+    private String exhibitionstatus;
+
+    /**
+     * 休眠期
+     */
+    private String dormanttime;
+
+    /**
+     * 独特标记
+     */
+    private String uniquemarker;
+
+    /**
+     * 你采取的保护措施
+     */
+    private String youprotectway;
+
+    /**
+     * 质量单位
+     */
+    private String qualityunit;
+
+    /**
+     * 观察检查记录
+     */
+    private String inspectrecord;
+
+    /**
+     * 保护修复记录
+     */
+    private String repairrecord;
+
+    /**
+     * 鉴定变更记录
+     */
+    private String identifyrecord;
+
+    /**
+     * 研究利用情况
+     */
+    private String userecord;
+
+    /**
+     * 事故情况记录
+     */
+    private String accidentrecord;
+
+    /**
+     * 藏品注销记录
+     */
+    private String cancelrecord;
+
+    /**
+     * 文献及研究论著目录
+     */
+    private String literaturecatalog;
+
+    /**
+     * 其他声像资料目录
+     */
+    private String otherimagecatalog;
+
+    /**
+     * 相关研究情况备注
+     */
+    private String relationresearchmemo;
+
+    /**
+     * 动态跟踪记录备注
+     */
+    private String dynamictracingrecord;
+
+    /**
+     * 卷内目录
+     */
+    private String filelist;
+
+    /**
+     * 提取退还记录
+     */
+    private String carryreturnrecord;
+
+    /**
+     * 保护优先等级
+     */
+    private String protectlevel;
+
+    /**
+     * 浏览次数
+     */
+    private Integer visitCount;
+
+    /**
+     * 点赞量
+     */
+    private Integer likeCount;
+
+    /**
+     * 钤印
+     */
+    private String officialSeal;
+
+
+}

+ 263 - 0
src/main/java/com/project/hyb/biz/domain/entity/ArtAttachments.java

@@ -0,0 +1,263 @@
+package com.project.hyb.biz.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Getter
+@Setter
+@TableName("art_attachments")
+public class ArtAttachments implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer recordstatus;
+
+    private String artworkid;
+
+    private Date createdate;
+
+    private Integer creater;
+
+    private String position;
+
+    private String category;
+
+    private String oldcategory;
+
+    private String serverpath;
+
+    private String originname;
+
+    private String servername;
+
+    private String extension;
+
+    private Float sortno;
+
+    private Integer isdefault;
+
+    private String memo;
+
+    private Float size;
+
+    /**
+     * 附件模块
+     */
+    private String modules;
+
+    private Integer original;
+
+    private Date editdate;
+
+    /**
+     * 拍摄日期
+     */
+    private String shootDate;
+
+    /**
+     * 程序名称
+     */
+    private String programName;
+
+    /**
+     * 分辨率
+     */
+    private String resolution;
+
+    /**
+     * 宽度
+     */
+    private String width;
+
+    /**
+     * 高度
+     */
+    private String height;
+
+    /**
+     * 水平分辨率
+     */
+    private String levelResolution;
+
+    /**
+     * 垂直分辨率
+     */
+    private String verticalResolution;
+
+    /**
+     * 位深度
+     */
+    private String depth;
+
+    /**
+     * 分辨率单位
+     */
+    private String resolutionUnit;
+
+    /**
+     * 颜色表示
+     */
+    private String colorRep;
+
+    /**
+     * 压缩的位/像素
+     */
+    private String compressedBits;
+
+    /**
+     * 照相机制造商
+     */
+    private String cameraCreater;
+
+    /**
+     * 照相机型号
+     */
+    private String cameraModel;
+
+    /**
+     * 光圈值
+     */
+    private String aperture;
+
+    /**
+     * 曝光时间
+     */
+    private String exposureTime;
+
+    /**
+     * ISO速度
+     */
+    private String isoSpeed;
+
+    /**
+     * 曝光补偿
+     */
+    private String exposureCom;
+
+    /**
+     * 焦距
+     */
+    private String focalLength;
+
+    /**
+     * 最大光圈
+     */
+    private String maxAperture;
+
+    /**
+     * 测光模式
+     */
+    private String testModel;
+
+    /**
+     * 闪光灯模式
+     */
+    private String flashModel;
+
+    /**
+     * 清晰度
+     */
+    private String clarity;
+
+    /**
+     * 白平衡
+     */
+    private String whiteBalance;
+
+    /**
+     * 时长
+     */
+    private String duration;
+
+    /**
+     * 帧宽度
+     */
+    private String frameWidth;
+
+    /**
+     * 帧高度
+     */
+    private String frameHeight;
+
+    /**
+     * 帧速率
+     */
+    private String frameRate;
+
+    /**
+     * 频道
+     */
+    private String channelNumber;
+
+    /**
+     * 音频采样速率
+     */
+    private String sampleRate;
+
+    private String longitude;
+
+    private String latitude;
+
+    /**
+     * 压缩后的扩展名
+     */
+    private String zoomextension;
+
+    /**
+     * 用途
+     */
+    private String purpose;
+
+    /**
+     * 设置
+     */
+    private String deploy;
+
+    /**
+     * 藏品附件uuid
+     */
+    private String attachmentUuid;
+
+    /**
+     * 藏品附件uuid
+     */
+    private String attachmentuuid;
+
+    /**
+     * 藏品名称
+     */
+    private String artworkname;
+
+    /**
+     * 总登记号
+     */
+    private String registrationno;
+
+    /**
+     * 藏品分类
+     */
+    private String artworkcategory;
+
+    /**
+     * 分类账号
+     */
+    private String categorynumber;
+
+
+}

+ 123 - 0
src/main/java/com/project/hyb/biz/domain/entity/CollCollectionClues.java

@@ -0,0 +1,123 @@
+package com.project.hyb.biz.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 征集线索管理表
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Getter
+@Setter
+@TableName("coll_collection_clues")
+public class CollCollectionClues implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 联系人姓名
+     */
+    private String name;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 省份
+     */
+    private String province;
+
+    /**
+     * 城市
+     */
+    private String city;
+
+    /**
+     * 区县
+     */
+    private String district;
+
+    /**
+     * 详细地址
+     */
+    private String addressDetail;
+
+    /**
+     * 文物概况描述
+     */
+    private String description;
+
+    /**
+     * 图片链接
+     */
+    private String imageUrl;
+
+    /**
+     * 文件链接
+     */
+    private String fileUrl;
+
+    /**
+     * 创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 更新时间
+     */
+    private Date gmtModified;
+
+    /**
+     * 逻辑删除
+     */
+    private Boolean isDeleted;
+
+    /**
+     * 创建人uuid
+     */
+    private String creator;
+
+    /**
+     * 创建人
+     */
+    private String creatorName;
+
+    /**
+     * 编辑人uuid
+     */
+    private String editor;
+
+    /**
+     * 编辑人
+     */
+    private String editorName;
+
+    /**
+     * 删除人
+     */
+    private String deletedBy;
+
+    /**
+     * 删除时间
+     */
+    private Date gmtDeleted;
+
+
+}

+ 107 - 0
src/main/java/com/project/hyb/biz/domain/entity/NewsPublish.java

@@ -0,0 +1,107 @@
+package com.project.hyb.biz.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 资讯发布表
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Getter
+@Setter
+@TableName("news_publish")
+public class NewsPublish implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 资讯标题
+     */
+    private String title;
+
+    /**
+     * 内容类型(1=公众号链接,2=富文本)
+     */
+    private String contentType;
+
+    /**
+     * 内容(链接或HTML)
+     */
+    private String content;
+
+    /**
+     * 微信号发布时间
+     */
+    private Date wechatPublishTime;
+
+    /**
+     * 平台发布时间
+     */
+    private Date platformPublishTime;
+
+    /**
+     * 创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 更新时间
+     */
+    private Date gmtModified;
+
+    /**
+     * 逻辑删除
+     */
+    @TableLogic(value = "0", delval = "1")
+    private Integer isDeleted;
+
+    /**
+     * 创建人uuid
+     */
+    private String creator;
+
+    /**
+     * 创建人
+     */
+    private String creatorName;
+
+    /**
+     * 更新人uuid
+     */
+    private String editor;
+
+    /**
+     * 更新人
+     */
+    private String editorName;
+
+    /**
+     * 删除人
+     */
+    private String deletedBy;
+
+    /**
+     * 删除时间
+     */
+    private Date gmtDeleted;
+
+    private String description;
+
+
+}

+ 54 - 0
src/main/java/com/project/hyb/biz/domain/entity/Permission.java

@@ -0,0 +1,54 @@
+package com.project.hyb.biz.domain.entity;
+
+import cn.dhbin.mapstruct.helper.core.Convert;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+/**
+ * 权限
+ *
+ * @author dhb
+ */
+@Data
+@TableName("tb_permission")
+public class Permission implements Convert {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private String name;
+
+    private String code;
+
+    private String type;
+
+    @TableField("parentId")
+    private Long parentId;
+
+    private String path;
+
+    private String redirect;
+
+    private String icon;
+
+    private String component;
+
+    private String layout;
+
+    @TableField("keepAlive")
+    private Boolean keepAlive;
+
+    private String method;
+
+    private String description;
+
+    @TableField("`show`")
+    private Boolean show;
+
+    @TableLogic(value = "1", delval = "0")
+    private Boolean enable;
+
+    @TableField("`order`")
+    private Integer order;
+
+}

+ 98 - 0
src/main/java/com/project/hyb/biz/domain/entity/SysAttachments.java

@@ -0,0 +1,98 @@
+package com.project.hyb.biz.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Getter
+@Setter
+@TableName("sys_attachments")
+public class SysAttachments implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Boolean recordstatus;
+
+    private String recordid;
+
+    private Date createdate;
+
+    private String creater;
+
+    /**
+     * 图片位置
+     */
+    private String position;
+
+    /**
+     * 类型:1,图片;6,3D
+     */
+    private Integer category;
+
+    /**
+     * 服务器图片路径
+     */
+    private String serverpath;
+
+    /**
+     * 图片名称
+     */
+    private String originname;
+
+    /**
+     * 图片名称,加密后的名称
+     */
+    private String servername;
+
+    /**
+     * 文件后缀
+     */
+    private String extension;
+
+    /**
+     * 图片序号
+     */
+    private Float sortno;
+
+    /**
+     * 封面
+     */
+    private Integer isdefault;
+
+    private String memo;
+
+    private Float size;
+
+    /**
+     * 附件模块
+     */
+    private String modules;
+
+    private Integer original;
+
+    /**
+     * 0:审核中;1:通过
+     */
+    private Integer stage;
+
+    private String uuid;
+
+    private Boolean isEnable;
+
+
+}

+ 71 - 0
src/main/java/com/project/hyb/biz/domain/request/AddCollCollectionCluesRequest.java

@@ -0,0 +1,71 @@
+package com.project.hyb.biz.domain.request;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 征集线索管理表
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Data
+public class AddCollCollectionCluesRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 联系人姓名
+     */
+    @ApiModelProperty("姓名")
+    private String name;
+
+    /**
+     * 联系电话
+     */
+    @ApiModelProperty("联系电话")
+    private String phone;
+
+    /**
+     * 省份
+     */
+    @ApiModelProperty("省份")
+    private String province;
+
+    /**
+     * 城市
+     */
+    @ApiModelProperty("城市")
+    private String city;
+
+    /**
+     * 区县
+     */
+    @ApiModelProperty("区县")
+    private String district;
+
+    /**
+     * 详细地址
+     */
+    @ApiModelProperty("详细地址")
+    private String addressDetail;
+
+    /**
+     * 文物概况描述
+     */
+    @ApiModelProperty("文物概况描述")
+    private String description;
+
+
+}

+ 42 - 0
src/main/java/com/project/hyb/biz/domain/request/ArtArtworksPageRequest.java

@@ -0,0 +1,42 @@
+package com.project.hyb.biz.domain.request;
+
+import com.project.hyb.common.request.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Data
+public class ArtArtworksPageRequest extends PageRequest {
+
+    @ApiModelProperty("级别")
+    private String grade;
+
+    @ApiModelProperty("分类")
+    private String category;
+
+    @ApiModelProperty("材质")
+    private String texture;
+
+    @ApiModelProperty("年代")
+    private String agetype;
+
+    @ApiModelProperty("关键词")
+    private String searchText;
+
+    @ApiModelProperty("维度(1-二维,2-三维,3-全部)")
+    private Integer dim;
+
+
+
+
+}

+ 49 - 0
src/main/java/com/project/hyb/biz/domain/request/CreatePermissionRequest.java

@@ -0,0 +1,49 @@
+package com.project.hyb.biz.domain.request;
+
+import cn.dhbin.mapstruct.helper.core.Convert;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 创建权限
+ *
+ * @author dhb
+ */
+@Data
+public class CreatePermissionRequest implements Convert {
+
+    @NotBlank
+    private String name;
+
+    @NotBlank
+    private String code;
+
+    @NotBlank
+    private String type;
+
+
+    private Long parentId;
+
+    private String path;
+
+    private String redirect;
+
+    private String icon;
+
+    private String component;
+
+    private String layout;
+
+    private Boolean keepalive;
+
+    private String method;
+
+    private String description;
+
+    private Boolean show;
+
+    private Boolean enable;
+
+    private Integer order;
+}

+ 21 - 0
src/main/java/com/project/hyb/biz/domain/request/NewsPublicPageRequest.java

@@ -0,0 +1,21 @@
+package com.project.hyb.biz.domain.request;
+
+import com.project.hyb.common.request.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Data
+public class NewsPublicPageRequest extends PageRequest {
+
+    @ApiModelProperty("关键词")
+    private String searchText;
+
+}

+ 81 - 0
src/main/java/com/project/hyb/biz/generate/AutoGenerate.java

@@ -0,0 +1,81 @@
+package com.project.hyb.biz.generate;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.OutputFile;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+public class AutoGenerate {
+
+
+    public static void main(String[] args) {
+
+        String path =System.getProperty("user.dir");
+
+        generate(path,"pms", getTables(new String[]{
+                "news_publish"
+        }));
+    }
+
+    public static List<String> getTables(String [] tableNames){
+        return new ArrayList<>(Arrays.asList(tableNames));
+    }
+
+
+    public static void  generate(String path,String moduleName,  List<String> tables){
+        FastAutoGenerator.create("jdbc:mysql://106.53.107.102:3306/artoffice_museum",
+            "root","mysql123!ROOT.")
+                .globalConfig(builder -> {
+                    builder.author("")               //作者
+                            .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)
+                            //.enableSwagger()           //开启swagger
+                            .commentDate("yyyy-MM-dd")
+                            .dateType(DateType.ONLY_DATE)
+                            .fileOverride();            //开启覆盖之前生成的文件
+
+                })
+                .packageConfig(builder -> {
+                    builder.parent("com.project.hyb")
+                            .moduleName(moduleName)
+                            .entity("domain.entity")
+                            .service("service")
+                            .serviceImpl("service.impl")
+//                            .controller("manage.controller")
+                            .mapper("mapper")
+                            .xml("test.mapper")
+                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,path+"\\src\\main\\resources\\mapper\\"+moduleName));
+                })
+                .strategyConfig(builder -> {
+                    builder.addInclude(tables)
+//                            .addTablePrefix("tb_")
+
+                            .serviceBuilder()
+                            .formatServiceFileName("%sService")
+                            .formatServiceImplFileName("%sServiceImpl")
+
+                            .entityBuilder()
+                            .enableLombok()
+//                            .logicDeleteColumnName("enable")
+//                            .enableTableFieldAnnotation()
+//                            .superClass(BaseEntity.class)
+
+
+                            .controllerBuilder()
+                            .formatFileName("%sController")
+                            .enableRestStyle()
+
+                            .mapperBuilder()
+                            .superClass(BaseMapper.class)
+                            .formatMapperFileName("%sMapper")
+                            .enableMapperAnnotation()
+                            .formatXmlFileName("%sMapper");
+                })
+                // .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
+                .execute();
+    }
+}

+ 24 - 0
src/main/java/com/project/hyb/biz/mapper/ArtArtworksMapper.java

@@ -0,0 +1,24 @@
+package com.project.hyb.biz.mapper;
+
+import com.project.hyb.biz.domain.entity.ArtArtworks;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.project.hyb.biz.domain.request.ArtArtworksPageRequest;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Mapper
+public interface ArtArtworksMapper extends BaseMapper<ArtArtworks> {
+
+    List<String> listCategory();
+
+    List<ArtArtworks> listArtArtworks(ArtArtworksPageRequest request);
+}

+ 18 - 0
src/main/java/com/project/hyb/biz/mapper/ArtAttachmentsMapper.java

@@ -0,0 +1,18 @@
+package com.project.hyb.biz.mapper;
+
+import com.project.hyb.biz.domain.entity.ArtAttachments;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Mapper
+public interface ArtAttachmentsMapper extends BaseMapper<ArtAttachments> {
+
+}

+ 18 - 0
src/main/java/com/project/hyb/biz/mapper/CollCollectionCluesMapper.java

@@ -0,0 +1,18 @@
+package com.project.hyb.biz.mapper;
+
+import com.project.hyb.biz.domain.entity.CollCollectionClues;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 征集线索管理表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Mapper
+public interface CollCollectionCluesMapper extends BaseMapper<CollCollectionClues> {
+
+}

+ 18 - 0
src/main/java/com/project/hyb/biz/mapper/NewsPublishMapper.java

@@ -0,0 +1,18 @@
+package com.project.hyb.biz.mapper;
+
+import com.project.hyb.biz.domain.entity.NewsPublish;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 资讯发布表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Mapper
+public interface NewsPublishMapper extends BaseMapper<NewsPublish> {
+
+}

+ 23 - 0
src/main/java/com/project/hyb/biz/mapper/PermissionMapper.java

@@ -0,0 +1,23 @@
+package com.project.hyb.biz.mapper;
+
+import com.project.hyb.biz.domain.entity.Permission;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * Permission Mapper
+ *
+ * @author dhb
+ */
+public interface PermissionMapper extends BaseMapper<Permission> {
+
+    /**
+     * 根据角色id获取所有权限。
+     *
+     * @param roleId 角色id
+     * @return 权限
+     */
+    List<Permission> findByRoleId(@Param("roleId") Long roleId);
+
+}

+ 18 - 0
src/main/java/com/project/hyb/biz/mapper/SysAttachmentsMapper.java

@@ -0,0 +1,18 @@
+package com.project.hyb.biz.mapper;
+
+import com.project.hyb.biz.domain.entity.SysAttachments;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@Mapper
+public interface SysAttachmentsMapper extends BaseMapper<SysAttachments> {
+
+}

+ 29 - 0
src/main/java/com/project/hyb/biz/service/ArtArtworksService.java

@@ -0,0 +1,29 @@
+package com.project.hyb.biz.service;
+
+import com.project.hyb.biz.domain.dto.ArtArtworksDto;
+import com.project.hyb.biz.domain.entity.ArtArtworks;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.project.hyb.biz.domain.request.ArtArtworksPageRequest;
+import com.project.hyb.common.response.PageInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+public interface ArtArtworksService extends IService<ArtArtworks> {
+
+    PageInfo<ArtArtworksDto> pageArtArtworks(ArtArtworksPageRequest request);
+
+    List<String> listCategory();
+
+    List<ArtArtworks> listArtArtworks(@Param("param") ArtArtworksPageRequest request);
+
+    ArtArtworksDto getArtArtworkById(Long id);
+}

+ 16 - 0
src/main/java/com/project/hyb/biz/service/ArtAttachmentsService.java

@@ -0,0 +1,16 @@
+package com.project.hyb.biz.service;
+
+import com.project.hyb.biz.domain.entity.ArtAttachments;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+public interface ArtAttachmentsService extends IService<ArtAttachments> {
+
+}

+ 21 - 0
src/main/java/com/project/hyb/biz/service/CollCollectionCluesService.java

@@ -0,0 +1,21 @@
+package com.project.hyb.biz.service;
+
+import com.project.hyb.biz.domain.entity.CollCollectionClues;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.project.hyb.biz.domain.request.AddCollCollectionCluesRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * <p>
+ * 征集线索管理表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+public interface CollCollectionCluesService extends IService<CollCollectionClues> {
+
+    void addCollCollectionClues(MultipartFile[] files, AddCollCollectionCluesRequest request) throws IOException;
+}

+ 16 - 0
src/main/java/com/project/hyb/biz/service/NewsPublishService.java

@@ -0,0 +1,16 @@
+package com.project.hyb.biz.service;
+
+import com.project.hyb.biz.domain.entity.NewsPublish;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 资讯发布表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+public interface NewsPublishService extends IService<NewsPublish> {
+
+}

+ 77 - 0
src/main/java/com/project/hyb/biz/service/PermissionService.java

@@ -0,0 +1,77 @@
+package com.project.hyb.biz.service;
+
+import com.project.hyb.biz.domain.dto.PermissionDto;
+import com.project.hyb.biz.domain.entity.Permission;
+import com.project.hyb.biz.domain.request.CreatePermissionRequest;
+import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * 权限服务类
+ *
+ * @author dhb
+ */
+public interface PermissionService extends IService<Permission> {
+
+    /**
+     * 根据角色id获取所有权限
+     *
+     * @param roleId 角色id
+     * @return 权限
+     */
+    List<Permission> findByRoleId(Long roleId);
+
+
+    /**
+     * 新建权限
+     *
+     * @param request 请求
+     */
+    void create(CreatePermissionRequest request);
+
+    /**
+     * 批量创建
+     *
+     * @param request req
+     */
+    void createBatch(List<CreatePermissionRequest> request);
+
+    /**
+     * 查询所有菜单权限
+     *
+     * @return 菜单权限
+     */
+    List<PermissionDto> findAllMenu();
+
+    /**
+     * 查询所有菜单权限,并构建树
+     *
+     * @return 菜单权限树
+     */
+    List<Tree<Long>> findAllMenuTree();
+
+
+    /**
+     * 查询所有权限,并构建树
+     *
+     * @return 权限树
+     */
+    List<Tree<Long>> findAllTree();
+
+    /**
+     * 查询按钮
+     *
+     * @param parentId 父节点id
+     * @return 权限列表
+     */
+    List<Permission> findButton(Long parentId);
+
+    /**
+     * 校验 path 存不存在menu资源内
+     *
+     * @param path path
+     * @return 是否存在
+     */
+    boolean validateMenuPath(String path);
+}

+ 16 - 0
src/main/java/com/project/hyb/biz/service/SysAttachmentsService.java

@@ -0,0 +1,16 @@
+package com.project.hyb.biz.service;
+
+import com.project.hyb.biz.domain.entity.SysAttachments;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+public interface SysAttachmentsService extends IService<SysAttachments> {
+
+}

+ 89 - 0
src/main/java/com/project/hyb/biz/service/impl/ArtArtworksServiceImpl.java

@@ -0,0 +1,89 @@
+package com.project.hyb.biz.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.project.hyb.biz.domain.dto.ArtArtworksDto;
+import com.project.hyb.biz.domain.entity.ArtArtworks;
+import com.project.hyb.biz.domain.entity.ArtAttachments;
+import com.project.hyb.biz.domain.entity.SysAttachments;
+import com.project.hyb.biz.domain.request.ArtArtworksPageRequest;
+import com.project.hyb.biz.mapper.ArtArtworksMapper;
+import com.project.hyb.biz.service.ArtArtworksService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.project.hyb.biz.service.ArtAttachmentsService;
+import com.project.hyb.biz.service.SysAttachmentsService;
+import com.project.hyb.common.exception.BizException;
+import com.project.hyb.common.response.BizResponseCode;
+import com.project.hyb.common.response.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@DS("artmember")
+@Service
+public class ArtArtworksServiceImpl extends ServiceImpl<ArtArtworksMapper, ArtArtworks> implements ArtArtworksService {
+
+    @Autowired
+    private SysAttachmentsService sysAttachmentsService;
+
+    @Override
+    public PageInfo<ArtArtworksDto> pageArtArtworks(ArtArtworksPageRequest request) {
+        IPage<ArtArtworksDto> convert = this.page(new Page<>(request.getPageNo(), request.getPageSize())).convert(v -> BeanUtil.toBean(v, ArtArtworksDto.class));
+        return PageInfo.convert(convert);
+    }
+
+    @Override
+    public List<String> listCategory() {
+        return this.getBaseMapper().listCategory();
+    }
+
+    @Override
+    public List<ArtArtworks> listArtArtworks(ArtArtworksPageRequest request) {
+        return this.getBaseMapper().listArtArtworks(request);
+    }
+
+    @Override
+    public ArtArtworksDto getArtArtworkById(Long id) {
+        ArtArtworks byId = this.getById(id);
+        if(byId == null){
+            throw new BizException(BizResponseCode.ERR_10001);
+        }
+
+        ArtArtworksDto bean = BeanUtil.toBean(byId, ArtArtworksDto.class);
+
+        //查询模型文件和图片文件
+        List<SysAttachments> imgs = sysAttachmentsService.list(
+                new LambdaQueryWrapper<SysAttachments>()
+                        .eq(SysAttachments::getRecordid, bean.getArtworkUuid())
+                        .eq(SysAttachments::getModules, "artwork")
+                        .eq(SysAttachments::getCategory, 1));
+        if(CollUtil.isNotEmpty(imgs)){
+            bean.setImgFiles(imgs.stream().map(v->v.getServerpath() + v.getServername() + "." + v.getExtension()).collect(Collectors.toList()));
+        }
+        List<SysAttachments> objs = sysAttachmentsService.list(
+                new LambdaQueryWrapper<SysAttachments>()
+                        .eq(SysAttachments::getRecordid, bean.getArtworkUuid())
+                        .eq(SysAttachments::getModules, "artwork")
+                        .eq(SysAttachments::getCategory, 6));
+        if(CollUtil.isNotEmpty(objs)){
+            bean.setModelFiles(imgs.stream().map(v->v.getServerpath() + v.getServername() + "." + v.getExtension()).collect(Collectors.toList()));
+        }
+
+        return bean;
+    }
+}

+ 22 - 0
src/main/java/com/project/hyb/biz/service/impl/ArtAttachmentsServiceImpl.java

@@ -0,0 +1,22 @@
+package com.project.hyb.biz.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.project.hyb.biz.domain.entity.ArtAttachments;
+import com.project.hyb.biz.mapper.ArtAttachmentsMapper;
+import com.project.hyb.biz.service.ArtAttachmentsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@DS("artoffice_museum")
+@Service
+public class ArtAttachmentsServiceImpl extends ServiceImpl<ArtAttachmentsMapper, ArtAttachments> implements ArtAttachmentsService {
+
+}

+ 79 - 0
src/main/java/com/project/hyb/biz/service/impl/CollCollectionCluesServiceImpl.java

@@ -0,0 +1,79 @@
+package com.project.hyb.biz.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.UUID;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.project.hyb.biz.domain.entity.ArtAttachments;
+import com.project.hyb.biz.domain.entity.CollCollectionClues;
+import com.project.hyb.biz.domain.request.AddCollCollectionCluesRequest;
+import com.project.hyb.biz.mapper.CollCollectionCluesMapper;
+import com.project.hyb.biz.service.ArtAttachmentsService;
+import com.project.hyb.biz.service.CollCollectionCluesService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * <p>
+ * 征集线索管理表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@DS("artoffice_museum")
+@Service
+public class CollCollectionCluesServiceImpl extends ServiceImpl<CollCollectionCluesMapper, CollCollectionClues> implements CollCollectionCluesService {
+
+    @Value("${filestorage.path}")
+    public String filePath;
+    @Autowired
+    private ArtAttachmentsService attachmentsService;
+
+    @Transactional
+    @Override
+    public void addCollCollectionClues(MultipartFile[] files, AddCollCollectionCluesRequest request) throws IOException {
+
+        CollCollectionClues ccc = BeanUtil.toBean(request, CollCollectionClues.class);
+        this.save(ccc);
+
+        String uuid = UUID.randomUUID().toString().replace("-", "");
+        for (MultipartFile file : files) {
+            String originalFilename = file.getOriginalFilename();
+            String extName = FileUtil.extName(originalFilename);
+            String prefix = String.valueOf(Calendar.getInstance().getTimeInMillis());
+            String serverPath = filePath + File.separator + uuid + File.separator;
+            String serverName = prefix + "." + extName;
+            String localPath = serverPath + serverName;
+            FileUtil.mkParentDirs(localPath);
+            file.transferTo(new File(localPath));
+
+            String category = "1";
+            if(extName.equalsIgnoreCase("zip") || extName.equalsIgnoreCase("7z")){
+                category = "3";
+            }
+
+            ArtAttachments artAttachments = new ArtAttachments();
+            artAttachments.setModules("collectionClues");
+            artAttachments.setRecordstatus(1);
+            artAttachments.setArtworkid(String.valueOf(ccc.getId()));
+            artAttachments.setCreatedate(new Date());
+            artAttachments.setCategory(category);
+            artAttachments.setOldcategory(category);
+            artAttachments.setServerpath(serverPath);
+            artAttachments.setOriginname(originalFilename);
+            artAttachments.setServername(serverName);
+            artAttachments.setExtension(extName);
+            attachmentsService.save(artAttachments);
+        }
+    }
+}

+ 22 - 0
src/main/java/com/project/hyb/biz/service/impl/NewsPublishServiceImpl.java

@@ -0,0 +1,22 @@
+package com.project.hyb.biz.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.project.hyb.biz.domain.entity.NewsPublish;
+import com.project.hyb.biz.mapper.NewsPublishMapper;
+import com.project.hyb.biz.service.NewsPublishService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 资讯发布表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@DS("artoffice_museum")
+@Service
+public class NewsPublishServiceImpl extends ServiceImpl<NewsPublishMapper, NewsPublish> implements NewsPublishService {
+
+}

+ 94 - 0
src/main/java/com/project/hyb/biz/service/impl/PermissionServiceImpl.java

@@ -0,0 +1,94 @@
+package com.project.hyb.biz.service.impl;
+
+import com.project.hyb.biz.domain.dto.PermissionDto;
+import com.project.hyb.biz.domain.entity.Permission;
+import com.project.hyb.biz.domain.request.CreatePermissionRequest;
+import com.project.hyb.biz.mapper.PermissionMapper;
+import com.project.hyb.biz.service.PermissionService;
+import com.project.hyb.biz.util.PermissionUtil;
+import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 权限服务类的实现类,主要负责权限相关的处理
+ *
+ * @author dhb
+ */
+@Service
+public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission>
+    implements PermissionService {
+
+    private static final String TYPE_MENU = "MENU";
+    private static final String TYPE_BUTTON = "BUTTON";
+
+
+    @Override
+    public List<Permission> findByRoleId(Long roleId) {
+        return getBaseMapper().findByRoleId(roleId);
+    }
+
+    @Override
+    public void create(CreatePermissionRequest request) {
+        Permission permission = request.convert(Permission.class);
+        this.save(permission);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void createBatch(List<CreatePermissionRequest> request) {
+        List<Permission> list = request.stream().map(dto -> dto.convert(Permission.class))
+                .collect(Collectors.toList());
+        this.saveBatch(list);
+    }
+
+    @Override
+    public List<PermissionDto> findAllMenu() {
+        return lambdaQuery().eq(Permission::getType, TYPE_MENU)
+            .list()
+            .stream()
+            .map(permission -> permission.convert(PermissionDto.class))
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<Tree<Long>> findAllMenuTree() {
+        List<Permission> permissions = lambdaQuery().eq(Permission::getType, TYPE_MENU)
+            .orderByAsc(Permission::getOrder)
+            .list()
+            .stream()
+                .collect(Collectors.toList());
+        return PermissionUtil.toTreeNode(permissions, null);
+    }
+
+    @Override
+    public List<Tree<Long>> findAllTree() {
+        List<Permission> permissions = lambdaQuery()
+            .orderByAsc(Permission::getOrder)
+            .list()
+            .stream()
+                .collect(Collectors.toList());
+        return PermissionUtil.toTreeNode(permissions, null);
+    }
+
+    @Override
+    public List<Permission> findButton(Long parentId) {
+        return lambdaQuery()
+            .eq(Permission::getParentId, parentId)
+            .in(Permission::getType, TYPE_BUTTON)
+            .orderByAsc(Permission::getOrder)
+            .list()
+            .stream()
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public boolean validateMenuPath(String path) {
+        return lambdaQuery().eq(Permission::getPath, path).exists();
+    }
+
+}

+ 22 - 0
src/main/java/com/project/hyb/biz/service/impl/SysAttachmentsServiceImpl.java

@@ -0,0 +1,22 @@
+package com.project.hyb.biz.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.project.hyb.biz.domain.entity.SysAttachments;
+import com.project.hyb.biz.mapper.SysAttachmentsMapper;
+import com.project.hyb.biz.service.SysAttachmentsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-05
+ */
+@DS("artmember")
+@Service
+public class SysAttachmentsServiceImpl extends ServiceImpl<SysAttachmentsMapper, SysAttachments> implements SysAttachmentsService {
+
+}

+ 40 - 0
src/main/java/com/project/hyb/biz/util/PermissionUtil.java

@@ -0,0 +1,40 @@
+package com.project.hyb.biz.util;
+
+import com.project.hyb.biz.domain.entity.Permission;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNode;
+import cn.hutool.core.lang.tree.TreeUtil;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import lombok.experimental.UtilityClass;
+
+/**
+ * 权限相关工具类
+ *
+ * @author dhb
+ */
+@UtilityClass
+public class PermissionUtil {
+
+    /**
+     * 生成权限树
+     *
+     * @param permissions 权限列表
+     * @return 权限树
+     */
+    public List<Tree<Long>> toTreeNode(List<Permission> permissions, Long parent) {
+        List<TreeNode<Long>> nodes = permissions.stream().map(permission -> {
+            TreeNode<Long> treeNode = new TreeNode<>();
+            treeNode.setId(permission.getId());
+            treeNode.setParentId(permission.getParentId());
+            treeNode.setWeight(permission.getOrder());
+            treeNode.setName(permission.getName());
+            treeNode.setExtra(BeanUtil.beanToMap(permission));
+            return treeNode;
+        }).collect(Collectors.toList());
+        return TreeUtil.build(nodes, parent);
+    }
+}
+

+ 173 - 0
src/main/java/com/project/hyb/biz/util/WordUtil.java

@@ -0,0 +1,173 @@
+package com.project.hyb.biz.util;
+//
+//import cn.hutool.core.util.CharUtil;
+//import com.alibaba.fastjson.JSON;
+//import com.spire.doc.Document;
+//import com.spire.doc.TableCell;
+//import com.spire.doc.TableRow;
+//import com.spire.doc.documents.Paragraph;
+//import com.spire.doc.fields.DocPicture;
+//import com.spire.doc.fields.TextBox;
+//import org.apache.poi.ooxml.POIXMLDocumentPart;
+//import org.apache.poi.xwpf.usermodel.*;
+//
+//import java.io.*;
+//import java.util.Arrays;
+//import java.util.Base64;
+//import java.util.List;
+//
+//public class WordUtil {
+//
+//    public static void main(String[] args) throws IOException {
+//
+//        String fielPath = "C:\\Users\\dsx\\Desktop\\卢慕贞故居_20241211144100.docx";
+//        parseTable(fielPath);
+//
+//
+//    }
+//
+//    public static void parseFile(String path){
+//        try {
+//            //String path = "C:\\Users\\admin\\Desktop\\first.docx";
+//            FileInputStream fis = new FileInputStream(path);
+//            XWPFDocument document = new XWPFDocument(fis);
+//
+//            // 遍历文档中的所有元素(段落和表格)
+//            List<IBodyElement> bodyElements = document.getBodyElements();
+//            for (IBodyElement bodyElement : bodyElements) {
+//                if (bodyElement instanceof XWPFParagraph) {
+//                    XWPFParagraph paragraph = (XWPFParagraph) bodyElement;
+//                    System.out.println(paragraph.getStyleID() + ":" + paragraph.getText());
+//                } else if (bodyElement instanceof XWPFTable) {
+//                    System.out.println(((XWPFTable) bodyElement).getText());
+//                } else if (bodyElement instanceof XWPFPicture) {
+//                    System.out.println(Arrays.toString(((XWPFPicture) bodyElement).getPictureData().getData()));
+//                }
+//            }
+//
+//            fis.close();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    public static void parseFile2(String path){
+//        try {
+//            //String path = "C:\\Users\\admin\\Desktop\\first.docx";
+//            FileInputStream fis = new FileInputStream(path);
+//            XWPFDocument document = new XWPFDocument(fis);
+//
+//            // 遍历文档中的所有元素(段落和表格)
+//            List<IBodyElement> bodyElements = document.getBodyElements();
+//            boolean dl = false;
+//            for (IBodyElement element : bodyElements) {
+//                if (element instanceof XWPFParagraph) {
+//                    dl = !dl;
+//                    XWPFParagraph paragraph = (XWPFParagraph) element;
+//                    if(dl){
+////                        System.out.println("------------段落---------------:");
+//                    }
+//                    String text = paragraph.getText();
+//                    if (text != null && !text.isEmpty()) {
+//                        //处理段落或正文
+////                        System.out.println(text);
+//                    } else {
+//                        // 顺序遍历图片
+//                        for (XWPFRun run : paragraph.getRuns()) {
+//                                XWPFRun xWPFRun = (XWPFRun) run;
+//                                for (XWPFPicture picture : xWPFRun.getEmbeddedPictures()) {
+//                                    XWPFPictureData pictureData = picture.getPictureData();
+//                                    String base64Image = "<img src='data:image/png;base64," + Base64.getEncoder().encodeToString((pictureData.getData())) + "'/>";
+//                                    System.out.println(base64Image);
+//                                }
+//                        }
+//                    }
+//                } else if (element instanceof XWPFTable) {
+//                    //处理表格
+//                    XWPFTable table = (XWPFTable) element;
+//                }
+//            }
+//            fis.close();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    public static void parseTable(String path){
+//        try {
+//            //String path = "C:\\Users\\admin\\Desktop\\first.docx";
+//            FileInputStream fis = new FileInputStream(path);
+//            XWPFDocument document = new XWPFDocument(fis);
+//
+//            List<XWPFTable> tables = document.getTables();
+//            XWPFTable xwpfTable = tables.get(1);
+//            List<XWPFTableRow> rows = xwpfTable.getRows();
+//            System.out.println(rows.size());
+//            for (XWPFTableRow row : rows) {
+//                if(rows.indexOf(row) == 2){
+//                    List<XWPFTableCell> tableCells = row.getTableCells();
+//                    for (XWPFTableCell tableCell : tableCells) {
+//                        if(tableCells.indexOf(tableCell) == 2){
+//                            System.out.println(tableCell.getText());
+//                            List<XWPFParagraph> paragraphs = tableCell.getParagraphs();
+//                            for (XWPFParagraph paragraph : paragraphs) {
+//                                if(paragraphs.indexOf(paragraph) == 1){
+//                                    System.out.println(paragraph.getText());
+//                                    char[] charArray = paragraph.getText().toCharArray();
+//                                    for (char c : charArray) {
+//                                        System.out.println(c);
+//                                    }
+//                                }
+//                            }
+//
+//                        }
+//                    }
+//                }
+//            }
+//
+//            // 遍历文档中的所有元素(段落和表格)
+//            fis.close();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//
+//    public static  void readText(String filePath) throws IOException {
+//        //加载含有文本框的Word文档
+//        com.spire.doc.Document doc = new Document();
+//        doc.loadFromFile(filePath);
+//
+//        //获取文本框
+//        TextBox textbox = doc.getTextBoxes().get(0);
+//
+//        //保存文本框中的文本到指定文件
+//        File file = new File("D:\\test\\testword\\testtext.txt");
+//        if (file.exists())
+//        {
+//            file.delete();
+//        }
+//        file.createNewFile();
+//        FileWriter fw = new FileWriter(file, true);
+//        BufferedWriter bw = new BufferedWriter(fw);
+//
+//        //遍历文本框中的对象
+//        for (Object object:textbox.getBody().getChildObjects())
+//        {
+//            //判定是否为文本段落
+//            if(object instanceof Paragraph)
+//            {
+//                //获取段落中的文本
+//                String text = ((Paragraph) object).getText();
+//
+//                //写入文本到txt文档
+//                bw.write(text);
+//            }
+//        }
+//        bw.flush();
+//        bw.close();
+//        fw.close();
+//    }
+//
+//
+//}

+ 42 - 0
src/main/java/com/project/hyb/common/constant/AuditStatus.java

@@ -0,0 +1,42 @@
+package com.project.hyb.common.constant;
+
+/**
+ * <p>
+        审核状态
+ * </p>
+ * @author dengsixing
+ * @date 2022/1/28
+ **/
+public enum AuditStatus {
+
+    WAITING(0, "待审核"),
+    PASS(1, "通过"),
+    FAILED(2, "不通过");
+
+    private int code;
+    private String message;
+
+    private AuditStatus(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public int code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public static AuditStatus get(int code){
+        AuditStatus[] values = AuditStatus.values();
+        for(AuditStatus eachValue : values){
+            if(eachValue.code() == code){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
+}

+ 9 - 0
src/main/java/com/project/hyb/common/constant/CommonConstant.java

@@ -0,0 +1,9 @@
+package com.project.hyb.common.constant;
+
+public class CommonConstant {
+
+    public final static String file_storage_path = "";
+
+
+
+}

+ 41 - 0
src/main/java/com/project/hyb/common/constant/CommonStatus.java

@@ -0,0 +1,41 @@
+package com.project.hyb.common.constant;
+
+/**
+ * <p>
+        通用状态
+ * </p>
+ * @author dengsixing
+ * @date 2022/1/28
+ **/
+public enum CommonStatus {
+
+    NO(0, "否"),
+    YES(1, "是");
+
+    private int code;
+    private String message;
+
+    private CommonStatus(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public int code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public static CommonStatus get(int code){
+        CommonStatus[] values = CommonStatus.values();
+        for(CommonStatus eachValue : values){
+            if(eachValue.code() == code){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
+}

+ 36 - 0
src/main/java/com/project/hyb/common/constant/PayStatus.java

@@ -0,0 +1,36 @@
+package com.project.hyb.common.constant;
+
+public enum PayStatus {
+
+    UNPAID(0, "未付款"),
+    PAID(1, "已付款"),
+    CANCEL(2, "已取消"),
+    ;
+
+    private Integer code;
+    private String message;
+
+    private PayStatus(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public static CommonStatus get(Integer code){
+        CommonStatus[] values = CommonStatus.values();
+        for(CommonStatus eachValue : values){
+            if(eachValue.code() == code){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
+}

+ 16 - 0
src/main/java/com/project/hyb/common/exception/BadRequestException.java

@@ -0,0 +1,16 @@
+package com.project.hyb.common.exception;
+
+/**
+ * 参数错误的异常
+ * 对于http来说,会返回400的状态码
+ *
+ * @author dhb
+ */
+public class BadRequestException extends RuntimeException {
+
+    public BadRequestException(String message) {
+        super(message);
+    }
+
+
+}

+ 26 - 0
src/main/java/com/project/hyb/common/exception/BizException.java

@@ -0,0 +1,26 @@
+package com.project.hyb.common.exception;
+
+import com.project.hyb.common.response.BizResponseCode;
+import lombok.Getter;
+
+/**
+ * 业务异常,这种异常一般是可预知的
+ *
+ * @author dhb
+ */
+@Getter
+public class BizException extends RuntimeException {
+
+    private final BizResponseCode code;
+
+    public BizException(BizResponseCode bizResponseCode) {
+        super(bizResponseCode.getMsg());
+        this.code = bizResponseCode;
+    }
+
+    public BizException(BizResponseCode bizResponseCode, String msg) {
+        super(msg);
+        this.code = bizResponseCode;
+    }
+
+}

+ 89 - 0
src/main/java/com/project/hyb/common/exception/ExceptionHandlerConfigure.java

@@ -0,0 +1,89 @@
+package com.project.hyb.common.exception;
+
+import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.exception.NotRoleException;
+import com.project.hyb.common.response.BizResponseCode;
+import com.project.hyb.common.response.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * 异常处理
+ *
+ * @author dhb
+ */
+@RestControllerAdvice
+@Slf4j
+public class ExceptionHandlerConfigure {
+
+    /**
+     * 处理在没有登录请求的异常
+     *
+     * @param exception NotLoginException
+     * @return 返回401的http状态码
+     */
+    @ResponseBody
+    @ExceptionHandler
+    public ResponseEntity<R<String>> handle(NotLoginException exception) {
+        log.debug("", exception);
+        R<String> r = new R<>();
+        r.setCode(HttpStatus.UNAUTHORIZED.value());
+        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(r);
+    }
+
+    /**
+     * 处理业务异常
+     *
+     * @param exception BizException
+     * @return 返回200的http状态码,body描述异常信息
+     */
+    @ResponseBody
+    @ExceptionHandler
+    public R<Object> handle(BizException exception) {
+        return R.build(exception);
+    }
+
+    /**
+     * 处理参数错误的异常
+     *
+     * @param exception BadRequestException
+     * @return 返回400状态码
+     */
+    @ResponseBody
+    @ExceptionHandler
+    public ResponseEntity<R<String>> handle(BadRequestException exception) {
+        R<String> r = new R<>();
+        r.setMessage(exception.getMessage()).setData(null).setCode(HttpStatus.BAD_REQUEST.value());
+
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(r);
+    }
+
+
+    /**
+     * 处理参数错误异常
+     *
+     * @param exception ex
+     * @return r
+     */
+    @ResponseBody
+    @ExceptionHandler
+    public R<String> handle(MethodArgumentNotValidException exception) {
+        ObjectError error = exception.getBindingResult().getAllErrors().get(0);
+        String defaultMessage = error.getDefaultMessage();
+        return R.build(new BizException(BizResponseCode.ERR_400, defaultMessage));
+    }
+
+    @ResponseBody
+    @ExceptionHandler(value = Exception.class)
+    public R<String> handleException(Exception e) {
+        log.error("系统异常", e);
+        return R.error(-1, "系统异常");
+    }
+
+}

+ 15 - 0
src/main/java/com/project/hyb/common/httpclient/ForestClient.java

@@ -0,0 +1,15 @@
+package com.project.hyb.common.httpclient;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.annotation.Get;
+import com.dtflys.forest.annotation.Query;
+import com.dtflys.forest.annotation.Var;
+
+import java.util.Map;
+
+public interface ForestClient {
+
+    @Get("{url}")
+    JSONObject get(@Var("url") String url, @Query Map<String, Object> map);
+
+}

+ 15 - 0
src/main/java/com/project/hyb/common/json/BigDecimalSerializer.java

@@ -0,0 +1,15 @@
+package com.project.hyb.common.json;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import java.io.IOException;
+import java.math.BigDecimal;
+ 
+public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
+    @Override
+    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+        gen.writeNumber(value.setScale(1, BigDecimal.ROUND_HALF_UP));
+    }
+}

+ 16 - 0
src/main/java/com/project/hyb/common/mapstruct/MapstructConfigure.java

@@ -0,0 +1,16 @@
+package com.project.hyb.common.mapstruct;
+
+import cn.dhbin.mapstruct.helper.starter.MapStructHelperAutoConfig;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+/**
+ * mapstruct配置
+ *
+ * @author dhb
+ */
+@Configuration
+@Import(MapStructHelperAutoConfig.class)
+public class MapstructConfigure {
+
+}

+ 15 - 0
src/main/java/com/project/hyb/common/mapstruct/MapstructConstant.java

@@ -0,0 +1,15 @@
+package com.project.hyb.common.mapstruct;
+
+/**
+ * mapstruct常量
+ *
+ * @author dhb
+ */
+public class MapstructConstant {
+
+    /**
+     * 默认mapstruct注入spring
+     */
+    public static final String DEFAULT_COMPONENT_MODEL = "spring";
+
+}

+ 33 - 0
src/main/java/com/project/hyb/common/mybatis/MybatisPlusConfigure.java

@@ -0,0 +1,33 @@
+package com.project.hyb.common.mybatis;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * mybatis plus配置
+ *
+ * @author dhb
+ */
+@Configuration
+@MapperScan("com.project.hyb.*.mapper")
+public class MybatisPlusConfigure {
+
+
+    /**
+     * 分页插件
+     *
+     * @return bean
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+
+
+}

+ 44 - 0
src/main/java/com/project/hyb/common/request/PageRequest.java

@@ -0,0 +1,44 @@
+package com.project.hyb.common.request;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 分页请求
+ */
+@Data
+public class PageRequest {
+
+    /**
+     * 页数
+     */
+    private Integer pageNo = 1;
+
+    /**
+     * 页大小
+     */
+    private Integer pageSize = 10;
+
+    @ApiModelProperty("排序字段,不填默认为创建时间")
+    private String orderBy = "id";
+
+    @ApiModelProperty("排序规则,DESC-降序,ASC-升序,不填,默认DESC")
+    private String sortBy = "DESC";
+
+
+    /**
+     * 转换成mp的page
+     *
+     * @param <T> 类型
+     * @return Page
+     */
+    public <T> IPage<T> toPage() {
+        Page<T> page = new Page<>();
+        page.setSize(pageSize);
+        page.setMaxLimit(500L);
+        page.setCurrent(pageNo);
+        return page;
+    }
+}

+ 29 - 0
src/main/java/com/project/hyb/common/response/BizResponseCode.java

@@ -0,0 +1,29 @@
+package com.project.hyb.common.response;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * 业务响应码
+ *
+ * @author dhb
+ */
+@Getter
+@RequiredArgsConstructor
+public enum BizResponseCode {
+
+    /**
+     * 正常响应码
+     */
+    OK(0, "OK"),
+    ERR_400(400, "参数错误"),
+
+    ERR_10001(10001, "馆藏文物不存在或已删除"),
+
+    ERR_20001(20001, "馆藏文物不存在或已删除"),
+    ;
+    private final int code;
+
+    private final String msg;
+
+}

+ 31 - 0
src/main/java/com/project/hyb/common/response/PageInfo.java

@@ -0,0 +1,31 @@
+package com.project.hyb.common.response;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * 包装分页数据
+ */
+@Data
+public class PageInfo<T> {
+
+    private List<T> pageData;
+
+    private Long total;
+
+
+    /**
+     * mpPage转成Page
+     *
+     * @param mpPage mp的分页结果
+     * @param <T>    类型
+     * @return page
+     */
+    public static <T> PageInfo<T> convert(IPage<T> mpPage) {
+        PageInfo<T> page = new PageInfo<>();
+        page.setPageData(mpPage.getRecords());
+        page.setTotal(mpPage.getTotal());
+        return page;
+    }
+}

+ 82 - 0
src/main/java/com/project/hyb/common/response/R.java

@@ -0,0 +1,82 @@
+package com.project.hyb.common.response;
+
+import com.project.hyb.common.exception.BizException;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 统一响应body
+ *
+ * @author dhb
+ */
+@Data
+@Accessors(chain = true)
+public class R<T> {
+
+    /**
+     * 数据
+     */
+    @ApiModelProperty("数据")
+    private T data;
+
+    /**
+     * 响应码
+     */
+    @ApiModelProperty("响应码")
+    private int code;
+
+    /**
+     * 描述
+     */
+    @ApiModelProperty("v")
+    private String message;
+
+    /**
+     * 无数据的成功响应
+     *
+     * @param <T> 类型
+     * @return 响应体
+     */
+    public static <T> R<T> ok() {
+        return ok(null);
+    }
+
+    public static <T> R<T> error(int code, String message) {
+        R<T> r = new R<>();
+        r.setCode(code);
+        r.setMessage(message);
+        return r;
+    }
+
+    /**
+     * 成功的响应码,附带数据
+     *
+     * @param data 数据
+     * @param <T>  数据类型
+     * @return 响应体
+     */
+    public static <T> R<T> ok(T data) {
+        R<T> r = new R<>();
+        r.setData(data);
+        r.setCode(BizResponseCode.OK.getCode());
+        r.setMessage(BizResponseCode.OK.getMsg());
+        return r;
+    }
+
+    /**
+     * 构建业务异常的响应
+     *
+     * @param exception 业务异常
+     * @param <T>       类型
+     * @return 响应体
+     */
+    public static <T> R<T> build(BizException exception) {
+        R<T> r = new R<>();
+        r.setCode(exception.getCode().getCode());
+        r.setData(null);
+        r.setMessage(exception.getMessage());
+        return r;
+    }
+
+}

+ 54 - 0
src/main/java/com/project/hyb/common/swagger/CustomConstants.java

@@ -0,0 +1,54 @@
+package com.project.hyb.common.swagger;
+ 
+/**
+ * 自定义的常量接口
+ * @author heyunlin
+ * @version 1.0
+ */
+public interface CustomConstants {
+ 
+    /**
+     * 作者
+     */
+    String AUTHOR = "沐雨橙风ιε";
+ 
+    /**
+     * 版本号
+     */
+    String VERSION = "1.0.0";
+ 
+    /**
+     * 分组名称
+     */
+    String GROUP_NAME = "2.0.9";
+ 
+    /**
+     * 控制器类的包路径
+     */
+    String BASE_PACKAGE = "com.project.hyb.biz.controller";
+ 
+    /**
+     * 文档标题
+     */
+    String TITLE = "Spring Boot整合knife4j接口文档工具案例项目";
+ 
+    /**
+     * 文档描述
+     */
+    String DESCRIPTION = TITLE + "在线API文档";
+ 
+    /**
+     * 联系地址
+     */
+    String CONTACT_URL = "https://gitee.com/muyu-chengfeng";
+ 
+    /**
+     * 联系邮箱
+     */
+    String CONTACT_EMAIL = "hey163_com@163.com";
+ 
+    /**
+     * 服务条款地址
+     */
+    String TERMS_OF_SERVICE_URL = "https://www.apache.org/licenses/LICENSE-2.0";
+}

+ 79 - 0
src/main/java/com/project/hyb/common/swagger/SwaggerConfig.java

@@ -0,0 +1,79 @@
+package com.project.hyb.common.swagger;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.Parameter;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author qwh
+ * @Date 2024/6/1 0:10
+ */
+@Configuration
+@EnableSwagger2WebMvc
+public class SwaggerConfig {
+    /**
+     * 配置Swagger的Docket Bean,用于定义API的文档信息和扫描的包路径。
+     *
+     * @return Docket 返回配置好的Docket实例
+     */
+    @Bean
+    public Docket adminApiConfig(){
+        // 初始化参数列表
+        List<Parameter> pars = new ArrayList<>();
+        // 构建用户token参数
+//        ParameterBuilder tokenPar = new ParameterBuilder();
+//        tokenPar.name("adminId")
+//                .description("用户token")
+//                .defaultValue("1")
+//                .modelRef(new ModelRef("string"))
+//                .parameterType("header")
+//                .required(false)
+//                .build();
+//        // 将token参数添加到参数列表
+//        pars.add(tokenPar.build());
+
+        // 创建Docket实例并配置文档信息、包路径选择器、路径选择器等
+        Docket adminApi = new Docket(DocumentationType.SWAGGER_2)
+//                .groupName("adminApi")
+                .apiInfo(adminApiInfo())
+                .select()
+                //扫描的包
+                .apis(RequestHandlerSelectors.basePackage("com.project.hyb.biz.controller"))
+                // 选择处理admin路径下的API
+//                .paths(PathSelectors.regex("/demo/.*"))
+                .build()
+                // 全局操作参数设置
+                .globalOperationParameters(pars);
+        return adminApi;
+    }
+
+    /**
+     * 构建后台管理系统API的详细信息
+     *
+     * @return 返回构建好的ApiInfo对象,包含API文档的标题、描述、版本信息以及联系方式
+     */
+    private ApiInfo adminApiInfo(){
+        // 使用ApiInfoBuilder构建API信息
+        return new ApiInfoBuilder()
+                .title("四维看展-API文档") // 设置文档标题
+                .description("本文档描述了四维看展各端接口定义") // 设置文档描述
+                .version("1.0") // 设置文档版本号
+                .contact(new Contact("username", "http://username.com", "username@gmail.com")) // 设置联系人信息
+                .build(); // 构建并返回ApiInfo对象
+    }
+
+}
+

+ 66 - 0
src/main/java/com/project/hyb/common/util/LocationUtil.java

@@ -0,0 +1,66 @@
+package com.project.hyb.common.util;
+
+public class LocationUtil {
+
+    /**
+     * 地球半径
+     */
+    private static double EarthRadius = 6378.137;
+
+    /**
+     * 经纬度转化成弧度
+     * Add by 成长的小猪(Jason.Song) on 2017/11/01
+     * http://blog.csdn.net/jasonsong2008
+     *
+     * @param d 经度/纬度
+     * @return
+     */
+    private static double rad(double d) {
+        return d * Math.PI / 180.0;
+    }
+
+    /**
+     * 计算两个坐标点之间的距离
+     * Add by 成长的小猪(Jason.Song) on 2017/11/01
+     * http://blog.csdn.net/jasonsong2008
+     *
+     * @param firstLatitude   第一个坐标的纬度
+     * @param firstLongitude  第一个坐标的经度
+     * @param secondLatitude  第二个坐标的纬度
+     * @param secondLongitude 第二个坐标的经度
+     * @return 返回两点之间的距离,单位:公里/千米
+     */
+    public static double getDistance(double firstLatitude, double firstLongitude,
+                                     double secondLatitude, double secondLongitude) {
+        double firstRadLat = rad(firstLatitude);
+        double firstRadLng = rad(firstLongitude);
+        double secondRadLat = rad(secondLatitude);
+        double secondRadLng = rad(secondLongitude);
+
+        double a = firstRadLat - secondRadLat;
+        double b = firstRadLng - secondRadLng;
+        double cal = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(firstRadLat)
+                * Math.cos(secondRadLat) * Math.pow(Math.sin(b / 2), 2))) * EarthRadius;
+        double result = Math.round(cal * 10000d) / 10000d;
+        return result;
+    }
+
+    /**
+     * 计算两个坐标点之间的距离
+     * Add by 成长的小猪(Jason.Song) on 2017/11/01
+     * http://blog.csdn.net/jasonsong2008
+     *
+     * @param firstPoint  第一个坐标点的(纬度,经度) 例如:"31.2553210000,121.4620020000"
+     * @param secondPoint 第二个坐标点的(纬度,经度) 例如:"31.2005470000,121.3269970000"
+     * @return 返回两点之间的距离,单位:公里/千米
+     */
+    public static double getPointDistance(String firstPoint, String secondPoint) {
+        String[] firstArray = firstPoint.split(",");
+        String[] secondArray = secondPoint.split(",");
+        double firstLatitude = Double.valueOf(firstArray[0].trim());
+        double firstLongitude = Double.valueOf(firstArray[1].trim());
+        double secondLatitude = Double.valueOf(secondArray[0].trim());
+        double secondLongitude = Double.valueOf(secondArray[1].trim());
+        return getDistance(firstLatitude, firstLongitude, secondLatitude, secondLongitude);
+    }
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 66 - 0
src/main/java/com/project/hyb/common/util/RsaUtil.java


+ 10 - 0
src/main/resources/application-h2.yml

@@ -0,0 +1,10 @@
+spring:
+  datasource:
+    driver-class-name: org.h2.Driver
+    url: jdbc:h2:mem:isme;MODE=MySQL;DATABASE_TO_LOWER=TRUE
+    username: root
+    password: 123456
+  sql:
+    init:
+      schema-locations: classpath:db/h2.sql
+      mode: always

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

@@ -0,0 +1,24 @@
+spring:
+  datasource:
+    dynamic:
+      #指定一个主数据源,primary表示是主数据源也可以认为是默认数据源,如果不加注解DS(“数据源名字”)则会去主数据源中查询
+      primary: system
+      datasource:
+        #第一个数据源配置
+        artmember:
+          url: jdbc:mysql://106.53.107.102:3306/artmember
+          username: root
+          password: mysql123!ROOT.
+          driver-class-name: com.mysql.cj.jdbc.Driver
+        #第二个数据源配置
+        artoffice_museum:
+          url: jdbc:mysql://106.53.107.102:3306/artoffice_museum
+          username: root
+          password: mysql123!ROOT.
+          driver-class-name: com.mysql.cj.jdbc.Driver
+
+pms:
+  preview: false
+
+filestorage:
+  path: D:\四维时代\胡耀邦\uploadfiles\artwork\img

+ 27 - 0
src/main/resources/application-prod.yml

@@ -0,0 +1,27 @@
+spring:
+  dynamic:
+    #指定一个主数据源,primary表示是主数据源也可以认为是默认数据源,如果不加注解DS(“数据源名字”)则会去主数据源中查询
+    primary: system
+    datasource:
+      #第一个数据源配置
+      artmember:
+        url: jdbc:mysql://106.53.107.102:3306/artmember
+        username: root
+        password: mysql123!ROOT.
+        driver-class-name: com.mysql.cj.jdbc.Driver
+      #第二个数据源配置
+      artoffice_museum:
+        url: jdbc:mysql://106.53.107.102:3306/artoffice_museum
+        username: root
+        password: mysql123!ROOT.
+        driver-class-name: com.mysql.cj.jdbc.Driver
+
+pms:
+  preview: false
+
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #开启sql日志
+
+filestorage:
+  path:

+ 27 - 0
src/main/resources/application-test.yml

@@ -0,0 +1,27 @@
+spring:
+  dynamic:
+    #指定一个主数据源,primary表示是主数据源也可以认为是默认数据源,如果不加注解DS(“数据源名字”)则会去主数据源中查询
+    primary: system
+    datasource:
+      #第一个数据源配置
+      artmember:
+        url: jdbc:mysql://106.53.107.102:3306/artmember
+        username: root
+        password: mysql123!ROOT.
+        driver-class-name: com.mysql.cj.jdbc.Driver
+      #第二个数据源配置
+      artoffice_museum:
+        url: jdbc:mysql://106.53.107.102:3306/artoffice_museum
+        username: root
+        password: mysql123!ROOT.
+        driver-class-name: com.mysql.cj.jdbc.Driver
+
+pms:
+  preview: false
+
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #开启sql日志
+
+filestorage:
+  path:

+ 63 - 0
src/main/resources/application.yml

@@ -0,0 +1,63 @@
+server:
+  port: 8080
+  tomcat:
+    max-http-form-post-size: -1
+spring:
+  application:
+    name: project-hyb
+  profiles:
+    active: local
+  jackson:
+    serialization:
+      #关闭jackson转换 实体属性空值校验
+      FAIL_ON_EMPTY_BEANS: false
+      # write-dates-as-timestamps: true    ##开启时间转换为时间戳,默认true
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
+  mvc:
+    pathmatch:
+      matching-strategy: ant_path_matcher
+  servlet:
+    multipart:
+      # 设置单个文件大小
+      max-file-size: 10240MB
+      # 设置单次请求文件的总大小
+      max-request-size: 10240MB
+sa-token:
+  token-name: Authorization
+  token-prefix: Bearer
+  jwt-secret-key: 'd0!doc15415B0*4G0`'
+knife4j:
+  enable: true
+
+mybatis-plus:
+  configuration:
+#     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
+    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #开启sql日志
+  global-config:
+    db-config:
+      logic-delete-field: enable # 全局逻辑删除字段名
+      logic-delete-value: 0 # 逻辑已删除值。可选,默认值为 0
+      logic-not-delete-value: 1 # 逻辑未删除值。可选,默认值为 1
+log:
+  path: /home/backend/kanzhan
+
+# 不配默认为false
+tlog:
+  enable-invoke-time-print: true
+
+springdoc:
+  api-docs:
+    path: /api-docs  # API文档的路径
+  swagger-ui:
+    path: /swagger-ui.html  # Swagger UI的路径
+    disable-swagger-default-url: true  # 禁用默认的swagger URL
+    operationsSorter: method  # 方法排序
+    tagsSorter: alpha       # 标签排序
+
+forest:
+  max-connections: 1000        # 连接池最大连接数
+  connect-timeout: 3000        # 连接超时时间,单位为毫秒
+  read-timeout: 6000           # 数据读取超时时间,单位为毫秒
+  max-retry-count: 3     # 最大请求重试次数,默认为 0 次
+  max-retry-interval: 1 # 为最大重试时间间隔, 单位为毫秒,默认为 0 毫秒

+ 217 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
+<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
+<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
+<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+	<!--需要使用springProperty,才可使用application.properties(或application.yml)中的值 -->
+	<springProperty name="app.name" source="spring.application.name" default="project-hyb"/>
+	<springProperty name="LOG_PATH" source="log.path" default="/home/backend/project-hyb"/>
+
+	<!-- 定义日志目录 -->
+	<property name="SQL_LOG_PATH" value="${LOG_PATH}/logs/sql"/>
+	<property name="DEBUG_LOG_PATH" value="${LOG_PATH}/logs/debug"/>
+	<property name="INFO_LOG_PATH" value="${LOG_PATH}/logs/info"/>
+	<property name="WARN_LOG_PATH" value="${LOG_PATH}/logs/warn"/>
+	<property name="ERROR_LOG_PATH" value="${LOG_PATH}/logs/error"/>
+	<property name="TRACE_LOG_PATH" value="${LOG_PATH}/logs/trace"/>
+	<!-- 定义日志保留天数 -->
+	<property name="MAX_HISTORY" value="30"/>
+	<!-- 定义日志文件总大小 -->
+	<property name="TOTAL_SIZE_CAP" value="10GB"/>
+	<!-- 定义单个日志文件大小 -->
+	<property name="MAX_FILE_SIZE" value="100MB"/>
+
+
+	<!-- 输出到控制台 -->
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<!-- 日志输出格式 -->
+			<!--<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>-->
+			<!--日期 日志等级 PID 线程名 类路径 方法名 java源文件 行号 打印信息 换行-->
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%5p) %green(${PID:- }) - %magenta([%15.15t]) %cyan(%C.%M\(%F:%L\)) : %msg%n</pattern>
+			<!--同上, 仅输出类路径, 不输出 方法名 java源文件 行号 -->
+			<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%5p) %green(${PID:- }) - %magenta([%15.15t]) %cyan(%-40.40logger{40}) : %msg%n</pattern>-->
+		</encoder>
+	</appender>
+
+	<!-- 只输出DEBUG日志 -->
+	<appender name="DEBUG_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${DEBUG_LOG_PATH}/debug.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${DEBUG_LOG_PATH}/debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>DEBUG</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 只输出INFO日志 -->
+	<appender name="INFO_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${INFO_LOG_PATH}/info.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${INFO_LOG_PATH}/info-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>INFO</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 只输出WARN日志 -->
+	<appender name="WARN_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${WARN_LOG_PATH}/warn.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${WARN_LOG_PATH}/warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>WARN</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 只输出ERROR日志 -->
+	<appender name="ERROR_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${ERROR_LOG_PATH}/error.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${ERROR_LOG_PATH}/error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>ERROR</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
+        name:用来指定受此logger约束的某一个包或者具体的某一个类。
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
+              如果未设置此属性,那么当前logger将会继承上级的级别。
+        addtivity:是否向上级logger传递打印信息。默认是true -->
+	<!--
+        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
+        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
+        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
+     -->
+	<!--    <logger name="com.xmc.biz.mapper" level="DEBUG" />-->
+	<!--
+        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
+        默认是DEBUG  可以包含零个或多个元素,标识这个appender将会添加到这个logger。
+    -->
+
+	<!--输出到文件的Appender配置  SQL执行日志-->
+	<appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${SQL_LOG_PATH}/sql.log</file>
+		<!-- 基于文件大小和时间的滚动策略 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${SQL_LOG_PATH}/sql-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+			<!-- 日志文件保留天数 -->
+			<maxHistory>${MAX_HISTORY}</maxHistory>
+			<!-- 日志归档文件总大小 -->
+			<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
+			<!-- 单个日志文件大小 -->
+			<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
+		</rollingPolicy>
+		<!-- 日志输出格式 -->
+		<encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
+			<pattern>[%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}: %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志过滤 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<!-- 指定日志级别 -->
+			<level>TRACE</level>
+			<!-- 匹配则全部接受 -->
+			<onMatch>ACCEPT</onMatch>
+			<!-- 不匹配则全部拒绝 -->
+<!--			<onMismatch>DENY</onMismatch>-->
+		</filter>
+	</appender>
+
+	<!-- 多环境配置 -->
+	<springProfile name="local,dev,test,prod">
+
+		<!--单独设置mapper包下的日志级别为DEBUG,因为输出执行的sql需要DEBUG级别-->
+		<logger name="com.project.hyb.biz.mapper" level="trace">
+			<appender-ref ref="SQL_FILE"/>
+		</logger>
+
+		<!-- root -->
+		<root level="info">
+			<appender-ref ref="CONSOLE"/>
+			<appender-ref ref="INFO_LOG_FILE"/>
+			<appender-ref ref="WARN_LOG_FILE"/>
+			<appender-ref ref="ERROR_LOG_FILE"/>
+		</root>
+	</springProfile>
+
+</configuration>

+ 34 - 0
src/main/resources/mapper/biz/ArtArtworksMapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.project.hyb.biz.mapper.ArtArtworksMapper">
+
+
+    <select id="listCategory" resultType="java.lang.String">
+        SELECT DISTINCT t.category FROM `art_artworks` t WHERE t.`recordstatus` = 1
+    </select>
+
+    <select id="listArtArtworks" resultType="com.project.hyb.biz.domain.entity.ArtArtworks">
+        select * from art_artworks
+        where recordstatus = 1
+        <if test="grade != null and grade != ''">
+            and grade = #{grade}
+        </if>
+        <if test="category != null and category != ''">
+            and category = #{category}
+        </if>
+        <if test="texture != null and texture != ''">
+            and texture = #{texture}
+        </if>
+        <if test="agetype != null and agetype != ''">
+            and (
+                agetype1 = #{agetype} or
+                agetype2 = #{agetype} or
+                agetype3 = #{agetype} or
+                agetype4 = #{agetype}
+            )
+        </if>
+        <if test="searchText != null and searchText != ''">
+            and name like concat('%', #{searchText}, '%')
+        </if>
+    </select>
+</mapper>

+ 5 - 0
src/main/resources/mapper/biz/ArtAttachmentsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.project.hyb.biz.mapper.ArtAttachmentsMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/biz/CollCollectionCluesMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.project.hyb.biz.mapper.CollCollectionCluesMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/biz/NewsPublishMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.project.hyb.biz.mapper.NewsPublishMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/biz/SysAttachmentsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.project.hyb.biz.mapper.SysAttachmentsMapper">
+
+</mapper>