Răsfoiți Sursa

能源统计功能完善

wukai 6 luni în urmă
părinte
comite
9c58859e5e

+ 13 - 0
jjt-biz/src/main/java/com/jjt/calc/domain/TwinCalcHourEnergy.java

@@ -57,5 +57,18 @@ public class TwinCalcHourEnergy extends BaseEntity {
     @ApiModelProperty("统计数据")
     @Excel(name = "统计数据")
     private BigDecimal dataValue;
+    @ApiModelProperty("班组")
+    private String team;
+    @ApiModelProperty("车间ID")
+    private Long wsId;
 
+    public void setTeam() {
+        if (this.hour >= 7 && this.hour < 19) {
+            //A班
+            this.team = "A";
+        } else {
+            //B班
+            this.team = "B";
+        }
+    }
 }

+ 24 - 1
jjt-biz/src/main/java/com/jjt/calc/service/ITwinCalcHourEnergyService.java

@@ -1,8 +1,11 @@
 package com.jjt.calc.service;
 
-import java.util.List;
 import com.jjt.calc.domain.TwinCalcHourEnergy;
 
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 能源1小时统计数据Service接口
  *
@@ -57,4 +60,24 @@ public interface ITwinCalcHourEnergyService {
      * @return 结果
      */
     public int deleteTwinCalcHourEnergyByAutoId(Long autoId);
+
+    /**
+     * 统计指定日期指定时段能耗数据
+     *
+     * @param start 开始时间戳
+     * @param end   结束时间戳
+     */
+    void calcEnergy(LocalDateTime start, LocalDateTime end);
+
+    /**
+     * 统计上一个时段的能源
+     */
+    void calcLastEnergy();
+    /**
+     * 按时间查询
+     *
+     * @param parseDate 时间
+     * @return 结果
+     */
+    List<TwinCalcHourEnergy> selectTwinEmpCalcListByDate(Date parseDate);
 }

+ 103 - 4
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcHourEnergyServiceImpl.java

@@ -1,11 +1,28 @@
 package com.jjt.calc.service.impl;
 
-import java.util.List;
-import org.springframework.stereotype.Service;
-import com.jjt.calc.mapper.TwinCalcHourEnergyMapper;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
 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.utils.IotService;
+import com.jjt.utils.Tools;
+import com.jjt.ws.domain.TwinWorkshop;
+import com.jjt.ws.domain.TwinWorkshopEnergy;
+import com.jjt.ws.service.ITwinWorkshopService;
+import javafx.util.Pair;
+import org.apache.ibatis.session.ExecutorType;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.*;
 
 /**
  * 能源1小时统计数据Service业务层处理
@@ -17,6 +34,12 @@ import javax.annotation.Resource;
 public class TwinCalcHourEnergyServiceImpl implements ITwinCalcHourEnergyService {
     @Resource
     private TwinCalcHourEnergyMapper twinCalcHourEnergyMapper;
+    @Resource
+    private IotService iotService;
+    @Resource
+    private SqlSessionFactory factory;
+    @Resource
+    private ITwinWorkshopService workshopService;
 
     /**
      * 查询能源1小时统计数据
@@ -48,7 +71,7 @@ public class TwinCalcHourEnergyServiceImpl implements ITwinCalcHourEnergyService
      */
     @Override
     public int insertTwinCalcHourEnergy(TwinCalcHourEnergy twinCalcHourEnergy) {
-            return twinCalcHourEnergyMapper.insertTwinCalcHourEnergy(twinCalcHourEnergy);
+        return twinCalcHourEnergyMapper.insertTwinCalcHourEnergy(twinCalcHourEnergy);
     }
 
     /**
@@ -83,4 +106,80 @@ public class TwinCalcHourEnergyServiceImpl implements ITwinCalcHourEnergyService
     public int deleteTwinCalcHourEnergyByAutoId(Long autoId) {
         return twinCalcHourEnergyMapper.deleteTwinCalcHourEnergyByAutoId(autoId);
     }
+
+    /**
+     * 统计指定日期指定时段能耗数据
+     *
+     * @param start 开始时间戳
+     * @param end   结束时间戳
+     */
+    @Override
+    public void calcEnergy(LocalDateTime start, LocalDateTime end) {
+        Date date = Date.from(start.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
+        int period = start.getHour();
+        Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
+        Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
+        String baseSql = "select %s from %s where time>%s and time <=%s";
+        TwinWorkshop ws = workshopService.selectTwinWorkshopByWsId(3L);
+        List<TwinWorkshopEnergy> energyList = ws.getTwinWorkshopEnergyList();
+        List<TwinCalcHourEnergy> list = new ArrayList<>();
+        for (TwinWorkshopEnergy energy : energyList) {
+            String sql = String.format(baseSql, energy.getEnergyCode(), energy.getEnergyPath(), startTime, endTime);
+            JSONObject jsonObject = iotService.query(sql);
+            JSONObject data = jsonObject.getJSONObject("data");
+            JSONArray values = data.getJSONArray("values");
+            JSONArray first = values.getJSONArray(0);
+            JSONArray last = values.getJSONArray(values.size() - 1);
+            int res = last.getInt(0) - first.getInt(0);
+            TwinCalcHourEnergy calcEnergy = new TwinCalcHourEnergy();
+            calcEnergy.setEnergyId(energy.getEnergyId());
+            BigDecimal dataV = BigDecimal.valueOf(res).multiply(energy.getCoefficient());
+            calcEnergy.setDataValue(dataV);
+            calcEnergy.setDataDate(date);
+            calcEnergy.setHour(period);
+            list.add(calcEnergy);
+        }
+        if (list.size() > 0) {
+            try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
+                TwinCalcHourEnergyMapper mapper = sqlSession.getMapper(TwinCalcHourEnergyMapper.class);
+                list.forEach(mapper::insertTwinCalcHourEnergy);
+                sqlSession.commit();
+            }
+        }
+    }
+
+    /**
+     * 统计上一个时段的能源
+     */
+    @Override
+    public void calcLastEnergy() {
+        LocalDateTime ldt = Tools.currWholeTime();
+        //上一个小时
+        ldt = ldt.minusHours(1);
+        //这里不需要向前取一秒了
+        LocalDateTime start = ldt;
+        LocalDateTime end = ldt.plusHours(1);
+        calcEnergy(start, end);
+    }
+
+    /**
+     * 按时间查询
+     *
+     * @param date 时间
+     * @return 结果
+     */
+    @Override
+    public List<TwinCalcHourEnergy> selectTwinEmpCalcListByDate(Date date) {
+        LocalDate localDate = DateUtils.toLocalDate(date);
+        //计算统计时间
+        Pair<Date, Date> pair = Tools.calcDay(localDate);
+        Date sTime = pair.getKey();
+        Date eTime = pair.getValue();
+        TwinCalcHourEnergy hour = new TwinCalcHourEnergy();
+        Map<String, Object> params = new HashMap<>(16);
+        params.put("sTime", sTime);
+        params.put("eTime", eTime);
+        hour.setParams(params);
+        return selectTwinCalcHourEnergyList(hour);
+    }
 }

+ 15 - 3
jjt-biz/src/main/java/com/jjt/task/EnergyTask.java

@@ -1,9 +1,12 @@
 package com.jjt.task;
 
-import com.jjt.utils.TaskService;
+import com.jjt.calc.service.ITwinCalcHourEnergyService;
+import com.jjt.common.utils.DateUtils;
+import com.jjt.ws.service.ITwinWorkshopCalcService;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
 
 /**
  * 能源定时任务
@@ -14,11 +17,20 @@ import javax.annotation.Resource;
 @Component("energy")
 public class EnergyTask {
     @Resource
-    private TaskService taskService;
+    private ITwinCalcHourEnergyService energyService;
+    @Resource
+    private ITwinWorkshopCalcService wsCalcService;
 
     public void last() {
-        taskService.calcLastEnergy();
+        energyService.calcLastEnergy();
     }
 
+    /**
+     * 统计昨日数据
+     */
+    public void calc() {
+        LocalDate localDate = LocalDate.now().minusDays(1);
+        wsCalcService.calc(DateUtils.toDate(localDate));
+    }
 
 }

+ 0 - 264
jjt-biz/src/main/java/com/jjt/utils/TaskService.java

@@ -1,264 +0,0 @@
-package com.jjt.utils;
-
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import com.jjt.biz.domain.TwinDevice;
-import com.jjt.biz.service.ITwinDeviceService;
-import com.jjt.calc.domain.*;
-import com.jjt.calc.mapper.TwinCalcHourEnergyMapper;
-import com.jjt.ws.domain.TwinWorkshop;
-import com.jjt.ws.domain.TwinWorkshopEnergy;
-import com.jjt.ws.service.ITwinWorkshopService;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.session.ExecutorType;
-import org.apache.ibatis.session.SqlSession;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneOffset;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/**
- * 统计任务
- *
- * @author wukai
- * @date 2024/5/4 20:35
- */
-@Service
-@Slf4j
-public class TaskService {
-    @Resource
-    private ITwinDeviceService deviceService;
-    @Resource
-    private IotService iotService;
-    @Resource
-    private JdbcTemplate jdbcTemplate;
-//    @Resource
-//    private AsyncServiceImpl asyncService;
-//    @Resource
-//    private ITwinCalcDayService dayService;
-//    @Resource
-//    private ITwinCalcStopService stopService;
-//    @Resource
-//    private ITwinCalcAlarmsService alarmsService;
-//    @Resource
-//    private ITwinCalcHourService hourService;
-    @Resource
-    private SqlSessionFactory factory;
-    @Resource
-    private ITwinWorkshopService workshopService;
-
-
-    /**
-     * 统计指定日期指定时段能耗数据
-     *
-     * @param start 开始时间戳
-     * @param end   结束时间戳
-     */
-    public void calcEnergy(LocalDateTime start, LocalDateTime end) {
-        Date date = Date.from(start.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
-        int period = start.getHour();
-        Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
-        Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
-        String baseSql = "select %s from %s where time>%s and time <=%s";
-        TwinWorkshop ws = workshopService.selectTwinWorkshopByWsId(3L);
-        List<TwinWorkshopEnergy> energyList = ws.getTwinWorkshopEnergyList();
-        List<TwinCalcHourEnergy> list = new ArrayList<>();
-        for (TwinWorkshopEnergy energy : energyList) {
-            String sql = String.format(baseSql, energy.getEnergyCode(), energy.getEnergyPath(), startTime, endTime);
-            JSONObject jsonObject = iotService.query(sql);
-            JSONObject data = jsonObject.getJSONObject("data");
-            JSONArray values = data.getJSONArray("values");
-            JSONArray first = values.getJSONArray(0);
-            JSONArray last = values.getJSONArray(values.size() - 1);
-            int res = last.getInt(0) - first.getInt(0);
-            TwinCalcHourEnergy calcEnergy = new TwinCalcHourEnergy();
-            calcEnergy.setEnergyId(energy.getEnergyId());
-            BigDecimal dataV = BigDecimal.valueOf(res).multiply(energy.getCoefficient());
-            calcEnergy.setDataValue(dataV);
-            calcEnergy.setDataDate(date);
-            calcEnergy.setHour(period);
-            list.add(calcEnergy);
-        }
-        if (list.size() > 0) {
-            try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
-                TwinCalcHourEnergyMapper mapper = sqlSession.getMapper(TwinCalcHourEnergyMapper.class);
-                list.forEach(mapper::insertTwinCalcHourEnergy);
-                sqlSession.commit();
-            }
-        }
-    }
-
-    /**
-     * 统计上一个时段的能源
-     */
-    public void calcLastEnergy() {
-        LocalDateTime ldt = Tools.currWholeTime();
-        //上一个小时
-        ldt = ldt.minusHours(1);
-        //这里不需要向前取一秒了
-        LocalDateTime start = ldt;
-        LocalDateTime end = ldt.plusHours(1);
-        calcEnergy(start, end);
-    }
-
-//    /**
-//     * 统计昨日数据
-//     */
-//    public void calcYesterday() {
-//        LocalDate localDate = LocalDate.now().minusDays(1);
-//        calc(localDate);
-//    }
-//
-//    /**
-//     * 统计当日数据,直到当前时间的上一个偶数时间
-//     */
-//    public void calcToday() {
-//        Tools.timePeriod().forEach(pair -> {
-//            calc4device(pair.getKey(), pair.getValue());
-//        });
-//    }
-//
-//    /**
-//     * 统计指定日期数据
-//     *
-//     * @param date 指定日期 yyyy-mm-dd
-//     */
-//    public void calc(String date) {
-//        LocalDate localDate = LocalDate.parse(date);
-//        calc(localDate);
-//    }
-//
-//    /**
-//     * 统计指定日期指定时段数据
-//     *
-//     * @param date   指定日期 yyyy-mm-dd
-//     * @param period 时段
-//     */
-//    public void calc(String date, int period) {
-//        LocalDate localDate = LocalDate.parse(date);
-//        LocalDateTime ldt = LocalDateTime.of(localDate, LocalTime.MIN);
-//        LocalDateTime start = ldt.plusHours(period);
-//        LocalDateTime end = start.plusHours(1);
-//        start = start.minusSeconds(1);
-//        calc4device(start, end);
-//    }
-//
-//    /**
-//     * 统计指定日期数据
-//     *
-//     * @param date 指定日期
-//     */
-//    @Override
-//    public void calc(LocalDate date) {
-//        Tools.timePeriod(date).forEach(pair -> {
-//            calc4device(pair.getKey(), pair.getValue());
-//        });
-//    }
-//
-//
-//    /**
-//     * 执行数据获取操作
-//     *
-//     * @param list         设备列表
-//     * @param date         日期
-//     * @param startTime    开始时间
-//     * @param endTime      结束时间
-//     * @param period       小时数
-//     * @param calcHourList 1小时统计数据
-//     * @param stopList     停机数据
-//     * @param panList      盘头数据
-//     * @param alarmsList   告警数据
-//     * @return 返回未获取成功的数据列表
-//     */
-//
-//    private List<TwinDevice> exec(List<TwinDevice> list, Date date, Long startTime, Long endTime, int period, List<Object[]> calcHourList, List<TwinRecordStop> stopList, List<Object[]> panList, List<TwinRecordAlarms> alarmsList, List<TwinCalcHourSpec> specList) {
-//        List<Future<Map<String, List<?>>>> futureList = new ArrayList<>();
-//        for (int i = 0; i < list.size(); i++) {
-//            TwinDevice twinDevice = list.get(i);
-//            futureList.add(asyncService.process(twinDevice, date, startTime, endTime, period));
-//        }
-//
-//        List<TwinDevice> errList = new ArrayList<>();
-//        try {
-//            for (Future<Map<String, List<?>>> future : futureList) {
-//                // 任务完成后获取结果
-//                try {
-//                    Map<String, List<?>> map = future.get(10L, TimeUnit.SECONDS);
-//                    List<TwinCalcHour> calcHours = (List<TwinCalcHour>) map.get("calc");
-//                    List<TwinRecordStop> stops = (List<TwinRecordStop>) map.get("stopRecord");
-//
-//                    List<TwinRecordAlarms> alarms = (List<TwinRecordAlarms>) map.get("alarmRecord");
-//                    List<TwinPanHeadInfo> panHeadInfoList = (List<TwinPanHeadInfo>) map.get("panHead");
-//                    List<TwinCalcHourSpec> specs = (List<TwinCalcHourSpec>) map.get("specList");
-//                    specList.addAll(specs);
-//                    calcHours.forEach(calcHour -> calcHourList.add(calcHour.toArray()));
-//                    stopList.addAll(stops);
-//                    alarmsList.addAll(alarms);
-//                    panHeadInfoList.forEach(pan -> panList.add(pan.toArray()));
-//                } catch (TimeoutException e) {
-//                    errList.add(list.get(futureList.indexOf(future)));
-//                }
-//            }
-//        } catch (InterruptedException e) {
-//            throw new RuntimeException(e);
-//        } catch (ExecutionException e) {
-//            throw new RuntimeException(e);
-//        }
-//
-//        return errList;
-//    }
-//
-//    /**
-//     * 数据入库操作
-//     *
-//     * @param endTime    结束时间
-//     * @param calcHours  1小时统计数据
-//     * @param stopList   停机记录
-//     * @param alarmsList 告警记录
-//     * @param panList    盘头记录
-//     */
-//    private void dbProcess(long endTime, List<Object[]> calcHours, List<TwinRecordStop> stopList, List<TwinRecordAlarms> alarmsList, List<Object[]> panList) {
-//        //1小时统计数据
-//        String sql = "INSERT INTO TWIN_CALC_HOUR(DATA_DATE,HOUR,DEVICE_ID,KWH,WEIGHT,LENGTH,OPEN_TIME,CLOSE_TIME) VALUES (?,?,?,?,?,?,?,?)";
-//        jdbcTemplate.batchUpdate(sql, calcHours);
-//        //盘头数据
-//        sql = "INSERT INTO TWIN_PAN_HEAD_INFO (DEVICE_ID,PH_NUM,PH_MAX,RECORD_TIME) VALUES (?,?,?,?)";
-//        jdbcTemplate.batchUpdate(sql, panList);
-//        //执行停机记录处理
-//        stopList.forEach(stop -> {
-//            if (stop.getStartTime() != null) {
-//                jdbcTemplate.update("INSERT INTO TWIN_RECORD_STOP (DEVICE_ID,DATA_DATE,HOUR,START_TIME,STOP_TYPE,CALC_STATUS) VALUES (?,?,?,?,?,?)", stop.getDeviceId(), stop.getDataDate(), stop.getHour(), stop.getStartTime(), stop.getStopType(), "0");
-//            }
-//            if (stop.getEndTime() != null) {
-//                jdbcTemplate.update("UPDATE TWIN_RECORD_STOP SET END_TIME=? WHERE DEVICE_ID=? AND STOP_TYPE=? AND END_TIME IS NULL", stop.getEndTime(), stop.getDeviceId(), stop.getStopType());
-//            }
-//        });
-//        //补一次,所有没有结束时间的为当前结束时间
-//        jdbcTemplate.update("UPDATE TWIN_RECORD_STOP SET END_TIME=?,CALC_STATUS=1 WHERE END_TIME IS NULL", new Date(endTime));
-//        //执行告警记录处理
-//        alarmsList.forEach(alarms -> {
-//            if (alarms.getStartTime() != null) {
-//                jdbcTemplate.update("INSERT INTO TWIN_RECORD_ALARMS (DEVICE_ID,DATA_DATE,HOUR,START_TIME,ALARM_TYPE,CALC_STATUS) VALUES (?,?,?,?,?,?)", alarms.getDeviceId(), alarms.getDataDate(), alarms.getHour(), alarms.getStartTime(), alarms.getAlarmType(), "0");
-//            }
-//            if (alarms.getEndTime() != null) {
-//                jdbcTemplate.update("UPDATE TWIN_RECORD_ALARMS SET END_TIME=? WHERE DEVICE_ID=? AND ALARM_TYPE=? AND END_TIME IS NULL", alarms.getEndTime(), alarms.getDeviceId(), alarms.getAlarmType());
-//            }
-//        });
-//        //补一次,所有没有结束时间的为当前结束时间
-//        jdbcTemplate.update("UPDATE TWIN_RECORD_ALARMS SET END_TIME=?,CALC_STATUS=1 WHERE END_TIME IS NULL", new Date(endTime));
-//    }
-}

+ 3 - 2
jjt-biz/src/main/java/com/jjt/ws/domain/TwinWorkshopCalc.java

@@ -1,5 +1,6 @@
 package com.jjt.ws.domain;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -41,11 +42,11 @@ public class TwinWorkshopCalc extends BaseEntity{
     /** A班统计 */
     @ApiModelProperty("A班统计")
     @Excel(name = "A班统计")
-    private Long aValue;
+    private BigDecimal aValue;
 
     /** B班统计 */
     @ApiModelProperty("B班统计")
     @Excel(name = "B班统计")
-    private Long bValue;
+    private BigDecimal bValue;
 
 }

+ 15 - 7
jjt-biz/src/main/java/com/jjt/ws/mapper/TwinWorkshopCalcMapper.java

@@ -1,12 +1,13 @@
 package com.jjt.ws.mapper;
 
+import java.util.Date;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jjt.ws.domain.TwinWorkshopCalc;
 
 /**
  * 能源统计Mapper接口
- * 
+ *
  * @author wukai
  * @date 2025-01-17
  */
@@ -14,7 +15,7 @@ public interface TwinWorkshopCalcMapper extends BaseMapper<TwinWorkshopCalc>
 {
     /**
      * 查询能源统计
-     * 
+     *
      * @param calcId 能源统计主键
      * @return 能源统计
      */
@@ -22,7 +23,7 @@ public interface TwinWorkshopCalcMapper extends BaseMapper<TwinWorkshopCalc>
 
     /**
      * 查询能源统计列表
-     * 
+     *
      * @param twinWorkshopCalc 能源统计
      * @return 能源统计集合
      */
@@ -30,7 +31,7 @@ public interface TwinWorkshopCalcMapper extends BaseMapper<TwinWorkshopCalc>
 
     /**
      * 新增能源统计
-     * 
+     *
      * @param twinWorkshopCalc 能源统计
      * @return 结果
      */
@@ -38,7 +39,7 @@ public interface TwinWorkshopCalcMapper extends BaseMapper<TwinWorkshopCalc>
 
     /**
      * 修改能源统计
-     * 
+     *
      * @param twinWorkshopCalc 能源统计
      * @return 结果
      */
@@ -46,7 +47,7 @@ public interface TwinWorkshopCalcMapper extends BaseMapper<TwinWorkshopCalc>
 
     /**
      * 删除能源统计
-     * 
+     *
      * @param calcId 能源统计主键
      * @return 结果
      */
@@ -54,9 +55,16 @@ public interface TwinWorkshopCalcMapper extends BaseMapper<TwinWorkshopCalc>
 
     /**
      * 批量删除能源统计
-     * 
+     *
      * @param calcIds 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteTwinWorkshopCalcByCalcIds(Long[] calcIds);
+
+    /**
+     * 按日期删除
+     *
+     * @param date 日期
+     */
+    void deleteTwinWorkshopCalcByDate(Date date);
 }

+ 11 - 1
jjt-biz/src/main/java/com/jjt/ws/service/ITwinWorkshopCalcService.java

@@ -1,8 +1,10 @@
 package com.jjt.ws.service;
 
-import java.util.List;
 import com.jjt.ws.domain.TwinWorkshopCalc;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 能源统计Service接口
  *
@@ -57,4 +59,12 @@ public interface ITwinWorkshopCalcService {
      * @return 结果
      */
     public int deleteTwinWorkshopCalcByCalcId(Long calcId);
+
+    /**
+     * 能源日统计
+     *
+     * @param date 日期
+     * @return 结果
+     */
+    int calc(Date date);
 }

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

@@ -1,11 +1,22 @@
 package com.jjt.ws.service.impl;
 
-import java.util.List;
-import org.springframework.stereotype.Service;
-import com.jjt.ws.mapper.TwinWorkshopCalcMapper;
+import com.jjt.calc.domain.TwinCalcHourEnergy;
+import com.jjt.calc.service.ITwinCalcHourEnergyService;
+import com.jjt.ws.domain.TwinWorkshop;
 import com.jjt.ws.domain.TwinWorkshopCalc;
+import com.jjt.ws.domain.TwinWorkshopEnergy;
+import com.jjt.ws.mapper.TwinWorkshopCalcMapper;
 import com.jjt.ws.service.ITwinWorkshopCalcService;
+import com.jjt.ws.service.ITwinWorkshopService;
+import org.apache.ibatis.session.ExecutorType;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 能源统计Service业务层处理
@@ -17,6 +28,12 @@ import javax.annotation.Resource;
 public class TwinWorkshopCalcServiceImpl implements ITwinWorkshopCalcService {
     @Resource
     private TwinWorkshopCalcMapper twinWorkshopCalcMapper;
+    @Resource
+    private ITwinCalcHourEnergyService energyService;
+    @Resource
+    private SqlSessionFactory factory;
+    @Resource
+    private ITwinWorkshopService wsService;
 
     /**
      * 查询能源统计
@@ -48,7 +65,7 @@ public class TwinWorkshopCalcServiceImpl implements ITwinWorkshopCalcService {
      */
     @Override
     public int insertTwinWorkshopCalc(TwinWorkshopCalc twinWorkshopCalc) {
-            return twinWorkshopCalcMapper.insertTwinWorkshopCalc(twinWorkshopCalc);
+        return twinWorkshopCalcMapper.insertTwinWorkshopCalc(twinWorkshopCalc);
     }
 
     /**
@@ -83,4 +100,50 @@ public class TwinWorkshopCalcServiceImpl implements ITwinWorkshopCalcService {
     public int deleteTwinWorkshopCalcByCalcId(Long calcId) {
         return twinWorkshopCalcMapper.deleteTwinWorkshopCalcByCalcId(calcId);
     }
+
+    /**
+     * 能源日统计
+     *
+     * @param date 日期
+     * @return 结果
+     */
+    @Override
+    public int calc(Date date) {
+        //先删除
+        twinWorkshopCalcMapper.deleteTwinWorkshopCalcByDate(date);
+        List<TwinWorkshopCalc> calcList = new ArrayList<>();
+        List<TwinWorkshop> wsList = wsService.selectTwinWorkshopList(new TwinWorkshop());
+        Map<Long, Long> wsMap = new HashMap<>(16);
+        wsList.forEach(ws -> {
+            List<TwinWorkshopEnergy> list = wsService.selectTwinWorkshopByWsId(ws.getWsId()).getTwinWorkshopEnergyList();
+            list.forEach(o -> wsMap.put(o.getEnergyId(), ws.getWsId()));
+        });
+        //获取统计数据
+        List<TwinCalcHourEnergy> energyList = energyService.selectTwinEmpCalcListByDate(date);
+        energyList.forEach(obj -> {
+            obj.setTeam();
+            obj.setWsId(wsMap.get(obj.getEnergyId()));
+        });
+        //先按ID分组
+        Map<Long, List<TwinCalcHourEnergy>> calcMap = energyList.stream().collect(Collectors.groupingBy(o -> o.getWsId(), LinkedHashMap::new, Collectors.toList()));
+        for (Long wsId : calcMap.keySet()) {
+            //按班组统计
+            Map<String, BigDecimal> resultMap = calcMap.get(wsId).stream().collect(Collectors.groupingBy(TwinCalcHourEnergy::getTeam, Collectors.reducing(BigDecimal.ZERO, TwinCalcHourEnergy::getDataValue, BigDecimal::add)));
+            TwinWorkshopCalc calc = new TwinWorkshopCalc();
+            calc.setWsId(wsId);
+            calc.setDataDate(date);
+            calc.setAValue(resultMap.get("A"));
+            calc.setBValue(resultMap.get("B"));
+            calcList.add(calc);
+
+        }
+        if (calcList.size() > 0) {
+            try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
+                TwinWorkshopCalcMapper mapper = sqlSession.getMapper(TwinWorkshopCalcMapper.class);
+                calcList.forEach(mapper::insertTwinWorkshopCalc);
+                sqlSession.commit();
+            }
+        }
+        return 1;
+    }
 }

+ 3 - 0
jjt-biz/src/main/resources/mapper/calc/TwinCalcHourEnergyMapper.xml

@@ -25,6 +25,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <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>
     </select>
 

+ 28 - 20
jjt-biz/src/main/resources/mapper/ws/TwinWorkshopCalcMapper.xml

@@ -1,31 +1,32 @@
 <?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.ws.mapper.TwinWorkshopCalcMapper">
-    
+
     <resultMap type="TwinWorkshopCalc" id="TwinWorkshopCalcResult">
-        <result property="calcId"    column="CALC_ID"    />
-        <result property="dataDate"    column="DATA_DATE"    />
-        <result property="wsId"    column="WS_ID"    />
-        <result property="aValue"    column="A_VALUE"    />
-        <result property="bValue"    column="B_VALUE"    />
+        <result property="calcId" column="CALC_ID"/>
+        <result property="dataDate" column="DATA_DATE"/>
+        <result property="wsId" column="WS_ID"/>
+        <result property="aValue" column="A_VALUE"/>
+        <result property="bValue" column="B_VALUE"/>
     </resultMap>
 
     <sql id="selectTwinWorkshopCalcVo">
-        select CALC_ID, DATA_DATE, WS_ID, A_VALUE, B_VALUE from TWIN_WORKSHOP_CALC
+        select CALC_ID, DATA_DATE, WS_ID, A_VALUE, B_VALUE
+        from TWIN_WORKSHOP_CALC
     </sql>
 
     <select id="selectTwinWorkshopCalcList" parameterType="TwinWorkshopCalc" resultMap="TwinWorkshopCalcResult">
         <include refid="selectTwinWorkshopCalcVo"/>
-        <where>  
-            <if test="dataDate != null "> and DATA_DATE = #{dataDate}</if>
-            <if test="wsId != null "> and WS_ID = #{wsId}</if>
-            <if test="aValue != null "> and A_VALUE = #{aValue}</if>
-            <if test="bValue != null "> and B_VALUE = #{bValue}</if>
+        <where>
+            <if test="dataDate != null ">and DATA_DATE = #{dataDate}</if>
+            <if test="wsId != null ">and WS_ID = #{wsId}</if>
+            <if test="aValue != null ">and A_VALUE = #{aValue}</if>
+            <if test="bValue != null ">and B_VALUE = #{bValue}</if>
         </where>
     </select>
-    
+
     <select id="selectTwinWorkshopCalcByCalcId" parameterType="Long" resultMap="TwinWorkshopCalcResult">
         <include refid="selectTwinWorkshopCalcVo"/>
         where CALC_ID = #{calcId}
@@ -38,13 +39,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="wsId != null">WS_ID,</if>
             <if test="aValue != null">A_VALUE,</if>
             <if test="bValue != null">B_VALUE,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="dataDate != null">#{dataDate},</if>
             <if test="wsId != null">#{wsId},</if>
             <if test="aValue != null">#{aValue},</if>
             <if test="bValue != null">#{bValue},</if>
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateTwinWorkshopCalc" parameterType="TwinWorkshopCalc">
@@ -59,13 +60,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteTwinWorkshopCalcByCalcId" parameterType="Long">
-        delete from TWIN_WORKSHOP_CALC where CALC_ID = #{calcId}
+        delete
+        from TWIN_WORKSHOP_CALC
+        where CALC_ID = #{calcId}
     </delete>
 
     <delete id="deleteTwinWorkshopCalcByCalcIds" parameterType="String">
-        delete from TWIN_WORKSHOP_CALC where CALC_ID in 
+        delete from TWIN_WORKSHOP_CALC where CALC_ID in
         <foreach item="calcId" collection="array" open="(" separator="," close=")">
             #{calcId}
         </foreach>
     </delete>
-</mapper>
+    <delete id="deleteTwinWorkshopCalcByDate">
+        delete
+        from twin_workshop_calc
+        where data_date = #{date}
+    </delete>
+</mapper>

+ 8 - 0
jjt-common/src/main/java/com/jjt/common/utils/DateUtils.java

@@ -165,4 +165,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    /**
+     * 增加 date--> LocalDate
+     */
+    public static LocalDate toLocalDate(Date date) {
+        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return localDate;
+    }
 }