allen há 1 mês atrás
pai
commit
a488f51264

+ 6 - 0
mirs-admin/pom.xml

@@ -65,6 +65,12 @@
             <artifactId>lombok</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.14</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 13 - 0
mirs-admin/src/main/java/com/mirs/RuoYiApplication.java

@@ -1,8 +1,13 @@
 package com.mirs;
 
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
 
 /**
  * 启动程序
@@ -18,4 +23,12 @@ public class RuoYiApplication
         SpringApplication.run(RuoYiApplication.class, args);
         System.out.println("(♥◠‿◠)ノ゙  后端启动成功   ლ(´ڡ`ლ)゙  ");
     }
+
+    @Bean
+    public RestTemplate restTemplate() {
+        CloseableHttpClient httpClient = HttpClients.createDefault(); // 默认HttpClient
+        HttpComponentsClientHttpRequestFactory factory =
+                new HttpComponentsClientHttpRequestFactory(httpClient);
+        return new RestTemplate(factory);
+    }
 }

+ 56 - 8
mirs-admin/src/main/java/com/mirs/biz/controller/IndexController.java

@@ -10,13 +10,18 @@ import com.mirs.biz.service.IBrdfDataService;
 import com.mirs.biz.service.IEmiMeasurementService;
 import com.mirs.biz.service.IIntegratedDataService;
 import com.mirs.biz.service.ISampleService;
+import com.mirs.common.config.RuoYiConfig;
 import com.mirs.common.core.controller.BaseController;
 import com.mirs.common.core.domain.AjaxResult;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -35,6 +40,9 @@ public class IndexController extends BaseController {
 
     @Autowired
     private ISampleService sampleService;
+
+    @Autowired
+    private RestTemplate restTemplate;
     /**
      * 查询主页的数据
      */
@@ -50,18 +58,60 @@ public class IndexController extends BaseController {
             indexResultDTO.setIntegratedDataList(new ArrayList<>());
             return success(indexResultDTO);
         }
-        List<BrdfData> brdfData = brdfDataService.selectBrdfDataList(dto.getBrdfData());
-        List<EmiMeasurement> emiMeasurementList = emiMeasurementService.selectEmiMeasurementList(dto.getEmiMeasurement());
-        List<IntegratedData> integratedDataList = integratedDataService.selectIntegratedDataList(dto.getIntegratedData());
+        if ("1".equals(dto.getDataType())) {
+            List<EmiMeasurement> emiMeasurementList = emiMeasurementService.selectEmiMeasurementList(dto.getEmiMeasurement());
+            List<IntegratedData> integratedDataList = integratedDataService.selectIntegratedDataList(dto.getIntegratedData());
+            indexResultDTO.setEmiMeasurementList(emiMeasurementList);
+            indexResultDTO.setIntegratedDataList(integratedDataList);
+        } else {
+            List<BrdfData> brdfData = brdfDataService.selectBrdfDataList(dto.getBrdfData());
+            // 调用画图接口
+            String imagePath = getImagePath();
+            indexResultDTO.setBrdfImagePath("/profile/upload/" + imagePath);
+            getImage(brdfData, "D:/mirs/uploadPath/upload" + imagePath);
+            indexResultDTO.setBrdfDataList(brdfData);
+        }
 
         indexResultDTO.setSample(sample);
-        indexResultDTO.setBrdfDataList(brdfData);
-        indexResultDTO.setEmiMeasurementList(emiMeasurementList);
-        indexResultDTO.setIntegratedDataList(integratedDataList);
 
         return success(indexResultDTO);
     }
 
+    private String getImagePath() {
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+
+        // 定义日期部分格式
+        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("/yyyy/MM/dd");
+        String datePath = now.format(dateFormatter);
+
+        // 定义文件名时间部分格式(精确到微秒)
+        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
+        String timePart = now.format(timeFormatter);
+
+        // 组合完整路径
+        return datePath + "/image" + timePart + ".png";
+    }
+
+    private void getImage(List<BrdfData> brdfData, String imagePath) {
+        String url = "http://localhost:8081/process_brdf";
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        Map<String, Object> requestMap = new HashMap<>(4);
+        requestMap.put("filePath", imagePath);
+        requestMap.put("brdfList", brdfData);
+        HttpEntity<Map> request = new HttpEntity<>(requestMap, headers);
+        logger.info("生成图片接口开始调用");
+        ResponseEntity<Map> response = restTemplate.postForEntity(url, request, Map.class);
+        Map body = response.getBody();
+        if (body != null && (200 == (int) body.get("status"))) {
+            logger.info("生成图片接口调用成功");
+        } else {
+            logger.warn("生成图片接口调用失败,response:{}", response);
+        }
+    }
+
     @GetMapping("/getSampleType")
     public AjaxResult getSampleType(IndexSearchDTO dto) {
         return success(sampleService.getSampleType(dto.getDataType()));
@@ -88,8 +138,6 @@ public class IndexController extends BaseController {
     @GetMapping("/getOthersOptions")
     public AjaxResult getOthersOptions(IndexSearchDTO dto) {
         Map<String, Object> result = new HashMap<>(4);
-//        result.put("sampleTypeOptions", sampleService.getSampleType(dto.getDataType()));
-//        result.put("sampleModelOptions", sampleService.getSampleModel(dto));
         if("1".equals(dto.getDataType())){
             result.put("temperatureKOptions", emiMeasurementService.getTemperatureK(dto.getEmiMeasurement()));
 

+ 1 - 0
mirs-admin/src/main/java/com/mirs/biz/dto/IndexResultDTO.java

@@ -16,6 +16,7 @@ public class IndexResultDTO extends BaseEntity {
     private static final long serialVersionUID = 1L;
     private Sample sample;
     private List<BrdfData> brdfDataList;
+    private String brdfImagePath;
     private List<EmiMeasurement> emiMeasurementList;
     private List<IntegratedData> integratedDataList;
 }

+ 3 - 0
mirs-admin/src/main/java/com/mirs/biz/mapper/BrdfDataMapper.java

@@ -2,6 +2,7 @@ package com.mirs.biz.mapper;
 
 import java.util.List;
 import com.mirs.biz.domain.BrdfData;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * BRDF数据Mapper接口
@@ -68,4 +69,6 @@ public interface BrdfDataMapper
     List getPhiReflected(BrdfData brdfData);
 
     List getTemperatureK();
+
+    void batchInsertBrdfData(@Param("list")List<BrdfData> subList);
 }

+ 3 - 0
mirs-admin/src/main/java/com/mirs/biz/mapper/EmiMeasurementMapper.java

@@ -2,6 +2,7 @@ package com.mirs.biz.mapper;
 
 import java.util.List;
 import com.mirs.biz.domain.EmiMeasurement;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 测量数据Mapper接口
@@ -60,4 +61,6 @@ public interface EmiMeasurementMapper
     public int deleteEmiMeasurementByIds(Long[] ids);
 
     List getTemperatureK(EmiMeasurement emiMeasurement);
+
+    void batchInsertEmiMeasurement(@Param("list")List<EmiMeasurement> subList);
 }

+ 3 - 0
mirs-admin/src/main/java/com/mirs/biz/mapper/IntegratedDataMapper.java

@@ -2,6 +2,7 @@ package com.mirs.biz.mapper;
 
 import java.util.List;
 import com.mirs.biz.domain.IntegratedData;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 积分数据Mapper接口
@@ -58,4 +59,6 @@ public interface IntegratedDataMapper
      * @return 结果
      */
     public int deleteIntegratedDataByIds(Long[] ids);
+
+    void batchInsertIntegratedData(@Param("list")List<IntegratedData> subList);
 }

+ 7 - 32
mirs-admin/src/main/java/com/mirs/biz/service/impl/BrdfDataServiceImpl.java

@@ -115,39 +115,14 @@ public class BrdfDataServiceImpl implements IBrdfDataService
         {
             throw new ServiceException("导入用户数据不能为空!");
         }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        int i = 0;
-        for (BrdfData data : brdfDataList)
-        {
-            try
-            {
-
-                    BeanValidators.validateWithException(validator, data);
-                    brdfDataMapper.insertBrdfData(data);
-                    successNum++;
-                    successMsg.append("<br/>").append(successNum).append("、第 ").append(i++).append(" 导入成功");
-            }
-            catch (Exception e)
-            {
-                failureNum++;
-                String msg = "<br/>" + failureNum + "、第 " + (i++) + " 导入失败:";
-                failureMsg.append(msg).append(e.getMessage());
-                log.error(msg, e);
-            }
-        }
-        if (failureNum > 0)
-        {
-            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
-            throw new ServiceException(failureMsg.toString());
+        int batchSize = 1000; // 每批插入 1000 条
+        for (int i =  0; i < brdfDataList.size(); i += batchSize) {
+            int end = Math.min(i + batchSize, brdfDataList.size());
+            List<BrdfData> subList = brdfDataList.subList(i, end);
+            brdfDataMapper.batchInsertBrdfData(subList); // 调用 MyBatis 批量插入
         }
-        else
-        {
-            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
-        }
-        return successMsg.toString();
+
+        return "导入成功";
     }
 
     @Override

+ 7 - 32
mirs-admin/src/main/java/com/mirs/biz/service/impl/EmiMeasurementServiceImpl.java

@@ -2,6 +2,7 @@ package com.mirs.biz.service.impl;
 
 import java.util.List;
 
+import com.mirs.biz.domain.BrdfData;
 import com.mirs.common.exception.ServiceException;
 import com.mirs.common.utils.DateUtils;
 import com.mirs.common.utils.StringUtils;
@@ -112,39 +113,13 @@ public class EmiMeasurementServiceImpl implements IEmiMeasurementService
         {
             throw new ServiceException("导入用户数据不能为空!");
         }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        int i = 0;
-        for (EmiMeasurement data : emiMeasurementList)
-        {
-            try
-            {
-
-                BeanValidators.validateWithException(validator, data);
-                emiMeasurementMapper.insertEmiMeasurement(data);
-                successNum++;
-                successMsg.append("<br/>").append(successNum).append("、第 ").append(i++).append(" 导入成功");
-            }
-            catch (Exception e)
-            {
-                failureNum++;
-                String msg = "<br/>" + failureNum + "、第 " + (i++) + " 导入失败:";
-                failureMsg.append(msg).append(e.getMessage());
-                log.error(msg, e);
-            }
-        }
-        if (failureNum > 0)
-        {
-            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
-            throw new ServiceException(failureMsg.toString());
-        }
-        else
-        {
-            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        int batchSize = 1000; // 每批插入 1000 条
+        for (int i =  0; i < emiMeasurementList.size(); i += batchSize) {
+            int end = Math.min(i + batchSize, emiMeasurementList.size());
+            List<EmiMeasurement> subList = emiMeasurementList.subList(i, end);
+            emiMeasurementMapper.batchInsertEmiMeasurement(subList); // 调用 MyBatis 批量插入
         }
-        return successMsg.toString();
+        return "导入成功";
     }
 
     @Override

+ 6 - 32
mirs-admin/src/main/java/com/mirs/biz/service/impl/IntegratedDataServiceImpl.java

@@ -113,38 +113,12 @@ public class IntegratedDataServiceImpl implements IIntegratedDataService
         {
             throw new ServiceException("导入用户数据不能为空!");
         }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        int i = 0;
-        for (IntegratedData data : integratedDataList)
-        {
-            try
-            {
-
-                BeanValidators.validateWithException(validator, data);
-                integratedDataMapper.insertIntegratedData(data);
-                successNum++;
-                successMsg.append("<br/>").append(successNum).append("、第 ").append(i++).append(" 导入成功");
-            }
-            catch (Exception e)
-            {
-                failureNum++;
-                String msg = "<br/>" + failureNum + "、第 " + (i++) + " 导入失败:";
-                failureMsg.append(msg).append(e.getMessage());
-                log.error(msg, e);
-            }
-        }
-        if (failureNum > 0)
-        {
-            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
-            throw new ServiceException(failureMsg.toString());
-        }
-        else
-        {
-            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        int batchSize = 1000; // 每批插入 1000 条
+        for (int i =  0; i < integratedDataList.size(); i += batchSize) {
+            int end = Math.min(i + batchSize, integratedDataList.size());
+            List<IntegratedData> subList = integratedDataList.subList(i, end);
+            integratedDataMapper.batchInsertIntegratedData(subList); // 调用 MyBatis 批量插入
         }
-        return successMsg.toString();
+        return "导入成功";
     }
 }

+ 5 - 5
mirs-admin/src/main/resources/application-druid.yml

@@ -6,12 +6,12 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://101.126.133.7:9006/mirs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                username: root
-                password: 404cf3eae29df38f
-#                url: jdbc:mysql://127.0.0.1:3306/mirs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#                url: jdbc:mysql://101.126.133.7:9006/mirs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
 #                username: root
-#                password: 123456
+#                password: 404cf3eae29df38f
+                url: jdbc:mysql://127.0.0.1:3306/mirs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                username: root
+                password: 123456
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭

+ 3 - 3
mirs-admin/src/main/resources/application.yml

@@ -68,14 +68,14 @@ spring:
   # redis 配置
   redis:
     # 地址
-    host: 101.126.133.7
-#    host: 127.0.0.1
+#    host: 101.126.133.7
+    host: 127.0.0.1
     # 端口,默认为6379
     port: 6379
     # 数据库索引
     database: 0
     # 密码 Z;G4AS:Vor'YF#p?
-    password: Z;G4AS:Vor'YF#p?
+    password:
     # 连接超时时间
     timeout: 10s
     lettuce:

+ 45 - 0
mirs-admin/src/main/resources/mapper/manage/BrdfDataMapper.xml

@@ -92,6 +92,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+    <insert id="batchInsertBrdfData" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
+        insert into biz_brdf_data_t (
+        sample_model,
+        temperature_k,
+        wavelength_um,
+        theta_incident,
+        phi_incident,
+        theta_reflected,
+        phi_reflected,
+        measurement_1,
+        measurement_2,
+        measurement_3,
+        measurement_4,
+        measurement_5,
+        mean_value,
+        repeatability_pct,
+        create_by,
+        create_time,
+        update_by,
+        update_time
+        ) values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.sampleModel},
+            #{item.temperatureK},
+            #{item.wavelengthUm},
+            #{item.thetaIncident},
+            #{item.phiIncident},
+            #{item.thetaReflected},
+            #{item.phiReflected},
+            #{item.measurement1},
+            #{item.measurement2},
+            #{item.measurement3},
+            #{item.measurement4},
+            #{item.measurement5},
+            #{item.meanValue},
+            #{item.repeatabilityPct},
+            #{item.createBy},
+            #{item.createTime},
+            #{item.updateBy},
+            #{item.updateTime}
+            )
+        </foreach>
+    </insert>
+
     <update id="updateBrdfData" parameterType="BrdfData">
         update biz_brdf_data_t
         <trim prefix="SET" suffixOverrides=",">

+ 35 - 0
mirs-admin/src/main/resources/mapper/manage/EmiMeasurementMapper.xml

@@ -85,6 +85,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+    <insert id="batchInsertEmiMeasurement" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO biz_emi_measurement_t (
+        sample_model,
+        temperature_k,
+        wavelength_um,
+        emi_correction1,
+        emi_correction2,
+        emi_correction3,
+        emi_correction4,
+        emi_correction5,
+        mean_value,
+        create_by,
+        create_time,
+        update_by,
+        update_time
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.sampleModel},
+            #{item.temperatureK},
+            #{item.wavelengthUm},
+            #{item.emiCorrection1},
+            #{item.emiCorrection2},
+            #{item.emiCorrection3},
+            #{item.emiCorrection4},
+            #{item.emiCorrection5},
+            #{item.meanValue},
+            #{item.createBy},
+            #{item.createTime},
+            #{item.updateBy},
+            #{item.updateTime}
+            )
+        </foreach>
+    </insert>
+
     <update id="updateEmiMeasurement" parameterType="EmiMeasurement">
         update biz_emi_measurement_t
         <trim prefix="SET" suffixOverrides=",">

+ 35 - 0
mirs-admin/src/main/resources/mapper/manage/IntegratedDataMapper.xml

@@ -73,6 +73,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+    <insert id="batchInsertIntegratedData" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO biz_integrated_data_t (
+        sample_model,
+        temperature_k,
+        wavelength_um,
+        integral_value1,
+        integral_value2,
+        integral_value3,
+        integral_value4,
+        integral_value5,
+        standard_dev,
+        create_by,
+        create_time,
+        update_by,
+        update_time
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.sampleModel},
+            #{item.temperatureK},
+            #{item.wavelengthUm},
+            #{item.integralValue1},
+            #{item.integralValue2},
+            #{item.integralValue3},
+            #{item.integralValue4},
+            #{item.integralValue5},
+            #{item.standardDev},
+            #{item.createBy},
+            #{item.createTime},
+            #{item.updateBy},
+            #{item.updateTime}
+            )
+        </foreach>
+    </insert>
+
     <update id="updateIntegratedData" parameterType="IntegratedData">
         update biz_integrated_data_t
         <trim prefix="SET" suffixOverrides=",">

+ 19 - 1
mirs-ui/src/views/index.vue

@@ -301,7 +301,8 @@
       >
         <!-- 上半部分 -->
         <div class="result-top">
-          <el-card class="result-block block-21">
+          <!-- 左上区块 -->
+          <el-card class="result-block block-1">
             <div slot="header" class="clearfix">
               <span>样片实物图</span>
             </div>
@@ -314,6 +315,21 @@
               />
             </div>
           </el-card>
+
+          <!-- 右上区块 -->
+          <el-card class="result-block block-2">
+            <div slot="header" class="clearfix">
+              <span>EMI修正折线图</span>
+            </div>
+            <div class="image-container">
+              <el-image
+                :src="brdfImagePath"
+                fit="contain"
+                :preview-src-list="[brdfImagePath]"
+                style="width: 100%; height: 100%"
+              />
+            </div>
+          </el-card>
         </div>
 
         <!-- 下半部分 -->
@@ -394,6 +410,7 @@ export default {
       },
       showResult: false,
       sampleImage: null,
+      brdfImagePath: null,
       chart: null,
       emiMeasurementList: [],
       integratedDataList: [],
@@ -445,6 +462,7 @@ export default {
           this.sampleImage =
             process.env.VUE_APP_BASE_API + data.sample.sampleImage;
         }
+        this.brdfImagePath = process.env.VUE_APP_BASE_API + data.brdfImagePath;
 
         this.brdfDataList = data.brdfDataList;
         this.emiMeasurementList = data.emiMeasurementList;