yangys
2025-09-29 4c7296d45efe849dc70a3b2e2240c905481a91c9
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java
@@ -11,17 +11,18 @@
import org.springblade.core.mp.support.Condition;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.commons.service.MachineDirTranslator;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.machinefile.entity.MachineFileChangeHis;
import org.springblade.mdm.machinefile.mapper.MachineFileMapper;
import org.springblade.mdm.machinefile.vo.MachineFileQueryVO;
import org.springblade.mdm.machinefile.vo.MachineAcceptedFileHandleQueryVO;
import org.springblade.mdm.machinefile.vo.MachineBackFileQueryVO;
import org.springblade.mdm.machinefile.vo.MachineAcceptedFileVO;
import org.springblade.mdm.program.vo.CompareDataVO;
import org.springblade.mdm.statreport.vo.MachineFileExceptionQueryVO;
import org.springblade.mdm.utils.FileContentUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -31,6 +32,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Optional;
/**
 * 机床文件
@@ -44,7 +46,7 @@
   private final MachineService machineService;
   private final MachineFileChangeHisService machineFileChangeHisService;
   private final OssTemplate ossTemplate;
   private MachineDirTranslator machineDirTranslator;
   /**
    * 获取文件全路径
    * @param id 数据id
@@ -87,9 +89,9 @@
   /**
    * 获取基本路径
    * @param machine
    * @param dirType
    * @return
    * @param machine 机床
    * @param dirType 目录类型
    * @return 目录基本路径
    */
   public static String getBasePath(Machine machine,String dirType){
      String dirPath;
@@ -206,4 +208,74 @@
      return vo;
   }
   /**
    * 刷新文件信息,不存在新增,存在则更新
    * @param mf
    */
   public void refreshFileData(MachineFile mf) {
      MachineFile existFileInDb = getExistsFile(mf.getName(),mf.getDirType(),mf.getMachineCode());
      if(existFileInDb == null) {
         save(mf);
      }else{
         log.info("文件在库中已存在:{}",mf.getName());
         existFileInDb.setFileSize(mf.getFileSize());
         existFileInDb.setProgramStatus(mf.getProgramStatus());
         existFileInDb.setFileCreateTime(mf.getFileCreateTime());
         existFileInDb.setFileModifyTime(mf.getFileModifyTime());
         existFileInDb.setStatus(MachineFile.STATUS_NORMAL);
         if(!com.alibaba.excel.util.StringUtils.equals(existFileInDb.getMd5(),mf.getMd5())){
            //文件内容发生变化了,设置状态为初始状态
            existFileInDb.setStatus(MachineFile.STATUS_NORMAL);
         }
         existFileInDb.setMd5(mf.getMd5());
         updateById(existFileInDb);
      }
   }
   /**
    * 物理删除文件信息
    * @param id 数据id
    */
   public void deleteById(Long id) {
      baseMapper.deleteById(id);
   }
   /**
    * 异常文件记录查询
    * @param query
    * @return
    */
   @Transactional(readOnly = true)
    public IPage<MachineFile> exceptionFilePageQuery(MachineFileExceptionQueryVO query) {
      return baseMapper.exceptionFilePageQuery(Condition.getPage(query),query);
    }
   /**
    * 修改文件名称
    * @param id 文件id
    * @param name 新名称
    */
   public void changeName(Long id, String name) throws IOException {
      MachineFile machineFile = getById(id);
      if(machineFile.getName().equals(name)) {
         return;
      }
      Machine machine = machineService.getByCode(machineFile.getMachineCode());
      String baseDir = machineDirTranslator.trans(getBasePath(machine,machineFile.getDirType()));
      String targetFilePath = baseDir + File.separator + name;
      Path filePath = Paths.get(targetFilePath);
      if(filePath.toFile().exists()) {
         throw new ServiceException("同名文件已存在:"+name);
      }
      Files.move(Paths.get(baseDir+File.separator+machineFile.getName()),filePath);
      baseMapper.deleteById(id);
   }
   public MachineFile getByNameAndMachineInDir(String name, String machineCode, String dirType) {
      Optional<MachineFile> optFIle = this.lambdaQuery().eq(MachineFile::getName, name).eq(MachineFile::getMachineCode, machineCode)
         .eq(MachineFile::getDirType, dirType).eq(MachineFile::getStatus, MachineFile.STATUS_NORMAL).oneOpt();
      return optFIle.orElse(null);
   }
}