yangys
2024-10-28 aa15132c1992c56b679dcafafae9a1b1aa960830
增加是否处理mqtt消息的配置;过程参数更改参数
已修改6个文件
260 ■■■■■ 文件已修改
smart-man-boot/src/main/java/com/qianwen/smartman/common/config/MdcMqttConfig.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/controller/ProcessParameterController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IProcessParameterService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/ProcessParameterServiceImpl.java 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/vo/CollectParamSearchVO.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/resources/application-dev.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/common/config/MdcMqttConfig.java
@@ -50,7 +50,8 @@
    @Value("${mqtt.password:}")
    private String mqttPassword;
    @Value("${mqtt.isRecevieMsg:false}")
    private boolean isRecevieMsg;
    @Autowired
    private RedisMessageDistributor messageDistributor;
    
@@ -98,9 +99,15 @@
        
        String clientId = "spring-boot-mdc-mqtt-client-inbound"+r.nextInt(1000);
        
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter(clientId,
                        mqttClientFactory(),WOCKSTATION_REALTIMEDATA_TOPIC);//最后一个参数允许多个topic参数
        MqttPahoMessageDrivenChannelAdapter adapter;
        if(!this.isRecevieMsg) {
            adapter = new MqttPahoMessageDrivenChannelAdapter(clientId,
                    mqttClientFactory(),DEFAULT_TOPIC);
        }else {
            adapter = new MqttPahoMessageDrivenChannelAdapter(clientId,
                            mqttClientFactory(),WOCKSTATION_REALTIMEDATA_TOPIC);//最后一个参数允许多个topic参数
        }
        adapter.setCompletionTimeout(5000);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(1);
@@ -116,6 +123,7 @@
    @Bean
    @ServiceActivator(inputChannel = "mqttInputChannel")
    public MessageHandler handler() {
        return message -> {
            String topic = String.valueOf(message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC));
            if(WOCKSTATION_REALTIMEDATA_TOPIC.equals(topic) ) {
@@ -142,33 +150,6 @@
                Map<String, Object> map = WorkstationCache.getWorkstationRealTime(workstationId+"");
                
                realTimeDataService.addPreTimeInDeviceStatus(workstationId, map);
                /*
                //找到状态的数据,加入上一个状态的
                final String statusDpName = "DeviceStatus";
                if(map.containsKey(statusDpName)) {
                    TelemetryDataResponseDTO statusDTO = (TelemetryDataResponseDTO) map.get(statusDpName);
                    JSONObject statusJson = new JSONObject();
                    statusJson.put("t", statusDTO.getT());
                    statusJson.put("v", statusDTO.getV());
                    long preT = statusDTO.getT();
                    //最后一条不同值(v)的数据
                    ProcessParameterVO diffStatusVO = processParamMapper.lastParameterNotEqValue(workstationId, statusDpName, statusDTO.getV());
                    ProcessParameterVO tempStatusVO;
                    if(diffStatusVO != null) {
                        tempStatusVO = processParamMapper.firstParameterEqValueGtTime(workstationId, statusDpName, statusDTO.getV(), diffStatusVO.getTime().getTime());
                    }else {
                        tempStatusVO = processParamMapper.firstParameterEqValue(workstationId, statusDpName, statusDTO.getV());
                    }
                    if(tempStatusVO != null) {
                        preT = tempStatusVO.getTime().getTime();
                    }
                    statusJson.put("preT", preT);
                    map.put(statusDpName, statusJson);//覆盖原来的DeviceStatus
                }
                */
                
                jsonWebSocketMessage.setData(map);
                MessageDO messageDO = new MessageDO();
@@ -178,7 +159,6 @@
                messageDO.setMessageText(msgtxt);
               
                messageDistributor.distribute(messageDO);
            }
        };
    }
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/controller/ProcessParameterController.java
@@ -74,7 +74,7 @@
    public R<List<GlobalWcs>> listGlobalWcs() {
        return R.data(this.processParameterService.listGlobalWcs());
    }
    /*
    @ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL)
    @GetResource({"/param"})
    @ApiOperation("参数选择")
@@ -83,6 +83,7 @@
    public R<List<WorkstationWcsDmpDTO>> processParam(@RequestParam("workstationId") String workstationId) {
        return R.data(this.processParameterService.processParam(workstationId));
    }
    */
    
    @ApiOperationSupport(order = RegionCache.VILLAGE_LEVEL)
    @GetResource({"/params"})
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/IProcessParameterService.java
@@ -33,7 +33,7 @@
     * @param workstationId
     * @return
     */
    List<WorkstationWcsDmpDTO> processParam(String workstationId);
    //List<WorkstationWcsDmpDTO> processParam(String workstationId);
    ProParamSheetVO queryProcessParameterSheet(ProcessParameterSearchVO vo, Boolean isFilterProcessParameter);
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/service/impl/ProcessParameterServiceImpl.java
@@ -1,20 +1,7 @@
package com.qianwen.smartman.modules.mdc.service.impl;
import cn.hutool.core.lang.Tuple;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -28,8 +15,29 @@
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.qianwen.core.log.exception.ServiceException;
import com.qianwen.core.mp.support.Query;
import com.qianwen.core.oss.model.BladeFile;
import com.qianwen.core.tool.jackson.JsonUtil;
import com.qianwen.core.tool.utils.DateUtil;
import com.qianwen.core.tool.utils.Func;
import com.qianwen.smartman.common.cache.cps.TimeSliceCache;
import com.qianwen.smartman.common.cache.cps.WorkstationCache;
import com.qianwen.smartman.common.constant.DateConstant;
@@ -38,12 +46,6 @@
import com.qianwen.smartman.common.enums.WcsDataTypeEnums;
import com.qianwen.smartman.common.utils.ListUtils;
import com.qianwen.smartman.common.utils.MessageUtils;
import com.qianwen.core.log.exception.ServiceException;
import com.qianwen.core.mp.support.Query;
import com.qianwen.core.oss.model.BladeFile;
import com.qianwen.core.tool.jackson.JsonUtil;
import com.qianwen.core.tool.utils.DateUtil;
import com.qianwen.core.tool.utils.Func;
import com.qianwen.smartman.modules.cps.dto.CalendarShiftDTO;
import com.qianwen.smartman.modules.cps.dto.CalendarShiftTimeSlicesDTO;
import com.qianwen.smartman.modules.cps.dto.WorkstationWcsDmpDTO;
@@ -64,7 +66,6 @@
import com.qianwen.smartman.modules.mdc.dto.ProcessParameterVO;
import com.qianwen.smartman.modules.mdc.dto.ProcessWcsDTO;
import com.qianwen.smartman.modules.mdc.dto.StatusDTO;
import com.qianwen.smartman.modules.mdc.entity.LastProcessParam;
import com.qianwen.smartman.modules.mdc.entity.WorkstationCollectData;
import com.qianwen.smartman.modules.mdc.enums.ProcessParamEnum;
import com.qianwen.smartman.modules.mdc.mapper.SuperCollectJsonMapper;
@@ -84,11 +85,8 @@
import com.qianwen.smartman.modules.mdc.vo.excel.ProcessParamExcelVO;
import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import cn.hutool.core.lang.Tuple;
import cn.hutool.core.util.ObjectUtil;
@Service
public class ProcessParameterServiceImpl implements IProcessParameterService {
@@ -110,15 +108,7 @@
    
    @Autowired
    private ProcessParameterHelperService helperService;
    /*
    public ProcessParameterServiceImpl(final SuperCollectJsonMapper collectJsonMapper, final IWorkstationService workstationService, final OssBuilder ossBuilder, final SuperProcessParameterMapper parameterMapper, final ICalendarService calendarService) {
        this.collectJsonMapper = collectJsonMapper;
        this.workstationService = workstationService;
        this.ossBuilder = ossBuilder;
        this.parameterMapper = parameterMapper;
        this.calendarService = calendarService;
    }*/
    @Override
    public ProcessParameterResVO queryProcessParameterChart(ProcessParameterSearchVO vo) {
        ProcessParamEnum methodEnum = vo.getMethodEnum();
@@ -167,17 +157,10 @@
        page.setRecords(collect);
        return page;
    }
    /*
    @Override
    public List<WorkstationWcsDmpDTO> processParam(String workstationId) {
        /*
        List<WorkstationWcsDmpDTO> vos =WorkstationCache.getWorkstationWcsList(workstationId).stream().filter((v0) -> {
            return v0.getProcessParameter();
        }).collect(Collectors.toList());
        if (Func.isEmpty(vos)) {
            return Lists.newArrayList();
        }
        return vos;*/
        
        //获取展示在过程参数中的变量
        List<WorkstationWcsDmpDTO> dps = new ArrayList<>();
@@ -220,7 +203,7 @@
        }
        return dps;
    }
    */
    @Override
    public List<DatapointDTO> processParams(String workstationId) {
        //获取展示在过程参数中的变量
@@ -287,16 +270,16 @@
        if (startTime.after(now)) {
            return new CollectParamResVO<>();
        }
        //String workstationId = vo.getWorkstationId();
        Long workstationId = Long.parseLong(vo.getWorkstationId());
        List<ProcessParameterVO> processParameterList = getProcessParameterList(startTime, endTime, workstationId, vo.getDmpDTO());
        return getCollectParamResVO(vo.getDmpDTO(), processParameterList);
        List<ProcessParameterVO> processParameterList = getProcessParameterList(startTime, endTime, workstationId, vo.getDpDTO());
        return getCollectParamResVO(vo.getDpDTO(), processParameterList);
    }
    private CollectParamResVO<?> getCollectParamResVO(WorkstationWcsDmpDTO dmpDTO, List<ProcessParameterVO> processParameterList) {
    private CollectParamResVO<?> getCollectParamResVO(DatapointDTO dpDTO, List<ProcessParameterVO> processParameterList) {//WorkstationWcsDmpDTO dmpDTO
        //状态特殊处理?
        //if (WcsDataTypeEnums.WcsDataType.STATE.getCode().equals(dmpDTO.getWcsDataType())) {//yys
        if (WcsDataTypeEnums.WcsDataType.STATE.getCode().equals(dmpDTO.getWcsDataType())) {
        if ("DeviceStatus".equals(dpDTO.getDpName())) {//状态,需要特殊处理
            Map<String, String> colorMap = Maps.newHashMap();
            Map<String, String> nameMap = Maps.newHashMap();
            Set<String> codes = Sets.newHashSet();
@@ -309,25 +292,26 @@
                return StatusDTO.builder().time(DateUtil.formatDateTime(DateUtil.fromMilliseconds(param.getRealTime().longValue()))).name((String) nameMap.get(param.getValue())).color((String) colorMap.get(param.getValue())).value(param.getValue()).build();
            }).collect(Collectors.toList());*/
            return CollectParamResVO.<StatusDTO>builder()
                    .collectItem(dmpDTO.getDescription())
                    .collectRealItem(dmpDTO.getName())
                    .collectItem(dpDTO.getDpLabel())
                    .collectRealItem(dpDTO.getDpName())
                    .data(list)
                    .build();
            //return CollectParamResVO.builder().collectItem(dmpDTO.getDescription()).collectRealItem(dmpDTO.getName()).data(list).build();
        }
        //空指针
        List<ParamDTO> collect = processParameterList.stream().map(param -> ParamDTO.builder().time(DateUtil.formatDateTime(DateUtil.fromMilliseconds(param.getRealTime().longValue()))).value(param.getValue()).build()).collect(Collectors.toList());
        /*
        return CollectParamResVO.<ParamDTO>builder()
          .collectItem(dmpDTO.getDescription())
          .collectRealItem(dmpDTO.getName())
          .data(collect)
          .build();
        /*
        List<ParamDTO> collect2 = (List) processParameterList.stream().map(param2 -> {
            return ParamDTO.builder().time(DateUtil.formatDateTime(DateUtil.fromMilliseconds(param2.getRealTime().longValue()))).value(param2.getValue()).build();
        }).collect(Collectors.toList());
        return CollectParamResVO.builder().collectItem(dmpDTO.getDescription()).collectRealItem(dmpDTO.getName()).data(collect2).build();
        */
       */
        return CollectParamResVO.<ParamDTO>builder()
                .collectItem(dpDTO.getDpLabel())
                .collectRealItem(dpDTO.getDpName())
                .data(collect)
                .build();
    }
    private void buildWcsMap(Map<String, String> colorMap, Map<String, String> nameMap, Set<String> codes) {
@@ -347,13 +331,13 @@
     * @param dmpDTO
     * @return
     */
    private List<ProcessParameterVO> getProcessParameterList(Date startTime, Date endTime, Long workstationId, WorkstationWcsDmpDTO dmpDTO) {
        ProcessParameterVO firstStatue = oldFirstStatue(startTime, dmpDTO.getName(), workstationId);
        ProcessParameterVO endStatue = oldLastStatue(endTime, dmpDTO.getName(), workstationId);
    private List<ProcessParameterVO> getProcessParameterList(Date startTime, Date endTime, Long workstationId, DatapointDTO dpDTO) {//WorkstationWcsDmpDTO dmpDTO
        ProcessParameterVO firstStatue = oldFirstStatue(startTime, dpDTO.getDpName(), workstationId);
        ProcessParameterVO endStatue = oldLastStatue(endTime, dpDTO.getDpName(), workstationId);
        
        List<ProcessParameterVO> processParameterList = oldOneCollectList(startTime, endTime, dmpDTO.getName(), workstationId);
        List<ProcessParameterVO> processParameterList = oldOneCollectList(startTime, endTime, dpDTO.getDpName(), workstationId);
        if (Func.isNotEmpty(processParameterList)) {
            if (Func.notNull(firstStatue) && !firstStatue.getRealTime().equals(Long.valueOf(startTime.getTime()))) {
            if (Func.notNull(firstStatue) && !firstStatue.getRealTime().equals(startTime.getTime())) {
                firstStatue.setRealTime(startTime.getTime());
                processParameterList.add(0, firstStatue);
            }
@@ -617,6 +601,13 @@
        return vo;
    }
    /**
     *
     * @param endTime
     * @param item 数据点名称,如Output
     * @param workstationId
     * @return
     */
    private ProcessParameterVO oldLastStatue(Date endTime, String item, Long workstationId) {
        //ProcessParameterVO vo = this.parameterMapper.oldLastStatue(workstationId, item, Long.valueOf(endTime.getTime()));
        ProcessParameterVO vo = helperService.getLastParameterGreaterThenTime(workstationId, item, endTime.getTime());
@@ -626,6 +617,14 @@
        return vo;
    }
    /**
     *
     * @param startTime
     * @param endTime
     * @param item 数据点名称,如Output
     * @param workstationId
     * @return
     */
    private List<ProcessParameterVO> oldOneCollectList(Date startTime, Date endTime, String item, Long workstationId) {
        List<ProcessParameterVO> list = this.parameterMapper.oldOneCollectList(workstationId, item, startTime.getTime(), endTime.getTime());
        list.forEach(p -> {p.setRealTime(p.getTime().getTime());});
smart-man-boot/src/main/java/com/qianwen/smartman/modules/mdc/vo/CollectParamSearchVO.java
@@ -1,17 +1,23 @@
package com.qianwen.smartman.modules.mdc.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import javax.validation.constraints.NotNull;
import com.qianwen.smartman.common.constant.DateConstant;
import com.qianwen.smartman.modules.cps.dto.WorkstationWcsDmpDTO;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qianwen.smartman.common.constant.DateConstant;
import com.qianwen.smartman.modules.mdc.dto.DatapointDTO;
import io.swagger.annotations.ApiModelProperty;
public class CollectParamSearchVO implements Serializable {
    private static final long serialVersionUID = 8868349300708294650L;
    private WorkstationWcsDmpDTO dmpDTO;
    //private WorkstationWcsDmpDTO dmpDTO;
    private DatapointDTO dpDTO;
    @DateTimeFormat(pattern = DateConstant.PATTERN_DATE_TIME)
    @ApiModelProperty("开始时间")
    @JsonFormat(pattern = DateConstant.PATTERN_DATE_TIME)
@@ -23,11 +29,11 @@
    @NotNull(message = "{workstation.collectSwitch.notNull}")
    @ApiModelProperty(value = "工位id", dataType = "java.lang.String")
    private String workstationId;
    /*
    public void setDmpDTO(final WorkstationWcsDmpDTO dmpDTO) {
        this.dmpDTO = dmpDTO;
    }
*/
    @JsonFormat(pattern = DateConstant.PATTERN_DATE_TIME)
    public void setStartTime(final Date startTime) {
        this.startTime = startTime;
@@ -42,71 +48,21 @@
        this.workstationId = workstationId;
    }
    public boolean equals(final Object o) {
        if (o == this) {
            return true;
        }
        if (o instanceof CollectParamSearchVO) {
            CollectParamSearchVO other = (CollectParamSearchVO) o;
            if (other.canEqual(this)) {
                Object this$dmpDTO = getDmpDTO();
                Object other$dmpDTO = other.getDmpDTO();
                if (this$dmpDTO == null) {
                    if (other$dmpDTO != null) {
                        return false;
                    }
                } else if (!this$dmpDTO.equals(other$dmpDTO)) {
                    return false;
                }
                Object this$startTime = getStartTime();
                Object other$startTime = other.getStartTime();
                if (this$startTime == null) {
                    if (other$startTime != null) {
                        return false;
                    }
                } else if (!this$startTime.equals(other$startTime)) {
                    return false;
                }
                Object this$endTime = getEndTime();
                Object other$endTime = other.getEndTime();
                if (this$endTime == null) {
                    if (other$endTime != null) {
                        return false;
                    }
                } else if (!this$endTime.equals(other$endTime)) {
                    return false;
                }
                Object this$workstationId = getWorkstationId();
                Object other$workstationId = other.getWorkstationId();
                return this$workstationId == null ? other$workstationId == null : this$workstationId.equals(other$workstationId);
            }
            return false;
        }
        return false;
    }
    protected boolean canEqual(final Object other) {
        return other instanceof CollectParamSearchVO;
    }
    public int hashCode() {
        Object $dmpDTO = getDmpDTO();
        int result = (1 * 59) + ($dmpDTO == null ? 43 : $dmpDTO.hashCode());
        Object $startTime = getStartTime();
        int result2 = (result * 59) + ($startTime == null ? 43 : $startTime.hashCode());
        Object $endTime = getEndTime();
        int result3 = (result2 * 59) + ($endTime == null ? 43 : $endTime.hashCode());
        Object $workstationId = getWorkstationId();
        return (result3 * 59) + ($workstationId == null ? 43 : $workstationId.hashCode());
    }
    public String toString() {
        return "CollectParamSearchVO(dmpDTO=" + getDmpDTO() + ", startTime=" + getStartTime() + ", endTime=" + getEndTime() + ", workstationId=" + getWorkstationId() + ")";
        return ToStringBuilder.reflectionToString(this);
        //return "CollectParamSearchVO(dmpDTO=" + getDmpDTO() + ", startTime=" + getStartTime() + ", endTime=" + getEndTime() + ", workstationId=" + getWorkstationId() + ")";
    }
    /*
    public WorkstationWcsDmpDTO getDmpDTO() {
        return this.dmpDTO;
    }
    */
    public Date getStartTime() {
        return this.startTime;
@@ -119,4 +75,13 @@
    public String getWorkstationId() {
        return this.workstationId;
    }
    public DatapointDTO getDpDTO() {
        return dpDTO;
    }
    public void setDpDTO(DatapointDTO dpDTO) {
        this.dpDTO = dpDTO;
    }
}
smart-man-boot/src/main/resources/application-dev.yml
@@ -64,6 +64,7 @@
  #心跳时间
  keepalive: 10
  connectionTimeout: 3000 #连接超时时间
  isRecevieMsg: false
xxl:
  job:
    admin: