package org.springblade.mdm.task; import lombok.extern.slf4j.Slf4j; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.basesetting.machine.service.MachineService; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO; import org.springblade.mdm.machinefile.entity.FileSendRecord; import org.springblade.mdm.machinefile.entity.MachineFile; import org.springblade.mdm.machinefile.service.FileSendRecordService; import org.springblade.mdm.machinefile.service.MachineFileService; import org.springblade.mdm.machinefile.service.ReceiveFileCheckService; import org.springblade.mdm.utils.FileContentUtil; import org.springblade.mdm.utils.ProgramFileNameParser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; /** * 机床回传rec文件夹内文件异常检查 */ @Slf4j @Component @EnableScheduling public class ReceiveDirCheckTask { @Autowired private MachineFileService machineFileService; @Autowired private MachineService machineService; @Autowired private ParamService paramService; @Autowired private ReceiveFileCheckService receiveFileCheckService; // 每5秒执行一次 //@Scheduled(fixedRate = 1000000) //@Scheduled(cron = "0 1 0 * * ?") // 每天上午0点1分执行 //@Scheduled(cron = "0 */3 * * * ?") //@Scheduled(cron = "0 15 19 * * ?") //test //@Scheduled(cron = "${task.cron.machine_file_scan}") @Scheduled(cron = "${task.cron.machine_rec_check:0 */11 * * * ?}") public void execute() { String networkType = paramService.getParamValue(ParamService.NETWORK_TYPE,ParamService.NETWORK_TYPE_SHEMI); if(!ParamService.NETWORK_TYPE_SHEMI.equals(networkType)){ //非涉密网,才扫描目录文件 log.info("reccheckfile start"); checkFiles(); log.info("reccheckfile end"); } } /** * 扫描数据库记录,超时则移动文件 */ public void checkFiles() { List machines = machineService.getEnableMachines(); for (Machine machine : machines) { List recFiles = this.machineFileService.lambdaQuery() .eq(MachineFile::getDirType,MachineFile.DIR_TYPE_REC) .eq(MachineFile::getMachineCode,machine.getCode()).list(); for(MachineFile machineFile : recFiles){ try { receiveFileCheckService.check(machineFile, recFiles,machine); }catch(Exception e){ log.error("检查rec文件失败:{}",machineFile.getName(),e); } } } } }