Просмотр исходного кода

Merge branch 'demo_' of http://123.60.19.203:8088/hitch/hitch-sb into demo_

guarantee-lsq 2 лет назад
Родитель
Сommit
c32a44ee73

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/dto/remote/RemoteOpcDTO.java

@@ -57,7 +57,7 @@ public class RemoteOpcDTO extends BaseDTO implements Serializable {
      * id
      */
     @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
-    private String id;
+    private Integer id;
     /**
      * 设备id
      */

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/dto/remote/RemoteOpcLogDTO.java

@@ -43,7 +43,7 @@ public class RemoteOpcLogDTO extends BaseDTO implements Serializable {
     /**
      * 点位
      */
-    private Integer positionNum;
+    private String positionNum;
     /**
      * 年
      */

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/entity/remote/RemoteOpcLog.java

@@ -38,7 +38,7 @@ public class RemoteOpcLog implements Serializable {
     /**
      * 点位
      */
-    private Integer positionNum;
+    private String positionNum;
     /**
      * 年
      */

+ 2 - 2
platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java

@@ -1109,13 +1109,13 @@ public class CustomExcelImportUtil {
             try {
                 //i,j i:行 j:列
                 record.setId(IdGeneratorUtils.getObjectId());
-                record.setPositionNum(getCellValue(row.getCell(0)));
+                record.setDescription(getCellValue(row.getCell(0)));// 加上后缀才是点位positionNum
                 if(StringUtils.isBlank(record.getPositionNum())){
                     continue;
                 }
                 record.setSbName(getCellValue(row.getCell(1)));
                 record.setRemark(getCellValue(row.getCell(2)));
-                record.setDescription(getCellValue(row.getCell(3)));
+                //record.setDescription(getCellValue(row.getCell(3)));
                 record.setUnit(getCellValue(row.getCell(4)).trim());
             } catch (Exception e) {
                 e.printStackTrace();

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/vo/export/remote/ExportRemoteOpcVO.java

@@ -22,7 +22,7 @@ public class ExportRemoteOpcVO implements Serializable {
      * id
      */
     @Excel(name = "id")
-    private String id;
+    private Integer id;
 
     /**
      * 设备id

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/vo/query/remote/RemoteOpcLogVO.java

@@ -43,7 +43,7 @@ public class RemoteOpcLogVO extends BaseVO implements Serializable {
     /**
      * 点位
      */
-    private Integer positionNum;
+    private String positionNum;
     /**
      * 类型:1正向有功,2正向无功
      */

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/vo/query/remote/RemoteOpcVO.java

@@ -54,7 +54,7 @@ public class RemoteOpcVO extends BaseVO implements Serializable {
     /**
      * id
      */
-    private String id;
+    private Integer id;
     /**
      * 设备id
      */

+ 1 - 2
platform-opc/src/main/java/com/platform/opc/servie/OpcService.java

@@ -44,14 +44,13 @@ public class OpcService {
     public void initClients() {
         log.info("开始初始化");
         // 判断开发环境还是本地环境
-        log.info("测试redis");
         // 启动分组,按照车间line分组,选择已经在opc server中配置的
         Weekend<RemoteOpc> weekend = new Weekend<>(RemoteOpc.class);
         WeekendCriteria<RemoteOpc, Object> weekendCriteria = weekend.weekendCriteria();
         weekendCriteria.andEqualTo(RemoteOpc::getCreatedFlag, YesNoEnum.YES.getValue());
         List<RemoteOpc> remoteOpcList = remoteOpcMapper.selectByExample(weekend);
         log.info("remoteOpcList: " + remoteOpcList.size());
-        Map<Integer, List<RemoteOpc>> listMap = remoteOpcList.stream().collect(Collectors.groupingBy(RemoteOpc::getLine));
+        Map<String, List<RemoteOpc>> listMap = remoteOpcList.stream().collect(Collectors.groupingBy(RemoteOpc::getLine));
         OpcDAClient.connect();
         OpcDAClient.findAllItem();
         List<RemoteOpc> remoteOpcFailList = new ArrayList<>();

+ 36 - 11
platform-opc/src/main/java/com/platform/opc/servie/OpcTaskService.java

@@ -3,15 +3,19 @@ package com.platform.opc.servie;
 import com.alibaba.fastjson.JSON;
 import com.platform.common.constant.UpmsRedisKeyConstants;
 import com.platform.common.util.BeanUtils;
+import com.platform.common.util.DateUtils;
 import com.platform.common.util.RedisUtils;
 import com.platform.common.util.StringUtils;
 import com.platform.dao.entity.remote.RemoteOpc;
+import com.platform.dao.entity.remote.RemoteOpcLog;
+import com.platform.dao.mapper.remote.RemoteOpcLogMapper;
 import com.platform.dao.mapper.remote.RemoteOpcMapper;
 import com.platform.dao.mapper.upms.SysDictMapper;
 import com.platform.opc.entity.OpcResult;
 import com.platform.opc.util.OpcDAClient;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.DependsOn;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.EnableAsync;
@@ -21,6 +25,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.PostConstruct;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -33,16 +39,18 @@ import java.util.stream.Collectors;
 @EnableAsync
 public class OpcTaskService {
 
+    private final RemoteOpcLogMapper remoteOpcLogMapper;
+
     /**
      * 1: 分组获取数据
-     *  a:保存到redis,前端页面实时从数据库获取数据,2秒刷新一次
+     * a:保存到redis,前端页面实时从数据库获取数据,5秒刷新一次
      */
     @Async
     @Scheduled(fixedDelay = 5000)  //间隔5秒
-    public void getValue(){
+    public void getValue() {
         log.info("开始定时任务");
         List<OpcResult> resultList = OpcDAClient.getItemValuesList();
-        if(!CollectionUtils.isEmpty(resultList)){
+        if (!CollectionUtils.isEmpty(resultList)) {
             log.info("resultList数量:" + resultList.size());
             String str = JSON.toJSONString(resultList);
             //log.info("str: " + str);
@@ -53,23 +61,40 @@ public class OpcTaskService {
 
     /**
      * 1: 保存获取的数据
-     *  b: 开启新线程,队列写入数据库,每一分钟启动一次
-     *  c: 每个点位,每条数据保存一天的
-     *      1)循环查询点位在当天是否存在记录,如果存在,则追加
-     *      2)批量写入数据库
+     * b: 开启新线程,队列写入数据库,每一分钟启动一次
+     * c: 每个点位,每条数据保存一天的
+     * 1)循环查询点位在当天是否存在记录,如果存在,则追加
+     * 2)批量写入数据库
      */
     @Async
     @Scheduled(fixedDelay = 60000)  //间隔60秒
-    public void saveValue(){
+    public void saveValue() {
         log.info("开始读取redis");
-        String jsonStr= RedisUtils.getString("opcList");
-        if(StringUtils.isNotBlank(jsonStr)){
+        String jsonStr = RedisUtils.getString("opcList");
+        if (StringUtils.isNotBlank(jsonStr)) {
             log.info("jsonStr2:" + jsonStr);
-            List<OpcResult>  resultList = JSON.parseArray(jsonStr, OpcResult.class);
+            List<OpcResult> resultList = JSON.parseArray(jsonStr, OpcResult.class);
             log.info("resultList数量:" + resultList.size());
             /*for(OpcResult result: resultList){
                 log.info("id: " + result.getId() + ", value: " + result.getValue() + ", time: " + result.getTime());
             }*/
+            // 保存入库
+            List<RemoteOpcLog> remoteOpcLogList = new ArrayList<>();
+            for (OpcResult result : resultList) {
+                RemoteOpcLog remoteOpcLog = new RemoteOpcLog();
+                remoteOpcLog.setPositionNum(result.getId());
+                remoteOpcLog.setResult(result.getValue());
+                LocalDateTime localDateTime = DateUtils.strToLocalDateTime(result.getTime(), DateUtils.PATTERN_YMD_HMS);
+                remoteOpcLog.setCreatedTime(localDateTime);
+                remoteOpcLog.setYear(localDateTime.getYear());
+                remoteOpcLog.setMonth(localDateTime.getMonthValue());
+                remoteOpcLog.setDay(localDateTime.getDayOfMonth());
+                remoteOpcLog.setHour(localDateTime.getHour());
+                remoteOpcLog.setMinute(localDateTime.getMinute());
+                remoteOpcLogList.add(remoteOpcLog);
+                //log.info("id: " + result.getId() + ", value: " + result.getValue() + ", time: " + result.getTime());
+            }
+            remoteOpcLogMapper.insertListforComplex(remoteOpcLogList);
         }
         log.info("结束读取redis");
     }

+ 3 - 10
platform-opc/src/main/java/com/platform/opc/util/OpcDAClient.java

@@ -132,24 +132,17 @@ public class OpcDAClient {
      * @param listMap
      * @return
      */
-    public static AddFailedException addGroupList(Map<Integer, List<RemoteOpc>> listMap) {
+    public static AddFailedException addGroupList(Map<String, List<RemoteOpc>> listMap) {
         Map<String, Object> result = new HashMap<>();
         itemArrList = new Item[listMap.size()][];
         try {
             if (CollectionUtils.isEmpty(groupItemsList) || CollectionUtils.isEmpty(groupList)) {
                 log.info("开始建组...");
                 int i = 0;
-                for (Map.Entry<Integer, List<RemoteOpc>> entry : listMap.entrySet()) {
+                for (Map.Entry<String, List<RemoteOpc>> entry : listMap.entrySet()) {
                     Group group = server.addGroup(entry.getKey()+"");
                     List<RemoteOpc> list = entry.getValue();
-                    List<String> itemIdList = list.stream().distinct().map(t->{
-                        if(t.getAvFlag()==1){
-                            t.setPositionNum(t.getPositionNum()+"_AV");
-                        }else{
-                            t.setPositionNum(t.getPositionNum()+"_DV");
-                        }
-                        return t;
-                    }).map(RemoteOpc::getPositionNum).collect(Collectors.toList());
+                    List<String> itemIdList = list.stream().distinct().map(RemoteOpc::getPositionNum).collect(Collectors.toList());
                     log.info("itemIdList: " + itemIdList.size());
                     String[] items = itemIdList.toArray(new String[]{});
                     log.info("items: " + items.length);

+ 1 - 1
platform-service/src/main/java/com/platform/service/remote/RemoteOpcLogService.java

@@ -40,6 +40,6 @@ public interface RemoteOpcLogService extends IBaseService<RemoteOpcLog, RemoteOp
      * @param result:
      * @return :
      */
-    void addByPositionNum(Integer positionNum, String result) ;
+    void addByPositionNum(String positionNum, String result) ;
 
 }

+ 1 - 1
platform-service/src/main/java/com/platform/service/remote/impl/RemoteOpcLogServiceImpl.java

@@ -48,7 +48,7 @@ public class RemoteOpcLogServiceImpl extends BaseServiceImpl<RemoteOpcLogMapper,
     }
 
     @Override
-    public void addByPositionNum(Integer positionNum, String result) {
+    public void addByPositionNum(String positionNum, String result) {
         RemoteOpcLog RemoteOpcLog = new RemoteOpcLog();
         RemoteOpcLog.setPositionNum(positionNum);
         RemoteOpcLog.setId(IdGeneratorUtils.getObjectId());

+ 45 - 0
platform-service/src/main/java/com/platform/service/remote/impl/RemoteOpcServiceImpl.java

@@ -40,6 +40,50 @@ public class RemoteOpcServiceImpl extends BaseServiceImpl<RemoteOpcMapper, Remot
 
     private final SysDictMapper sysDictMapper;
 
+    /**
+     * 检查av状态和点位后缀是否一致
+     * 1: avFalg=1,则点位后缀必须是_AV
+     * 2: avFalg=0,则点位后缀必须是_DV
+     * *
+     * @param model
+     * @return
+     */
+    @Override
+    public RemoteOpc saveModelByDTO(RemoteOpcDTO model) {
+        if(model.getAvFlag()==1){
+            if(model.getPositionNum().lastIndexOf("_AV")<0){
+                throw new BusinessException("模拟量的点位后缀必须是_AV,请检查");
+            }
+        }else{
+            if(model.getPositionNum().lastIndexOf("_DV")<0){
+                throw new BusinessException("数字量的点位后缀必须是_DV,请检查");
+            }
+        }
+        return super.saveModelByDTO(model);
+    }
+
+    /**
+     * 检查av状态和点位后缀是否一致
+     * 1: avFalg=1,则点位后缀必须是_AV
+     * 2: avFalg=0,则点位后缀必须是_DV
+     * *
+     * @param model
+     * @return
+     */
+    @Override
+    public void modModelByDTO(RemoteOpcDTO model) {
+        if(model.getAvFlag()==1){
+            if(model.getPositionNum().lastIndexOf("_AV")<0){
+                throw new BusinessException("模拟量的点位后缀必须是_AV,请检查");
+            }
+        }else{
+            if(model.getPositionNum().lastIndexOf("_DV")<0){
+                throw new BusinessException("数字量的点位后缀必须是_DV,请检查");
+            }
+        }
+        super.modModelByDTO(model);
+    }
+
     @Override
     public int batchDelete(List<String> ids) {
         Weekend<RemoteOpc> weekend = new Weekend<>(RemoteOpc.class);
@@ -91,6 +135,7 @@ public class RemoteOpcServiceImpl extends BaseServiceImpl<RemoteOpcMapper, Remot
                     remoteOpc.setType(1);
                     remoteOpc.setLine(line);
                     remoteOpc.setAvFlag(YesNoEnum.YES.getValue());
+                    remoteOpc.setPositionNum(remoteOpc.getDescription() + "_AV");// 初始化都是AV,也可以导入的时候配置好
                     remoteOpc.setCreatedFlag(YesNoEnum.NO.getValue());
                     remoteOpc.setPositionFlag(YesNoEnum.NO.getValue());
                    /* boolean find = false;