package com.ld.igds.timer; import com.ld.igds.common.CoreDeviceService; import com.ld.igds.constant.Constant; import com.ld.igds.constant.DeviceType; import com.ld.igds.io.request.ExeDevice; import com.ld.igds.lamp.LampManager; import com.ld.igds.lamp.dto.LampParam; import com.ld.igds.models.Device; import com.ld.igds.util.ContextUtil; import lombok.extern.slf4j.Slf4j; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 照明定时控制 * @author chen */ @Slf4j @Service(Constant.JOB_BEAN_LAMP) public class JobLampService implements Job { @Resource private LampManager lampManager; @Resource private CoreDeviceService coreDeviceService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { log.info("=======================开始执行照明定时控制============================="); // 获取JOB的ID String key = context.getTrigger().getKey().getName(); String jobId = key.substring(7); List listDevice = coreDeviceService.getDeviceByTimId(null, jobId); if (null == listDevice || listDevice.isEmpty()) { log.info("照明定时控制执行中没有找到需要操作的设备信息,定时执行失败!"); return; } ExeDevice exeDevice; // 对设备进行调整,按照分机进行分组以便调用执行 Map> deviceMap = new HashMap<>(); //存放分机与仓库编码关系 Map depotMap = new HashMap<>(); for (Device d : listDevice) { if (DeviceType.TYPE_06.getCode().equals(d.getType())) { exeDevice = new ExeDevice(); BeanUtils.copyProperties(d, exeDevice); if (null == deviceMap.get(exeDevice.getSerId())) { deviceMap.put(exeDevice.getSerId(), new ArrayList<>()); } deviceMap.get(exeDevice.getSerId()).add(exeDevice); depotMap.put(exeDevice.getSerId(), exeDevice.getDepotId()); } } if (deviceMap.isEmpty()) { log.info("照明定时控制执行中没有找到需要操作的设备信息,定时执行失败!"); return; } try { LampParam param ; for (String mapKey : deviceMap.keySet()) { param = new LampParam(); param.setCompanyId(ContextUtil.getDefaultCompanyId()); param.setDepotId(depotMap.get(mapKey)); param.setSerId(mapKey); param.setDeviceList(deviceMap.get(mapKey)); lampManager.controlDevice2(param); Thread.sleep(2000); } } catch (Exception e) { log.error("照明定时控制执行发生错误,执行失败!", e); } } }