From d68c61517a3a6d4ec4d47844c21bdc143f99cbab Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 17 四月 2024 22:58:05 +0800
Subject: [PATCH] 大屏接口

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java |  151 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 110 insertions(+), 41 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java
index f4a26a8..52dc2e2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldCategoryServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageDTO;
@@ -10,6 +11,7 @@
 import com.ruoyi.common.utils.BeanUtils;
 import com.ruoyi.common.utils.CollUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.TbField;
 import com.ruoyi.system.domain.TbFieldCategory;
 import com.ruoyi.system.dto.FieldCategoryDTO;
 import com.ruoyi.system.dto.ShowHideDTO;
@@ -17,14 +19,17 @@
 import com.ruoyi.system.mapper.TbFieldCategoryMapper;
 import com.ruoyi.system.query.FieldCategoryQuery;
 import com.ruoyi.system.service.TbFieldCategoryService;
+import com.ruoyi.system.service.TbFieldService;
 import com.ruoyi.system.vo.FieldCategoryDetailVO;
 import com.ruoyi.system.vo.FieldCategoryVO;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -34,8 +39,13 @@
  * @author mitao
  * @since 2024-03-13
  */
+@Slf4j
 @Service
-public class TbFieldCategoryServiceImpl extends ServiceImpl<TbFieldCategoryMapper, TbFieldCategory> implements TbFieldCategoryService {
+@RequiredArgsConstructor
+public class TbFieldCategoryServiceImpl extends
+        ServiceImpl<TbFieldCategoryMapper, TbFieldCategory> implements TbFieldCategoryService {
+
+    private final TbFieldService tbFieldService;
 
     @Override
     public void add(FieldCategoryDTO dto) {
@@ -47,7 +57,7 @@
         //二级分类
         List<FieldCategoryDTO> children = dto.getChildren();
         if (!CollectionUtils.isEmpty(children)) {
-            children.forEach(item->{
+            children.forEach(item -> {
                 TbFieldCategory twoCategory = new TbFieldCategory();
                 twoCategory.setParentId(oneCategory.getId());
                 twoCategory.setFieldCategoryName(item.getFieldCategoryName());
@@ -55,7 +65,7 @@
                 //三级分类
                 List<FieldCategoryDTO> next = item.getChildren();
                 if (!CollectionUtils.isEmpty(next)) {
-                    next.forEach(nextItem->{
+                    next.forEach(nextItem -> {
                         TbFieldCategory threeCategory = new TbFieldCategory();
                         threeCategory.setParentId(twoCategory.getId());
                         threeCategory.setFieldCategoryName(nextItem.getFieldCategoryName());
@@ -69,8 +79,10 @@
     @Override
     public PageDTO<FieldCategoryVO> queryPage(FieldCategoryQuery query) {
         Page<TbFieldCategory> page = this.lambdaQuery()
-                .like(StringUtils.isNotBlank(query.getFieldCategoryName()), TbFieldCategory::getFieldCategoryName, query.getFieldCategoryName())
-                .eq(ObjectUtils.isNotEmpty(query.getStatus()), TbFieldCategory::getStatus, query.getStatus())
+                .like(StringUtils.isNotBlank(query.getFieldCategoryName()),
+                        TbFieldCategory::getFieldCategoryName, query.getFieldCategoryName())
+                .eq(ObjectUtils.isNotEmpty(query.getStatus()), TbFieldCategory::getStatus,
+                        query.getStatus())
                 .eq(TbFieldCategory::getParentId, 0)
                 .orderByDesc(TbFieldCategory::getCreateTime)
                 .page(new Page<>(query.getPageNum(), query.getPageSize()));
@@ -86,29 +98,33 @@
         updateCategoryAndChildren(dto.getId(), dto.getStatus());
     }
 
-    private void updateCategoryAndChildren(Integer id, ShowStatusEnum status) {
+    private void updateCategoryAndChildren(Long id, ShowStatusEnum status) {
         TbFieldCategory category = this.validateParam(id);
         this.lambdaUpdate()
                 .eq(TbFieldCategory::getId, id)
                 .set(TbFieldCategory::getStatus, status)
                 .update();
-        List<TbFieldCategory> children = this.lambdaQuery().eq(TbFieldCategory::getParentId, category.getId()).list();
+        List<TbFieldCategory> children = this.lambdaQuery()
+                .eq(TbFieldCategory::getParentId, category.getId()).list();
         if (CollUtils.isNotEmpty(children)) {
-            List<Integer> childIds = children.stream().map(TbFieldCategory::getId).collect(Collectors.toList());
+            List<Long> childIds = children.stream().map(TbFieldCategory::getId)
+                    .collect(Collectors.toList());
             childIds.forEach(childId -> updateCategoryAndChildren(childId, status));
         }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void deleteChildren(Integer id) {
+    public void deleteChildren(Long id) {
         //认定为二级分类
         TbFieldCategory category = this.getById(id);
         if (Objects.nonNull(category)) {
             //查询是否有三级分类
-            List<TbFieldCategory> threeCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, id).list();
+            List<TbFieldCategory> threeCategoryList = this.lambdaQuery()
+                    .eq(TbFieldCategory::getParentId, id).list();
             if (CollectionUtils.isNotEmpty(threeCategoryList)) {
-                List<Integer> ids = threeCategoryList.stream().map(TbFieldCategory::getId).collect(Collectors.toList());
+                List<Long> ids = threeCategoryList.stream().map(TbFieldCategory::getId)
+                        .collect(Collectors.toList());
                 //删除该二级分类下面的三级分类
                 this.removeByIds(ids);
             }
@@ -119,17 +135,21 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void delete(Integer id) {
+    public void delete(Long id) {
         //一级分类
         validateParam(id);
         //查询是否有二级分类
-        List<TbFieldCategory> threeCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, id).list();
+        List<TbFieldCategory> threeCategoryList = this.lambdaQuery()
+                .eq(TbFieldCategory::getParentId, id).list();
         if (CollectionUtils.isNotEmpty(threeCategoryList)) {
-            List<Integer> ids = threeCategoryList.stream().map(TbFieldCategory::getId).collect(Collectors.toList());
+            List<Long> ids = threeCategoryList.stream().map(TbFieldCategory::getId)
+                    .collect(Collectors.toList());
             //查询三级分类
-            List<TbFieldCategory> list = this.lambdaQuery().in(TbFieldCategory::getParentId, ids).list();
+            List<TbFieldCategory> list = this.lambdaQuery().in(TbFieldCategory::getParentId, ids)
+                    .list();
             if (CollectionUtils.isNotEmpty(list)) {
-                List<Integer> ids1 = list.stream().map(TbFieldCategory::getId).collect(Collectors.toList());
+                List<Long> ids1 = list.stream().map(TbFieldCategory::getId)
+                        .collect(Collectors.toList());
                 //删除三级分类
                 this.removeByIds(ids1);
             }
@@ -140,7 +160,7 @@
         this.removeById(id);
     }
 
-    private TbFieldCategory validateParam(Integer id) {
+    private TbFieldCategory validateParam(Long id) {
         TbFieldCategory category = this.getById(id);
         if (Objects.isNull(category)) {
             throw new ServiceException("非法参数");
@@ -149,37 +169,82 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void edit(FieldCategoryUpdateDTO dto) {
+        log.info("主线程名{}", Thread.currentThread().getName());
         validateParam(dto.getId());
         //更新一级分类
-        updateCategory(dto);
+        TbFieldCategory category1 = updateCategory(dto, null);
+        CompletableFuture.runAsync(() -> handleFieldCategory(category1));
         List<FieldCategoryUpdateDTO> children = dto.getChildren();
         //更新二级分类
-        if (!CollectionUtils.isEmpty(children)) {
-            children.forEach(item->{
-                updateCategory(item);
+        if (CollUtils.isNotEmpty(children)) {
+            children.forEach(item -> {
+                //二级分类
+                TbFieldCategory category2 = updateCategory(item, category1);
+                CompletableFuture.runAsync(() -> handleFieldCategory(category2));
                 //三级分类
                 List<FieldCategoryUpdateDTO> next = item.getChildren();
                 if (!CollectionUtils.isEmpty(next)) {
-                    next.forEach(this::updateCategory);
+                    for (FieldCategoryUpdateDTO fieldCategoryUpdateDTO : next) {
+                        TbFieldCategory category3 = updateCategory(fieldCategoryUpdateDTO,
+                                category2);
+                        CompletableFuture.runAsync(() -> handleFieldCategory(category3));
+                    }
                 }
             });
         }
     }
 
-    private void updateCategory(FieldCategoryUpdateDTO dto) {
-        if (dto == null) return;
-        this.lambdaUpdate()
-                .set(TbFieldCategory::getFieldCategoryName, dto.getFieldCategoryName())
-                .set(Objects.nonNull(dto.getSortOrder()),TbFieldCategory::getSortOrder, dto.getSortOrder())
-                .eq(TbFieldCategory::getId, dto.getId())
-                .update();
+    protected void handleFieldCategory(TbFieldCategory category) {
+        log.info("开始处理字段分类名称同步,线程名{}", Thread.currentThread().getName());
+        //查询使用到该分类的字段
+        List<TbField> list1 = tbFieldService.list(Wrappers.<TbField>lambdaQuery()
+                .eq(TbField::getLevelOneCategoryId, category.getId()));
+        if (CollUtils.isNotEmpty(list1)) {
+            List<TbField> fieldList = list1.stream().peek(item -> {
+                item.setLevelOneCategoryId(category.getId());
+                item.setLevelOneCategory(category.getFieldCategoryName());
+            }).collect(Collectors.toList());
+            tbFieldService.updateBatchById(fieldList);
+        }
+        List<TbField> list2 = tbFieldService.list(Wrappers.<TbField>lambdaQuery()
+                .eq(TbField::getLevelTwoCategoryId, category.getId()));
+        if (CollUtils.isNotEmpty(list2)) {
+            List<TbField> fieldList = list2.stream().peek(item -> {
+                item.setLevelTwoCategoryId(category.getId());
+                item.setLevelTwoCategory(category.getFieldCategoryName());
+            }).collect(Collectors.toList());
+            tbFieldService.updateBatchById(fieldList);
+        }
+        List<TbField> list3 = tbFieldService.list(Wrappers.<TbField>lambdaQuery()
+                .eq(TbField::getLevelThreeCategoryId, category.getId()));
+        if (CollUtils.isNotEmpty(list2)) {
+            List<TbField> fieldList = list3.stream().peek(item -> {
+                item.setLevelThreeCategoryId(category.getParentId());
+                item.setLevelThreeCategory(category.getFieldCategoryName());
+            }).collect(Collectors.toList());
+            tbFieldService.updateBatchById(fieldList);
+        }
+    }
+
+    private TbFieldCategory updateCategory(FieldCategoryUpdateDTO dto,
+            TbFieldCategory parent) {
+        TbFieldCategory category = BeanUtils.copyBean(dto, TbFieldCategory.class);
+        if (Objects.isNull(dto.getId()) && Objects.nonNull(parent)) {
+            assert category != null;
+            category.setParentId(parent.getId());
+            this.save(category);
+        } else {
+            this.updateById(category);
+        }
+        return category;
     }
 
     @Override
-    public List<FieldCategoryVO> queryFieldCategories(Integer id) {
+    public List<FieldCategoryVO> queryFieldCategories(Long id) {
         List<TbFieldCategory> list = this.lambdaQuery()
-                .select(TbFieldCategory::getId,TbFieldCategory::getFieldCategoryName)
+                .select(TbFieldCategory::getId, TbFieldCategory::getFieldCategoryName)
                 .eq(TbFieldCategory::getParentId, id)
                 .eq(TbFieldCategory::getStatus, ShowStatusEnum.SHOW)
                 .list();
@@ -187,21 +252,25 @@
     }
 
     @Override
-    public FieldCategoryDetailVO getDetailsById(Integer id) {
+    public FieldCategoryDetailVO getDetailsById(Long id) {
         TbFieldCategory oneCategory = this.getById(id);
         if (Objects.isNull(oneCategory)) {
             return new FieldCategoryDetailVO();
         }
         FieldCategoryDetailVO vo = BeanUtils.copyBean(oneCategory, FieldCategoryDetailVO.class);
         //根据一级分类id,查询二级分类
-        List<TbFieldCategory> twoCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, oneCategory.getId()).list();
-        twoCategoryList.forEach(item->{
-            FieldCategoryDetailVO twoCategoryVO = BeanUtils.copyBean(item, FieldCategoryDetailVO.class);
+        List<TbFieldCategory> twoCategoryList = this.lambdaQuery()
+                .eq(TbFieldCategory::getParentId, oneCategory.getId()).list();
+        twoCategoryList.forEach(item -> {
+            FieldCategoryDetailVO twoCategoryVO = BeanUtils.copyBean(item,
+                    FieldCategoryDetailVO.class);
             vo.getChildren().add(twoCategoryVO);
             //根据二级分类id,查询三级分类
-            List<TbFieldCategory> threeCategoryList = this.lambdaQuery().eq(TbFieldCategory::getParentId, item.getId()).list();
-            threeCategoryList.forEach(threeCategory->{
-                FieldCategoryDetailVO threeCategoryVO = BeanUtils.copyBean(threeCategory, FieldCategoryDetailVO.class);
+            List<TbFieldCategory> threeCategoryList = this.lambdaQuery()
+                    .eq(TbFieldCategory::getParentId, item.getId()).list();
+            threeCategoryList.forEach(threeCategory -> {
+                FieldCategoryDetailVO threeCategoryVO = BeanUtils.copyBean(threeCategory,
+                        FieldCategoryDetailVO.class);
                 twoCategoryVO.getChildren().add(threeCategoryVO);
             });
         });

--
Gitblit v1.7.1