package com.mes.job; import cn.smallbun.screw.core.util.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mes.common.S7object; import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.device.PlcParameterObject; 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 lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @Author : zhoush * @Date: 2024/7/17 12:47 * @Description: */ @Component @Slf4j public class TemperingTask { @Autowired private TemperingRecordService temporalRecordService; @Autowired private TemperingGlassInfoService temporaryGlassInfoService; @Autowired private DamageService damageService; private static final String ALONE_STATE = "0"; @Scheduled(fixedDelay = 1000) public void temperingGlassBefore() { Date startDate = new Date(); log.info("本次任务开始执行时间:{}", startDate); PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; String state = plcParameterObject.getPlcParameter("state").getValue(); // 当前连线状态为 if (ALONE_STATE.equals(state)) { log.info("当前钢化炉连线模式为:{},不执行该任务", state); return; } //将确认字置为0 S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0); //todo:获取钢化版图中状态为2的(进炉完成的玻璃信息) 且不存在钢化记录表内的 List temperRecordIdListObj = temporalRecordService.listObjs(new QueryWrapper().select("distinct tempering_layout_id")); List temperRecordIdList = temperRecordIdListObj.stream().map(String::valueOf).collect(Collectors.toList()); if (CollectionUtils.isEmpty(temperRecordIdList)) { log.info("当前系统没有需要钢化的玻璃信息"); return; } List list = temporaryGlassInfoService.list(new LambdaQueryWrapper() .eq(TemperingGlassInfo::getState, Const.TEMPERING_START).notIn(TemperingGlassInfo::getTemperingLayoutId, temperRecordIdList)); if (CollectionUtils.isEmpty(list)) { log.info("当前系统没有需要钢化的玻璃信息"); return; } List temperingLayoutIdList = list.stream().map(TemperingGlassInfo::getTemperingLayoutId).distinct().collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(temperRecordIdList)) { temperingLayoutIdList.removeAll(temperRecordIdList); } if (CollectionUtils.isEmpty(temperingLayoutIdList)) { log.info("当前玻璃有正在钢化的任务"); } // 获取钢化下片表状态为2的玻璃信息 //完成任务将确认字置为1 S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1); } @Scheduled(fixedDelay = 1000) public void temperingGlassAfter() { } @Scheduled(fixedDelay = 1000) public void dealDamageTask() { Date startDate = new Date(); log.info("钢化破损玻璃清除任务开始执行时间:{}", startDate); List temperingGlassInfoList = temporaryGlassInfoService.list(new LambdaQueryWrapper().in(TemperingGlassInfo::getState, Const.GLASS_STATE_DAMAGE_TAKE)); if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) { //获取破损/拿走玻璃id List glassList = temperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList()); //将任务表中的数据删除 temporaryGlassInfoService.remove(new LambdaQueryWrapper().in(TemperingGlassInfo::getGlassId, glassList)); List damageList = temperingGlassInfoList.stream().map(e -> { Damage damage = new Damage(); damage.setGlassId(e.getGlassId()); damage.setLine(Const.TEMPERING_OUT_TARGET_POSITION); damage.setWorkingProcedure("钢化"); damage.setRemark("钢化"); damage.setStatus(0); damage.setType(e.getState()); return damage; }).collect(Collectors.toList()); damageService.batchInsertDamage(damageList); } Date endDate = new Date(); log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime()); } }