Pārlūkot izejas kodu

fix: 材质管理相关功能

liaoyitao 8 mēneši atpakaļ
vecāks
revīzija
cd3bbdc478

+ 78 - 0
src/main/java/com/lqkj/link/module/zone/controller/MaterialInfoController.java

@@ -0,0 +1,78 @@
1
+package com.lqkj.link.module.zone.controller;
2
+
3
+import com.lqkj.link.message.MessageBean;
4
+import com.lqkj.link.module.zone.domain.MaterialInfo;
5
+import com.lqkj.link.module.zone.domain.ModelCategory;
6
+import com.lqkj.link.module.zone.service.LikesInfoService;
7
+import com.lqkj.link.module.zone.service.MaterialInfoService;
8
+import io.swagger.v3.oas.annotations.Parameter;
9
+import io.swagger.v3.oas.annotations.tags.Tag;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.data.domain.Page;
12
+import org.springframework.web.bind.annotation.*;
13
+import org.springframework.web.multipart.MultipartFile;
14
+
15
+import java.util.List;
16
+import java.util.Map;
17
+
18
+@RestController
19
+@RequestMapping("/material")
20
+@Tag(name = "材质管理", description = "材质管理")
21
+public class MaterialInfoController {
22
+
23
+    @Autowired
24
+    private MaterialInfoService materialInfoService;
25
+
26
+
27
+    /**
28
+     * 保存材质
29
+     * @param materialInfo
30
+     * @return
31
+     */
32
+    @PostMapping("/save")
33
+    public MessageBean save(@RequestBody MaterialInfo materialInfo) {
34
+        materialInfoService.sava(materialInfo);
35
+        return MessageBean.ok(null, "保存材质成功");
36
+    }
37
+
38
+    /**
39
+     * 批量删除材质
40
+     * @param materialIds
41
+     * @return
42
+     */
43
+
44
+    @PostMapping("/batchDelete")
45
+    public MessageBean batchDelete(@RequestParam List<Integer> materialIds){
46
+        materialInfoService.batchDelete(materialIds);
47
+        return MessageBean.ok(null, "删除材质成功");
48
+    }
49
+
50
+
51
+    /**
52
+     * 材质分页接口
53
+     * @param name
54
+     * @param page
55
+     * @param pageSize
56
+     * @return
57
+     */
58
+    @PostMapping("/pageQuery")
59
+    public MessageBean<Page<MaterialInfo>> pageQueryTemplate(@RequestParam(required = false, defaultValue = "") String name,
60
+                                                      @RequestParam(required = false, defaultValue = "0") Integer page,
61
+                                                      @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
62
+        return MessageBean.ok(materialInfoService.pageQuery(name, page, pageSize), "材质分页接口");
63
+
64
+    }
65
+
66
+
67
+    /**
68
+     * 批量添加材质
69
+     * @param file
70
+     * @return
71
+     */
72
+    @PostMapping("/batchAdd")
73
+    public MessageBean batchAdd(MultipartFile file){
74
+        materialInfoService.batchAdd(file);
75
+        return MessageBean.ok(null, "批量添加材质成功");
76
+    }
77
+
78
+}

+ 48 - 0
src/main/java/com/lqkj/link/module/zone/domain/MaterialInfo.java

@@ -0,0 +1,48 @@
1
+package com.lqkj.link.module.zone.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import io.swagger.v3.oas.annotations.media.Schema;
5
+import jakarta.persistence.*;
6
+import lombok.AllArgsConstructor;
7
+import lombok.Getter;
8
+import lombok.NoArgsConstructor;
9
+import lombok.Setter;
10
+
11
+import java.util.Date;
12
+
13
+/**
14
+ * 材质信息
15
+ */
16
+
17
+@Entity
18
+@Table(name = "material_info")
19
+@Getter
20
+@Setter
21
+@NoArgsConstructor
22
+@AllArgsConstructor
23
+public class MaterialInfo {
24
+
25
+    @Id
26
+    @Column(name = "material_id")
27
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
28
+    @Schema(description = "材质ID")
29
+    private Integer materialId;
30
+
31
+    @Column(name = "material_name")
32
+    @Schema(description = "材质名称")
33
+    private String materialName;
34
+
35
+    @Column(name = "json_path")
36
+    @Schema(description = "json文件路径")
37
+    private String jsonPath;
38
+
39
+    @Column(name = "material_icon")
40
+    @Schema(description = "材质图标")
41
+    private String materialIcon;
42
+
43
+    @Column(name = "update_time")
44
+    @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
45
+    @Schema(description = "更新时间")
46
+    private Date updateTime;
47
+
48
+}

+ 46 - 0
src/main/java/com/lqkj/link/module/zone/repository/MaterialInfoRepository.java

@@ -0,0 +1,46 @@
1
+package com.lqkj.link.module.zone.repository;
2
+
3
+import com.lqkj.link.module.zone.domain.LikesInfo;
4
+import com.lqkj.link.module.zone.domain.MaterialInfo;
5
+import com.lqkj.link.module.zone.domain.ModelCategory;
6
+import org.springframework.data.domain.Page;
7
+import org.springframework.data.domain.Pageable;
8
+import org.springframework.data.jpa.repository.JpaRepository;
9
+import org.springframework.data.jpa.repository.Query;
10
+import org.springframework.data.repository.query.Param;
11
+import org.springframework.stereotype.Repository;
12
+
13
+@Repository
14
+public interface MaterialInfoRepository extends JpaRepository<MaterialInfo, Integer> {
15
+
16
+    /**
17
+     * 判断是否重名
18
+     * @param materialId
19
+     * @param materialName
20
+     * @return
21
+     */
22
+    @Query(nativeQuery = true,
23
+            value = "select count(*) > 0 from material_info where material_name = :materialName and category_id != :materialId"
24
+    )
25
+    boolean hasSameNameWithoutOne(@Param("materialId") Integer materialId,
26
+                                  @Param("materialName")String materialName);
27
+
28
+
29
+    /**
30
+     * 判断是否重名
31
+     * @param materialName
32
+     * @return
33
+     */
34
+    @Query(nativeQuery = true,
35
+            value = "select count(*) > 0 from material_info where material_name = :materialName"
36
+    )
37
+    boolean hasSameName(@Param("materialName") String materialName);
38
+
39
+
40
+    @Query(nativeQuery = true,
41
+            value = "select * from material_info where " +
42
+                    "(:materialName = '' or material_name like concat('%', :materialName, '%')) " +
43
+                    "order by update_time"
44
+    )
45
+    Page<MaterialInfo> pageQuery(@Param("materialName")String materialName, Pageable pageable);
46
+}

+ 41 - 0
src/main/java/com/lqkj/link/module/zone/service/MaterialInfoService.java

@@ -0,0 +1,41 @@
1
+package com.lqkj.link.module.zone.service;
2
+
3
+import com.lqkj.link.module.zone.domain.MaterialInfo;
4
+import com.lqkj.link.module.zone.domain.ModelCategory;
5
+import org.springframework.data.domain.Page;
6
+import org.springframework.web.multipart.MultipartFile;
7
+
8
+import java.util.List;
9
+
10
+public interface MaterialInfoService {
11
+
12
+
13
+    /**
14
+     * 保存材质
15
+     * @param materialInfo
16
+     * @return
17
+     */
18
+    void sava(MaterialInfo materialInfo);
19
+
20
+    /**
21
+     * 批量删除材质
22
+     * @param materialId
23
+     */
24
+    void batchDelete(List<Integer> materialId);
25
+
26
+    /**
27
+     * 材质分页查询
28
+     * @param name
29
+     * @param page
30
+     * @param pageSize
31
+     * @return
32
+     */
33
+    Page<MaterialInfo> pageQuery(String name, Integer page, Integer pageSize);
34
+
35
+
36
+    /**
37
+     * 批量添加材质
38
+     * @param file
39
+     */
40
+    void batchAdd(MultipartFile file);
41
+}

+ 70 - 0
src/main/java/com/lqkj/link/module/zone/service/impl/MaterialInfoServiceImpl.java

@@ -0,0 +1,70 @@
1
+package com.lqkj.link.module.zone.service.impl;
2
+
3
+import com.lqkj.link.message.MessageBean;
4
+import com.lqkj.link.module.authority.repository.UserInfoRepository;
5
+import com.lqkj.link.module.zone.domain.MaterialInfo;
6
+import com.lqkj.link.module.zone.domain.ModelCategory;
7
+import com.lqkj.link.module.zone.repository.MaterialInfoRepository;
8
+import com.lqkj.link.module.zone.service.MaterialInfoService;
9
+import org.checkerframework.checker.units.qual.A;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.data.domain.Page;
12
+import org.springframework.data.domain.PageRequest;
13
+import org.springframework.data.domain.Pageable;
14
+import org.springframework.stereotype.Service;
15
+import org.springframework.transaction.annotation.Transactional;
16
+import org.springframework.web.multipart.MultipartFile;
17
+
18
+import java.util.ArrayList;
19
+import java.util.Date;
20
+import java.util.List;
21
+import java.util.Objects;
22
+
23
+@Service
24
+public class MaterialInfoServiceImpl implements MaterialInfoService {
25
+
26
+    @Autowired
27
+    private MaterialInfoRepository materialInfoRepository;
28
+
29
+    @Autowired
30
+    private UserInfoRepository userInfoRepository;
31
+
32
+    @Transactional
33
+    @Override
34
+    public void sava(MaterialInfo materialInfo) {
35
+        if ((Objects.nonNull(materialInfo.getMaterialId()) && materialInfoRepository.hasSameNameWithoutOne(materialInfo.getMaterialId(), materialInfo.getMaterialName()))
36
+            || (Objects.isNull(materialInfo.getMaterialId()) && materialInfoRepository.hasSameName(materialInfo.getMaterialName()))) {
37
+            throw new RuntimeException("材质名称不能重复!");
38
+        }
39
+        materialInfo.setUpdateTime(new Date());
40
+        materialInfoRepository.save(materialInfo);
41
+        userInfoRepository.updateRefreshStatus();
42
+    }
43
+
44
+    @Transactional
45
+    @Override
46
+    public void batchDelete(List<Integer> materialId) {
47
+        materialInfoRepository.deleteAllById(materialId);
48
+        // 更新用户资源刷新状态
49
+        userInfoRepository.updateRefreshStatus();
50
+    }
51
+
52
+
53
+    @Override
54
+    public Page<MaterialInfo> pageQuery(String name, Integer page, Integer pageSize) {
55
+        Pageable pageable = PageRequest.of(page, pageSize);
56
+        return materialInfoRepository.pageQuery(name, pageable);
57
+    }
58
+
59
+    @Override
60
+    public void batchAdd(MultipartFile file) {
61
+        String fileName = file.getOriginalFilename();
62
+        String suffix = fileName == null ? "" : fileName.substring(fileName.lastIndexOf(".") + 1);
63
+        if (!suffix.equals("zip")) {
64
+            throw new RuntimeException("上传文件类型必须是zip格式的材质文件");
65
+        }
66
+        materialInfoRepository.saveAll(new ArrayList<>());
67
+    }
68
+
69
+
70
+}

+ 25 - 0
src/main/resources/db/migration/V5__2.0.2.sql

@@ -0,0 +1,25 @@
1
+INSERT INTO "public"."authority_info" ("authority_id", "parent_id", "authority_name", "en_name", "route", "component", "redirect", "icon", "order_id") VALUES (12, NULL, '材质管理', 'Material', '/Material', '#', '/Material/MaterialMange', NULL, 12);
2
+INSERT INTO "public"."authority_info" ("authority_id", "parent_id", "authority_name", "en_name", "route", "component", "redirect", "icon", "order_id") VALUES (13, 12, '材质管理', 'MaterialMange', 'MaterialMange', 'views/Material/MaterialMange', NULL, 'carbon:skill-level-advanced', 13);
3
+
4
+INSERT INTO "public"."role_authority" ("role_id", "authority_id") VALUES (1, 12);
5
+INSERT INTO "public"."role_authority" ("role_id", "authority_id") VALUES (1, 13);
6
+
7
+create table material_info
8
+(
9
+    material_id   SERIAL not null,
10
+    material_name VARCHAR(255) null,
11
+    json_path     VARCHAR(255) null,
12
+    material_icon VARCHAR(255) null,
13
+    update_time   TIMESTAMP    null,
14
+    constraint PK_MATERIAL_INFO primary key (material_id)
15
+);
16
+comment on table material_info is
17
+'材质信息表';
18
+comment on column material_info.material_id is
19
+'材质id';
20
+comment on column material_info.material_name is
21
+'材质名称';
22
+comment on column material_info.json_path is
23
+'材质json路径';
24
+comment on column material_info.material_icon is
25
+'材质图标';