Forráskód Böngészése

首页统计相关任务完成

wukai 4 hónapja
szülő
commit
ebb7594ce0

+ 115 - 0
jjt-biz/src/main/java/com/jjt/biz/controller/ApiController.java

@@ -0,0 +1,115 @@
+package com.jjt.biz.controller;
+
+import com.jjt.biz.domain.TwinDevice;
+import com.jjt.biz.service.ITwinDeviceService;
+import com.jjt.biz.vo.IndexData;
+import com.jjt.calc.domain.TwinCalcDay;
+import com.jjt.calc.service.ITwinCalcAlarmsService;
+import com.jjt.calc.service.ITwinCalcDayService;
+import com.jjt.calc.service.ITwinCalcStopService;
+import com.jjt.common.constant.CacheConstants;
+import com.jjt.common.core.controller.BaseController;
+import com.jjt.common.core.domain.R;
+import com.jjt.common.core.redis.RedisCache;
+import com.jjt.common.utils.DateUtils;
+import com.jjt.utils.AsyncService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.*;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.stream.Collectors;
+
+/**
+ * swagger 用户测试方法
+ *
+ * @author ruoyi
+ */
+@Api("数据接口")
+@RestController
+@Slf4j
+public class ApiController extends BaseController {
+    @Resource
+    private ITwinCalcDayService twinCalcDayService;
+    @Resource
+    private ITwinCalcStopService stopService;
+    @Resource
+    private ITwinCalcAlarmsService alarmsService;
+    @Resource
+    private ITwinDeviceService deviceService;
+    @Resource
+    private AsyncService asyncService;
+    @Resource
+    private RedisCache redisCache;
+
+    @ApiOperation("在线设备")
+    @GetMapping("/api/device/online")
+    @CrossOrigin(origins = "*")
+    public R<List<String>> online() {
+        TwinDevice searchDevice = new TwinDevice();
+        searchDevice.setOnline("1");
+        List<TwinDevice> list = deviceService.selectTwinDeviceList(searchDevice);
+        List<String> devices = new ArrayList<>();
+        list.forEach(d -> devices.add(d.getDeviceCode()));
+        return R.success(devices);
+    }
+
+    @ApiOperation("首页统计数据")
+    @GetMapping("/api/index")
+    @CrossOrigin(origins = "*")
+    public R<IndexData> index() {
+        return R.success(redisCache.getCacheObject(CacheConstants.INDEX_CALC));
+    }
+
+    @ApiOperation("首页告警数据")
+    @GetMapping("/api/alarm")
+    @CrossOrigin(origins = "*")
+    public R<IndexData> alarm() {
+        return R.success(redisCache.getCacheObject(CacheConstants.INDEX_ALARM));
+    }
+
+    @ApiOperation("设备具体数据")
+    @GetMapping("/api/query/{device}")
+    @CrossOrigin(origins = "*")
+    public R<Map> query(@PathVariable String device, String week) {
+        TwinDevice info = deviceService.selectTwinDeviceByCode(device);
+        if (info == null) {
+            return R.fail("该设备未接入");
+        }
+        Future<Map<String, Object>> future = asyncService.currData(info);
+        Map<String, Object> result = new HashMap<>(16);
+        try {
+            result.put("data", future.get());
+        } catch (InterruptedException | ExecutionException e) {
+            throw new RuntimeException(e);
+        }
+        if (week != null) {
+            //7点前是属于前一生产天,所以这里直接减7小时即可
+            LocalDateTime ldt = LocalDateTime.now().minusHours(7);
+            //获取前面7天的数据
+            LocalDate localDate = ldt.toLocalDate().minusDays(7);
+            Date date = Date.from(localDate.atStartOfDay(ZoneOffset.of("+8")).toInstant());
+            List<TwinCalcDay> list = twinCalcDayService.selectTwinCalcDayListByTime(date);
+            List<Map<String, Object>> alarms = new ArrayList<>();
+            Map<Date, List<TwinCalcDay>> stopDeviceGroup = list.stream().collect(Collectors.groupingBy(TwinCalcDay::getTime, LinkedHashMap::new, Collectors.toList()));
+            for (Map.Entry<Date, List<TwinCalcDay>> entry : stopDeviceGroup.entrySet()) {
+                Map<String, Object> temp = new HashMap<>(16);
+                TwinCalcDay day = new TwinCalcDay(entry.getKey());
+                List<TwinCalcDay> days = entry.getValue();
+                day.calcDays(days);
+                temp.put("time", DateUtils.parseDateToStr(entry.getKey()));
+                temp.put("value", day.getAlarm());
+                alarms.add(temp);
+            }
+            result.put("alarms", alarms);
+        }
+        return R.success(result);
+    }
+}

+ 14 - 7
jjt-biz/src/main/java/com/jjt/biz/mapper/TwinDeviceMapper.java

@@ -6,7 +6,7 @@ import com.jjt.biz.domain.TwinDevice;
 
 /**
  * 设备管理Mapper接口
- * 
+ *
  * @author wukai
  * @date 2025-01-15
  */
@@ -14,7 +14,7 @@ public interface TwinDeviceMapper extends BaseMapper<TwinDevice>
 {
     /**
      * 查询设备管理
-     * 
+     *
      * @param deviceId 设备管理主键
      * @return 设备管理
      */
@@ -22,7 +22,7 @@ public interface TwinDeviceMapper extends BaseMapper<TwinDevice>
 
     /**
      * 查询设备管理列表
-     * 
+     *
      * @param twinDevice 设备管理
      * @return 设备管理集合
      */
@@ -30,7 +30,7 @@ public interface TwinDeviceMapper extends BaseMapper<TwinDevice>
 
     /**
      * 新增设备管理
-     * 
+     *
      * @param twinDevice 设备管理
      * @return 结果
      */
@@ -38,7 +38,7 @@ public interface TwinDeviceMapper extends BaseMapper<TwinDevice>
 
     /**
      * 修改设备管理
-     * 
+     *
      * @param twinDevice 设备管理
      * @return 结果
      */
@@ -46,7 +46,7 @@ public interface TwinDeviceMapper extends BaseMapper<TwinDevice>
 
     /**
      * 删除设备管理
-     * 
+     *
      * @param deviceId 设备管理主键
      * @return 结果
      */
@@ -54,9 +54,16 @@ public interface TwinDeviceMapper extends BaseMapper<TwinDevice>
 
     /**
      * 批量删除设备管理
-     * 
+     *
      * @param deviceIds 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteTwinDeviceByDeviceIds(Long[] deviceIds);
+    /**
+     * 通过设备编号查询设备
+     *
+     * @param code 设备编号
+     * @return 设备信息
+     */
+    TwinDevice selectTwinDeviceByCode(String code);
 }

+ 2 - 2
jjt-biz/src/main/java/com/jjt/biz/service/IApiService.java

@@ -6,9 +6,9 @@ package com.jjt.biz.service;
  */
 public interface IApiService {
     /**
-     * 首页统计数据
+     * 统计当天数据
      */
-    void indexCalc();
+    void today();
 
     /**
      * 统计当前数据

+ 7 - 0
jjt-biz/src/main/java/com/jjt/biz/service/ITwinDeviceService.java

@@ -57,4 +57,11 @@ public interface ITwinDeviceService {
      * @return 结果
      */
     public int deleteTwinDeviceByDeviceId(Long deviceId);
+    /**
+     * 通过设备编号查询设备
+     *
+     * @param code 设备编号
+     * @return 设备信息
+     */
+    TwinDevice selectTwinDeviceByCode(String code);
 }

+ 57 - 61
jjt-biz/src/main/java/com/jjt/biz/service/impl/ApiServiceImpl.java

@@ -4,6 +4,7 @@ import com.jjt.biz.domain.TwinDevice;
 import com.jjt.biz.service.IApiService;
 import com.jjt.biz.service.ITwinDeviceService;
 import com.jjt.biz.vo.*;
+import com.jjt.calc.domain.TwinCalcDay;
 import com.jjt.calc.domain.TwinFormulaInfo;
 import com.jjt.calc.domain.TwinPanHeadInfo;
 import com.jjt.calc.service.ITwinCalcDayService;
@@ -15,17 +16,16 @@ import com.jjt.utils.AsyncService;
 import com.jjt.utils.IotService;
 import com.jjt.utils.Tools;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.stream.Collectors;
@@ -59,65 +59,61 @@ public class ApiServiceImpl implements IApiService {
      * 首页统计数据
      */
     @Override
-
-    public void indexCalc() {
+    public void today() {
         List<WeekData> weekDataList = new ArrayList<>();
         IndexData indexData = new IndexData();
         IndexEfficiency efficiency = new IndexEfficiency();
-//        TwinCalcDay calcDay = twinCalcDayService.calcToday();
-//        /*
-//            获取当天产量数据
-//         */
-//        efficiency.setAEfficiency(calcDay.getEfficiencyA().floatValue());
-//        efficiency.setBEfficiency(calcDay.getEfficiencyB().floatValue());
-//        efficiency.setTotalLength(calcDay.getLength().floatValue());
-//        efficiency.setALength(calcDay.getLengthA().floatValue());
-//        efficiency.setBLength(calcDay.getLengthB().floatValue());
-//        //界面上重新计算重量 2024-12-25 用总长度除以373
-//        BigDecimal tw = calcDay.getLength().divide(BigDecimal.valueOf(373), 2, BigDecimal.ROUND_HALF_UP);
-//        BigDecimal aw = calcDay.getLengthA().divide(BigDecimal.valueOf(373), 2, BigDecimal.ROUND_HALF_UP);
-//        BigDecimal bw = calcDay.getLengthB().divide(BigDecimal.valueOf(373), 2, BigDecimal.ROUND_HALF_UP);
-//        efficiency.setTotalWeight(tw.floatValue());
-//        efficiency.setAWeight(aw.floatValue());
-//        efficiency.setBWeight(bw.floatValue());
-//        efficiency.setATime(calcDay.getOpenTimeA().divide(BigDecimal.valueOf(3600), 2, BigDecimal.ROUND_HALF_UP).floatValue());
-//        efficiency.setBTime(calcDay.getOpenTimeB().divide(BigDecimal.valueOf(3600), 2, BigDecimal.ROUND_HALF_UP).floatValue());
-//        //如果产量累计产量为0,则稼动和生产时间都为0
-//        if (efficiency.getALength() == 0f) {
-//            efficiency.setAEfficiency(0f);
-//            efficiency.setATime(0f);
-//        }
-//        //如果产量累计产量为0,则稼动和生产时间都为0
-//        if (efficiency.getBLength() == 0f) {
-//            efficiency.setBEfficiency(0f);
-//            efficiency.setBTime(0f);
-//        }
-//        indexData.setEfficiency(efficiency);
-//
-//        /*
-//         *获取前面7天的数据
-//         */
-//        LocalDateTime ldt = LocalDateTime.now();
-//        if (ldt.getHour() < 7) {
-//            ldt = ldt.minusDays(1);
-//        }
-//        LocalDate localDate = ldt.toLocalDate().minusDays(7);
-//        Date date = Date.from(localDate.atStartOfDay(ZoneOffset.of("+8")).toInstant());
-//        List<TwinCalcDay> list = twinCalcDayService.selectTwinCalcDayListByTime(date);
-//        Map<Date, List<TwinCalcDay>> dayGroup = list.stream().collect(Collectors.groupingBy(TwinCalcDay::getTime, LinkedHashMap::new, Collectors.toList()));
-//        for (Map.Entry<Date, List<TwinCalcDay>> entry : dayGroup.entrySet()) {
-//            TwinCalcDay day = new TwinCalcDay(entry.getKey());
-//            List<TwinCalcDay> days = entry.getValue();
-//            day.calcDays(days);
-//            WeekData weekData = new WeekData();
-//            weekData.convert(day);
-//            weekDataList.add(weekData);
-//        }
-//        indexData.setWeekData(weekDataList);
-//        IndexDevice device = new IndexDevice();
-//        device.setRunningRatio(calcDay.getRunningRatio());
-//        indexData.setDevice(device);
-//        CacheUtils.put(Constants.IOT_TOKEN, Constants.INDEX_CALC, indexData);
+        TwinCalcDay calcDay = twinCalcDayService.today();
+        /*
+            获取当天产量数据
+         */
+        efficiency.setAEfficiency(calcDay.getEfficiencyA().floatValue());
+        efficiency.setBEfficiency(calcDay.getEfficiencyB().floatValue());
+        efficiency.setTotalLength(calcDay.getLength().floatValue());
+        efficiency.setALength(calcDay.getLengthA().floatValue());
+        efficiency.setBLength(calcDay.getLengthB().floatValue());
+        //界面上重新计算重量 2024-12-25 用总长度除以373
+        BigDecimal tw = calcDay.getLength().divide(BigDecimal.valueOf(373), 2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal aw = calcDay.getLengthA().divide(BigDecimal.valueOf(373), 2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal bw = calcDay.getLengthB().divide(BigDecimal.valueOf(373), 2, BigDecimal.ROUND_HALF_UP);
+        efficiency.setTotalWeight(tw.floatValue());
+        efficiency.setAWeight(aw.floatValue());
+        efficiency.setBWeight(bw.floatValue());
+        efficiency.setATime(calcDay.getOpenTimeA().divide(BigDecimal.valueOf(3600), 2, BigDecimal.ROUND_HALF_UP).floatValue());
+        efficiency.setBTime(calcDay.getOpenTimeB().divide(BigDecimal.valueOf(3600), 2, BigDecimal.ROUND_HALF_UP).floatValue());
+        //如果产量累计产量为0,则稼动和生产时间都为0
+        if (efficiency.getALength() == 0f) {
+            efficiency.setAEfficiency(0f);
+            efficiency.setATime(0f);
+        }
+        //如果产量累计产量为0,则稼动和生产时间都为0
+        if (efficiency.getBLength() == 0f) {
+            efficiency.setBEfficiency(0f);
+            efficiency.setBTime(0f);
+        }
+        indexData.setEfficiency(efficiency);
+
+        //7点前是属于前一生产天,所以这里直接减7小时即可
+        LocalDateTime ldt = LocalDateTime.now().minusHours(7);
+        //获取前面7天的数据
+        LocalDate localDate = ldt.toLocalDate().minusDays(7);
+        Date date = Date.from(localDate.atStartOfDay(ZoneOffset.of("+8")).toInstant());
+        List<TwinCalcDay> list = twinCalcDayService.selectTwinCalcDayListByTime(date);
+        Map<Date, List<TwinCalcDay>> dayGroup = list.stream().collect(Collectors.groupingBy(TwinCalcDay::getTime, LinkedHashMap::new, Collectors.toList()));
+        for (Map.Entry<Date, List<TwinCalcDay>> entry : dayGroup.entrySet()) {
+            TwinCalcDay day = new TwinCalcDay(entry.getKey());
+            List<TwinCalcDay> days = entry.getValue();
+            day.calcDays(days);
+            WeekData weekData = new WeekData();
+            weekData.convert(day);
+            weekDataList.add(weekData);
+        }
+        indexData.setWeekData(weekDataList);
+        IndexDevice device = new IndexDevice();
+        device.setRunningRatio(calcDay.getRunningRatio());
+        indexData.setDevice(device);
+
+        redisCache.setCacheObject(CacheConstants.INDEX_CALC, indexData);
     }
 
     /**

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

@@ -83,4 +83,15 @@ public class TwinDeviceServiceImpl implements ITwinDeviceService {
     public int deleteTwinDeviceByDeviceId(Long deviceId) {
         return twinDeviceMapper.deleteTwinDeviceByDeviceId(deviceId);
     }
+    /**
+     * 通过设备编号查询设备
+     *
+     * @param code 设备编号
+     * @return 设备信息
+     */
+    @Override
+    public TwinDevice selectTwinDeviceByCode(String code) {
+        return twinDeviceMapper.selectTwinDeviceByCode(code);
+    }
+
 }

+ 2 - 0
jjt-biz/src/main/java/com/jjt/calc/domain/TwinCalcDay.java

@@ -271,6 +271,8 @@ public class TwinCalcDay extends BaseEntity {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date updatedTime;
+    @ApiModelProperty("开机率")
+    private Double runningRatio;
 
 
     /**

+ 23 - 0
jjt-biz/src/main/java/com/jjt/calc/service/ITwinCalcDayService.java

@@ -3,6 +3,7 @@ package com.jjt.calc.service;
 import com.jjt.calc.domain.TwinCalcDay;
 
 import java.time.LocalDate;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -66,4 +67,26 @@ public interface ITwinCalcDayService {
      * @param localDate 日期
      */
     void day(LocalDate localDate);
+
+    /**
+     * 统计当日数据
+     *
+     * @return 结果
+     */
+    TwinCalcDay today();
+
+    /**
+     * 按月度查询
+     *
+     * @param month 月份
+     * @return 结果
+     */
+    List<TwinCalcDay> selectTwinCalcDayListByMonth(String month);
+    /**
+     * 查询指定日期及之后的数据
+     *
+     * @param sd 开始日期
+     * @return 列表
+     */
+    List<TwinCalcDay> selectTwinCalcDayListByTime(Date sd);
 }

+ 115 - 1
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcDayServiceImpl.java

@@ -1,16 +1,18 @@
 package com.jjt.calc.service.impl;
 
+import com.jjt.biz.domain.TwinDevice;
+import com.jjt.biz.service.ITwinDeviceService;
 import com.jjt.calc.domain.TwinCalcAlarms;
 import com.jjt.calc.domain.TwinCalcDay;
 import com.jjt.calc.domain.TwinCalcHour;
 import com.jjt.calc.domain.TwinCalcStop;
-import com.jjt.calc.mapper.TwinCalcAlarmsMapper;
 import com.jjt.calc.mapper.TwinCalcDayMapper;
 import com.jjt.calc.service.ITwinCalcAlarmsService;
 import com.jjt.calc.service.ITwinCalcDayService;
 import com.jjt.calc.service.ITwinCalcHourService;
 import com.jjt.calc.service.ITwinCalcStopService;
 import com.jjt.common.utils.DateUtils;
+import com.jjt.utils.AsyncService;
 import com.jjt.utils.Tools;
 import javafx.util.Pair;
 import org.apache.ibatis.session.ExecutorType;
@@ -22,7 +24,13 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 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.concurrent.atomic.AtomicLong;
 import java.util.function.BiConsumer;
 import java.util.stream.Collectors;
@@ -44,6 +52,10 @@ public class TwinCalcDayServiceImpl implements ITwinCalcDayService {
     @Resource
     private ITwinCalcAlarmsService alarmsService;
     @Resource
+    private ITwinDeviceService deviceService;
+    @Resource
+    private AsyncService asyncService;
+    @Resource
     private SqlSessionFactory factory;
 
     /**
@@ -254,4 +266,106 @@ public class TwinCalcDayServiceImpl implements ITwinCalcDayService {
         totalTimeCounter.addAndGet(stopTime);
         eventCounterUpdater.accept(stopType, 1);
     }
+
+
+    /**
+     * 统计今天的产量数据
+     *
+     * @return 当日数据 7:00至第二天7点(不含)
+     */
+    @Override
+    public TwinCalcDay today() {
+        //计算统计时间
+        Pair<Date, Date> pair = Tools.calcToday();
+        Date sTime = pair.getKey();
+        Date eTime = pair.getValue();
+        List<TwinCalcHour> hourList = hourService.selectTwinCalcHourListByDate(sTime, eTime);
+
+        // 按照deviceId、density、mick、team,并统计每组的length总和
+        //按照deviceId分组统计
+        Map<Long, BigDecimal> resultMap = hourList.stream().collect(Collectors.groupingBy(TwinCalcHour::getDeviceId, Collectors.reducing(BigDecimal.ZERO, TwinCalcHour::getLength, BigDecimal::add)));
+        TwinCalcDay calcDay = new TwinCalcDay(sTime);
+        if (hourList.size() > 0) {
+            calcDay.calcHours(hourList);
+        }
+        List<TwinCalcHour> hours = new ArrayList<>();
+        TwinCalcHour lastHour = hourService.lastHour();
+        LocalDate localDate = DateUtils.toLocalDate(lastHour.getDataDate());
+        LocalDateTime start = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(lastHour.getHour() + 1);
+
+        //为了避免多线程同时获取token导致重复执行,先执行一次获取token
+        TwinDevice search = new TwinDevice();
+        //查询所有在线的设备
+        search.setOnline("1");
+        List<TwinDevice> list = deviceService.selectTwinDeviceList(search);
+        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, start, LocalDateTime.now()));
+        }
+        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");
+                    hours.addAll(calcHours);
+                } catch (TimeoutException e) {
+                    e.printStackTrace();
+                }
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            throw new RuntimeException(e);
+        }
+        if (hours.size() > 0) {
+            calcDay.calcHours(hours);
+            int num = 0;
+            for (TwinCalcHour hour : hours) {
+                BigDecimal v = BigDecimal.ZERO;
+                if (resultMap.get(hour.getDeviceId()) != null) {
+                    v = resultMap.get(hour.getDeviceId());
+                }
+                v.add(hour.getLength());
+                if (v.doubleValue() > 0d) {
+                    num++;
+                }
+            }
+            int deviceNum = list.size();
+            BigDecimal ratio = BigDecimal.valueOf(num).divide(BigDecimal.valueOf(deviceNum), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
+            calcDay.setRunningRatio(ratio.doubleValue());
+        }
+        BigDecimal totalTimeA = calcDay.getOpenTimeA().add(calcDay.getCloseTimeA());
+        BigDecimal totalTimeB = calcDay.getOpenTimeB().add(calcDay.getCloseTimeB());
+        if (!totalTimeA.equals(BigDecimal.ZERO)) {
+            BigDecimal eff = calcDay.getOpenTimeA().divide(totalTimeA, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
+            calcDay.setEfficiencyA(eff);
+        }
+        if (!totalTimeB.equals(BigDecimal.ZERO)) {
+            BigDecimal eff = calcDay.getOpenTimeB().divide(totalTimeB, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
+            calcDay.setEfficiencyB(eff);
+        }
+        return calcDay;
+    }
+
+    /**
+     * 按月度查询
+     *
+     * @param month 月份
+     * @return 结果
+     */
+    @Override
+    public List<TwinCalcDay> selectTwinCalcDayListByMonth(String month) {
+        return twinCalcDayMapper.selectTwinCalcDayListByMonth(month);
+    }
+
+    /**
+     * 查询指定日期及之后的数据
+     *
+     * @param sd 开始日期
+     * @return 列表
+     */
+    @Override
+    public List<TwinCalcDay> selectTwinCalcDayListByTime(Date sd) {
+        return twinCalcDayMapper.selectTwinCalcDayListByTime(sd, null);
+    }
 }

+ 8 - 0
jjt-biz/src/main/java/com/jjt/task/IndexTask.java

@@ -23,4 +23,12 @@ public class IndexTask {
         apiService.curr();
     }
 
+    /**
+     * 统计当天数据
+     */
+
+    public void today() {
+        apiService.today();
+    }
+
 }

+ 5 - 0
jjt-biz/src/main/resources/mapper/biz/TwinDeviceMapper.xml

@@ -96,4 +96,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{deviceId}
         </foreach>
     </delete>
+
+    <select id="selectTwinDeviceByCode" resultMap="TwinDeviceResult">
+        <include refid="selectTwinDeviceVo"/>
+        where DEVICE_CODE = #{code}
+    </select>
 </mapper>

+ 6 - 6
jjt-biz/src/main/resources/mapper/calc/TwinFormulaInfoMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jjt.calc.mapper.TwinFormulaInfoMapper">
-    
+
     <resultMap type="TwinFormulaInfo" id="TwinFormulaInfoResult">
         <result property="specInfoId"    column="SPEC_INFO_ID"    />
         <result property="deviceId"    column="DEVICE_ID"    />
@@ -51,7 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectTwinFormulaInfoList" parameterType="TwinFormulaInfo" resultMap="TwinFormulaInfoResult">
         <include refid="selectTwinFormulaInfoVo"/>
-        <where>  
+        <where>
             <if test="deviceId != null "> and DEVICE_ID = #{deviceId}</if>
             <if test="fd1 != null "> and FD1 = #{fd1}</if>
             <if test="fd2 != null "> and FD2 = #{fd2}</if>
@@ -91,13 +91,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remark != null  and remark != ''"> and REMARK = #{remark}</if>
         </where>
     </select>
-    
+
     <select id="selectTwinFormulaInfoBySpecInfoId" parameterType="Long" resultMap="TwinFormulaInfoResult">
         <include refid="selectTwinFormulaInfoVo"/>
         where SPEC_INFO_ID = #{specInfoId}
     </select>
 
-    <insert id="insertTwinFormulaInfo" parameterType="TwinFormulaInfo" useGeneratedKeys="true" keyProperty="specInfoId">
+    <insert id="insertTwinFormulaInfo" parameterType="TwinFormulaInfo">
         insert into TWIN_FORMULA_INFO
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="deviceId != null">DEVICE_ID,</if>
@@ -228,9 +228,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteTwinFormulaInfoBySpecInfoIds" parameterType="String">
-        delete from TWIN_FORMULA_INFO where SPEC_INFO_ID in 
+        delete from TWIN_FORMULA_INFO where SPEC_INFO_ID in
         <foreach item="specInfoId" collection="array" open="(" separator="," close=")">
             #{specInfoId}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 4 - 0
jjt-common/src/main/java/com/jjt/common/core/domain/R.java

@@ -36,6 +36,10 @@ public class R<T> implements Serializable {
         return restResult(data, SUCCESS, "操作成功");
     }
 
+    public static <T> R<T> success(T data) {
+        return restResult(data, 0, "操作成功");
+    }
+
     public static <T> R<T> ok(T data, String msg) {
         return restResult(data, SUCCESS, msg);
     }