//package com.unis.detectionnum.server.schedule.job;
//
//import com.serotonin.modbus4j.code.DataType;
//import com.serotonin.modbus4j.exception.ErrorResponseException;
//import com.serotonin.modbus4j.exception.ModbusInitException;
//import com.serotonin.modbus4j.exception.ModbusTransportException;
//import com.unis.detectionnum.common.vo.DeviceAlarmVO;
//import com.unis.detectionnum.common.vo.DeviceProbeParamVO;
//import com.unis.detectionnum.server.service.DeviceAlarmService;
//import com.unis.detectionnum.server.service.DeviceParamService;
//import com.unis.detectionnum.server.service.ScanPointsService;
//import com.unis.detectionnum.server.utils.Modbus4jUtils;
//import com.unis.detectionnum.server.utils.Register;
//import lombok.extern.slf4j.Slf4j;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.Date;
//import java.util.Map;
//import java.util.concurrent.Executors;
//import java.util.concurrent.ScheduledExecutorService;
//import java.util.concurrent.TimeUnit;
//
//@Component
//@Slf4j
//public class DetectionNumJob implements Job {
//
//    private static ScheduledExecutorService scheduler = null;
//
//    @Autowired
//    private ScanPointsService pointsService;
//
//    @Autowired
//    private DeviceParamService deviceParamService;
//
//    @Autowired
//    private DeviceAlarmService deviceAlarmService;
//
//    @Autowired
//    private DetectionNumNewJob detectionNumNewJob;
//
//    @Override
//    public void execute(JobExecutionContext context) throws JobExecutionException {
//        //SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
//        System.out.printf("old-------------------------------");
//        String sbcode = context.getJobDetail().getJobDataMap().get("sbCode").toString();
//        //旧设备（南京设备）
////        scanStart(sbcode);
//        //二代设备
////        detectionNumNewJob.monitorStart(sbcode);
//        System.out.println("定时任务执行成功DetectionNumJob-54==========================================");
//    }
//
//    /**
//     * 第一个版本
//     */
//    //根据设备号，开启扫描
//    public void scanStart(String sbCode) {
//        System.out.printf("old------------------------------11111111111111-");
//        try {
//
//            // 根据sbCode获取探头参数
//            DeviceProbeParamVO probeParamVO = deviceParamService.getDeviceProbeParam(sbCode);
//            String ip = probeParamVO.getSbIpdz();
//            int port = Integer.parseInt(probeParamVO.getSbDkh().trim());
//
//            // 获取扫描状态值（寄存器地址0x000A） 0：扫描完成 1：正在扫描
//            Number number = Modbus4jUtils.readHoldingRegister(ip, port, Register.SLAVE_ID, Register.SCAN_STATUS,
//                    DataType.TWO_BYTE_INT_SIGNED);
//            if (number.intValue() == 0) {
//                // 扫描状态值为0时，设置寄存器地址0x4060处值，值为0x00FF，启动扫描器
//                Modbus4jUtils.writeRegister(ip, port, Register.SLAVE_ID, Register.SCAN_SET, Register.SCAN_SET_VALUE);
//                log.info(new Date().toString() + "***开始扫描***");
//                // 数据读取
//                detectionNumRead(new Date(), ip, port);
//            } else {
//                log.info(new Date().toString() + "***开启扫描失败，上次扫描还未结束***");
//            }
//        } catch (ModbusTransportException | ErrorResponseException | ModbusInitException | InterruptedException e) {
//
//            e.printStackTrace();
//            //modbus连接失败，保存告警信息
//            DeviceAlarmVO deviceAlarmVO = new DeviceAlarmVO();
//            deviceAlarmVO.setCreateDate(new Date());
//            deviceAlarmVO.setType(2);
//            deviceAlarmVO.setSbCode(sbCode);
//            deviceAlarmVO.setRemark("探头连接失败");
//            deviceAlarmService.saveDeviceAlarm(deviceAlarmVO);
//
//        }
//
//    }
//
//    // 粮食数量点数数据获取
//    public void detectionNumRead(Date startTime, String ip, int port) throws InterruptedException {
//
//        scheduler = Executors.newSingleThreadScheduledExecutor();
//
//        log.info(new Date().toString() + "***chx0001***");
//
//        //扫描开始延时1小时候后开启数据读取，间隔10分钟
//        scheduler.scheduleAtFixedRate(new Runnable() {
//            int count = 0;
//            Map<String, Object> resultMap = null;
//
//
//            @Override
//            public void run() {
//                count++;
//                log.info(new Date().toString() + "***开始读取***");
//                try {
//                    //读取寄存器状态，判断是否扫描完成
//                    Number number = Modbus4jUtils.readHoldingRegister(ip, port, Register.SLAVE_ID, Register.SCAN_STATUS,
//                            DataType.TWO_BYTE_INT_SIGNED);
//                    if (number.intValue() == 0) {
//                        resultMap = pointsService.savePointsData(ip, port, Register.SLAVE_ID, startTime);
//
//                    } else {
//                        log.info(new Date().toString() + "***扫描未完成***");
//                    }
//
//                } catch (Throwable t) {
//                    System.out.println("数据读取失败");
//                    log.info("***数据读取失败***:" + t.getMessage());
//                }
//                if ((resultMap != null && "0".equals(resultMap.get("code").toString())) || count == 12) {
//
//                    scheduler.shutdown();
//                    log.info(new Date().toString() + "***读取完成***");
//                }
//            }
//
//        }, 60 * 60, 10 * 60, TimeUnit.SECONDS);
//
//    }
//
//}
