Quellcode durchsuchen

解决热油数据

wukai vor 1 Monat
Ursprung
Commit
e57b9c81ab

+ 1 - 1
jjt-admin/src/test/java/com/jjt/data/EnergyTest.java

@@ -53,7 +53,7 @@ public class EnergyTest {
     @Test
     void test() {
         iotService.setToken();
-        String st = "2025-04-10";
+        String st = "2025-06-12";
         LocalDate localDate = LocalDate.parse(st);
         LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(7);
         LocalDateTime end = start.plusHours(1);

+ 17 - 15
jjt-admin/src/test/java/com/jjt/inventory/BpOutTest.java

@@ -4,6 +4,7 @@ import com.jjt.JjtApplication;
 import com.jjt.inventory.service.ITwinCalcHourBpOutService;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -15,29 +16,30 @@ import java.time.LocalTime;
  * 印花机
  */
 @SpringBootTest(classes = JjtApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ActiveProfiles("devp")
 public class BpOutTest {
     @Resource
     ITwinCalcHourBpOutService bpOutService;
 
     @Test
     public void hour() {
-        String st = "2025-06-11";
-        String ed = "2025-06-12";
+        String st = "2025-06-14";
+        String ed = "2025-06-14";
         LocalDate localDate = LocalDate.parse(st);
         LocalDate endDate = LocalDate.parse(ed);
-        LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(15);
-//        hourRzService.hour(start, start.plusHours(1));
-        LocalDateTime end = LocalDateTime.of(endDate.plusDays(1), LocalTime.MIN).plusHours(6);
-        LocalDateTime curr = LocalDateTime.now();
-        if (end.isAfter(curr)) {
-            end = curr.minusHours(1);
-        }
-        do {
-            int i = start.getHour();
-            System.err.println(start.toLocalDate().toString() + "\t" + i);
-            bpOutService.calc(start, start.plusHours(1));
-            start = start.plusHours(1);
-        } while (!start.isAfter(end));
+        LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(17);
+        bpOutService.calc(start, start.plusHours(1));
+//        LocalDateTime end = LocalDateTime.of(endDate.plusDays(1), LocalTime.MIN).plusHours(6);
+//        LocalDateTime curr = LocalDateTime.now();
+//        if (end.isAfter(curr)) {
+//            end = curr.minusHours(1);
+//        }
+//        do {
+//            int i = start.getHour();
+//            System.err.println(start.toLocalDate().toString() + "\t" + i);
+//            bpOutService.calc(start, start.plusHours(1));
+//            start = start.plusHours(1);
+//        } while (!start.isAfter(end));
 //        bpOutService.hour();
     }
 

+ 72 - 33
jjt-biz/src/main/java/com/jjt/biz/service/impl/ApiYrServiceImpl.java

@@ -6,8 +6,10 @@ import com.alibaba.fastjson2.JSONObject;
 import com.jjt.biz.service.IApiYrService;
 import com.jjt.biz.vo.*;
 import com.jjt.calc.domain.TwinCalcDayYhj;
+import com.jjt.calc.domain.TwinCalcHourEnergy;
 import com.jjt.calc.domain.TwinCalcHourYhj;
 import com.jjt.calc.service.ITwinCalcDayYhjService;
+import com.jjt.calc.service.ITwinCalcHourEnergyService;
 import com.jjt.calc.service.ITwinCalcHourYhjService;
 import com.jjt.common.constant.CacheConstants;
 import com.jjt.common.core.redis.RedisCache;
@@ -20,7 +22,10 @@ import com.jjt.rz.service.ITwinDeviceRzService;
 import com.jjt.rz.service.ITwinDeviceTypeService;
 import com.jjt.rz.vo.CompareVO;
 import com.jjt.ws.domain.TwinRzCalcMonth;
+import com.jjt.ws.domain.TwinWorkshop;
+import com.jjt.ws.domain.TwinWorkshopEnergy;
 import com.jjt.ws.service.ITwinRzCalcMonthService;
+import com.jjt.ws.service.ITwinWorkshopService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -61,7 +66,10 @@ public class ApiYrServiceImpl implements IApiYrService {
     private ITwinDeviceTypeService typeService;
     @Resource
     ITwinCalcHourBpOutService bpOutService;
-
+    @Resource
+    private ITwinCalcHourEnergyService energyService;
+    @Resource
+    private ITwinWorkshopService wsService;
 
     /**
      * 获取产线状态
@@ -321,15 +329,54 @@ public class ApiYrServiceImpl implements IApiYrService {
         List<CompareVO> result = new ArrayList<>();
         for (YrCompareBackReq req : reqs) {
             CompareVO vo = itemProcessor(req, flag);
-            int totalLength = getTotalLength(req);
-            vo.setLength(totalLength);
-
+            vo.setLength(getTotalLength(req));
             vo.setBp(getBpLength(req));
+            vo.setOil(getOil(req));
             result.add(vo);
         }
         return result;
     }
 
+
+    private Map<String, Object> getParams(YrCompareBackReq req) {
+        Map<String, Object> params = new HashMap<>(16);
+        params.put("sTime", DateUtils.toDate(req.getStart()));
+        params.put("eTime", DateUtils.toDate(req.getEnd()));
+        return params;
+    }
+
+    /**
+     * 获取用油情况
+     *
+     * @param req 输入参数
+     * @return 结果
+     */
+    private BigDecimal getOil(YrCompareBackReq req) {
+        TwinCalcHourEnergy energySearch = new TwinCalcHourEnergy();
+        energySearch.setParams(getParams(req));
+        List<TwinCalcHourEnergy> list = energyService.selectTwinCalcHourEnergyList(energySearch);
+        List<TwinWorkshop> wsList = wsService.selectTwinWorkshopList(new TwinWorkshop());
+        //存储能源ID和车间ID关系
+        Map<Long, TwinWorkshop> wsMap = new HashMap<>(16);
+        wsList.forEach(ws -> {
+            List<TwinWorkshopEnergy> energyList = wsService.selectTwinWorkshopByWsId(ws.getWsId()).getTwinWorkshopEnergyList();
+            energyList.forEach(o -> wsMap.put(o.getEnergyId(), ws));
+        });
+        BigDecimal total = BigDecimal.ZERO;
+        for (TwinCalcHourEnergy obj : list) {
+            obj.setTeam();
+            TwinWorkshop ws = wsMap.get(obj.getEnergyId());
+            if (ws == null) {
+                continue;
+            }
+            if (ws.getWsCode().contains("WS03-Y")) {
+                total = total.add(obj.getDataValue());
+            }
+        }
+        //先直接除以8条产线
+        return total.divide(BigDecimal.valueOf(8), 2, RoundingMode.HALF_UP);
+    }
+
     /**
      * 获取白坯投放量
      *
@@ -340,15 +387,11 @@ public class ApiYrServiceImpl implements IApiYrService {
         //获取印花产量数据
         TwinCalcHourBpOut bpOut = new TwinCalcHourBpOut();
         bpOut.setDeviceId(req.getLine());
-        Map<String, Object> params = new HashMap<>(16);
-        params.put("sTime", DateUtils.toDate(req.getStart()));
-        params.put("eTime", DateUtils.toDate(req.getEnd()));
-        bpOut.setParams(params);
+        bpOut.setParams(getParams(req));
         List<TwinCalcHourBpOut> yhjList = bpOutService.selectTwinCalcHourBpOutList(bpOut);
-        int totalLength = yhjList.stream()
+        return yhjList.stream()
                 .mapToInt(TwinCalcHourBpOut::getLength)
                 .sum();
-        return totalLength;
     }
 
     /**
@@ -361,15 +404,11 @@ public class ApiYrServiceImpl implements IApiYrService {
         //获取印花产量数据
         TwinCalcHourYhj yhjSearch = new TwinCalcHourYhj();
         yhjSearch.setDeviceId(req.getLine());
-        Map<String, Object> params = new HashMap<>(16);
-        params.put("sTime", DateUtils.toDate(req.getStart()));
-        params.put("eTime", DateUtils.toDate(req.getEnd()));
-        yhjSearch.setParams(params);
+        yhjSearch.setParams(getParams(req));
         List<TwinCalcHourYhj> yhjList = yhjService.selectTwinCalcHourYhjList(yhjSearch);
-        int totalLength = yhjList.stream()
+        return yhjList.stream()
                 .mapToInt(TwinCalcHourYhj::getLength)
                 .sum();
-        return totalLength;
     }
 
     private CompareVO itemProcessor(YrCompareBackReq req, boolean flag) {
@@ -418,43 +457,43 @@ public class ApiYrServiceImpl implements IApiYrService {
 
         // 计算平均值的方法
         BiFunction<List<CompareVO.Para>, Predicate<Map.Entry<String, Object>>, BigDecimal> calculateAvg = (list, filter) ->
-            list.stream()
-                .flatMap(item -> item.getPara().entrySet().stream())
-                .filter(filter)
-                .map(valueExtractor)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
+                list.stream()
+                        .flatMap(item -> item.getPara().entrySet().stream())
+                        .filter(filter)
+                        .map(valueExtractor)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
 
         // 前整车间计算
         List<CompareVO.Para> qzDx = vo.getQz().getDxPara();
         List<CompareVO.Para> qzTg = vo.getQz().getTgPara();
 
         vo.getQz().setHxAvgTemp(qzDx.isEmpty() ? BigDecimal.ZERO :
-            calculateAvg.apply(qzDx, entry -> entry.getKey().contains("烘箱温度"))
-                .divide(new BigDecimal(qzDx.size() * 4), 2, RoundingMode.HALF_UP));
+                calculateAvg.apply(qzDx, entry -> entry.getKey().contains("烘箱温度"))
+                        .divide(new BigDecimal(qzDx.size() * 4), 2, RoundingMode.HALF_UP));
 
         vo.getQz().setTgAvgTemp(qzTg.isEmpty() ? BigDecimal.ZERO :
-            calculateAvg.apply(qzTg, entry -> entry.getKey().contains("烫辊") && entry.getKey().contains("温度"))
-                .divide(new BigDecimal(qzTg.size() * 2), 2, RoundingMode.HALF_UP));
+                calculateAvg.apply(qzTg, entry -> entry.getKey().contains("烫辊") && entry.getKey().contains("温度"))
+                        .divide(new BigDecimal(qzTg.size() * 2), 2, RoundingMode.HALF_UP));
 
         vo.getQz().setTgAvgSpeed(qzTg.isEmpty() ? BigDecimal.ZERO :
-            calculateAvg.apply(qzTg, entry -> entry.getKey().contains("走布速度"))
-                .divide(new BigDecimal(qzTg.size()), 2, RoundingMode.HALF_UP));
+                calculateAvg.apply(qzTg, entry -> entry.getKey().contains("走布速度"))
+                        .divide(new BigDecimal(qzTg.size()), 2, RoundingMode.HALF_UP));
 
         // 后整车间计算
         List<CompareVO.Para> hzDx = vo.getHz().getDxPara();
         List<CompareVO.Para> hzTg = vo.getHz().getTgPara();
 
         vo.getHz().setHxAvgTemp(hzDx.isEmpty() ? BigDecimal.ZERO :
-            calculateAvg.apply(hzDx, entry -> entry.getKey().contains("烘箱温度"))
-                .divide(new BigDecimal(hzDx.size() * 4), 2, RoundingMode.HALF_UP));
+                calculateAvg.apply(hzDx, entry -> entry.getKey().contains("烘箱温度"))
+                        .divide(new BigDecimal(hzDx.size() * 4), 2, RoundingMode.HALF_UP));
 
         vo.getHz().setTgAvgTemp(hzTg.isEmpty() ? BigDecimal.ZERO :
-            calculateAvg.apply(hzTg, entry -> entry.getKey().contains("烫辊") && entry.getKey().contains("温度"))
-                .divide(new BigDecimal(hzTg.size() * 2), 2, RoundingMode.HALF_UP));
+                calculateAvg.apply(hzTg, entry -> entry.getKey().contains("烫辊") && entry.getKey().contains("温度"))
+                        .divide(new BigDecimal(hzTg.size() * 2), 2, RoundingMode.HALF_UP));
 
         vo.getHz().setTgAvgSpeed(hzTg.isEmpty() ? BigDecimal.ZERO :
-            calculateAvg.apply(hzTg, entry -> entry.getKey().contains("走布速度"))
-                .divide(new BigDecimal(hzTg.size()), 2, RoundingMode.HALF_UP));
+                calculateAvg.apply(hzTg, entry -> entry.getKey().contains("走布速度"))
+                        .divide(new BigDecimal(hzTg.size()), 2, RoundingMode.HALF_UP));
 
         if (!flag) {
             vo.getQz().setDxPara(null);

+ 11 - 0
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcHourEnergyServiceImpl.java

@@ -2,11 +2,13 @@ package com.jjt.calc.service.impl;
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.jjt.calc.domain.TwinCalcHourEnergy;
 import com.jjt.calc.mapper.TwinCalcHourEnergyMapper;
 import com.jjt.calc.service.ITwinCalcHourEnergyService;
 import com.jjt.common.utils.DateUtils;
 import com.jjt.common.utils.StringUtils;
+import com.jjt.inventory.domain.TwinCalcHourBpOut;
 import com.jjt.utils.IotService;
 import com.jjt.utils.Tools;
 import com.jjt.ws.domain.TwinWorkshopEnergy;
@@ -124,6 +126,8 @@ public class TwinCalcHourEnergyServiceImpl implements ITwinCalcHourEnergyService
     public void calcEnergy(LocalDateTime start, LocalDateTime end) {
         Date date = Date.from(start.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
         int period = start.getHour();
+        //先删除数据
+        deleteTwinCalcHourEnergy(start.toLocalDate(), period);
         Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
         Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
         List<TwinWorkshopEnergy> energyList = energyService.selectTwinWorkshopEnergyList(new TwinWorkshopEnergy());
@@ -173,6 +177,13 @@ public class TwinCalcHourEnergyServiceImpl implements ITwinCalcHourEnergyService
         }
     }
 
+    private void deleteTwinCalcHourEnergy(LocalDate date, int hour) {
+        QueryWrapper<TwinCalcHourEnergy> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("data_date", date);
+        queryWrapper.eq("hour", hour);
+        twinCalcHourEnergyMapper.delete(queryWrapper);
+    }
+
     /**
      * 统计上一个时段的能源
      */

+ 1 - 1
jjt-biz/src/main/java/com/jjt/ws/service/impl/TwinWorkshopCalcServiceImpl.java

@@ -179,7 +179,7 @@ public class TwinWorkshopCalcServiceImpl implements ITwinWorkshopCalcService {
         Map<Long, List<TwinCalcHourEnergy>> calcMap = energyList.stream().filter(o -> o.getWsId() != null).collect(Collectors.groupingBy(TwinCalcHourEnergy::getWsId, LinkedHashMap::new, Collectors.toList()));
         for (Long wsId : calcMap.keySet()) {
             //按班组统计用量和价格
-            Map<String, TwinWorkshopCalc> resultMap = calcMap.get(wsId).stream().collect(Collectors.groupingBy(TwinCalcHourEnergy::getTeam,
+            Map<String, TwinWorkshopCalc> resultMap = calcMap.get(wsId).stream().filter(o -> o.getPrice() != null).collect(Collectors.groupingBy(TwinCalcHourEnergy::getTeam,
                     Collectors.collectingAndThen(
                             Collectors.toList(),
                             list -> {

+ 24 - 18
jjt-biz/src/main/resources/mapper/calc/TwinCalcHourEnergyMapper.xml

@@ -1,34 +1,36 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jjt.calc.mapper.TwinCalcHourEnergyMapper">
 
     <resultMap type="TwinCalcHourEnergy" id="TwinCalcHourEnergyResult">
-        <result property="autoId"    column="AUTO_ID"    />
-        <result property="dataDate"    column="DATA_DATE"    />
-        <result property="hour"    column="HOUR"    />
-        <result property="energyId"    column="ENERGY_ID"    />
-        <result property="dataValue"    column="DATA_VALUE"    />
-        <result property="remark"    column="REMARK"    />
+        <result property="autoId" column="AUTO_ID"/>
+        <result property="dataDate" column="DATA_DATE"/>
+        <result property="hour" column="HOUR"/>
+        <result property="energyId" column="ENERGY_ID"/>
+        <result property="dataValue" column="DATA_VALUE"/>
+        <result property="remark" column="REMARK"/>
     </resultMap>
 
     <sql id="selectTwinCalcHourEnergyVo">
-        select AUTO_ID, DATA_DATE, HOUR, ENERGY_ID, DATA_VALUE, REMARK from TWIN_CALC_HOUR_ENERGY
+        select AUTO_ID, DATA_DATE, HOUR, ENERGY_ID, DATA_VALUE, REMARK
+        from TWIN_CALC_HOUR_ENERGY
     </sql>
 
     <select id="selectTwinCalcHourEnergyList" parameterType="TwinCalcHourEnergy" resultMap="TwinCalcHourEnergyResult">
         <include refid="selectTwinCalcHourEnergyVo"/>
         <where>
-            <if test="dataDate != null "> and DATA_DATE = #{dataDate}</if>
-            <if test="hour != null "> and HOUR = #{hour}</if>
-            <if test="energyId != null "> and ENERGY_ID = #{energyId}</if>
-            <if test="dataValue != null "> and DATA_VALUE = #{dataValue}</if>
-            <if test="remark != null  and remark != ''"> and REMARK = #{remark}</if>
+            <if test="dataDate != null ">and DATA_DATE = #{dataDate}</if>
+            <if test="hour != null ">and HOUR = #{hour}</if>
+            <if test="energyId != null ">and ENERGY_ID = #{energyId}</if>
+            <if test="dataValue != null ">and DATA_VALUE = #{dataValue}</if>
+            <if test="remark != null  and remark != ''">and REMARK = #{remark}</if>
             <if test="params.sTime != null and params.eTime != null">
                 and DATEADD(hour, HOUR, DATA_DATE) between #{params.sTime} and #{params.eTime}
             </if>
         </where>
+        order by DATA_DATE desc, HOUR desc
     </select>
 
     <select id="selectTwinCalcHourEnergyByAutoId" parameterType="Long" resultMap="TwinCalcHourEnergyResult">
@@ -36,7 +38,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where AUTO_ID = #{autoId}
     </select>
     <select id="lastRecord" resultType="com.jjt.calc.domain.TwinCalcHourEnergy">
-        select top 1 * from TWIN_CALC_HOUR_ENERGY order by AUTO_ID desc
+        select top 1 *
+        from TWIN_CALC_HOUR_ENERGY
+        order by AUTO_ID desc
     </select>
 
     <insert id="insertTwinCalcHourEnergy" parameterType="TwinCalcHourEnergy">
@@ -47,14 +51,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="energyId != null">ENERGY_ID,</if>
             <if test="dataValue != null">DATA_VALUE,</if>
             <if test="remark != null">REMARK,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="dataDate != null">#{dataDate},</if>
             <if test="hour != null">#{hour},</if>
             <if test="energyId != null">#{energyId},</if>
             <if test="dataValue != null">#{dataValue},</if>
             <if test="remark != null">#{remark},</if>
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateTwinCalcHourEnergy" parameterType="TwinCalcHourEnergy">
@@ -70,7 +74,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteTwinCalcHourEnergyByAutoId" parameterType="Long">
-        delete from TWIN_CALC_HOUR_ENERGY where AUTO_ID = #{autoId}
+        delete
+        from TWIN_CALC_HOUR_ENERGY
+        where AUTO_ID = #{autoId}
     </delete>
 
     <delete id="deleteTwinCalcHourEnergyByAutoIds" parameterType="String">