浏览代码

Merge branch 'dev' of http://219.151.181.73:3000/zhuwei/bladex into lihb

LHB 2 月之前
父节点
当前提交
fe4ed98fd1

+ 10 - 0
blade-common/pom.xml

@@ -28,6 +28,16 @@
             <artifactId>blade-core-auto</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>com.twelvemonkeys.imageio</groupId>
+            <artifactId>imageio-jpeg</artifactId>
+            <version>3.9.4</version>
+        </dependency>
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.14</version>
+        </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>

+ 77 - 1
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -42,7 +42,7 @@ import java.util.zip.ZipOutputStream;
 import com.drew.metadata.MetadataException;
 import org.springframework.util.ResourceUtils;
 import org.springframework.web.util.UriUtils;
-
+import net.coobird.thumbnailator.Thumbnails;
 /**
  * 通用工具类
  *
@@ -840,6 +840,82 @@ public class CommonUtil {
         return baos.toByteArray();
     }
 
+    public static byte[] compressImage3(String url) throws IOException, ImageProcessingException, MetadataException {
+        try(InputStream file = CommonUtil.getOSSInputStream(url)) {
+            byte[] imageData = InputStreamToBytes(file);
+            return compressImage3(imageData);
+        }
+    }
+
+    public static byte[] compressImage3(byte[] imageData) throws ImageProcessingException, IOException, MetadataException {
+        // 读取原始图像(处理旋转问题)
+        int orientation = 1;
+        Metadata metadata = ImageMetadataReader.readMetadata(new ByteArrayInputStream(imageData));
+        if (metadata.containsDirectoryOfType(ExifIFD0Directory.class)) {
+            ExifIFD0Directory exifIFD0Directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
+            if (exifIFD0Directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
+                // 获取 Orientation 标签的值
+                orientation = exifIFD0Directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);
+            }
+        }
+        // 缩放图像
+        String formatName = "JPEG";
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        long sizeLimit = 1024*1024*5; //5M 1920 ×1080
+        int width = 1080;
+        int height = 1920;
+        // 需要旋转图片
+        // 1 无需纠正 2 水平翻转(镜像)3 垂直翻转(旋转180°) 4 水平翻转+垂直翻转 5 水平翻转+旋转90°
+        // 6 旋转90° 7 水平翻转+旋转270° 8 +旋转270°
+        float quality = 0.99f; // 初始化压缩质量
+        int retries = 10; // 最多尝试 10 次
+        double rotate = 0;
+        if (orientation > 1) {
+            if (orientation == 3) {
+                rotate = 180;
+            } else if (orientation == 6) {
+                rotate = 90;
+            } else if (orientation == 8) {
+                rotate = 270;
+            }
+        }
+        rotateAndScaleImageByThumbnails(new ByteArrayInputStream(imageData),baos, rotate, formatName, quality, width, height, true);
+        if (baos.size() <= sizeLimit) {
+            // 图片大小已经小于等于目标大小,直接返回原始数据
+            return baos.toByteArray();
+        }
+        ByteArrayInputStream bais;
+        while (baos.size() > sizeLimit && retries > 0) {
+            // 压缩图像并重新计算压缩质量
+            byte[] data = baos.toByteArray();
+            bais = new ByteArrayInputStream(data);
+            rotateAndScaleImageByThumbnails(bais,baos, 0, formatName, quality, width, height, true);
+            float ratio = sizeLimit * 1.0f / baos.size();
+            quality *= Math.sqrt(ratio);
+            retries--;
+        }
+        return baos.toByteArray();
+    }
+
+    /**
+     * @param is URL InputStream File BufferedImage path
+     * @param os 输出流
+     * @param rotate 旋转角度(正数顺时针,负数逆时针)
+     * @param format 输出格式,jpg,jpeg,png等
+     * @param quality  输出质量(0.0-1.0)
+     * @param width 宽
+     * @param height 高
+     * @param keepAspectRatio 是否保持原比例
+     */
+    public static void rotateAndScaleImageByThumbnails(InputStream is, OutputStream os, double rotate, String format, double quality, int width, int height, boolean keepAspectRatio) throws IOException {
+        Thumbnails.of(is)
+                .size(width, height)
+                .keepAspectRatio(keepAspectRatio)
+                .rotate(rotate)
+                .outputFormat(format)
+                .outputQuality(quality)
+                .toOutputStream(os);
+    }
 
     /**
      * 根据起止日期获取工作日

+ 25 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/EntrustInfoController.java

@@ -33,10 +33,13 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.feign.WbsTreePrivateClient;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -53,6 +56,7 @@ import java.util.List;
 public class  EntrustInfoController extends BladeController {
 
 	private final IEntrustInfoService entrustInfoService;
+	private final WbsTreePrivateClient wbsTreePrivateClient;
 
 	/**
 	 * 详情
@@ -168,7 +172,27 @@ public class  EntrustInfoController extends BladeController {
 		if(id==null && Func.isNull(id)){
 			return R.fail("id不能为空");
 		}
-		EntrustDataInfoVO reportDetail = entrustInfoService.getReportDetail(id);
+		EntrustInfo entrustInfo = entrustInfoService.getById(id);
+		if (entrustInfo == null) {
+			return R.fail("id不存在");
+		}
+		WbsTreePrivate wbsTreePrivate = null;
+		if (entrustInfo.getNodeId() != null) {
+			List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateClient.queryByPKeyIds(Collections.singletonList(entrustInfo.getNodeId()));
+			if (wbsTreePrivates != null && !wbsTreePrivates.isEmpty()) {
+				wbsTreePrivate = wbsTreePrivates.get(0);
+			}
+		}
+		EntrustDataInfoVO reportDetail;
+		if (wbsTreePrivate != null && wbsTreePrivate.getNodeType() == 51) {
+			reportDetail = new EntrustDataInfoVO();
+			reportDetail.setId(entrustInfo.getId() + "");
+			reportDetail.setEntrustInfo(entrustInfo.getEntrustInfo());
+			reportDetail.setEntrustName(wbsTreePrivate.getNodeName());
+			reportDetail.setExpCount(entrustInfo.getExpCount());
+		} else {
+			reportDetail = entrustInfoService.getReportDetail(id);
+		}
 		return R.data(reportDetail);
 	}
 

+ 6 - 4
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/EntrustInfoServiceImpl.java

@@ -122,9 +122,11 @@ public class EntrustInfoServiceImpl extends BaseServiceImpl<EntrustInfoMapper, E
 		}
 		String sampleId = "";
 		String contractId = "";
-        String sqlNodeName="select node_name from m_wbs_tree_private where p_key_id="+dataInfo.getString("nodeId");
-        String nodeName = jdbcTemplate.queryForObject(sqlNodeName, new SingleColumnRowMapper<>(String.class));
-        if(!nodeName.equals("回弹法检测混凝土抗压强度")&&!nodeName.equals("路基压实度")&&!nodeName.equals("地基承载力")&&!nodeName.equals("路基路面弯沉")&&!nodeName.equals("锚杆")&&!nodeName.equals("喷射混凝土厚度")){
+        String sqlNodeName="select node_name, node_type from m_wbs_tree_private where p_key_id="+dataInfo.getString("nodeId");
+		Map<String, Object> wbsTreePrivateMap = jdbcTemplate.queryForMap(sqlNodeName);
+		String nodeName = wbsTreePrivateMap.get("node_name").toString();
+		String nodeType = wbsTreePrivateMap.get("node_type").toString();
+		if(!"51".equals(nodeType) && !nodeName.equals("回弹法检测混凝土抗压强度")&&!nodeName.equals("路基压实度")&&!nodeName.equals("地基承载力")&&!nodeName.equals("路基路面弯沉")&&!nodeName.equals("锚杆")&&!nodeName.equals("喷射混凝土厚度")){
             // 创建 委托单信息
             if(!dataInfo.containsKey("sampleId")){
                 return R.fail("取样信息为sampleId不存在");
@@ -149,7 +151,7 @@ public class EntrustInfoServiceImpl extends BaseServiceImpl<EntrustInfoMapper, E
         if(!dataInfo.containsKey("sampleId")){
             entrustInfo.setSampleStatus("0");
         }else {
-            if(!nodeName.equals("回弹法检测混凝土抗压强度")&&!nodeName.equals("路基压实度")&&!nodeName.equals("地基承载力")&&!nodeName.equals("路基路面弯沉")&&!nodeName.equals("锚杆")){
+            if(!"51".equals(nodeType) && !nodeName.equals("回弹法检测混凝土抗压强度")&&!nodeName.equals("路基压实度")&&!nodeName.equals("地基承载力")&&!nodeName.equals("路基路面弯沉")&&!nodeName.equals("锚杆")){
                 entrustInfo = baseMapper.selectOne(Wrappers.<EntrustInfo>query().lambda().eq(EntrustInfo::getSampleId, sampleId).eq(EntrustInfo::getContractId,contractId));
             }else {
                 entrustInfo = baseMapper.selectOne(Wrappers.<EntrustInfo>query().lambda().eq(EntrustInfo::getId,dataInfo.get("id")).eq(EntrustInfo::getContractId,contractId));

+ 4 - 4
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -62,7 +62,6 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.SingleColumnRowMapper;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -188,7 +187,7 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
                      }
                 }
                 //合并的pdfUrl
-                String pdf = this.getMergePdfToTrialNew(record.getContractId(), record.getId());
+                String pdf = this.getMergePdfToTrialNew(record.getContractId(), record.getId(), dto.getType());
                 record.setPdfUrl(pdf);
             }
 
@@ -264,11 +263,12 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
      *新增返回该试验材料报告关联的委托单pdf也拼接在后面
      * @param contractId
      * @param nodeId
+     * @param type
      * @return
      * @throws FileNotFoundException
      */
-    private String getMergePdfToTrialNew(Long contractId, Long nodeId) throws FileNotFoundException {
-        String sql = "select pdf_url,e_visa_pdf_url from u_information_query where wbs_id='" + nodeId + "' and contract_id ='" + contractId + "'";
+    private String getMergePdfToTrialNew(Long contractId, Long nodeId, Integer type) throws FileNotFoundException {
+        String sql = "select pdf_url,e_visa_pdf_url from u_information_query where wbs_id='" + nodeId + "' and contract_id ='" + contractId + "' and classify = '" + type + "'" ;
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
         if (maps.size() >= 1) {
             Map<String, Object> stringObjectMap = maps.get(0);

+ 14 - 10
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/WeatherInfoServiceImpl.java

@@ -37,12 +37,10 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.time.Duration;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -146,13 +144,13 @@ public class WeatherInfoServiceImpl extends ServiceImpl<WeatherInfoMapper, Weath
                     if (nums != null && Integer.parseInt(nums) <= 19000) {
                         weatherMap = YiKeYunApiUtils.getTodayWeatherByAdcode(area.getCity_code() + "000000");
                     }
-                    if (weatherMap == null) {
-                        weatherMap = BaiduApiUtil.getTodayWeather(area.getCity_code());
-                    }
+//                    if (weatherMap == null) {
+//                        weatherMap = BaiduApiUtil.getTodayWeather(area.getCity_code());
+//                    }
                     if (weatherMap != null) {
                         cachedWeatherMap.put(area.getCity_code(), weatherMap);
                         if (weatherMap.get("nums") != null) {
-                            stringRedisTemplate.opsForValue().set("blade-business::contractArea:yiKeYun:todayWeatherNums", weatherMap.get("nums"));
+                            stringRedisTemplate.opsForValue().set("blade-business::contractArea:yiKeYun:todayWeatherNums", weatherMap.get("nums"), getSecondsUntilMidnight(), TimeUnit.SECONDS);
                         }
                     }
                 }
@@ -419,7 +417,7 @@ public class WeatherInfoServiceImpl extends ServiceImpl<WeatherInfoMapper, Weath
 
     public Map<String, Map<String, String>> getHistoryWeather(ProjectContractArea area, String month) {
         String nums = stringRedisTemplate.opsForValue().get("blade-business::contractArea:yiKeYun:historyWeatherNums");
-        if (nums == null || Integer.parseInt(nums) > 19000) {
+        if (nums != null && Integer.parseInt(nums) > 19000) {
             log.info("获取历史天气失败:易客云获取历史天气的api次数已用完。");
             return null;
         }
@@ -445,7 +443,7 @@ public class WeatherInfoServiceImpl extends ServiceImpl<WeatherInfoMapper, Weath
             if (historyWeather != null) {
                 Map<String, String> map = historyWeather.get("nums");
                 if (map != null && map.get("nums") != null) {
-                    stringRedisTemplate.opsForValue().set("blade-business::contractArea:yiKeYun:historyWeatherNums", map.get("nums"));
+                    stringRedisTemplate.opsForValue().set("blade-business::contractArea:yiKeYun:historyWeatherNums", map.get("nums"), getSecondsUntilMidnight(), TimeUnit.SECONDS);
                 }
             }
             return historyWeather;
@@ -493,4 +491,10 @@ public class WeatherInfoServiceImpl extends ServiceImpl<WeatherInfoMapper, Weath
         return map;
     }
 
+    public static long getSecondsUntilMidnight() {
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime nextMidnight = now.with(LocalTime.MIDNIGHT).plusDays(1);
+        return TimeUnit.MILLISECONDS.toSeconds(nextMidnight.atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli()
+                - now.atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli());
+    }
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -459,7 +459,7 @@ public class ExcelTabClientImpl implements ExcelTabClient {
     @Override
     public R saveReEntrustTabData(ReSigningEntrustDto dto, String header) {
         WbsTreePrivate wbsTreePrivate = jdbcTemplate.queryForObject("select * from m_wbs_tree_private where p_key_id=" + dto.getNodeId(), new BeanPropertyRowMapper<>(WbsTreePrivate.class));
-        Boolean isRemove=false;
+        Boolean isRemove=true;
         List<Map<String, Object>> list = excelTabService.getBussDataInfoTrialentrust(Long.parseLong(dto.getEntrustId()), wbsTreePrivate.getJlerTreeId(), Long.parseLong(dto.getContractId()), null, null,isRemove,false);
         Map<String, Object> map = list.get(0);
         if(!map.containsKey("contractId")){

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeService.java

@@ -70,4 +70,6 @@ public interface IArchiveTreeService extends BaseService<ArchiveTree> {
 
     //删除子树
     boolean deleteTree(Long id);
+
+    List<ArchiveTreeVO2> getAllChildren(ArchiveTree node);
 }

+ 8 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -355,13 +355,15 @@ public class ArTreeContractInitServiceImpl {
                     addNodes.addAll(tmpList);
                 }else {
                     Long contractId = ar.getContractId();
-                    List<ContractRelationJlyz> list = contractInfoService.searchContractRelationInfo(contractId.toString());
-                    for (ContractRelationJlyz contractRelationJlyz: list) {
-                        ar.setContractId(contractRelationJlyz.getId());
-                        List<ArchiveTreeContract> tmpList = getTreeContractFromWbs(tenantId, projectId, wbsId, ar,classify);
-                        addNodes.addAll(tmpList);
+                    if (contractId != null) {
+                        List<ContractRelationJlyz> list = contractInfoService.searchContractRelationInfo(contractId.toString());
+                        for (ContractRelationJlyz contractRelationJlyz: list) {
+                            ar.setContractId(contractRelationJlyz.getId());
+                            List<ArchiveTreeContract> tmpList = getTreeContractFromWbs(tenantId, projectId, wbsId, ar,classify);
+                            addNodes.addAll(tmpList);
+                        }
+                        ar.setContractId(contractId);
                     }
-                    ar.setContractId(contractId);
                 }
             }
         }

+ 59 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -27,6 +27,7 @@ import org.springblade.archive.entity.ArchiveExpertConclusion;
 import org.springblade.archive.feign.ArchiveAutoClient;
 import org.springblade.archive.vo.UpdateExpertVO;
 import org.springblade.business.feign.ArchiveFileClient;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -135,7 +136,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 
 
-		List<ArchiveTreeVO2> tree = archiveTreeService.tree2(AuthUtil.getTenantId(), projectId,null, null,null,false);
+		List<ArchiveTreeVO2> tree = archiveTreeService.getAllChildren(archiveTree);
 		if (tree == null || tree.size() == 0) {
 			return false;
 		}
@@ -430,8 +431,8 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 
 		//取出 -- 系统级 wbs树的数据
-		List<ArchiveTreeVO2> srcTrees = archiveTreeService.tree2(AuthUtil.getTenantId(), dstNode.getProjectId(),
-				null, null,null,false);
+//		List<ArchiveTreeVO2> srcTrees = archiveTreeService.tree2(AuthUtil.getTenantId(), dstNode.getProjectId(), null, null,null,false);
+		List<ArchiveTreeVO2> srcTrees = archiveTreeService.getAllChildren(srcNode);
 		ArchiveTreeVO2 srcTree = srcTrees.get(0);
 		if (srcTree == null) {
 			return false;
@@ -655,7 +656,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 						//getNormalSaveList 接口除了同步新增节点,还会同步已有节点的属性。
 						//因为关联工序的位置是固定的,先不考虑新增一个关联工序节点,且一次同步完成情况
-						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
+						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(tmpSubTree.getId(),
 								tmpSubTree,dstNodeId,contractNode);
 						saveList.addAll(tmpSaveList);
 
@@ -1001,12 +1002,64 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 		for (ArchiveTreeVO2 src : srcChilds) {
 			if (dstMap.get(src.getId()) == null ) {
-				List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(src.getId(),src,dstNode.getId(),dstTree);
-				saveList.addAll(tmpSaveList);
+				boolean flag = false;
+				if (contractInfos != null && !contractInfos.isEmpty()) {
+					List<ArchiveTreeContract> tmpSaveList = new ArrayList<>();
+					flag = addNewContract1(contractInfos,src,dstTree,tmpSaveList);
+					saveList.addAll(tmpSaveList);
+				}
+				if (!flag) {
+					List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(src.getId(),src,dstNode.getId(),dstTree);
+					if (tmpSaveList != null) {
+						saveList.addAll(tmpSaveList);
+					}
+				}
 			}
 		}
 
 	}
+	boolean addNewContract1(List<ContractInfo> contractInfos,ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,List<ArchiveTreeContract> saveList){
+
+		dstTree.setValue(1L);
+		ArchiveTreeContract contractNode = null;
+		ArchiveTreeContractVO2 destNode = null;
+		for(ContractInfo contractInfo : contractInfos){
+			List<ArchiveTreeContract> tmpSaveList = new ArrayList<>();
+
+			if (srcTree.getTitle().contains("施工单位归档资料") && contractInfo.getContractType() == 1) {
+				if (contractNode == null) {
+					contractNode = new ArchiveTreeContract(srcTree);
+					contractNode.setId(SnowFlakeUtil.getId());
+					contractNode.setParentId(dstTree.getId());
+					contractNode.setContractId(contractInfo.getId());
+					saveList.add(contractNode);
+					contractNode.setTreeCode("C");
+				}
+				if (destNode == null) {
+					destNode = new ArchiveTreeContractVO2(contractNode);
+				}
+				tmpSaveList = archiveTreeContractSync.getContractSaveList(srcTree,destNode,contractInfo,contractNode);
+			}
+			if (srcTree.getTitle().contains("监理单位归档资料") && contractInfo.getContractType() == 2) {
+				//复制监理
+				if (contractNode == null) {
+					contractNode = new ArchiveTreeContract(srcTree);
+					contractNode.setId(SnowFlakeUtil.getId());
+					contractNode.setParentId(dstTree.getId());
+					contractNode.setContractId(contractInfo.getId());
+					saveList.add(contractNode);
+					contractNode.setTreeCode("S");
+				}
+				if (destNode == null) {
+					destNode = new ArchiveTreeContractVO2(contractNode);
+				}
+//				dstTree.getChildren().add(destNode);
+				tmpSaveList = archiveTreeContractSync.getContractSaveList(srcTree,destNode,contractInfo,contractNode);
+			}
+			saveList.addAll(tmpSaveList);
+		}
+		return contractNode != null;
+	}
 
 	/**
 	 * 返回某个合同段关联质检资料的节点

+ 16 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -1723,7 +1723,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         Map<String, Object> nodeBaseInfo = nodeBaseInfoService.getAllNodeBaseInfoByPkeyId(pkeyId, nodeId);
         if(nodeBaseInfo!=null){
             for (Map.Entry<String, Object> entry : nodeBaseInfo.entrySet()) {
-                reData.put(entry.getKey(), entry.getValue());
+                if (reData.get(entry.getKey()) == null || reData.get(entry.getKey()).toString().isEmpty()) {
+                    reData.put(entry.getKey(), entry.getValue());
+                }
             }
         }
 //        if(reData.size()>0){
@@ -2227,7 +2229,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                             if (myData.indexOf("http") >= 0 && (myData.indexOf("aliyuncs") >= 0 ||myData.indexOf("183.247.216.148") >= 0||myData.indexOf("xinan1.zos.ctyun.cn") >= 0)) {
                                 InputStream imageIn = CommonUtil.getOSSInputStream(myData);
                                 if (imageIn != null) {
-                                    byte[] bytes = CommonUtil.compressImage(myData);
+                                    byte[] bytes = CommonUtil.compressImage3(myData);
                                     // 这里根据实际需求选择图片类型
                                     int pictureIdx = workbook.addPicture(bytes, 6);
                                     CreationHelper helper = workbook.getCreationHelper();
@@ -3566,11 +3568,21 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             //修改合并后的pdf路径
             String querySql = "select id from u_information_query where classify ='" + classify + "' and wbs_id ='" + id + "' and contract_id ='" + contractId + "'";
             List<InformationQuery> query = jdbcTemplate.query(querySql, new BeanPropertyRowMapper<>(InformationQuery.class));
+            StringBuilder names=new StringBuilder("");
+            if(StringUtils.isNotEmpty(dto.getReportNo())){
+                names.append("[");
+                names.append(dto.getReportNo());
+                names.append("]");
+            }
+            if(StringUtils.isNotEmpty(dto.getTrialProjectName())){
+                names.append(dto.getTrialProjectName());
+            }
+            names.append("试验检测报告及附件");
             if (query.size() > 0) {
-                String updateSql = "update u_information_query set pdf_url ='" + bladeFile.getLink() + "', name ='" + (StringUtils.isNotEmpty(dto.getTrialProjectName()) ? dto.getTrialProjectName() : "") + "' where classify='" + classify + "' and wbs_id='" + id + "' and contract_id ='" + contractId + "'";
+                String updateSql = "update u_information_query set pdf_url ='" + bladeFile.getLink() + "', name ='" + names + "' where classify='" + classify + "' and wbs_id='" + id + "' and contract_id ='" + contractId + "'";
                 jdbcTemplate.execute(updateSql);
             } else {
-                informationQueryClient.saveData(id.toString(), projectId, contractId, classify, bladeFile.getLink(), StringUtils.isNotEmpty(dto.getTrialProjectName()) ? dto.getTrialProjectName() : "");
+                informationQueryClient.saveData(id.toString(), projectId, contractId, classify, bladeFile.getLink(), names.toString());
             }
             return bladeFile.getLink();
         }

+ 13 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -3606,6 +3606,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             monthlyReport.setChangeMeterMoney(monthlyReport.getAfterCurrentMeterMoney().subtract(monthlyReport.getCurrentMeterMoney()));
             monthlyReport.setChapterSeq(vo.getChapterNumber());
             String key = vo.getChapterNumber();
+            if(StringUtils.isEmpty(key)){
+                key=vo.getFormNumber();
+            }
             if (list.size() > 0) {
                 OptionalInt index = IntStream.range(0, list.size())
                         .filter(i -> list.get(i).getId().equals(periodId))
@@ -4277,7 +4280,16 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             Map<String, List<MeterInventoryVO1>> groupedMeter = new HashMap<>();
             List<String> listUrl = new ArrayList<>();
             for (MeterInventoryVO1 vo1 : list1) {
-                String firstChar = vo1.getImportNumber().substring(0, 3);
+                String firstChar;
+                if(StringUtils.isEmpty(vo1.getImportNumber())){
+                    firstChar=vo1.getFormNumber();
+                }else if(vo1.getImportNumber().length()<3){
+                    firstChar=vo1.getFormNumber();
+                }else if(!vo1.getImportNumber().matches("\\d{3}")){
+                    firstChar=vo1.getFormNumber();
+                }else {
+                    firstChar = vo1.getImportNumber().substring(0, 3);
+                }
                 groupedMeter.computeIfAbsent(firstChar, k -> new ArrayList<>()).add(vo1);
             }
             //根据编号的不同建立不同的excel