From b3654b855129db1b8284606e34af8242120e32e1 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 24 七月 2025 14:28:08 +0800
Subject: [PATCH] yys  添加分析数据算法修改,表新增字段

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java |   33 ++++++++++++++++++++++++++-------
 1 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
index f91b9bd..7b74ae6 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -502,18 +502,16 @@
 
                 // 娣诲姞宸ユ椂
                 // 鍒ゆ柇鏄惁鍙槸鍙備笌璁$畻鍊�, 鍙備笌璁$畻鍊煎疄闄呮病鏈夊~鍐�
+                InsProduct finalInsProduct = insProductMapper.selectById(product.getId());
+                InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
                 if (StringUtils.isNotBlank(newResult.getInsValue()) && !newResult.getInsValue().equals("[]")) {
                     threadPoolTaskExecutor.execute(() -> {
-                        InsProduct finalInsProduct = insProductMapper.selectById(product.getId());
-                        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
                         this.addAuxiliary(userId, finalInsProduct, insOrder);
                     });
                 } else {
                     // 鍒ゆ柇鏄惁鏄病鏈夋楠屽�肩殑鍐呭
                     if (saveInsContextDto.getIsNoTestValue() != null && saveInsContextDto.getIsNoTestValue() == 1) {
                         threadPoolTaskExecutor.execute(() -> {
-                            InsProduct finalInsProduct = insProductMapper.selectById(product.getId());
-                            InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
                             this.addAuxiliary(userId, finalInsProduct, insOrder);
                         });
                     }
@@ -968,7 +966,7 @@
             if (insProduct.getInspectionValueType().equals("1") && insProduct.getInsResult().equals(1)) {
                 List<InsProductDeviationWarningDetail> insProductAnalysisDtoList = insProductMapper.selectAnalysis(insProduct, ifsInventoryQuantity.getSupplierName());
 
-                if (insProductAnalysisDtoList.size() < 10) {
+                if (CollectionUtils.isEmpty(insProductAnalysisDtoList)) {
                     continue;
                 }
 
@@ -977,8 +975,10 @@
                         .collect(Collectors.toList());
 
                 double deviation = isDeviationOverTenPercent(laseValueList, insProduct.getLastValue());
+                // 鍒ゆ柇瑕佹眰鍊兼槸鍚﹀亸宸秴杩�10%
+                double asked = isDeviationOverTenPercentByAsked(insProduct.getAsk(), insProduct.getLastValue());
                 // 鍒ゆ柇鍋忓樊鏄惁澶т簬10
-                if (deviation > 10) {
+                if (deviation > 10 || asked > 10) {
                     // 鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�, 娣诲姞杩囦笉闇�瑕佹坊鍔�
                     long count = insProductDeviationWarningService.count(Wrappers.<InsProductDeviationWarning>lambdaQuery()
                             .eq(InsProductDeviationWarning::getInsProductId, insProduct.getId()));
@@ -1006,7 +1006,8 @@
                         deviationWarningDetail.setSupplierName(ifsInventoryQuantity.getSupplierName());
                         deviationWarningDetail.setTestValue(insProduct.getLastValue());
                         deviationWarningDetail.setDetectionTime(insProduct.getCreateTime());
-                        deviationWarningDetail.setIsIssue(1);
+                        deviationWarningDetail.setIsIssue(deviation > 10 ? 1 : 0);
+                        deviationWarningDetail.setIsIssueAsked(asked > 10 ? 1 : 0);
 
                         insProductAnalysisDtoList.add(deviationWarningDetail);
 
@@ -1069,6 +1070,24 @@
     }
 
     /**
+     * *****璁$畻鍋忓樊锛堣姹傚�硷級****
+     * @param asked
+     * @param targetStr
+     * @return
+     */
+    public static double isDeviationOverTenPercentByAsked(String asked, String targetStr) {
+        if(!isNumeric(asked)) return 0;
+        double average = Double.parseDouble(asked);
+        double target = Double.parseDouble(targetStr);
+        double deviationPercent = Math.abs(target - average) / average * 100;
+
+        // 淇濈暀涓や綅灏忔暟
+        DecimalFormat df = new DecimalFormat("#.00");
+        String formatted = df.format(deviationPercent);
+        return Double.parseDouble(formatted);
+    }
+
+    /**
      * ******鍘熷璁板綍妯℃澘澶嶅埗*****
      * @param orderId
      * @param ids

--
Gitblit v1.9.3