zhoushihao
2024-09-09 9c860a46c008b00179d68421f23ffced53b1ea4e
1、新增字典类型表接字典详情表
2、钢化前任务已设置完成,带联调
2个文件已修改
8个文件已添加
308 ■■■■■ 已修改文件
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictData.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictType.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictDataMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictTypeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictDataService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictTypeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictDataServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictTypeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictData.java
New file
@@ -0,0 +1,48 @@
package com.mes.sysdict.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class SysDictData implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "dict_id", type = IdType.AUTO)
    private Long dictId;
    private Integer dictSort;
    private String dictLabel;
    private String dictValue;
    private String dictType;
    private String dictTypeValue;
    private String state;
    private String description;
    private Date createTime;
    @TableLogic
    private String deleted;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictType.java
New file
@@ -0,0 +1,43 @@
package com.mes.sysdict.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class SysDictType implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "dict_id", type = IdType.AUTO)
    private Long dictId;
    private String dictName;
    private String dictType;
    private String state;
    private String description;
    private LocalDateTime createTime;
    @TableLogic
    private String deleted;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictDataMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.sysdict.entity.SysDictData;
/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictDataMapper extends BaseMapper<SysDictData> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictTypeMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.sysdict.entity.SysDictType;
/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictDataService.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.service;
import com.github.yulichang.base.MPJBaseService;
import com.mes.sysdict.entity.SysDictData;
/**
 * <p>
 * 服务类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictDataService extends MPJBaseService<SysDictData> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictTypeService.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.sysdict.entity.SysDictType;
/**
 * <p>
 * 服务类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictTypeService extends IService<SysDictType> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictDataServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.sysdict.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.sysdict.entity.SysDictData;
import com.mes.sysdict.mapper.SysDictDataMapper;
import com.mes.sysdict.service.SysDictDataService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Service
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements SysDictDataService {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictTypeServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.sysdict.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.sysdict.entity.SysDictType;
import com.mes.sysdict.mapper.SysDictTypeMapper;
import com.mes.sysdict.service.SysDictTypeService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -8,15 +8,21 @@
import com.mes.damage.entity.Damage;
import com.mes.damage.service.DamageService;
import com.mes.device.PlcParameterObject;
import com.mes.sysdict.entity.SysDictData;
import com.mes.sysdict.service.SysDictDataService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import com.mes.temperingrecord.entity.TemperingRecord;
import com.mes.temperingrecord.service.TemperingRecordService;
import com.mes.tools.S7control;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -31,7 +37,7 @@
public class TemperingTask {
    @Autowired
    private TemperingRecordService temporalRecordService;
    private TemperingRecordService temperingRecordService;
    @Autowired
    private TemperingGlassInfoService temporaryGlassInfoService;
@@ -39,53 +45,105 @@
    @Autowired
    private DamageService damageService;
    @Autowired
    private SysDictDataService sysDictDataService;
    private static final String ALONE_STATE = "0";
    @Value("${mes.width}")
    private Integer temperingWidth;
    @Value("${mes.height}")
    private Integer temperingHeight;
    @Scheduled(fixedDelay = 1000)
    public void temperingGlassBefore() {
        Date startDate = new Date();
        log.info("本次任务开始执行时间:{}", startDate);
        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
        S7control plcControl = S7object.getinstance().plccontrol;
        String state = plcParameterObject.getPlcParameter("state").getValue();
//        当前连线状态为
        if (ALONE_STATE.equals(state)) {
            log.info("当前钢化炉连线模式为:{},不执行该任务", state);
            log.info("当前钢化炉连线模式为:{},(0:手动;1:连线),不执行该任务", state);
            return;
        }
        //将确认字置为0
        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
        //todo:获取钢化版图中状态为2的(进炉完成的玻璃信息)  且不存在钢化记录表内的
        List<Object> temperRecordIdListObj = temporalRecordService.listObjs(new QueryWrapper<TemperingRecord>().select("distinct tempering_layout_id"));
        List<String> temperRecordIdList = temperRecordIdListObj.stream().map(String::valueOf).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(temperRecordIdList)) {
        plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
        //可能有几炉玻璃同时在钢,需要获取钢化小片表中的数据信息状态为2(旋转台玻璃已送出未钢化,正在钢化)
        List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
                .eq(TemperingGlassInfo::getState, Const.TEMPERING_START));
        if (CollectionUtils.isEmpty(temperingGlassInfoList)) {
            log.info("当前系统没有需要钢化的玻璃信息");
            return;
        }
        List<TemperingGlassInfo> list = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
                .eq(TemperingGlassInfo::getState, Const.TEMPERING_START).notIn(TemperingGlassInfo::getTemperingLayoutId, temperRecordIdList));
        if (CollectionUtils.isEmpty(list)) {
            log.info("当前系统没有需要钢化的玻璃信息");
            return;
        }
        List<Integer> temperingLayoutIdList = list.stream().map(TemperingGlassInfo::getTemperingLayoutId).distinct().collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(temperRecordIdList)) {
            temperingLayoutIdList.removeAll(temperRecordIdList);
        }
        if (CollectionUtils.isEmpty(temperingLayoutIdList)) {
            log.info("当前玻璃有正在钢化的任务");
        }
//        获取钢化下片表状态为2的玻璃信息
        TemperingGlassInfo maxGlassInfo = temperingGlassInfoList.stream().max(Comparator.comparingLong(TemperingGlassInfo::getId)).get();
        //拿到工程id及炉号
//        List<EngineerTemperingDTO> engineerTemperingList = temperingGlassInfoList.stream().map(e -> {
//            EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO();
//            BeanUtils.copyProperties(e, engineerTemperingDTO);
//            return engineerTemperingDTO;
//        }).distinct().collect(Collectors.toList());
        //将正在钢化的炉号过滤掉,仅获取待钢化的玻璃
//        List<TemperingRecord> temperingRecords = temperingRecordService.list(new LambdaQueryWrapper<TemperingRecord>().and(i -> i.isNull(TemperingRecord::getCoolEnergy).or().eq(TemperingRecord::getCoolEnergy, "")));
//        List<EngineerTemperingDTO> temperingList = new ArrayList<>();
//        if (CollectionUtils.isNotEmpty(temperingRecords)) {
//            temperingList = temperingRecords.stream().map(e -> {
//                EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO();
//                BeanUtils.copyProperties(e, engineerTemperingDTO);
//                return engineerTemperingDTO;
//            }).collect(Collectors.toList());
//        }
//        engineerTemperingList.removeAll(temperingList);
//        if (CollectionUtils.isEmpty(engineerTemperingList)) {
//            log.info("没有待钢化的任务,结束");
//            return;
//        }
//        if (engineerTemperingList.size() > 1) {
//            log.info("存在多炉待钢化的任务,请检查现场是否有异常数据未处理");
//            return;
//        }
//        EngineerTemperingDTO temperingDTO = engineerTemperingList.get(0);
        //获取待钢化的所有玻璃信息
        List<TemperingGlassInfo> temperingGlassList = temperingGlassInfoList.stream()
                .filter(e -> e.getEngineerId().equals(maxGlassInfo.getEngineerId())
                        && e.getTemperingLayoutId().equals(maxGlassInfo.getTemperingLayoutId()))
                .sorted(Comparator.comparing(TemperingGlassInfo::getTemperingFeedSequence)).collect(Collectors.toList());
        //按照膜系获取玻璃材质
        SysDictData glassTypeSysDictData = sysDictDataService.getOne(new QueryWrapper<SysDictData>()
                .eq(StringUtils.isNotBlank(temperingGlassList.get(0).getFilmsid()), "dict_label", temperingGlassList.get(0).getFilmsid()));
        double sumArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).sum();
        double maxArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).max().orElse(0.0);
        double minArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).min().orElse(0.0);
        double areaDifference = (10000 * (maxArea - minArea) / maxArea);
        double loadingRate = (int) (10000 * sumArea / (temperingHeight * temperingWidth));
        TemperingRecord temperingRecord = new TemperingRecord();
        temperingRecord.setEngineerId(maxGlassInfo.getEngineerId());
        temperingRecord.setTemperingLayoutId(maxGlassInfo.getTemperingLayoutId());
        temperingRecord.setGlassType(Integer.parseInt(glassTypeSysDictData.getDictTypeValue()));
        temperingRecord.setTemperingType(1);//全钢
        temperingRecord.setThickness(temperingGlassList.get(0).getThickness());
        temperingRecord.setAreaDifference(areaDifference);
        temperingRecord.setLoadingRate(loadingRate);
        temperingRecord.setState(Const.GLASS_STATE_NEW);
        //如果出现同一炉重读被处理,主键直接异常处理,不会发给plc钢化信息
        temperingRecordService.save(temperingRecord);
//      向plc发送钢化信息
        plcControl.writeWord(plcParameterObject.getPlcParameter("temperingLayoutId").getAddress(), maxGlassInfo.getTemperingLayoutId());
        plcControl.writeWord(plcParameterObject.getPlcParameter("filmsid").getAddress(), Integer.parseInt(glassTypeSysDictData.getDictTypeValue()));
        plcControl.writeWord(plcParameterObject.getPlcParameter("temperingType").getAddress(), 1);
        plcControl.writeWord(plcParameterObject.getPlcParameter("thickness").getAddress(), (int) (temperingGlassList.get(0).getThickness() * 10));
        plcControl.writeWord(plcParameterObject.getPlcParameter("areaDifference").getAddress(), (int) areaDifference);
        plcControl.writeWord(plcParameterObject.getPlcParameter("loadingRate").getAddress(), (int) loadingRate);
        //完成任务将确认字置为1
        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1);
        plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1);
        Date endDate = new Date();
        log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime());
    }
    @Scheduled(fixedDelay = 1000)
    public void temperingGlassAfter() {
        //暂不处理
    }
    @Scheduled(fixedDelay = 1000)
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -11,4 +11,7 @@
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mes:
  width: 2800
  height: 5000