ZengTao
2024-06-05 16c79495b4a88229042b4087e791ff86471bb702
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -1,85 +1,98 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.bigstorage.service.BigStorageCageService;
import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
import com.mes.common.S7object;
import com.mes.device.PlcParameterObject;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.edgstoragetask.service.TaskCacheService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.menu.service.SysMenuService;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author SNG-015
 */
@Component
@Slf4j
public class PlcStorageCageTask {
    @Autowired
    @Resource
    private BigStorageCageService bigStorageCageService;
    @Autowired
    @Resource
    private BigStorageCageDetailsService bigStorageCageDetailsService;
    @Autowired
    @Resource
    private GlassInfoService glassInfoService;
    @Autowired
    @Resource
    private BigStorageCageFeedTaskService bigStorageCageFeedTaskService;
    @Autowired
    @Resource
    private BigStorageCageOutTaskService bigStorageCageOutTaskService;
    @Autowired
    private TaskCacheService taskCacheService;
    @Resource
    private EdgGlassTaskInfoService edgGlassTaskInfoService;
    @Resource
    private TemperingGlassInfoService temperingGlassInfoService;
    @Autowired
    private SysMenuService sysMenuService;
    PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
    public static boolean bigStorageCageFullAlarm = false;
    private int line1Time=0;
    private int line2Time=0;
    /**
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    @Scheduled(fixedDelay = 300)
    @Scheduled(fixedDelay = 5000)
    public void plcStorageCageTask() throws InterruptedException {
        JSONObject jsonObject = new JSONObject();
        try {
            Thread.sleep(300);
            boolean bigStorageCageFullAlarm = false;
            String plcD01FeedReq = "0";
            String plcD04FeedReq = "0";
            String plcFeedGlassid = "111";
            String plcFeedGlassid = "";
            String plcFeedReqLine = "0";
            if ("1".equals(plcD01FeedReq)) {
            if ("1".equals(plcParameterObject.getPlcParameter("D01Request").getValue())) {
                plcFeedReqLine = "1";
            } else {
                //plc任务发送字0
                plcFeedGlassid=plcParameterObject.getPlcParameter("D01ID1").getValue();
            }
            if ("1".equals(plcD04FeedReq)) {
            if ("1".equals(plcParameterObject.getPlcParameter("D04Request").getValue())) {
                plcFeedReqLine = "2";
            } else {
                //plc任务发送字0
                plcFeedGlassid=plcParameterObject.getPlcParameter("D04ID1").getValue();
            }
            line1Time+=1;
            line2Time+=1;
            if (!("0".equals(plcFeedReqLine))) {
                log.info("1、Plc进片请求时");
                BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
                GlassInfo glassInfo = glassInfoService.getById(plcFeedGlassid);
                log.info("2、根据玻璃id获取玻璃信息" + glassInfo);
                BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails);
                if (slotInfo != null) {
                    int taskType = taskCacheService.judgeTasktype();
                    log.info("3、查询任务表判断当前任务类型为上车等到还是上车启动" + taskType);
                    bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType);
                    log.info("4、添加任务到任务表");
                    //plc任务发送字1
                    bigStorageCageFullAlarm = false;
                } else {
                    //理片笼爆笼报警
                    bigStorageCageFullAlarm = true;
                if(bigStorageCageDetailsService.selectGetBoard(plcFeedReqLine)>=0){
                    BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails);
                    if (slotInfo != null) {
                        int taskType = edgGlassTaskInfoService.judgeTasktype(plcFeedReqLine);
                        log.info("3、查询任务表判断当前任务类型为上车等到还是上车启动" + taskType);
                        bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType);
                        log.info("4、添加任务到任务表");
                        bigStorageCageFullAlarm = false;
                    } else {
                        bigStorageCageFullAlarm = true;
                    }
                }else{
                    log.info("当前玻璃宽度不够上车" + glassInfo);
                    if(!("1".equals(plcFeedReqLine))){
                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
                    }else{
                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
                    }
                }
            } else {
                List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskService.querybigStorageCageFeedTask(1);
@@ -94,26 +107,41 @@
                    bigStorageCageFeedTaskService.removeById(bigStorageCageFeedTask);
                    log.info("7、删除已经完成的进片任务");
                }
            }
            //出片请求
            String plcOutReq = "0";
            boolean result = false;
            if ("1".equals(plcOutReq)) {
                result = bigStorageCageService.outGlass();
                log.info("8、出片请求时调用出片接口" + result);
                if (result) {
                    //plc任务发送字1
                //启动阈值
                if(line1Time>=300){
                    if("0".equals(plcParameterObject.getPlcParameter("D05Go").getValue())){
                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
                    }
                }
            } else {
                bigStorageCageOutTaskService.updateOutTask();
                //plc任务发送字0
                if(line2Time>=300){
                    if("0".equals(plcParameterObject.getPlcParameter("D02Go").getValue())){
                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
                    }
                }
            }
            //显示剩余空格子
            //查询出片表是否有任务未完成的任务
            List<BigStorageCageOutTask> bigStorageCageOutTask=bigStorageCageOutTaskService.querybigStorageCageOutTask(0);
            if(bigStorageCageOutTask.size()==0){
                boolean result=bigStorageCageService.outGlass();
                log.info("8、没有未完成任务时调用出片接口");
                if (result==false){
                    temperingGlassInfoService.schedulingTask();
                }
            }
            bigStorageCageOutTaskService.updateOutTask();
            log.info("9、根据任务表状态修改钢化小片表任务状态");
            //报警信息
            jsonObject.append("bigStorageCageFullAlarm", bigStorageCageFullAlarm);
            //来不及送时直接走
            String line=Integer.toString(edgGlassTaskInfoService.startTask());
            if(!(line.equals(plcFeedReqLine))){
                S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
            }else{
                S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }