From e4c69bcd4ba18dd022dd4ed86da96c5e4b8b3150 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 14 十月 2024 02:13:44 +0800
Subject: [PATCH] 动态列导出编辑完成

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java |  143 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 115 insertions(+), 28 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
index 15e8456..646081a 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
@@ -9,9 +9,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.dataListener.CurrencyDataListener;
 import com.ycl.platform.base.AbsVo;
-import com.ycl.platform.domain.entity.ReportAuditingRecord;
-import com.ycl.platform.domain.entity.YwPeople;
-import com.ycl.platform.domain.entity.YwPoint;
+import com.ycl.platform.domain.entity.*;
 import com.ycl.platform.domain.excel.PointExport;
 import com.ycl.platform.domain.form.BatchEditPointForm;
 import com.ycl.platform.domain.form.YwPointForm;
@@ -25,6 +23,7 @@
 import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.platform.mapper.YwPeopleMapper;
 import com.ycl.platform.mapper.YwPointMapper;
+import com.ycl.platform.service.DynamicColumnService;
 import com.ycl.platform.service.YwPointService;
 import com.ycl.platform.service.YwUnitService;
 import com.ycl.system.Result;
@@ -34,11 +33,13 @@
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.SecurityUtils;
 import com.ycl.utils.poi.EasyExcelImportUtils;
+import com.ycl.utils.uuid.IdUtils;
 import constant.PointHeaderConstant;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
@@ -67,6 +68,7 @@
     private final SysDeptMapper sysDeptMapper;
     private final TMonitorMapper monitorMapper;
     private final DynamicColumnMapper dynamicColumnMapper;
+    private final ApplicationContext context;
 
     /**
      * 娣诲姞
@@ -250,10 +252,11 @@
         List<DynamicColumnVO> dynamics = dynamicColumnMapper.getData();
         Map<Integer, List<DynamicColumnVO>> dynamicMap = new HashMap<>();
         if (!CollectionUtils.isEmpty(dynamics)) {
-            dynamicMap = dynamics.stream().filter(vo ->vo.getId()!=null).collect(Collectors.groupingBy(AbsVo::getId));
+            dynamicMap = dynamics.stream().filter(vo -> vo.getRefId() != null).collect(Collectors.groupingBy(DynamicColumnVO::getRefId));
         }
         //瀹氫箟琛ㄥご鍒楄〃
         LinkedHashSet<String> headers = new LinkedHashSet<>();
+        headers.add(PointHeaderConstant.ID);
         headers.add(PointHeaderConstant.Point_Name);
         headers.add(PointHeaderConstant.Serial_Number);
         headers.add(PointHeaderConstant.IP);
@@ -271,12 +274,13 @@
         for (PointExport export : exportData) {
             List<Object> list = new ArrayList<>();
             //闇�瑕佷繚璇侀『搴忎竴鑷�
+            list.add(export.getId());
             list.add(export.getPointName());
             list.add(export.getSerialNumber());
             list.add(export.getPointIP());
             list.add(export.getProvinceTagString());
             list.add(export.getImportantCommandImageTagString());
-            list.add(export.getDeptTag());
+            list.add(export.getDeptTagString());
             for (String header : headersList) {
                 //鍒涘缓涓�涓彉閲忚褰曟壘娌℃壘鍒拌繖涓猦eader
                 boolean flag = false;
@@ -308,27 +312,50 @@
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result importData(MultipartFile file, Integer unitId, Date startTime, Date endTime, Boolean
-            needUpdateUnit) throws IOException {
-//        List<Map<String,String>> list = EasyExcelImportUtils.makeData(file);
-        Consumer<List<PointExport>> consumer = (dataList) -> {
-            try {
-                this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit);
-            } catch (ExecutionException e) {
-                e.printStackTrace();
-            } catch (InterruptedException e) {
-                e.printStackTrace();
+            needUpdateUnit) throws IOException, ExecutionException, InterruptedException {
+        List<Map<String, String>> list = EasyExcelImportUtils.makeData(file);
+        List<PointExport> dataList = new ArrayList<>();
+//        Consumer<List<PointExport>> consumer = (dataList) -> {
+//            try {
+//                this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit);
+//            } catch (ExecutionException e) {
+//                e.printStackTrace();
+//            } catch (InterruptedException e) {
+//                e.printStackTrace();
+//            }
+//        };
+//        EasyExcel.read(file.getInputStream(), PointExport.class, new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll();
+        for (Map<String, String> map : list) {
+            PointExport pointExport = new PointExport();
+            pointExport.setId(Integer.valueOf(map.get(PointHeaderConstant.ID)));
+            pointExport.setPointName(map.get(PointHeaderConstant.Point_Name));
+            pointExport.setPointIP(map.get(PointHeaderConstant.IP));
+            pointExport.setSerialNumber(map.get(PointHeaderConstant.Serial_Number));
+            pointExport.setProvinceTag("鏄�".equals(map.get(PointHeaderConstant.Province_Tag)));
+            pointExport.setImportantCommandImageTag("鏄�".equals(map.get(PointHeaderConstant.Impotrant_Command_Image)));
+            pointExport.setDeptTag("鏄�".equals(map.get(PointHeaderConstant.Dept_Tag)));
+            List<DynamicColumnVO> dynamics = new ArrayList<>();
+            // 澶勭悊鍔ㄦ�佸垪
+            for (Map.Entry<String, String> entry : map.entrySet()) {
+                String key = entry.getKey();
+                if (!PointHeaderConstant.KNOWN_KEYS.contains(key)) {
+                    DynamicColumnVO dynamicColumnVO = new DynamicColumnVO();
+                    dynamicColumnVO.setRefId(pointExport.getId());
+                    dynamicColumnVO.setLabelValue(entry.getKey());
+                    dynamicColumnVO.setColumnValue(entry.getValue());
+                    dynamicColumnVO.setPropName(IdUtils.randomNO(new Date()));
+                    dynamicColumnVO.setTableName("t_yw_point");
+                    dynamics.add(dynamicColumnVO);
+                }
             }
-        };
-        EasyExcel.read(file.getInputStream(), PointExport.class, new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll();
-//        for (Map<String, String> map : list) {
-//            PointExport pointExport = new PointExport();
-//            pointExport.setPointName(map.get(PointHeaderConstant.Point_Name));
-//            pointExport.setPointIP(map.get(PointHeaderConstant.IP));
-//            pointExport.setSerialNumber(map.get(PointHeaderConstant.Serial_Number));
-//        }
-//        this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit);
-//        System.out.println(list);
+            pointExport.setDynamicData(dynamics);
+            dataList.add(pointExport);
+        }
+        YwPointServiceImpl self = context.getBean(YwPointServiceImpl.class);
+        self.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit);
+        self.updateDynamic(dataList);
         return Result.ok();
     }
 
@@ -343,7 +370,6 @@
      * @param dataList
      * @param unitId
      */
-    @Transactional(rollbackFor = Exception.class)
     public void updatePoint(List<PointExport> dataList, Integer unitId, Date startTime, Date endTime, Boolean
             needUpdateUnit) throws ExecutionException, InterruptedException {
         if (CollectionUtils.isEmpty(dataList)) {
@@ -351,9 +377,9 @@
         }
         List<YwPoint> pointList = dataList.stream().map(item -> {
             YwPoint point = new YwPoint();
-            point.setImportantCommandImageTag("鏄�".equals(item.getImportantCommandImageTagString()));
-            point.setProvinceTag("鏄�".equals(item.getProvinceTagString()));
-            point.setDeptTag("鏄�".equals(item.getDeptTag()));
+            point.setImportantCommandImageTag(item.getImportantCommandImageTag());
+            point.setProvinceTag(item.getProvinceTag());
+            point.setDeptTag(item.getDeptTag());
             if (needUpdateUnit) {
                 if (Objects.nonNull(unitId)) {
                     point.setUnitId(Long.valueOf(unitId));
@@ -373,6 +399,67 @@
         this.waitAllFinishAndGetResult(pointList);
     }
 
+    @Override
+    public void updateDynamic(List<PointExport> dataList) {
+        List<DynamicColumnValue> insertList = new ArrayList<>();
+        List<DynamicColumnValue> updateList = new ArrayList<>();
+        List<Integer> deleteList = new ArrayList<>();
+        //鏌ュ嚭鎵�鏈夌绫诲姩鎬佸垪浣滀负瀛楀吀
+        Map<String, Integer> dictionary = new LambdaQueryChainWrapper<>(dynamicColumnMapper)
+                .list().stream().collect(Collectors.toMap(DynamicColumn::getLabelValue, DynamicColumn::getId));
+        //鏌ュ嚭鐐逛綅琛ㄧ殑鎵�鏈夊姩鎬佸垪
+        List<DynamicColumnVO> dynamicVOList = dynamicColumnMapper.getData();
+        Map<Integer, List<DynamicColumnVO>> dynamicVOMap = new HashMap<>();
+        if (!CollectionUtils.isEmpty(dynamicVOList)) {
+            dynamicVOMap = dynamicVOList.stream().filter(vo -> vo.getRefId() != null).collect(Collectors.groupingBy(DynamicColumnVO::getRefId));
+        }
+        //鏍规嵁label_value鍜宺ef_id鍒ゆ柇鏄惁鏄悓涓�鏁版嵁
+        for (PointExport pointExport : dataList) {
+            //寰楀埌excel涓姩鎬佸垪鍚嶄綔涓簁ey鐨刴ap
+            Map<String, DynamicColumnVO> exportMap = pointExport.getDynamicData().stream().collect(Collectors.toMap(DynamicColumnVO::getLabelValue, Function.identity()));
+            //鏌ュ嚭鏁版嵁搴撲腑杩欎釜鐐逛綅鐨勫姩鎬佸垪
+            List<DynamicColumnVO> dynamicColumnVOS = dynamicVOMap.get(pointExport.getId());
+            if (!CollectionUtils.isEmpty(dynamicColumnVOS)) {
+                //閬嶅巻鏁版嵁搴撲腑杩欎釜鐐逛綅鐨勫姩鎬佸垪锛屽苟鏍规嵁鍔ㄦ�佸垪鍚嶆壘鍑篹xcel涓殑鍊�
+                for (DynamicColumnVO vo : dynamicColumnVOS) {
+                    DynamicColumnVO dynamicColumnVO = exportMap.get(vo.getLabelValue());
+                    //瀛樺湪璇存槑excel鏈夎繖涓暟鎹紝灏嗘暟鎹簱杩欎釜鏁版嵁鐨勫�兼敼涓篹xcel鐨勫��
+                    if (dynamicColumnVO.getColumnValue() != null) {
+                        DynamicColumnValue entity = new DynamicColumnValue();
+                        entity.setColumnValue(dynamicColumnVO.getColumnValue());
+                        entity.setDynamicColumnId(vo.getId());
+                        entity.setRefId(vo.getRefId());
+                        entity.setId(vo.getValueId());
+                        updateList.add(entity);
+
+                    } else {
+                        //涓嶅瓨鍦ㄥ垯鍙栨秷鏍囩锛屽垹闄�
+                        deleteList.add(vo.getValueId());
+                    }
+                }
+            } else {
+                //鏁版嵁搴撻噷鏌ヤ笉鍒癳xcel閲岄潰鐨勮繖涓偣浣嶅姩鎬佸垪锛屽叏涓烘柊澧�
+                List<DynamicColumnVO> dynamicData = pointExport.getDynamicData();
+                for (DynamicColumnVO excelData : dynamicData) {
+                    if(excelData.getColumnValue()!=null) {
+                        Integer dynamicId = dictionary.get(excelData.getLabelValue());
+                        DynamicColumnValue entity = new DynamicColumnValue();
+                        entity.setColumnValue(excelData.getColumnValue());
+                        entity.setDynamicColumnId(dynamicId);
+                        entity.setRefId(pointExport.getId());
+                        insertList.add(entity);
+                    }
+                }
+            }
+        }
+        //鎻掑叆
+        if(!CollectionUtils.isEmpty(insertList)) dynamicColumnMapper.saveBatch(insertList);
+        //鏇存柊
+        if(!CollectionUtils.isEmpty(updateList)) dynamicColumnMapper.updateBatch(updateList);
+        //鍒犻櫎
+        if(!CollectionUtils.isEmpty(deleteList)) dynamicColumnMapper.deleteBatchIds(deleteList);
+    }
+
     public void waitAllFinishAndGetResult(List<YwPoint> dataList) {
         Date startTime = new Date();
         this.baseMapper.updatePoint(dataList);

--
Gitblit v1.8.0