package com.ruoyi.taiye.job;

import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
import com.ruoyi.system.init.PlcConnectServiceRunner;
import com.ruoyi.taiye.domain.DeviceLog;
import com.ruoyi.system.enums.PLCConnectNameEnum;
import com.ruoyi.system.enums.PLCEnum;
import com.ruoyi.taiye.service.IDeviceLogService;
import com.ruoyi.taiye.service.ProcessService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("AMSJob")
@Slf4j
public class AMSJob {
    @Autowired
    PlcConnectServiceRunner plcConnectServiceRunner;

    @Autowired
    private ProcessService processService;

    @Autowired
    private IDeviceLogService deviceLogService;

    public void test() {
        // 一号包装机
        boolean b1 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_1.getMetadata());
        log.info("一号包装机下料信号:{}:{}:{}", PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(), PLCEnum.PACKING_MACHINE_UNLOADING_1.getMetadata(),b1);
        boolean b2 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_PALLETS_1.getMetadata());
        log.info("一号包装机上空信号:{}:{}:{}", PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(), PLCEnum.PACKING_MACHINE_UP_EMPTY_PALLETS_1.getMetadata(),b2);
        boolean b3 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_ENTER_1.getMetadata());
        log.info("一号包装机下料允许进入信号:{}:{}:{}", PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(), PLCEnum.PACKING_MACHINE_UNLOADING_ENTER_1.getMetadata(),b3);
        boolean b4 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_ENTER_1.getMetadata());
        log.info("一号包装机上空允许进入信号:{}:{}:{}", PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(), PLCEnum.PACKING_MACHINE_UP_EMPTY_ENTER_1.getMetadata(),b4);
        boolean b5 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_Leave_1.getMetadata());
        log.info("一号包装机下料完成信号:{}:{}:{}", PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(), PLCEnum.PACKING_MACHINE_UNLOADING_Leave_1.getMetadata(),b5);
        boolean b6 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_1.getMetadata());
        log.info("一号包装机上空完成信号:{}:{}:{}", PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(), PLCEnum.PACKING_MACHINE_UP_EMPTY_Leave_1.getMetadata(),b6);
        // 叠包机
        boolean b7 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.STACKING_MACHINE.getMetadata()).readBoolean(PLCEnum.STACKING_MACHINE_FEEDING.getMetadata());
        log.info("叠包机上料信号:{}:{}:{}", PLCConnectNameEnum.STACKING_MACHINE.getMetadata(), PLCEnum.STACKING_MACHINE_FEEDING.getMetadata(),b7);
        boolean b8 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.STACKING_MACHINE.getMetadata()).readBoolean(PLCEnum.STACKING_MACHINE_FEEDING_ENTER.getMetadata());
        log.info("叠包机允许进入:{}:{}:{}", PLCConnectNameEnum.STACKING_MACHINE.getMetadata(), PLCEnum.STACKING_MACHINE_FEEDING_ENTER.getMetadata(),b8);
        boolean b9 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.STACKING_MACHINE.getMetadata()).readBoolean(PLCEnum.STACKING_MACHINE_FEEDING_FINISH.getMetadata());
        log.info("叠包机上料完成信号:{}:{}:{}", PLCConnectNameEnum.STACKING_MACHINE.getMetadata(), PLCEnum.STACKING_MACHINE_FEEDING_FINISH.getMetadata(),b9);
    }

    /**
     * 一号包装机下料任务
     */
    public void onePackingMachineUnloading() {
        log.info("一号包装机下料信号:{}:{}", PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(), PLCEnum.PACKING_MACHINE_UNLOADING_1.getMetadata());
        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_1.getMetadata());
        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_1.getMetaName(),"获取到下料信号:"+b,"1"));
        if (b) {
            boolean b1 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.STACKING_MACHINE.getMetadata()).readBoolean(PLCEnum.STACKING_MACHINE_FEEDING.getMetadata());
            deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.STACKING_MACHINE.getMetadata(),PLCConnectNameEnum.STACKING_MACHINE.getMetaName(),"获取到上料信号:"+b1,"1"));
            if (b1) {
                processService.createPackingMachineUnloadingTask("PM_L_1", 100000);
            }
        }
    }

    /**
     * 二号包装机下料任务
     */
    public void twoPackingMachineUnloading() {
        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_2.getMetadata());
        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_2.getMetaName(),"获取到下料信号:"+b,"1"));
        if (b) {
            boolean b1 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.STACKING_MACHINE.getMetadata()).readBoolean(PLCEnum.STACKING_MACHINE_FEEDING.getMetadata());
            deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.STACKING_MACHINE.getMetadata(),PLCConnectNameEnum.STACKING_MACHINE.getMetaName(),"获取到上料信号:"+b1,"1"));
            if (b1) {
                processService.createPackingMachineUnloadingTask("PM_L_3", 100001);
            }
        }
    }

    /**
     * 三号包装机下料任务
     */
    public void threePackingMachineUnloading() {
        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UNLOADING_3.getMetadata());
        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_3.getMetaName(),"获取到下料信号:"+b,"1"));
        if (b) {
            boolean b1 = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.STACKING_MACHINE.getMetadata()).readBoolean(PLCEnum.STACKING_MACHINE_FEEDING.getMetadata());
            deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.STACKING_MACHINE.getMetadata(),PLCConnectNameEnum.STACKING_MACHINE.getMetaName(),"获取到上料信号:"+b1,"1"));
            if (b1) {
                processService.createPackingMachineUnloadingTask("PM_L_3", 100002);
            }
        }

    }

    /**
     * 一号包装机上空
     */
    public void onePackingMachineUpEmptyPallets() {
        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_PALLETS_1.getMetadata());
        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_1.getMetaName(),"获取到上空信号:"+b,"1"));
        if (b) {
            processService.createPackingMachineUpEmptyPallets("PM_UP_1",100003);
        }

    }

    /**
     * 二号包装机上空
     */
    public void twoPackingMachineUpEmptyPallets() {
        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_PALLETS_2.getMetadata());
        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_2.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_2.getMetaName(),"获取到上空信号:"+b,"1"));
        if (b) {
            processService.createPackingMachineUpEmptyPallets("PM_UP_2",100004);
        }
    }

    /**
     * 三号包装机上空
     */
    public void threePackingMachineUpEmptyPallets() {
        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata()).readBoolean(PLCEnum.PACKING_MACHINE_UP_EMPTY_PALLETS_3.getMetadata());
        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_3.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_3.getMetaName(),"获取到上空信号:"+b,"1"));
        if (b) {
            processService.createPackingMachineUpEmptyPallets("PM_UP_3",100005);
        }
    }

    /**
     * 清空PLC信号日志
     */
    public void cleanPLCDeviceLog() {
        int i = deviceLogService.cleanUpDataFromAWeekAgo();
        log.info("已清除一周前的数据,数量:{}",i);
    }

}