| 
					
				 | 
			
			
				@@ -1,5 +1,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package org.springblade.manager.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.core.date.DateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.core.util.URLUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.http.HttpException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.http.HttpRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.http.HttpUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.json.JSONConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hutool.json.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hutool.json.JSONUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.nacos.common.utils.MD5Utils; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7,6 +13,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.codec.digest.HmacAlgorithms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.codec.digest.HmacUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang.RandomStringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.common.utils.SnowFlakeUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.core.oss.model.BladeFile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.core.tool.utils.BeanUtil; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -17,21 +27,23 @@ import org.springblade.manager.dto.ProfilerOffsetResultDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.manager.entity.ProfilerData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.manager.entity.ProfilerOffset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.manager.entity.ProfilerStandardSectionBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springblade.manager.entity.profiler.ProfilerResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springblade.manager.entity.profiler.ProfilerSaveDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springblade.manager.entity.profiler.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.manager.service.ProfilerDataService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.manager.service.ProfilerOffsetService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.manager.mapper.ProfilerOffsetMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.manager.service.ProfilerStandardSectionBeanService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springblade.resource.feign.NewIOSSClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.dao.DataAccessException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.jdbc.core.JdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.scheduling.annotation.Scheduled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.web.multipart.MultipartFile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.servlet.http.HttpServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.time.Instant; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Collections; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author LHB 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,6 +51,7 @@ import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @createDate 2025-10-27 15:58:56 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, ProfilerOffset> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         implements ProfilerOffsetService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -54,20 +67,20 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ProfilerDataService dataService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ProfilerStandardSectionBeanService beanService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private JdbcTemplate jdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public ProfilerResult save(ProfilerSaveDTO save, MultipartFile file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!save.getAppKey().equals(APP_KEY)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return ProfilerResult.error("10006", "appKey错误", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String s = MD5Utils.md5Hex(APP_KEY +  APP_SECRET + save.getTimestamp(),  "UTF-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String s = MD5Utils.md5Hex(APP_KEY + APP_SECRET + save.getTimestamp(), "UTF-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!s.equals(save.getSign())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return ProfilerResult.error("10007", "sign错误", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!isValidTimestamp(save.getTimestamp())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return ProfilerResult.error("10008","签名验证失败:timeTicks的时间和当前时间必须小于30分钟",""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!isValidTimestamp(save.getTimestamp())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return ProfilerResult.error("10008", "签名验证失败:timeTicks的时间和当前时间必须小于30分钟", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //主键id 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,18 +92,18 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jsonObject = JSONUtil.parseObj(save.getData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return ProfilerResult.error("10009","data参数格式错误",""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return ProfilerResult.error("10009", "data参数格式错误", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取基础信息 + 测量者信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ProfilerOffset offset = jsonObject.getBean("offset", ProfilerOffset.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(offset == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (offset == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             offset = new ProfilerOffset(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         offset.setId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         offset.setDeviceCode(deviceCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ProfilerOffset info = jsonObject.getBean("info", ProfilerOffset.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //把测量者信息赋值给基础信息对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(info != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (info != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             offset.setChannelName(info.getChannelName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             offset.setConstructionUnit(info.getConstructionUnit()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             offset.setDate(info.getDate()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -101,10 +114,10 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取标准断面数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         JSONObject mStandardSectionDataBeanList = jsonObject.getJSONObject("standardSectionBean"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<ProfilerStandardSectionBean> standardSectionBean = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(mStandardSectionDataBeanList != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (mStandardSectionDataBeanList != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             standardSectionBean = mStandardSectionDataBeanList.getBeanList("mStandardSectionDataBeanList", ProfilerStandardSectionBean.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(standardSectionBean != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                standardSectionBean.forEach(f ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (standardSectionBean != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                standardSectionBean.forEach(f -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     f.setId(SnowFlakeUtil.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     f.setOffsetId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -112,7 +125,7 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取测量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<ProfilerData> data = jsonObject.getBeanList("data", ProfilerData.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(data != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (data != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             data.forEach(f -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 f.setId(SnowFlakeUtil.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 f.setOffsetId(id); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -126,10 +139,10 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //保存数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         baseMapper.insert(offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtil.isNotEmpty(standardSectionBean)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtil.isNotEmpty(standardSectionBean)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             beanService.saveBatch(standardSectionBean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtil.isNotEmpty(data)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtil.isNotEmpty(data)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dataService.saveBatch(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return ProfilerResult.success(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -154,9 +167,9 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public ProfilerOffsetResultDTO getOne(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ProfilerOffset byId = this.getById(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(byId != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (byId != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ProfilerOffsetResultDTO resultDTO = BeanUtil.copyProperties(byId, ProfilerOffsetResultDTO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(resultDTO != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (resultDTO != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 List<ProfilerStandardSectionBean> list = beanService.list(Wrappers.<ProfilerStandardSectionBean>lambdaQuery().eq(ProfilerStandardSectionBean::getOffsetId, id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 List<ProfilerData> list1 = dataService.list(Wrappers.<ProfilerData>lambdaQuery().eq(ProfilerData::getOffsetId, id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 resultDTO.setSectionBeans(list); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -174,11 +187,11 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         boolean update = this.updateById(qProfilerOffset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<ProfilerStandardSectionBean> sectionBeans = offset.getSectionBeans(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtil.isNotEmpty(sectionBeans)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtil.isNotEmpty(sectionBeans)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             beanService.updateBatchById(sectionBeans); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<ProfilerData> data = offset.getData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtil.isNotEmpty(data)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtil.isNotEmpty(data)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dataService.updateBatchById(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return update; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -192,13 +205,133 @@ public class ProfilerOffsetServiceImpl extends ServiceImpl<ProfilerOffsetMapper, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .eq(StringUtil.isNotBlank(offset.getBackBreak()), ProfilerOffset::getBackBreak, offset.getBackBreak()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .ge(StringUtil.isNotBlank(offset.getStartTime()), ProfilerOffset::getDate, offset.getStartTime()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .le(StringUtil.isNotBlank(offset.getEndTime()), ProfilerOffset::getDate, offset.getEndTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return baseMapper.selectPage(new Page<>(offset.getCurrent(), offset.getSize()),qProfilerOffsetQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseMapper.selectPage(new Page<>(offset.getCurrent(), offset.getSize()), qProfilerOffsetQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public List<String> getListUserName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return baseMapper.getListUserName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Scheduled(cron = "0 0 23 ? * FRI") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void push() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String url = "/data/openapi/v1/push"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //从系统参数中获取配置信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sql = "select param_value from blade_param where param_key = 'profiler.isPush' and is_deleted = 0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer isPush = jdbcTemplate.queryForObject(sql, Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //判断是否上传数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(isPush != null && isPush == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //从系统参数中获取配置信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String baseUrl = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sql = "select param_value from blade_param where param_key = 'profiler.baseUrl' and is_deleted = 0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            baseUrl = jdbcTemplate.queryForObject(sql, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (DataAccessException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("系统参数未找到 profiler.baseUrl"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String clientKey = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sql = "select param_value from blade_param where param_key = 'profiler.clientKey' and is_deleted = 0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //第三方提供的key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            clientKey = jdbcTemplate.queryForObject(sql, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (DataAccessException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("系统参数未找到 profiler.clientKey"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String secret = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sql = "select param_value from blade_param where param_key = 'profiler.secret' and is_deleted = 0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //第三方提供的key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            secret = jdbcTemplate.queryForObject(sql, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (DataAccessException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("系统参数未找到 profiler.secret"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String protocolApiId = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sql = "select param_value from blade_param where param_key = 'profiler.protocolApiId' and is_deleted = 0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //第三方提供的key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            protocolApiId = jdbcTemplate.queryForObject(sql, String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (DataAccessException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("系统参数未找到 profiler.protocolApiId"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(StringUtil.isBlank(baseUrl) || StringUtil.isBlank(clientKey) || StringUtil.isBlank(secret) || StringUtil.isBlank(protocolApiId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("系统参数未找到配置项"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //当前时间戳 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String secTimestamp = String.valueOf(System.currentTimeMillis()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ProfilerOffset> list = this.list(Wrappers.<ProfilerOffset>lambdaQuery().eq(ProfilerOffset::getPush, 0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("开始推送断面仪数据------{}", DateTime.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (ProfilerOffset f : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //随机字符串 每次推送都是唯一的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String secNonce = UUID.randomUUID().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //获取测量断面 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ProfilerStandardSectionBean> sectionBeans = beanService.list(Wrappers.<ProfilerStandardSectionBean>lambdaQuery().eq(ProfilerStandardSectionBean::getOffsetId, f.getId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ProfilerSectionPush> sectionPushes = ProfilerSectionPush.parameterMapping(sectionBeans); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //获取测量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ProfilerData> data = dataService.list(Wrappers.<ProfilerData>lambdaQuery().eq(ProfilerData::getOffsetId, f.getId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ProfilerDataPush> dataPushes = ProfilerDataPush.parameterMapping(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //赋值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ProfilerOffsetPush profilerOffsetPush = ProfilerOffsetPush.parameterMapping(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            profilerOffsetPush.setMeasurement_section(sectionPushes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            profilerOffsetPush.setReceipt_data(dataPushes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //设置不忽略空值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONConfig config = JSONConfig.create().setIgnoreNullValue(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONObject jsonObject = new JSONObject(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObject.set("protocolApiId", protocolApiId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObject.set("data", profilerOffsetPush); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //数据json字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String catLog = jsonObject.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //http对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            HttpRequest post = HttpUtil.createPost(baseUrl + url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //获取签名字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String sign = "POST_" + url + "_" + secTimestamp + "_" + secNonce; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //请求头 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            HashMap<String, String> catLogHeaders = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catLogHeaders.put("Content-Type", "application/json"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //应用ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catLogHeaders.put("Sec-API-Key", clientKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //当前时间 毫秒值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catLogHeaders.put("Sec-Timestamp", secTimestamp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //请求发起时的随机字符串,需要保证唯一性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catLogHeaders.put("Sec-Nonce", secNonce); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catLogHeaders.put("Sec-Signature", new HmacUtils(HmacAlgorithms.HMAC_SHA_256, secret).hmacHex(sign)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String catLogBody = post.addHeaders(catLogHeaders).body(catLog).contentType("application/json").execute().body(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //响应结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                JSONObject result = JSONUtil.parseObj(catLogBody); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("推送结果:{}",result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if ("200".equals(result.getStr("code"))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    f.setPush(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    f.setPush(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (HttpException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                f.setPush(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("推送完成------{}", DateTime.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.updateBatchById(list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |