Browse Source

素材开发-0.01

MOKASZ\lw12420 1 year ago
parent
commit
027ad07974
11 changed files with 250 additions and 18 deletions
  1. 1 1
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/BackgroupGroupController.java
  2. 31 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/ImageExcelController.java
  3. 10 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/data/image/ImageDeleteReq.java
  4. 10 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/data/image/ImageListRes.java
  5. 16 3
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/data/image/ImageSaveRes.java
  6. 19 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/repository/sourceMaterial/ImageRepository.java
  7. 99 14
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementImpl.java
  8. 7 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementInterface.java
  9. 42 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/ImageService.java
  10. 5 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/MaterialManagementRedisKey.java
  11. 10 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/interfacelist/ImageInterface.java

+ 1 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/BackgroupGroupController.java

@@ -31,7 +31,7 @@ public class BackgroupGroupController {
      * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link BackgroupImage}>>>
      */
     @GetMapping("list")
-    public Mono<RStatus<Paged<BackgroupImageResNew>>> pageBackgroup(Integer page, Integer size){
+    public Mono<RStatus<Paged<BackgroupImageResNew>>> pageBackgroup(@RequestParam("page") Integer page, @RequestParam("size")  Integer size){
        return  sourceMaterialInterface.pageBackgroup(page,size);
     }
 

+ 31 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/ImageExcelController.java

@@ -1,8 +1,12 @@
 package com.webflux.launchadmin.mysql.controller.sourceMaterial;
 
+import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.BackgroupGroup.BackgroupImageSaveResNew;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.BackgroupGroup.ExcelDataRes;
+import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image.ImageDeleteReq;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image.ImageSaveRes;
+import com.webflux.launchadmin.mysql.entity.planNew.BackgroupImage;
 import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.MaterialManagementInterface;
+import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
 import jakarta.annotation.Resource;
 import org.springframework.http.HttpStatus;
@@ -10,6 +14,12 @@ import org.springframework.http.codec.multipart.FilePart;
 import org.springframework.web.bind.annotation.*;
 import reactor.core.publisher.Mono;
 
+
+/**
+ * 图片素材
+ * @author lw12420
+ * @date 2024/08/21
+ */
 @RestController
 @RequestMapping("out/image")
 public class ImageExcelController {
@@ -39,4 +49,25 @@ public class ImageExcelController {
         Mono<String> excelDataResMono = materialManagementInterface.importDataExcel( data);
         return RStatus.success(excelDataResMono);
     }
+
+    /**
+     * 列表查询
+     * @param page
+     * @param size
+     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link BackgroupImage}>>>
+     */
+    @GetMapping("list")
+    public Mono<RStatus<Paged<ImageSaveRes>>> pageBackgroup(@RequestParam("page") Integer page,@RequestParam("size")  Integer size,Integer type,String classification ){
+        return   materialManagementInterface.pageImage(page,size, type, classification);
+
+    }
+    /**
+     * 删除 (同步go)
+     * @param dto
+     * @return {@link Mono}<{@link RStatus}<{@link BackgroupImageSaveResNew}>>
+     */
+    @PostMapping("delete")
+    public Mono<RStatus<ImageDeleteReq>> delete(@RequestBody ImageDeleteReq dto) {
+        return  materialManagementInterface.deleteImage(dto);
+    }
 }

+ 10 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/data/image/ImageDeleteReq.java

@@ -0,0 +1,10 @@
+package com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class ImageDeleteReq {
+    @NotNull
+    private  String id;
+}

+ 10 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/data/image/ImageListRes.java

@@ -0,0 +1,10 @@
+package com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class ImageListRes {
+    @NotNull
+    private   Long id;
+}

+ 16 - 3
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/data/image/ImageSaveRes.java

@@ -1,10 +1,23 @@
 package com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image;
 
-import jakarta.validation.constraints.NotNull;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import java.time.ZonedDateTime;
 
 @Data
 public class ImageSaveRes {
-    @NotNull
-    private   Long id;
+    private  Long id;
+    private String image;
+    private String createUser;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private ZonedDateTime createdAt;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private ZonedDateTime updatedAt;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private ZonedDateTime deletedAt;
+    private Integer type;
+    private Integer groupType;
+    private String groupTypeName;
+    private Integer groupTypeId;
+    private Integer sizeType;
 }

+ 19 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/repository/sourceMaterial/ImageRepository.java

@@ -0,0 +1,19 @@
+package com.webflux.launchadmin.mysql.repository.sourceMaterial;
+
+import com.webflux.launchadmin.mysql.entity.planNew.BackgroupImage;
+import com.webflux.launchadmin.mysql.entity.planNew.Image;
+import org.springframework.data.r2dbc.repository.Modifying;
+import org.springframework.data.r2dbc.repository.Query;
+import org.springframework.data.repository.reactive.ReactiveCrudRepository;
+import org.springframework.stereotype.Repository;
+import reactor.core.publisher.Mono;
+
+import java.time.ZonedDateTime;
+
+@Repository
+public interface ImageRepository extends ReactiveCrudRepository<Image,Long> {
+    @Modifying
+    @Query("UPDATE image SET deleted_at = :deletedAt where id = :id")
+    Mono<Image> deleteLogicFor(ZonedDateTime deletedAt, Long id);
+
+}

+ 99 - 14
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementImpl.java

@@ -10,6 +10,7 @@ import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.BackgroupGro
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.album.AlbumDto;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.album.AlbumItemReq;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.album.AlbumReq;
+import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image.ImageDeleteReq;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image.ImageSaveRes;
 import com.webflux.launchadmin.mysql.entity.planNew.BackgroupImage;
 import com.webflux.launchadmin.mysql.entity.planNew.BackgroupImageItem;
@@ -21,11 +22,8 @@ import com.webflux.launchadmin.mysql.repository.sourceMaterial.*;
 import com.webflux.launchadmin.mysql.service.sourceMaterial.SourceMaterialInterface;
 import com.webflux.launchadmin.mysql.service.sourceMaterial.data.image.ImageExcelRedisCache;
 import com.webflux.launchadmin.mysql.service.sourceMaterial.data.sql.Where;
-import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist.AlbumInterface;
-import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist.AlbumItemInterface;
-import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist.BackgroupImageInterface;
+import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist.*;
 import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.BackgroupImageItemService;
-import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist.GroupTypeinterface;
 import com.webflux.launchadmin.mysql.service.upload.UploadOssInterface;
 import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
@@ -35,6 +33,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.redis.core.ReactiveRedisTemplate;
 import org.springframework.data.relational.core.query.Criteria;
@@ -78,6 +77,10 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
     BackgroupImageInterface backgroupImageInterface;
     @Resource
     BackgroupImageItemService backgroupImageItemInterface;
+    @Autowired
+    private ImageRepository imageRepository;
+    @Autowired
+    private ImageInterface imageInterface;
     //素材图片缓存
     private static final String hashKey = "execel_upload_cache_Image_";
     //Todo  GroupType
@@ -449,19 +452,102 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
     public Mono<String> importDataExcel(ImageSaveRes data) {
         Long id = data.getId();
         String userName = BaseContextHandler.getUserName();
-        Mono<String> objectMono = reactiveRedisImageTemplate.opsForValue().get(hashKey + id).flatMap(f->{
-            if(Objects.nonNull(f)){
-
+        return reactiveRedisImageTemplate.opsForValue().get(hashKey + id).flatMap(f->{
+            if(Objects.isNull(f)){
+                return Mono.error(new BaseException("保存失败请重新上传"));
+            }
+            JSONArray jsonArray;
+            try {
+                 jsonArray = JSONUtil.parseArray(f);
+            } catch (Exception e) {
+                return Mono.error(new BaseException("解析上传excel内容失败E:"+e.getMessage()+"-JSON::"+f));
+            }
+            List<ImageExcelRedisCache> imageExcelRedisCaches;
+            try {
+                imageExcelRedisCaches = jsonArray.toList(ImageExcelRedisCache.class);
+            } catch (Exception e) {
+                return Mono.error(new BaseException("解析上传excel内容转ImageExcelRedisCache失败E:"+e.getMessage()+"-JSON::"+f));
             }
-            return Mono.just(f.toString());
+            return   Flux.fromIterable(imageExcelRedisCaches).flatMap(image -> groupTypeRepository.findByName(image.getGroupTypeName()).collectList()
+                    .switchIfEmpty(Mono.just(List.of()))
+                    .onErrorResume(throwable -> Mono.error(new BaseException("查询GroupType Error::" + throwable.getMessage())))
+                    .flatMap(list -> {
+                        Mono<GroupType> groupTypeMono;
+                        if (list.isEmpty()) {
+                            groupTypeMono = saveMysqlAndRedisGroupType(new GroupType(null, image.getGroupTypeName(), "1"));
+                        } else {
+                            groupTypeMono = Mono.just(list.get(0));
+                        }
+                        return groupTypeMono;
+                    }).flatMap(groupType -> {
+                        Image image1 = new Image(null
+                                , image.getImage(),
+                                userName,
+                                ZonedDateTime.now(),
+                                null,
+                                null,
+                                image.getType(),
+                                1,
+                                image.getGroupTypeName(),
+                                Integer.valueOf(String.valueOf(groupType.id())),
+                                image.getSizeType()
+                        );
+                        return template.insert(image1)
+                                .flatMap(imageInterface::saveMysqlAndRedisCache)
+                                .onErrorResume(throwable -> Mono.error(new BaseException("保存图片失败——" + throwable.getMessage())));
+                    })).collectList().flatMap(list->{
+           String collect = list.stream().map(Image::id).map(String::valueOf).collect(Collectors.joining(","));
+           return Mono.just(collect);
+       });
         });
+    }
+
+    @Override
+    public Mono<RStatus<Paged<ImageSaveRes>>> pageImage(Integer page, Integer size, Integer type, String classification) {
+        ArrayList<Where> wheres = new ArrayList<>();
+            Where where0 = new Where();
+            where0.setKey("type");
+            where0.setWhereType(1);
+            where0.setValue(type);
+            wheres.add(where0);
+        if(Objects.nonNull(classification)){
+            Where where = new Where();
+            where.setKey("group_type_name");
+            where.setWhereType(2);
+            where.setValue(classification);
+            wheres.add(where);
+        }
+        Mono<RStatus<Paged<ImageSaveRes>>> pages = sourceMaterialInterface.pageAndFunctionRtE(wheres, Image.class, size, page,f->
+                Flux.fromIterable(f).flatMap(item->{
+                    ImageSaveRes imageSaveRes = new ImageSaveRes();
+                    imageSaveRes.setImage(item.image());
+                    imageSaveRes.setCreatedAt(item.createdAt());
+                    imageSaveRes.setCreateUser(item.createUser());
+                    imageSaveRes.setId(item.id());
+                    imageSaveRes.setType(item.type());
+                    imageSaveRes.setGroupType(item.groupType());
+                    imageSaveRes.setGroupTypeId(item.groupTypeId());
+                    imageSaveRes.setGroupTypeName(item.groupTypeName());
+                    imageSaveRes.setGroupType(item.sizeType());
+                    imageSaveRes.setUpdatedAt(item.updatedAt());
+                  return Mono.just(imageSaveRes);
+                }).collectList());
+        return pages;
+    }
 
-//        reactiveRedisImageTemplate.opsForHash().scan(hashKey+id).(entry->{
-//
-//
-//        })
-        return objectMono;
+    @Override
+    public Mono<RStatus<ImageDeleteReq>> deleteImage(ImageDeleteReq dto) {
+        String id = dto.getId();
+        String[] split = id.split(",");
+        ZonedDateTime now = ZonedDateTime.now();
+        Mono<ImageDeleteReq> imageDeleteReqMono = Flux.fromIterable(List.of(split))
+                .flatMap(i -> imageRepository.deleteLogicFor(now, Long.valueOf(i)))
+                .onErrorResume(throwable -> Mono.error(new BaseException("删除失败--" + throwable.getMessage())))
+                .flatMap( imageInterface::deleteMysqlAndRedisCache)
+                .collectList().flatMap(f -> Mono.just(dto));
+        return RStatus.success(imageDeleteReqMono);
     }
+
     //Todo  Image >>>>>>>>>>>>>>>>>
     //Todo  相册 Album <<<<<<<<<<<<<<
     @Resource
@@ -562,7 +648,6 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
             return Mono.just(albumDataRes);
         });
     }
-
     private Mono<RStatus<Boolean>> addAlbum(AlbumReq albumReq, String userName, String userId, List<AlbumItemReq> list) {
         Mono<Boolean> then = Flux.fromIterable(list).flatMap(item ->
                 {

+ 7 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementInterface.java

@@ -5,6 +5,7 @@ import com.webflux.launchadmin.mysql.controller.planNew.res.BackgroupImageRes;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.BackgroupGroup.*;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.album.AlbumDto;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.album.AlbumReq;
+import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image.ImageDeleteReq;
 import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.image.ImageSaveRes;
 import com.webflux.launchadmin.mysql.entity.planNew.BackgroupImage;
 import com.webflux.launchadmin.mysql.entity.planNew.BackgroupImageItem;
@@ -68,6 +69,10 @@ public interface MaterialManagementInterface {
 
     Mono<String> importDataExcel(ImageSaveRes data);
 
+    Mono<RStatus<Paged<ImageSaveRes>>> pageImage(Integer page, Integer size, Integer type, String classification);
+
+    Mono<RStatus<ImageDeleteReq>> deleteImage(ImageDeleteReq dto);
+
     Mono<RStatus<Paged<Album>>> pageAlbum(AlbumDto albumDto);
 
     Mono<RStatus<Boolean>> addOrUpdate(AlbumReq albumReq);
@@ -77,4 +82,6 @@ public interface MaterialManagementInterface {
     Mono<RStatus<Boolean>> deleteAlbum(Long id);
 
     Mono<AlbumDataRes> infoOut(Long[] id);
+
+
 }

+ 42 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/ImageService.java

@@ -0,0 +1,42 @@
+package com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache;
+
+import com.webflux.launchadmin.global.BaseException;
+import com.webflux.launchadmin.mysql.entity.planNew.Image;
+import com.webflux.launchadmin.mysql.entity.sourceMaterial.Album;
+import com.webflux.launchadmin.mysql.entity.sourceMaterial.AlbumItem;
+import com.webflux.launchadmin.mysql.repository.sourceMaterial.AlbumItemRepository;
+import com.webflux.launchadmin.mysql.repository.sourceMaterial.AlbumRepository;
+import com.webflux.launchadmin.mysql.repository.sourceMaterial.ImageRepository;
+import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist.AlbumItemInterface;
+import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist.ImageInterface;
+import jakarta.annotation.Resource;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import reactor.core.publisher.Mono;
+
+@Service
+public class ImageService implements ImageInterface {
+
+    @Resource
+    private ImageRepository imageRepository;
+
+    @Override
+    @CachePut(cacheNames = MaterialManagementRedisKey.IMAGE, key = "#image.id()")
+    public Mono<Image> saveMysqlAndRedisCache(Image image) {
+        return Mono.just(image);
+    }
+    // 删除缓存
+    @CacheEvict(cacheNames = MaterialManagementRedisKey.IMAGE, key = "#image.id()")
+    public Mono<Image> deleteMysqlAndRedisCache(Image image) {
+        return Mono.just(image);
+    }
+    @Cacheable(cacheNames = MaterialManagementRedisKey.IMAGE, key = "#id")
+    public Mono<Image> getRedisOrMysql(Long id) {
+        return imageRepository.findById(id)
+                .switchIfEmpty(Mono.error(new BaseException("id 查询结果为空")))
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询异常::" + throwable.getMessage())));
+    }
+
+}

+ 5 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/MaterialManagementRedisKey.java

@@ -27,4 +27,9 @@ public class MaterialManagementRedisKey {
      * 相册item
      */
     public final static String ALBUMITEM = START+"album-item-cache";
+
+    /**
+     * 图片
+     */
+    public final static String IMAGE = START+"image-cache";
 }

+ 10 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/interfacelist/ImageInterface.java

@@ -0,0 +1,10 @@
+package com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.redisCache.interfacelist;
+
+import com.webflux.launchadmin.mysql.entity.planNew.Image;
+import reactor.core.publisher.Mono;
+
+public interface ImageInterface {
+    Mono<Image> saveMysqlAndRedisCache(Image image);
+    Mono<Image> deleteMysqlAndRedisCache(Image image);
+    Mono<Image> getRedisOrMysql(Long id);
+}