zouyu
2025-10-17 c65ab218b14e87489f1594b2d932f7bd54b3ba11
数采调整
已添加1个文件
已修改18个文件
532 ■■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/mapper/StructureItemParameterMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/constant/DCResistanceMqttConstants.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/CollectBridgeMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricRecordMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/CollectBridge.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/mapper/StructureItemParameterMapper.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.TestItemDto;
import com.ruoyi.basic.pojo.StructureItemParameter;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -17,6 +18,7 @@
 * @author makejava
 * @since 2024-02-26 16:21:17
 */
@Mapper
public interface StructureItemParameterMapper extends BaseMapper<StructureItemParameter> {
    IPage<StructureItemParameter> selectItemParameterList(Page page, @Param("ew") QueryWrapper<StructureItemParameter> ew);
cnas-device/src/main/java/com/ruoyi/device/constant/DCResistanceMqttConstants.java
@@ -1,7 +1,7 @@
package com.ruoyi.device.constant;
/**
 * ç›´æµç”µé˜»mqtt淑君属性【dataStream】的标识常量
 * ç›´æµç”µé˜»mqtt数据属性【dataStream】的标识常量
 */
public class DCResistanceMqttConstants {
cnas-device/src/main/java/com/ruoyi/device/mapper/CollectBridgeMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.CollectBridge;
import org.apache.ibatis.annotations.Mapper;
/**
 * æ•°å­—电桥采集
@@ -9,6 +10,7 @@
 * @author zhuo
 * @since 2025-02-19
 */
@Mapper
public interface CollectBridgeMapper extends BaseMapper<CollectBridge> {
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceDto;
import com.ruoyi.device.pojo.Device;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -14,6 +15,7 @@
/**
 * è®¾å¤‡(Device)表数据库访问层
 */
@Mapper
public interface DeviceMapper extends BaseMapper<Device> {
    IPage<Device> selectDeviceParameter(Page page, QueryWrapper<Device> ew);
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricRecordMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceMetricRecord;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
@@ -11,6 +12,7 @@
 * @author 
 * @since 2024-09-27 10:20:01
 */
@Mapper
public interface DeviceMetricRecordMapper extends BaseMapper<DeviceMetricRecord> {
}
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java
@@ -72,18 +72,13 @@
            switch (topic){
                case "/ztt/v3/2455220/publish":
                    //耐丝:直流电阻数据解析
                    mqCallback.collectBridgeService.addBridgeValueByNS(parse);
                    mqCallback.collectBridgeService.dcResistanceDataAnalysis(parse);
                    break;
                case "/ztt/v3/2455221/publish":
                    //耐丝:伸长率数据解析
                    mqCallback.collectBridgeService.addBridgeValueByNSD(parse);
//                    log.info("伸长率消息体:{}",parse);
                    mqCallback.collectBridgeService.elongationDataAnalysis(parse);
                    break;
            }
            // å¡«å……采集数据
//            JSONObject jsonObject = JSONObject.parseObject(parse);
//            mqCallback.collectBridgeService.addBridgeValue(jsonObject);
        } catch (Exception e) {
            e.printStackTrace();
            log.info("============》》接收消息主题异常 : " + e.getMessage());
cnas-device/src/main/java/com/ruoyi/device/pojo/CollectBridge.java
@@ -5,7 +5,9 @@
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@@ -16,6 +18,7 @@
 */
@Data
@TableName("collect_bridge")
@NoArgsConstructor
public class CollectBridge {
    @TableId(value = "id", type = IdType.AUTO)
@@ -25,10 +28,22 @@
    private String entrustCode;
    @ApiModelProperty("采集值")
    private String collectValue;
    private BigDecimal collectValue;
    @ApiModelProperty("时间")
    private LocalDateTime collectDate;
    @ApiModelProperty("采集温度")
    private Double collectTemperature;
    @ApiModelProperty("第一次采集时间")
    private LocalDateTime firstCollectDate;
    @ApiModelProperty("最后一次采集时间")
    private LocalDateTime lastCollectDate;
    public CollectBridge(String entrustCode, BigDecimal collectValue, LocalDateTime firstCollectDate, LocalDateTime lastCollectDate) {
        this.entrustCode = entrustCode;
        this.collectValue = collectValue;
        this.firstCollectDate = firstCollectDate;
        this.lastCollectDate = lastCollectDate;
    }
}
cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java
@@ -18,8 +18,8 @@
     */
    void addBridgeValue(JSONObject jsonObject);
    void addBridgeValueByNS(String jsonStr);
    void dcResistanceDataAnalysis(String jsonStr);
    void addBridgeValueByNSD(String jsonStr);
    void elongationDataAnalysis(String jsonStr);
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
@@ -15,9 +15,11 @@
import com.ruoyi.device.service.CollectBridgeService;
import com.ruoyi.device.vo.DeviceMqttVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
@@ -36,97 +38,108 @@
@Slf4j
public class CollectBridgeServiceImpl extends ServiceImpl<CollectBridgeMapper, CollectBridge> implements CollectBridgeService {
    @Autowired
    private CollectBridgeMapper collectBridgeMapper;
    /**
     * å¡«å……采集数据
     * @param jsonObject
     */
    @Override
    public void addBridgeValue(JSONObject jsonObject) {
        JSONArray dataArray = jsonObject.getJSONArray("data");
        for (int i = 0; i < dataArray.size(); i++) {
            JSONObject listInfo = dataArray.getJSONObject(i);
            // å­˜å‚¨æ•°æ®
            String dataStream = listInfo.getString("dataStream");
            if (dataStream.equals("DQCS.DQCS.SN")) {
                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
                String entrustCode = pointsJSONObject.getString("value");
                // è§£æžæ—¶é—´æˆ³
                Instant instant = Instant.ofEpochMilli(pointsJSONObject.getLong("time"));
                LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
                // å…ˆå­˜å‚¨ç¼–号, åŽç»­å­˜å‚¨å€¼
                CollectBridge collectBridge = new CollectBridge();
                collectBridge.setEntrustCode(entrustCode);
                collectBridge.setCollectDate(collectDate);
                baseMapper.insert(collectBridge);
            }
            // å¯„存器地址等于64获取结果值
            if (dataStream.equals("DQCS.DQCS.64")) {
                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
                String value = pointsJSONObject.getString("value");
                if (value.equals("64")) {
                    for (int j = 0; j < dataArray.size(); j++) {
                        JSONObject listInfo2 = dataArray.getJSONObject(j);
                        String dataStream2 = listInfo2.getString("dataStream");
                        // å¯„存器地址等于64获取结果值
                        if (dataStream2.equals("DQCS.DQCS.DZZ")) {
                            JSONArray dataPoints2 = listInfo2.getJSONArray("dataPoints");
                            JSONObject pointsJSONObject2 = dataPoints2.getJSONObject(0);
                            String collectValue = pointsJSONObject2.getString("value");
                            // è§£æžæ—¶é—´æˆ³
                            Instant instant = Instant.ofEpochMilli(pointsJSONObject2.getLong("time"));
                            LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
                            // æŸ¥è¯¢æœ€æ–°ä¸€æ¡æ•°æ®
                            CollectBridge collectBridge = baseMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery()
                                    .orderByDesc(CollectBridge::getCollectDate)
                                    .last("limit 1"));
                            // åˆ¤æ–­ä¸¤æ¡æ•°æ®æ˜¯å¦ç›¸å·®åœ¨10分钟之内和有没有编号
                            if (isWithinTenMinutes(collectDate, collectBridge.getCollectDate()) &&
                                    StringUtils.isNotBlank(collectBridge.getEntrustCode())) {
                                // ä¿®æ”¹æ£€éªŒå€¼
                                collectBridge.setCollectValue(collectValue);
                                baseMapper.updateById(collectBridge);
                            } else {
                                // åªå­˜å‚¨å€¼
                                CollectBridge bridge = new CollectBridge();
                                bridge.setCollectValue(collectValue);
                                bridge.setCollectDate(collectDate);
                                baseMapper.insert(bridge);
                            }
                        }
                    }
                }
            }
        }
//        JSONArray dataArray = jsonObject.getJSONArray("data");
//        for (int i = 0; i < dataArray.size(); i++) {
//            JSONObject listInfo = dataArray.getJSONObject(i);
//            // å­˜å‚¨æ•°æ®
//            String dataStream = listInfo.getString("dataStream");
//            if (dataStream.equals("DQCS.DQCS.SN")) {
//                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
//                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
//                String entrustCode = pointsJSONObject.getString("value");
//                // è§£æžæ—¶é—´æˆ³
//                Instant instant = Instant.ofEpochMilli(pointsJSONObject.getLong("time"));
//                LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
//
//                // å…ˆå­˜å‚¨ç¼–号, åŽç»­å­˜å‚¨å€¼
//                CollectBridge collectBridge = new CollectBridge();
//                collectBridge.setEntrustCode(entrustCode);
//                collectBridge.setCollectDate(collectDate);
//                baseMapper.insert(collectBridge);
//
//            }
//            // å¯„存器地址等于64获取结果值
//            if (dataStream.equals("DQCS.DQCS.64")) {
//                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
//                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
//                String value = pointsJSONObject.getString("value");
//
//                if (value.equals("64")) {
//                    for (int j = 0; j < dataArray.size(); j++) {
//                        JSONObject listInfo2 = dataArray.getJSONObject(j);
//                        String dataStream2 = listInfo2.getString("dataStream");
//                        // å¯„存器地址等于64获取结果值
//                        if (dataStream2.equals("DQCS.DQCS.DZZ")) {
//                            JSONArray dataPoints2 = listInfo2.getJSONArray("dataPoints");
//                            JSONObject pointsJSONObject2 = dataPoints2.getJSONObject(0);
//                            String collectValue = pointsJSONObject2.getString("value");
//
//                            // è§£æžæ—¶é—´æˆ³
//                            Instant instant = Instant.ofEpochMilli(pointsJSONObject2.getLong("time"));
//                            LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
//
//                            // æŸ¥è¯¢æœ€æ–°ä¸€æ¡æ•°æ®
//                            CollectBridge collectBridge = baseMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery()
//                                    .orderByDesc(CollectBridge::getCollectDate)
//                                    .last("limit 1"));
//
//                            // åˆ¤æ–­ä¸¤æ¡æ•°æ®æ˜¯å¦ç›¸å·®åœ¨10分钟之内和有没有编号
//                            if (isWithinTenMinutes(collectDate, collectBridge.getCollectDate()) &&
//                                    StringUtils.isNotBlank(collectBridge.getEntrustCode())) {
//                                // ä¿®æ”¹æ£€éªŒå€¼
//                                collectBridge.setCollectValue(collectValue);
//                                baseMapper.updateById(collectBridge);
//                            } else {
//                                // åªå­˜å‚¨å€¼
//                                CollectBridge bridge = new CollectBridge();
//                                bridge.setCollectValue(collectValue);
//                                bridge.setCollectDate(collectDate);
//                                baseMapper.insert(bridge);
//                            }
//                        }
//                    }
//                }
//            }
//        }
    }
    @Override
    public void addBridgeValueByNS(String jsonStr) {
    public void dcResistanceDataAnalysis(String jsonStr) {
        Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType());
        if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){
            List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
            //过滤出包含实际电阻值的对象
            // å¤„理 NSDQCS.DQCS.DZZ æ•°æ®
            Double value = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_DZZ);
            RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ, value);
            String entrustCode = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_SN);
            BigDecimal value = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_DZZ));
            Long count = collectBridgeMapper.selectCount(Wrappers.<CollectBridge>lambdaQuery().eq(CollectBridge::getEntrustCode, entrustCode));
            if(count>0L){
                collectBridgeMapper.update(null,Wrappers.<CollectBridge>lambdaUpdate()
                        .set(CollectBridge::getCollectValue,value)
                        .set(CollectBridge::getLastCollectDate,LocalDateTime.now())
                        .eq(CollectBridge::getEntrustCode,entrustCode));
            }else{
                collectBridgeMapper.insert(new CollectBridge(entrustCode,value,LocalDateTime.now(),LocalDateTime.now()));
            }
        }
    }
    @Override
    public void addBridgeValueByNSD(String jsonStr) {
    public void elongationDataAnalysis(String jsonStr) {
        Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType());
        if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){
            List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
            //过滤出包含实际电阻值的对象
            // å¤„理 NSTSSC.TSSC.WY æ•°æ®
            processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_WY,3);
            // ä¼¸é•¿çŽ‡ï¼šå¤„ç† NSTSSC.TSSC.SCL æ•°æ®
            processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0);
        }
    }
@@ -135,17 +148,16 @@
     * @param dataList æ•°æ®åˆ—表
     * @param dataStream æ•°æ®æµæ ‡è¯†
     */
    private Double getValueByDataStream(List<DeviceMqttVO> dataList, String dataStream) {
    private String getValueByDataStream(List<DeviceMqttVO> dataList, String dataStream) {
        DeviceMqttVO deviceMqttVO = dataList.stream()
                .filter(f -> StringUtils.equals(f.getDataStream(), dataStream))
                .findFirst()
                .orElse(null);
        if(Objects.nonNull(deviceMqttVO)){
            List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints();
            BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO;
            return value.doubleValue();
            return CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():"";
        }
        return 0.0;
        return "";
    }
    /**
@@ -153,20 +165,26 @@
     * @param dataList æ•°æ®åˆ—表
     * @param dataStream æ•°æ®æµæ ‡è¯†
     * @param maxSize ä¿å­˜çš„æœ€å¤§ä¸ªæ•°
     * @param minVal å­˜å‚¨æ•°æ®çš„æœ€å°å€¼ï¼Œä½ŽäºŽè¯¥å€¼åˆ™è·³è¿‡ï¼›-1代表不限制
     */
    private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, String dataStream,int maxSize){
    private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, String dataStream,int maxSize,Double minVal){
        // ç­›é€‰å‡ºå½“前数据流对应的数据
        Double value = getValueByDataStream(dataList, dataStream);
//        Double value = Double.parseDouble(getValueByDataStream(dataList, dataStream));
        Double value = BigDecimal.valueOf(Math.random()*100).setScale(7, RoundingMode.HALF_EVEN).doubleValue();
        //如果最小值不为空且不为-1,获取到的值小于最小值则跳过不做处理
        if(Objects.nonNull(minVal)&&minVal!=-1&&value<minVal){
            return;
        }
        //判断key是否存在
        boolean existKey = RedisUtil.hasKey(dataStream);
        if(existKey){
            long listSize = RedisUtil.lGetListSize(dataStream);
            if(listSize<maxSize){
                RedisUtil.lSet(dataStream,value);
            long zSetSize = RedisUtil.getZSetSize(dataStream);
            //如果数据长度超过最大个数,则删除分数最低的数据
            if(zSetSize>=maxSize){
                RedisUtil.delZSetRange(dataStream,0,0);
            }
        }else{
            RedisUtil.lSet(dataStream,value);
        }
        RedisUtil.addZSet(dataStream,System.currentTimeMillis(),value);
    }
    /**
cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
@@ -88,7 +88,12 @@
        if (dataConfig.getStructureItemParameterId() == null) {
            throw new RuntimeException("缺少检测项id");
        }
        List<DataConfig> list = baseMapper.selectList(Wrappers.<DataConfig>lambdaQuery().eq(DataConfig::getStructureItemParameterId, dataConfig.getStructureItemParameterId()));
        List<DataConfig> list = baseMapper.selectList(Wrappers.<DataConfig>lambdaQuery()
                        .eq(DataConfig::getDeviceId,dataConfig.getDeviceId())
                        .eq(DataConfig::getInspectionItem,dataConfig.getInspectionItem())
                        .eq(DataConfig::getInspectionItemClass,dataConfig.getInspectionItemClass())
                        .eq(DataConfig::getInspectionItemSubclass,dataConfig.getInspectionItemSubclass())
                        .eq(DataConfig::getStructureItemParameterId, dataConfig.getStructureItemParameterId()));
        return Result.success(list);
    }
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -17,6 +17,8 @@
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.RedisUtil;
import com.ruoyi.device.constant.DCResistanceMqttConstants;
import com.ruoyi.device.dto.*;
import com.ruoyi.device.mapper.CollectBridgeMapper;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
@@ -49,6 +51,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -253,10 +256,26 @@
            // åˆ¤æ–­è®¾å¤‡æ˜¯å¦æ˜¯æ•°å­—ç›´æ¡¥JCZX-ZB-ER02022
            if (device.getManagementNumber().equals("JCZX-ZB-ER02022")) {
                map.putAll(dataCollectBridge(list, device, dto.getEntrustCode()));
            }else if(device.getFileType().equals(".mqtt")){
                //如果文件类型是mqtt,则不走采集器采集
                Map<String, List<DataConfig>> userMap = list.stream()
                        .peek(i -> {
                            String itemName = i.getInspectionItem();
                            if (StringUtils.isNotBlank(i.getInspectionItemClass())) {
                                itemName += "@" + i.getInspectionItemClass();
                            }
                            String name = i.getInspectionItem().equals(i.getInspectionItemSubclass()) ? itemName + "," : itemName + "," + i.getInspectionItemSubclass();
            } else {
                map.putAll(DataAcquisition.dataAcquisitionEntrance(list, device, dto.getEntrustCode(), dto.getEntrustCode(), ip, insProducts.get(0).getCableTag(),dto.getDbUserName(),dto.getDbPassword(),dto.getDbTable()));
                            // æ·»åŠ æ£€éªŒé¡¹åç§°
                            i.setInsProductItem(name);
                        })
                        .collect(Collectors.groupingBy(DataConfig::getInsProductItem));
                map.putAll(getActualResistanceValueAsMap(userMap, device,dto.getEntrustCode()));
            }else {
                String dbUserName = StringUtils.isNotBlank(dto.getDbUserName())?dto.getDbUserName():"";
                String dbPassword = StringUtils.isNotBlank(dto.getDbPassword())?dto.getDbPassword():"";
                String dbTable = StringUtils.isNotBlank(dto.getDbTable())?dto.getDbTable():"";
                map.putAll(DataAcquisition.dataAcquisitionEntrance(list, device, dto.getEntrustCode(), dto.getEntrustCode(), ip, insProducts.get(0).getCableTag(),dbUserName,dbPassword,dbTable));
            }
        }
@@ -268,6 +287,46 @@
        } else {
            return Result.success(null);
        }
    }
    /**
     * ä»Ž Redis ä¸­èŽ·å–å®žé™…ç”µé˜»å€¼ï¼Œå¹¶ä»¥é”®å€¼å¯¹å½¢å¼è¿”å›ž
     * @param dataConfig æ•°æ®é…ç½®ä¿¡æ¯
     * @param device è®¾å¤‡ä¿¡æ¯
     * @return åŒ…含实际电阻值处理结果的键值对;若未获取到有效数据则返回空 Map
     */
    public Map<String, Object> getActualResistanceValueAsMap(Map<String, List<DataConfig>> dataConfig, Device device,String entrustCode) {
        Map<String, Object> map = new HashMap<>();
        if (ObjectUtils.isEmpty(dataConfig)) {
            return map;
        }
        dataConfig.forEach((k, v) -> {
            AtomicInteger numberOfDataEntries = new AtomicInteger();
            List<Object> list = new ArrayList<>();
            for (int config = 0; config < v.size(); config++) {
                String refery = DataAcquisition.getRefer(v.get(config).getRefery());
                if (refery.equals(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ)){
                    // æŸ¥è¯¢å¯¹åº”委托编号的数据
//                    Object value = RedisUtil.get(refery);
                    CollectBridge collectBridge = collectBridgeMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery().eq(CollectBridge::getEntrustCode,entrustCode).last("limit 1"));
                    if(Objects.isNull(collectBridge)){
                        throw new ErrorException("直流电阻数采异常:没有找到委托编号为【"+entrustCode+"】的数据");
                    }
                    list.add(0,1);//测试长度,默认1
                    list.add(1,Objects.isNull(collectBridge.getCollectTemperature())?0.0:collectBridge.getCollectTemperature());//todo:温度,暂时未采集到值
                    list.add(2,collectBridge.getCollectValue());//实际电阻值
                }else {
                    // ä»Ž Redis ä¸­èŽ·å–åˆ—è¡¨æ•°æ®
                    List<?> objectList = RedisUtil.lGet(refery, 0, -1);
                    list.addAll(objectList);
                }
                numberOfDataEntries.getAndIncrement();
            }
            // è¿›è¡Œå…¬å¼è®¡ç®—
            Object resultValue = DataAcquisition.calculationFormula(list, v.get(0), k, device);
            map.put(k, resultValue);
        });
        return map;
    }
    /**
@@ -291,21 +350,21 @@
        Map<String, Object> map = new HashMap<>();
        userMap.forEach((k, v) -> {
            List<String> resultValue = new ArrayList<>();
            // æŸ¥è¯¢ç›´æ¡¥ç”µæµç”µé˜»æ•°é‡‡å€¼
            List<CollectBridge> collectBridges = collectBridgeMapper.selectList(Wrappers.<CollectBridge>lambdaQuery()
                    .like(CollectBridge::getEntrustCode, entrustCode)
                    .orderByAsc(CollectBridge::getCollectDate));
            resultValue = collectBridges.stream().map(CollectBridge::getCollectValue).collect(Collectors.toList());
            Map<String, Object> hashMap = new HashMap<>();
            hashMap.put("equipName", device.getDeviceName());
            hashMap.put("equipValue", device.getManagementNumber());
            hashMap.put("result", resultValue);
            map.put(k, hashMap);
        });
//        userMap.forEach((k, v) -> {
//            List<String> resultValue = new ArrayList<>();
//            // æŸ¥è¯¢ç›´æ¡¥ç”µæµç”µé˜»æ•°é‡‡å€¼
//            List<CollectBridge> collectBridges = collectBridgeMapper.selectList(Wrappers.<CollectBridge>lambdaQuery()
//                    .like(CollectBridge::getEntrustCode, entrustCode)
//                    .orderByAsc(CollectBridge::getCollectDate));
//
//            resultValue = collectBridges.stream().map(CollectBridge::getCollectValue).collect(Collectors.toList());
//
//            Map<String, Object> hashMap = new HashMap<>();
//            hashMap.put("equipName", device.getDeviceName());
//            hashMap.put("equipValue", device.getManagementNumber());
//            hashMap.put("result", resultValue);
//            map.put(k, hashMap);
//        });
        return map;
    }
cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
@@ -11,6 +11,7 @@
import com.ruoyi.common.utils.RedisUtil;
import com.ruoyi.device.constant.DCResistanceMqttConstants;
import com.ruoyi.device.dto.DeviceCollectionDto;
import com.ruoyi.device.mapper.CollectBridgeMapper;
import com.ruoyi.device.pojo.DataConfig;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.framework.exception.ErrorException;
@@ -40,6 +41,8 @@
    private static final String splitIdentifier = "@-@"; // è‡ªå®šä¹‰å”¯ä¸€æ ‡è¯†åˆ†å‰²ç¬¦
    public static final String frequency = "frequency";
    private CollectBridgeMapper collectBridgeMapper;
    /**
     * æ•°é‡‡å…¥å£
@@ -74,14 +77,17 @@
         * mdbEntrustCode mdb文件需要:委托编号字段 ä¸ºä»€ä¹ˆæ²¡æœ‰åŽ»è¿™ä¸ªmdb前缀呢?因为已经给客户的部分电脑上安装了采集器,而用户不接受重新安装采集器,所以就没有去除
         * mdbSampleCode mdb文件需要:样品编号字段
         */
        String mdbEntrustCode = StringUtils.isNotBlank(device.getEntrustCode())?device.getEntrustCode():"";
        String mdbSampleCode = StringUtils.isNotBlank(device.getSampleCode())?device.getSampleCode():"";
        String dbFileName = StringUtils.isNotBlank(device.getDbFileName())?device.getDbFileName():"";
        String http = HTTP + ip + GETFILE +
                "?filePath=" + device.getCollectUrl() +
                "&fileExtension=" + device.getFileType() +
                "&entrustCode=" + entrustCode +
                "&sampleCode=" + sampleCode +
                "&mdbEntrustCode=" + device.getEntrustCode() +
                "&mdbSampleCode=" + device.getSampleCode() +
                "&dbFileName=" + device.getDbFileName()+
                "&mdbEntrustCode=" + mdbEntrustCode +
                "&mdbSampleCode=" + mdbSampleCode +
                "&dbFileName=" + dbFileName +
                "&dbUserName=" + dbUserName +
                "&dbPassword=" + dbPassword +
                "&dbTable=" + dbTable;
@@ -89,7 +95,6 @@
        String result = null;
        try {
            result = HttpUtil.get(http);
            System.out.println("请求返回结果: " + result);
        } catch (IORuntimeException e) {
            e.printStackTrace();
            throw new ErrorException("所在电脑未安装或未启动:LIMS文件采集器!");
@@ -102,7 +107,7 @@
                throw new ErrorException(jsonObject.get("msg") + "");
            }
        } else {
            String data = jsonObject.get("data") + "";
             String data = jsonObject.get("data") + "";
            // è€ƒè™‘到一个检测项可能会存在多个数采配置,所以需要进行分组
            Map<String, List<DataConfig>> userMap = dataConfig.stream()
                    .peek(i -> {
@@ -152,9 +157,9 @@
                case ".png":
                    map = readPngString(data, userMap, device);
                    break;
                case ".mqtt":
                    map = getActualResistanceValueAsMap(userMap, device);
                    break;
//                case ".mqtt":
//                    map = getActualResistanceValueAsMap(userMap, device);
//                    break;
                default:
                    map = null;
                    break;
@@ -166,68 +171,6 @@
            }
            return map;
        }
    }
    /**
     * ä»Ž Redis ä¸­èŽ·å–å®žé™…ç”µé˜»å€¼ï¼Œå¹¶ä»¥é”®å€¼å¯¹å½¢å¼è¿”å›ž
     * @param dataConfig æ•°æ®é…ç½®ä¿¡æ¯
     * @param device è®¾å¤‡ä¿¡æ¯
     * @return åŒ…含实际电阻值处理结果的键值对;若未获取到有效数据则返回空 Map
     */
    public static Map<String, Object> getActualResistanceValueAsMap(Map<String, List<DataConfig>> dataConfig, Device device) {
        Map<String, Object> map = new HashMap<>();
        if (ObjectUtils.isEmpty(dataConfig)) {
            return map;
        }
        dataConfig.forEach((k, v) -> {
            AtomicInteger numberOfDataEntries = new AtomicInteger();
            List<Object> list = new ArrayList<>();
            for (int config = 0; config < v.size(); config++) {
                String refery = getRefer(v.get(config).getRefery());
                if (refery.equals(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ)){
                    // ä»Ž Redis ä¸­èŽ·å–ä¸€ä¸ªæ•°æ®
                    Object value = RedisUtil.get(refery);
                    list.add(value);
                    numberOfDataEntries.addAndGet(1);
                }else {
                    // ä»Ž Redis ä¸­èŽ·å–åˆ—è¡¨æ•°æ®
//                    List<Object> objectList = RedisUtil.lGet(refery, 0, -1);
                    List<?> objectList = RedisUtil.lGet(refery, 0, -1);
                    for (Object item : objectList) {
//                        System.out.println(item);
                        String[] split = item.toString().replace("[","").replace("]","").split(",");
                        for (Object a :
                                split) {
                            list.add(a);
                            numberOfDataEntries.addAndGet(1);
                        }
                    }
                }
            }
            // æ‹¼æŽ¥æ•°é‡‡é…ç½®
            List<Object> result = new ArrayList<>();
            for (int i = 0; i < numberOfDataEntries.get(); i++) {
                StringBuilder aggregate = new StringBuilder();
                for (int j = 0; j < v.size(); j++) {
                    int index;
                    if (j == 0) {
                        index = i;
                    } else {
                        index = numberOfDataEntries.get() + i;
                    }
                    if (index < list.size()) {
                        aggregate.append(list.get(index).toString()).append(",");
                    }
                }
                if (aggregate.length() > 0) {
                    aggregate.setLength(aggregate.length() - 1);
                }
                result.add(aggregate.toString());
            }
            // è¿›è¡Œå…¬å¼è®¡ç®—
            Object resultValue = calculationFormula(result, v.get(0), k, device);
            map.put(k, resultValue);
        });
        return map;
    }
@@ -550,7 +493,7 @@
     * @param dataConfig å­˜å‚¨å…¬å¼çš„对象
     * @return
     */
    private static Object calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem, Device device) {
    public static Object calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem, Device device) {
        if (list.size() == 0) {
            Map<String, Object> hashMap = new HashMap<>();
            hashMap.put("equipName", device.getDeviceName());
@@ -761,7 +704,7 @@
    }
    // é˜²æ­¢å‚照物为空报错,进行判断如果为空赋值空字符
    private static String getRefer(String refer) {
    public static String getRefer(String refer) {
        return ObjectUtils.isNotEmpty(refer) ? refer.replaceAll(" ", "") : "";
    }
    /**
cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java
@@ -32,7 +32,7 @@
        /**
         * å®žé™…值
         */
        private BigDecimal value;
        private String value;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
@@ -9,6 +9,7 @@
import com.ruoyi.inspect.dto.SampleProductDto2;
import com.ruoyi.inspect.dto.SampleProductExportDto;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.vo.IfsOrderVO;
import com.ruoyi.inspect.vo.InsOrderPrintingVo;
import com.ruoyi.inspect.vo.SampleDefectsFatherVo;
import org.apache.ibatis.annotations.Param;
@@ -144,4 +145,6 @@
     * @return
     */
    Integer selectNotSpotCheckOrder(@Param("itmeId") Integer itmeId, @Param("startTime") String startTime, @Param("endTime") String endTime);
    IfsOrderVO selectOrderInfoById(@Param("id") Integer id);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java
@@ -11,6 +11,7 @@
import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
import com.ruoyi.inspect.vo.InsOrderPlanVO;
import com.ruoyi.inspect.vo.SampleVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -22,6 +23,7 @@
* @createDate 2024-03-14 17:14:57
* @Entity com.yuanchu.mom.pojo.InsSample
*/
@Mapper
public interface InsSampleMapper extends BaseMapper<InsSample> {
    IPage<InsOrderPlanVO> findInsSampleAndOrder(Page page,
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -37,6 +37,7 @@
import com.ruoyi.inspect.service.InsOrderStateService;
import com.ruoyi.inspect.service.InsProductService;
import com.ruoyi.inspect.service.InsSampleService;
import com.ruoyi.inspect.vo.IfsOrderVO;
import com.ruoyi.inspect.vo.InsOrderPrintingVo;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
@@ -514,9 +515,10 @@
    @Override
    public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
        Map<String, Object> map = new HashMap<>();
        InsOrder insOrder = insOrderMapper.selectById(id);
//        InsOrder insOrder = insOrderMapper.selectById(id);
        IfsOrderVO ifsOrderVO = insOrderMapper.selectOrderInfoById(id);
        List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
        map.put("insOrder", insOrder);
        map.put("insOrder", ifsOrderVO);
        map.put("sampleProduct", list);
        //查询所有记录模版去重
        List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.inspect.vo;
import com.ruoyi.inspect.pojo.InsOrder;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * ifs订单vo
 */
@Data
public class IfsOrderVO extends InsOrder implements Serializable {
    /**
     * ç»ç¼˜é¢œè‰²
     */
    @ApiModelProperty("绝缘颜色")
    private String insulationColor;
    /**
     * å¤–护颜色
     */
    @ApiModelProperty("外护颜色")
    private String outerColor;
    /**
     * ç›˜å·
     */
    @ApiModelProperty("盘号")
    private String drumNo;
    /**
     * æ˜¯å¦æ˜¯æ‹†åˆ†è®¢å•(0:否 1:是)
     */
    @ApiModelProperty("是否是拆分订单(0:否 1:是)")
    private Integer isSplitOrder;
}
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -469,4 +469,22 @@
                and ip.structure_item_parameter_id = #{itmeId}
              group by io.id) a
    </select>
    <select id="selectOrderInfoById" resultType="com.ruoyi.inspect.vo.IfsOrderVO">
        select  io.*,
                isor.insulation_color,
                isor.outer_color,
                isor.drum_no,
                iiq.is_split_order
        from ins_order io left join ifs_inventory_quantity iiq on io.ifs_inventory_id=iiq.id
                          left join ifs_split_order_record isor
                                    on iiq.order_no=isor.order_no
                                        and iiq.line_no=isor.line_no
                                        and iiq.release_no=isor.release_no
                                        and iiq.receipt_no=isor.receipt_no
                                        and iiq.part_no=isor.part_no
                                        AND iiq.update_batch_no = isor.lot_batch_no
        where io.state !=-1
        AND io.id = #{id}
        LIMIT 1
    </select>
</mapper>
ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java
@@ -628,5 +628,54 @@
            return 0;
        }
    }
    //====================================================ZSet=======================================================
    /**
     * èŽ·å–zset数据长度
     * @param key é”®
     * @return
     */
    public static long getZSetSize(String key){
        try {
            return redisTemplate.opsForZSet().size(key);
        }catch (Exception e){
            e.printStackTrace();
            return 0L;
        }
    }
    /**
     * æ–°å¢žä¸€ä¸ªzset
     * @param key    é”®
     * @param source åˆ†æ•°
     * @param value  å€¼
     * @return
     */
    public static boolean addZSet(String key,double source,Object value){
        try {
            return redisTemplate.opsForZSet().add(key, value, source);
        }catch(Exception e){
            e.printStackTrace();
            return false;
        }
    }
    /**
     * åˆ é™¤zset元素,按排名
     * @param key   é”®
     * @param start å¼€å§‹ç´¢å¼•
     * @param end   ç»“束索引
     * @return
     */
    public static long delZSetRange(String key,long start,long end){
        try {
            return redisTemplate.opsForZSet().removeRange(key,start,end);
        }catch(Exception e){
            e.printStackTrace();
            return 0L;
        }
    }
}