Pārlūkot izejas kodu

能耗统计使用印染机的米长。

wukai 1 nedēļu atpakaļ
vecāks
revīzija
17ac1adc2a

+ 90 - 0
jjt-admin/src/main/resources/application-devp.yml

@@ -0,0 +1,90 @@
+local:
+  rzCompare: D:\twin\service\rzCompare.json
+mssql:
+  driver: com.microsoft.sqlserver.jdbc.SQLServerDriver
+  url: jdbc:sqlserver://192.168.66.133:31433;databaseName=WMS_V2_1
+  user: MES
+  pass: MES
+# 数据源配置
+spring:
+  # redis 配置
+  redis:
+    # 地址
+    host: 192.168.66.133
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password: Twin@2024.
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:sqlserver://192.168.66.138:1433;DataBaseName=twin2025
+        username: sa
+        password: Azxcvb!1
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置连接超时时间
+      connectTimeout: 30000
+      # 配置网络超时时间
+      socketTimeout: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true

+ 9 - 8
jjt-admin/src/test/java/com/jjt/task/YhjTaskTest.java

@@ -19,6 +19,7 @@ import java.time.LocalTime;
  * @date 2024/5/7 11:49
  */
 @SpringBootTest(classes = JjtApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+//@ActiveProfiles("devp")
 public class YhjTaskTest {
     @Resource
     private ITwinCalcDayYhjService dayService;
@@ -32,14 +33,14 @@ public class YhjTaskTest {
     public void last() {
         iotService.setToken();
         yhjService.last();
-        String date = "2025-05-28";
-        LocalDate localDate = LocalDate.parse(date);
-        LocalDateTime ldt = LocalDateTime.of(localDate, LocalTime.MIN);
-        for (int i = 7; i < 21; i++) {
-            LocalDateTime tt = ldt.plusHours(i);
-            System.err.println(tt.toLocalDate().toString() + tt.getHour());
-            yhjService.calc(tt.toLocalDate().toString(), tt.getHour());
-        }
+//        String date = "2025-05-28";
+//        LocalDate localDate = LocalDate.parse(date);
+//        LocalDateTime ldt = LocalDateTime.of(localDate, LocalTime.MIN);
+//        for (int i = 7; i < 21; i++) {
+//            LocalDateTime tt = ldt.plusHours(i);
+//            System.err.println(tt.toLocalDate().toString() + tt.getHour());
+//            yhjService.calc(tt.toLocalDate().toString(), tt.getHour());
+//        }
     }
 
     @Test

+ 1 - 0
jjt-biz/src/main/java/com/jjt/calc/domain/TwinCalcDayYhj.java

@@ -102,6 +102,7 @@ public class TwinCalcDayYhj extends BaseEntity {
 
     public void setLength(Integer lengthA, Integer lengthB) {
         this.lengthA = lengthA == null ? 0 : lengthA;
+//        this.weightB
         this.lengthB = lengthB == null ? 0 : lengthB;
         this.length = this.lengthA + this.lengthB;
     }

+ 14 - 0
jjt-biz/src/main/java/com/jjt/calc/service/ITwinCalcHourYhjService.java

@@ -4,6 +4,7 @@ import com.jjt.calc.domain.TwinCalcHourYhj;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 印花机1小时统计数据Service接口
@@ -74,6 +75,18 @@ public interface ITwinCalcHourYhjService {
     void last();
 
     /**
+     * 获取当前数据
+     */
+    void curr();
+
+    /**
+     * 统计当日数据
+     *
+     * @return 结果
+     */
+    Map<Long, Integer> today();
+
+    /**
      * 按指定时间统计
      *
      * @param start 开始时间
@@ -92,4 +105,5 @@ public interface ITwinCalcHourYhjService {
      * 补录数据至当前时间
      */
     void calc2Curr();
+
 }

+ 54 - 60
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcHourYhjServiceImpl.java

@@ -10,6 +10,7 @@ import com.jjt.common.utils.DateUtils;
 import com.jjt.utils.AsyncYhjService;
 import com.jjt.utils.IotService;
 import com.jjt.utils.Tools;
+import javafx.util.Pair;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.session.ExecutorType;
 import org.apache.ibatis.session.SqlSession;
@@ -20,13 +21,12 @@ import javax.annotation.Resource;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.stream.Collectors;
 
 /**
  * 印花机1小时统计数据Service业务层处理
@@ -146,6 +146,43 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
     }
 
     /**
+     * 获取当前数据
+     */
+    @Override
+    public void curr() {
+
+    }
+
+    /**
+     * 统计当日数据
+     */
+    @Override
+    public Map<Long, Integer> today() {
+        //计算统计时间
+        Pair<Date, Date> pair = Tools.calcToday();
+        Date sTime = pair.getKey();
+        Date eTime = pair.getValue();
+        TwinCalcHourYhj search = new TwinCalcHourYhj();
+        Map<String, Object> params = new HashMap<>(16);
+        params.put("sTime", sTime);
+        params.put("eTime", eTime);
+        search.setParams(params);
+        List<TwinCalcHourYhj> hourList = selectTwinCalcHourYhjList(search);
+        TwinCalcHourYhj lastRecord = lastRecord();
+        LocalDate localDate = DateUtils.toLocalDate(lastRecord.getDataDate());
+        LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(lastRecord.getHour() + 1);
+        List<TwinCalcHourYhj> calcList = process(start, LocalDateTime.now());
+        hourList.addAll(calcList);
+        Map<Long, Integer> sumByDevice = calcList.stream()
+                .collect(Collectors.groupingBy(
+                        TwinCalcHourYhj::getDeviceId,
+                        Collectors.summingInt(TwinCalcHourYhj::getLength)
+                ));
+
+        return sumByDevice;
+    }
+
+    /**
      * 按指定时间统计
      *
      * @param start 开始时间
@@ -155,6 +192,19 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
     public void calc(LocalDateTime start, LocalDateTime end) {
         //先删除当前时段的统计数据
         deleteTwinCalcHourYhj(DateUtils.toDate(start.toLocalDate()), start.getHour());
+
+        List<TwinCalcHourYhj> calcList = process(start, end);
+
+        try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
+            if (calcList.size() > 0) {
+                TwinCalcHourYhjMapper mapper = sqlSession.getMapper(TwinCalcHourYhjMapper.class);
+                calcList.forEach(mapper::insertTwinCalcHourYhj);
+                sqlSession.commit();
+            }
+        }
+    }
+
+    private List<TwinCalcHourYhj> process(LocalDateTime start, LocalDateTime end) {
         List<TwinDeviceYhj> list = yhjService.selectTwinDeviceYhjList(new TwinDeviceYhj());
         List<Future<TwinCalcHourYhj>> futureList = new ArrayList<>();
         List<TwinCalcHourYhj> calcList = new ArrayList<>();
@@ -175,14 +225,7 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
         } catch (InterruptedException | ExecutionException e) {
             throw new RuntimeException(e);
         }
-
-        try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
-            if (calcList.size() > 0) {
-                TwinCalcHourYhjMapper mapper = sqlSession.getMapper(TwinCalcHourYhjMapper.class);
-                calcList.forEach(mapper::insertTwinCalcHourYhj);
-                sqlSession.commit();
-            }
-        }
+        return calcList;
     }
 
     /**
@@ -228,53 +271,4 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
     public void deleteTwinCalcHourYhj(Date date, int hour) {
         twinCalcHourYhjMapper.deleteTwinCalcHourYhj(date, hour);
     }
-
-    /**
-     * 初始值,如果当前值不为空,并且原来值为空
-     */
-    void cloneArrayFirst(Integer[] arr, Integer[] target) {
-        for (int i = 0; i < arr.length; i++) {
-            if (arr[i] != null && target[i] == null) {
-                target[i] = arr[i];
-            }
-        }
-    }
-
-    /**
-     * 复制数组,如果当前值不为空
-     */
-    void cloneArray(Integer[] arr, Integer[] target) {
-        for (int i = 0; i < arr.length; i++) {
-            if (arr[i] != null) {
-                target[i] = arr[i];
-            }
-        }
-    }
-
-    /**
-     * 组合入库数据
-     */
-    void combo(List<TwinCalcHourYhj> calcList, LocalDateTime start, TwinDeviceYhj yhj, Integer distance, Integer length) {
-        if (distance != null && length != null) {
-            TwinCalcHourYhj calc = new TwinCalcHourYhj();
-            calc.setDeviceId(yhj.getDeviceId());
-            calc.setDataDate(DateUtils.toDate(start.toLocalDate()));
-            calc.setHour(start.getHour());
-            calc.setDistance(distance);
-            calc.setLength(length);
-            calcList.add(calc);
-        }
-    }
-
-    /**
-     * 计算米长
-     */
-    void calcLength(int j, Integer[] last, Integer[] first, Integer[] total) {
-        if (last[j] != null && first[j] != null) {
-            if (total[j] == null) {
-                total[j] = 0;
-            }
-            total[j] += (last[j] - first[j]);
-        }
-    }
 }

+ 1 - 1
jjt-biz/src/main/java/com/jjt/utils/InitService.java

@@ -50,7 +50,7 @@ public class InitService {
             //设置iotToken
             iotService.setToken();
             //补录印花线数据
-//            twinCalcHourYhjService.calc2Curr();
+            twinCalcHourYhjService.calc2Curr();
             //补录能耗数据至当前时间
             twinCalcHourEnergyService.calc2Curr();
             //补录经编车间数据至当前时间

+ 20 - 3
jjt-biz/src/main/java/com/jjt/ws/service/impl/TwinRzCalcMonthServiceImpl.java

@@ -1,5 +1,7 @@
 package com.jjt.ws.service.impl;
 
+import com.jjt.calc.domain.TwinCalcDayYhj;
+import com.jjt.calc.service.ITwinCalcDayYhjService;
 import com.jjt.common.utils.DateUtils;
 import com.jjt.elec.domain.ElecPrice;
 import com.jjt.elec.service.IElecPriceService;
@@ -15,7 +17,9 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 染整月统计Service业务层处理
@@ -29,6 +33,8 @@ public class TwinRzCalcMonthServiceImpl implements ITwinRzCalcMonthService {
     private TwinRzCalcMonthMapper twinRzCalcMonthMapper;
     @Resource
     private IElecPriceService elecPriceService;
+    @Resource
+    private ITwinCalcDayYhjService yhjService;
 
     /**
      * 查询染整月统计
@@ -131,6 +137,16 @@ public class TwinRzCalcMonthServiceImpl implements ITwinRzCalcMonthService {
      */
     @Override
     public void calc(Date date, List<TwinWorkshopCalc> calcList) {
+        TwinCalcDayYhj search = new TwinCalcDayYhj();
+        Map<String, Object> params = new HashMap<>();
+        params.put("beginTime", DateUtils.dateTime(date));
+        params.put("endTime", DateUtils.dateTime(date));
+        search.setParams(params);
+        List<TwinCalcDayYhj> yhjList = yhjService.selectTwinCalcDayYhjList(search);
+        Integer totalLength = yhjList.stream()
+                .map(TwinCalcDayYhj::getLength)
+                .filter(java.util.Objects::nonNull)
+                .reduce(0, Integer::sum);
         TwinRzCalcMonth vo = selectExists(date);
         for (TwinWorkshopCalc calc : calcList) {
             switch (calc.getWsCode()) {
@@ -178,9 +194,10 @@ public class TwinRzCalcMonthServiceImpl implements ITwinRzCalcMonthService {
         }
         vo.setPrice();
         if (vo.getDPrice().compareTo(BigDecimal.ZERO) != 0) {
-            BigDecimal baseD = BigDecimal.valueOf(45000);
-            BigDecimal baseL = BigDecimal.valueOf(120000).multiply(BigDecimal.valueOf(0.95 + (Math.random()) * 0.1));
-            BigDecimal length = vo.getDPrice().multiply(baseL).divide(baseD, 2, RoundingMode.HALF_UP);
+//            BigDecimal baseD = BigDecimal.valueOf(45000);
+//            BigDecimal baseL = BigDecimal.valueOf(120000).multiply(BigDecimal.valueOf(0.95 + (Math.random()) * 0.1));
+//            BigDecimal length = vo.getDPrice().multiply(baseL).divide(baseD, 2, RoundingMode.HALF_UP);
+            BigDecimal length = BigDecimal.valueOf(totalLength);
             BigDecimal weight = length.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP);
             vo.setLength(length);
             vo.setWeight(weight);

+ 1 - 0
jjt-biz/src/main/resources/mapper/calc/TwinCalcDayYhjMapper.xml

@@ -45,6 +45,7 @@
             <if test="dayLength != null ">and DAY_LENGTH = #{dayLength}</if>
             <if test="dayWeight != null ">and DAY_WEIGHT = #{dayWeight}</if>
         </where>
+        order by time desc
     </select>
 
     <select id="selectTwinCalcDayYhjById" parameterType="Long" resultMap="TwinCalcDayYhjResult">