瀏覽代碼

新增电力发送接口,每天凌晨发送前一天数据

hfxc226 4 月之前
父節點
當前提交
90a0287569

+ 2 - 1
platform-dao/src/main/java/com/platform/dao/enums/SysConfigEnum.java

@@ -62,7 +62,8 @@ public enum SysConfigEnum {
     YI_BIAO_SB_REPAIR_PROFESSOR("仪表设备维修专业"),
     SUPER_OUT_STORE_DEPT_IDS("不限制领料仓库的部门集合"),
     PREPARATION_SPECIAL_DEPT_IDS("指定某些部门含默认审核主管和部门负责人"),
-    PREPARATION_SPECIAL_USER_IDS("指定账号ID为默认审核主管和部门负责人");
+    PREPARATION_SPECIAL_USER_IDS("指定账号ID为默认审核主管和部门负责人"),
+    PURCHASE_SYSTEM_URL_DEGREE("采购系统接受电量地址");
     private final String typeName;
 
 }

+ 1 - 1
platform-rest/pom.xml

@@ -10,7 +10,7 @@
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
     <artifactId>platform-rest</artifactId>
-    <name>platform-rest</name>
+    <name>suqian-rest</name>
 
     <properties>
         <security.oauth.version>2.3.5.RELEASE</security.oauth.version>

+ 72 - 0
platform-rest/src/main/java/com/platform/rest/task/DegreeTask.java

@@ -0,0 +1,72 @@
+package com.platform.rest.task;
+
+import com.alibaba.fastjson.JSONObject;
+import com.platform.common.cache.ConfigCache;
+import com.platform.common.exception.BusinessException;
+import com.platform.common.util.DateUtils;
+import com.platform.common.util.HttpUtil;
+import com.platform.dao.dto.remote.RemoteDegreeLogDTO;
+import com.platform.dao.enums.SysConfigEnum;
+import com.platform.service.big.BigScreenSbInfoService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import tk.mybatis.mapper.util.StringUtil;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description 电量数据发送给生产采购系统
+ * @Author liuyu
+ * @Date 2020-05-09 16:40:01
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Slf4j
+@Component("dDegreeTask")
+@AllArgsConstructor
+public class DegreeTask {
+
+    private final BigScreenSbInfoService bigScreenSbInfoService;
+
+    /**
+     * 每天凌晨发送前天的数据
+     *
+     * http://192.168.16.226/api/ignores/produce/record/dian
+     */
+    public void generateDian() throws IOException {
+        RemoteDegreeLogDTO record = new RemoteDegreeLogDTO();
+        LocalDate localDate = LocalDate.now().plusDays(-1);
+        record.setYear(localDate.getYear());
+        record.setMonth(localDate.getMonthValue());
+        record.setDay(localDate.getDayOfMonth());
+        BigDecimal bigDecimal = bigScreenSbInfoService.getScReport(record);
+
+        // 发送到采购系统
+        String url = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.PURCHASE_SYSTEM_URL_DEGREE.name());
+        if(StringUtil.isEmpty(url)){
+            throw new BusinessException("请配置采购系统电量接收地址");
+        }
+        setValue(url, localDate, bigDecimal.toString());
+    }
+
+    public static void setValue(String url, LocalDate date, String value){
+        Map<String, String> data = new HashMap<>();
+        data.put("value", value);
+        data.put("date", DateUtils.dateToString(date, DateUtils.PATTERN_YMD));
+        String requestJson = JSONObject.toJSONString(data);
+        try {
+            HttpUtil.post(url, requestJson);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    public static void main(String[] args) {
+        String url = "http://localhost:5000/ignores/produce/record/dian";
+        setValue(url, LocalDate.now(), "12562");
+    }
+
+}

+ 94 - 85
platform-service/src/main/java/com/platform/service/big/impl/BigScreenSbInfoServiceImpl.java

@@ -1,97 +1,34 @@
 package com.platform.service.big.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.github.pagehelper.PageHelper;
-import com.platform.activiti.bean.ActObj;
-import com.platform.activiti.enums.ActApplyEnum;
-import com.platform.common.cache.ConfigCache;
-import com.platform.common.constant.CommonConstants;
-import com.platform.common.enums.DataFilterTypeEnum;
 import com.platform.common.enums.DictTypeEnum;
-import com.platform.common.enums.ResultCode;
 import com.platform.common.exception.BusinessException;
-import com.platform.common.model.UserInfo;
-import com.platform.common.util.*;
-import com.platform.dao.bean.MyVOPage;
-import com.platform.dao.dto.check.CheckStandardDTO;
-import com.platform.dao.dto.part.PartInfoDTO;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.DateUtils;
 import com.platform.dao.dto.remote.RemoteDegreeLogDTO;
 import com.platform.dao.dto.sb.SbInfoDTO;
-import com.platform.dao.dto.sb.SbModelSpareBomDTO;
-import com.platform.dao.dto.upms.SysDeptDTO;
-import com.platform.dao.dto.upms.SysUserDeptDTO;
-import com.platform.dao.dto.workplace.WorkplaceBacklogDTO;
-import com.platform.dao.dto.workplace.WorkplaceBacklogUserDTO;
-import com.platform.dao.entity.check.CheckStandard;
-import com.platform.dao.entity.firm.FirmProducer;
-import com.platform.dao.entity.part.PartInfo;
-import com.platform.dao.entity.part.PartType;
 import com.platform.dao.entity.remote.RemoteMeasure;
-import com.platform.dao.entity.repair.RepairApplicationForm;
-import com.platform.dao.entity.sb.*;
-import com.platform.dao.entity.upms.*;
-import com.platform.dao.enums.*;
-import com.platform.dao.mapper.check.CheckStandardMapper;
-import com.platform.dao.mapper.firm.FirmProducerMapper;
-import com.platform.dao.mapper.part.PartInfoMapper;
-import com.platform.dao.mapper.part.PartTypeMapper;
+import com.platform.dao.entity.sb.SbInfo;
+import com.platform.dao.entity.upms.SysDict;
 import com.platform.dao.mapper.remote.RemoteDegreeLogMapper;
-import com.platform.dao.mapper.remote.RemoteDegreeMapper;
-import com.platform.dao.mapper.remote.RemoteMeasureLogMapper;
 import com.platform.dao.mapper.remote.RemoteMeasureMapper;
-import com.platform.dao.mapper.repair.RepairApplicationFormMapper;
-import com.platform.dao.mapper.sb.*;
-import com.platform.dao.mapper.upms.SysDeptMapper;
+import com.platform.dao.mapper.sb.SbInfoMapper;
 import com.platform.dao.mapper.upms.SysDictMapper;
-import com.platform.dao.mapper.upms.SysUserMapper;
-import com.platform.dao.mapper.workplace.WorkplaceBacklogUserMapper;
-import com.platform.dao.util.CustomExcelImportUtil;
-import com.platform.dao.util.ExcelUtil;
-import com.platform.dao.util.MessageTemplateUtil;
-import com.platform.dao.util.UserUtil;
-import com.platform.dao.util.compare.FieldComparedUtils;
-import com.platform.dao.vo.SysUserDeptVO;
-import com.platform.dao.vo.SysUserVO;
-import com.platform.dao.vo.export.sb.ExportSbInfoVO;
 import com.platform.dao.vo.query.remote.RemoteDegreeLogVO;
-import com.platform.dao.vo.query.upms.SysDeptVO;
-import com.platform.dao.vo.report.SbInfoTypeReportVO;
-import com.platform.dao.vo.sb.*;
 import com.platform.service.base.impl.BaseServiceImpl;
 import com.platform.service.big.BigScreenSbInfoService;
-import com.platform.service.business.ActivitiBusinessService;
-import com.platform.service.check.CheckStandardService;
-import com.platform.service.event.WorkplaceBacklogEvent;
-import com.platform.service.part.PartInfoService;
-import com.platform.service.remote.RemoteDegreeLogService;
-import com.platform.service.sb.SbInfoService;
-import com.platform.service.sb.SbModelSpareBomService;
-import com.platform.service.upms.SysDeptRelationService;
-import com.platform.service.upms.SysDeptService;
-import com.platform.service.upms.SysFileService;
-import com.platform.service.upms.SysUserDeptService;
-import com.platform.service.util.CodeFileUtils;
-import com.platform.service.util.ExecuteSql;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.exceptions.TooManyResultsException;
-import org.apache.poi.ss.formula.functions.CalendarFieldFunction;
-import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.multipart.MultipartFile;
 import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -218,11 +155,12 @@ public class BigScreenSbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, Sb
         sysDictList.sort(Comparator.comparing(SysDict::getSort));
         record.setSbName("G01");
         // 如果是月的,只查0点的数据
-        if(!isDay){
+        if (!isDay) {
             record.setHour(0);
         }
         List<RemoteDegreeLogVO> list = remoteDegreeLogMapper.selectList(record);
         JSONArray jSONArray = new JSONArray();
+        BigDecimal totalDay = new BigDecimal("0");
         if (isDay) {// 日报,需要减去上个小时的
             // 找到前天晚上23点的
             RemoteDegreeLogDTO lastDay = BeanConverterUtil.copyObjectProperties(record, RemoteDegreeLogDTO.class);
@@ -250,31 +188,32 @@ public class BigScreenSbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, Sb
                                 if (degreeLog.getType().equals(1)) {
                                     positiveTotal = positiveTotal.add(new BigDecimal(degreeLog.getResult()));
                                     // 找到上个时间
-                                    if(i == 0){// 从昨天找
+                                    if (i == 0) {// 从昨天找
                                         Optional<RemoteDegreeLogVO> lastR = lastList.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum())).findFirst();
-                                        if(lastR.isPresent()){
+                                        if (lastR.isPresent()) {
                                             log.info(JSONObject.toJSONString(lastR.get()));
                                             positiveTotal = positiveTotal.subtract(new BigDecimal(lastR.get().getResult()));
                                         }
-                                    }else{// 从今天上个时间找,减去上个小时的数据
-                                        Optional<RemoteDegreeLogVO> lastR = list.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum()) && item.getHour().equals(degreeLog.getHour()-1)).findFirst();
-                                        if(lastR.isPresent()){
+                                    } else {// 从今天上个时间找,减去上个小时的数据
+                                        Optional<RemoteDegreeLogVO> lastR = list.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum()) && item.getHour().equals(degreeLog.getHour() - 1)).findFirst();
+                                        if (lastR.isPresent()) {
                                             positiveTotal = positiveTotal.subtract(new BigDecimal(lastR.get().getResult()));
                                         }
                                     }
+                                    totalDay = totalDay.add(positiveTotal.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
                                     dictJsonObject.put("positive", positiveTotal.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).doubleValue());
                                 } else {
                                     negativeTotal = negativeTotal.add(new BigDecimal(degreeLog.getResult()));
                                     // 找到上个时间
-                                    if(i == 0){// 从昨天找
+                                    if (i == 0) {// 从昨天找
                                         Optional<RemoteDegreeLogVO> lastR = lastList.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum())).findFirst();
-                                        if(lastR.isPresent()){
+                                        if (lastR.isPresent()) {
                                             log.info(JSONObject.toJSONString(lastR.get()));
                                             negativeTotal = negativeTotal.subtract(new BigDecimal(lastR.get().getResult()));
                                         }
-                                    }else{// 从今天上个时间找,减去上个小时的数据
-                                        Optional<RemoteDegreeLogVO> lastR = list.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum()) && item.getHour().equals(degreeLog.getHour()-1)).findFirst();
-                                        if(lastR.isPresent()){
+                                    } else {// 从今天上个时间找,减去上个小时的数据
+                                        Optional<RemoteDegreeLogVO> lastR = list.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum()) && item.getHour().equals(degreeLog.getHour() - 1)).findFirst();
+                                        if (lastR.isPresent()) {
                                             negativeTotal = negativeTotal.subtract(new BigDecimal(lastR.get().getResult()));
                                         }
                                     }
@@ -315,7 +254,7 @@ public class BigScreenSbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, Sb
                         if (degreeLog.getLine() == null) {
                             throw new BusinessException("设备未设置电力线路, 设备名称:" + degreeLog.getSbName() + ", 设备编号:" + degreeLog.getSbNo());
                         }
-                        if(degreeLog.getDay().equals(nowDay)){// 当天时间不计算。因为当天还没过完,没有全部数据
+                        if (degreeLog.getDay().equals(nowDay)) {// 当天时间不计算。因为当天还没过完,没有全部数据
                             continue;
                         }
                         if (degreeLog.getLine().toString().equals(dict.getValue())) {
@@ -323,15 +262,15 @@ public class BigScreenSbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, Sb
                                 if (degreeLog.getType().equals(1)) {
                                     positiveTotal = positiveTotal.add(new BigDecimal(degreeLog.getResult()));
                                     // 找到下个月时间
-                                    if(i == days){// 从下个月第一天找
+                                    if (i == days) {// 从下个月第一天找
                                         Optional<RemoteDegreeLogVO> lastR = lastList.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum())).findFirst();
-                                        if(lastR.isPresent()){
+                                        if (lastR.isPresent()) {
                                             //log.info("1: " + degreeLog.getDay() + "," + degreeLog.getDay() + ","+ degreeLog.getDay() + ","+ lastR.get().getDay());
                                             positiveTotal = positiveTotal.subtract(new BigDecimal(lastR.get().getResult()));
                                         }
-                                    }else{// 从后天时间找,减去昨天的数据
-                                        Optional<RemoteDegreeLogVO> lastR = list.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum()) && item.getDay().equals(degreeLog.getDay()+1)).findFirst();
-                                        if(lastR.isPresent()){
+                                    } else {// 从后天时间找,减去昨天的数据
+                                        Optional<RemoteDegreeLogVO> lastR = list.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum()) && item.getDay().equals(degreeLog.getDay() + 1)).findFirst();
+                                        if (lastR.isPresent()) {
                                             //log.info("2: " + degreeLog.getDay() + "," + lastR.get().getDay());
                                             positiveTotal = new BigDecimal(lastR.get().getResult()).subtract(positiveTotal);
                                         }
@@ -368,6 +307,76 @@ public class BigScreenSbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, Sb
         return jSONArray;
     }
 
+
+    /**
+     * 生成生产报表:每日耗电数据
+     *
+     * @param record
+     * @return
+     */
+    @Override
+    public BigDecimal getScReport(RemoteDegreeLogDTO record) {
+        if (record.getYear() == null) {
+            throw new BusinessException("请选择年份");
+        }
+        if (record.getMonth() == null) {
+            throw new BusinessException("请选择月份");
+        }
+        Weekend<SysDict> weekend = new Weekend<>(SysDict.class);
+        WeekendCriteria<SysDict, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria.andEqualTo(SysDict::getType, DictTypeEnum.REMOTE_LINE);
+        List<SysDict> sysDictList = sysDictMapper.selectByExample(weekend);
+        if (CollectionUtils.isEmpty(sysDictList)) {
+            throw new BusinessException("请在数据字典配置设备电力线路");
+        }
+        sysDictList.sort(Comparator.comparing(SysDict::getSort));
+        record.setSbName("G01");
+        List<RemoteDegreeLogVO> list = remoteDegreeLogMapper.selectList(record);
+        BigDecimal totalDay = new BigDecimal("0");
+
+        // 找到前天晚上23点的
+        RemoteDegreeLogDTO lastDay = BeanConverterUtil.copyObjectProperties(record, RemoteDegreeLogDTO.class);
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(lastDay.getYear(), lastDay.getMonth() - 1, lastDay.getDay());
+        DateUtils.getLastDay(calendar);
+        lastDay.setYear(calendar.get(Calendar.YEAR));
+        lastDay.setMonth(calendar.get(Calendar.MONTH) + 1);
+        lastDay.setDay(calendar.get(Calendar.DAY_OF_MONTH));
+        lastDay.setHour(23);
+        List<RemoteDegreeLogVO> lastList = remoteDegreeLogMapper.selectList(lastDay);
+
+        for (int i = 0; i < 24; i++) {
+            for (SysDict dict : sysDictList) {
+                BigDecimal positiveTotal = new BigDecimal(0.00);// 正向有功
+                BigDecimal negativeTotal = new BigDecimal(0.00);// 正向无功
+                for (RemoteDegreeLogVO degreeLog : list) {
+                    if (degreeLog.getLine().toString().equals(dict.getValue())) {
+                        if (degreeLog.getHour().equals(i)) {
+                            if (degreeLog.getType().equals(1)) {
+                                positiveTotal = positiveTotal.add(new BigDecimal(degreeLog.getResult()));
+                                // 找到上个时间
+                                if (i == 0) {// 从昨天找
+                                    Optional<RemoteDegreeLogVO> lastR = lastList.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum())).findFirst();
+                                    if (lastR.isPresent()) {
+                                        log.info(JSONObject.toJSONString(lastR.get()));
+                                        positiveTotal = positiveTotal.subtract(new BigDecimal(lastR.get().getResult()));
+                                    }
+                                } else {// 从今天上个时间找,减去上个小时的数据
+                                    Optional<RemoteDegreeLogVO> lastR = list.stream().filter(item -> item.getPositionNum().equals(degreeLog.getPositionNum()) && item.getHour().equals(degreeLog.getHour() - 1)).findFirst();
+                                    if (lastR.isPresent()) {
+                                        positiveTotal = positiveTotal.subtract(new BigDecimal(lastR.get().getResult()));
+                                    }
+                                }
+                                totalDay = totalDay.add(positiveTotal.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return totalDay;
+    }
+
     public static void main(String[] args) {
         Map<String, List<RemoteMeasure>> map = new HashMap<>();
         map.put("sbName", new ArrayList<>());