yangys
2025-09-29 4c7296d45efe849dc70a3b2e2240c905481a91c9
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
@@ -16,6 +16,7 @@
import org.springblade.mdm.basesetting.machine.vo.MachineSaveVO;
import org.springblade.mdm.basesetting.machine.vo.MachineVO;
import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
import org.springblade.mdm.commons.service.MachineDirTranslator;
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.machinefile.filewatch.DynamicDirectoryWatcher;
@@ -35,6 +36,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Optional;
@Service
public class MachineService extends BizServiceImpl<MachineMapper, Machine> {
@@ -44,11 +46,17 @@
   private DynamicDirectoryWatcher dynamicDirectoryWatcher;
   @Autowired
   private ParamService paramService;
   @Autowired
   private MachineDirTranslator machineDirTranslator;
   @Transactional(rollbackFor = Exception.class)
   public void saveMachine(MachineSaveVO vo) throws IOException {
      checkMachine(vo);
      if(existsByCode(vo.getCode(),null)){
         throw new ServiceException("机床编码已存在:"+vo.getCode());
      }
      if(existsByEquipmentCode(vo.getEquipmentCode(),null)){
         throw new ServiceException("设备编号已存在:"+vo.getEquipmentCode());
      }
      Machine machine = new Machine();
@@ -63,16 +71,15 @@
   void makeMachineDirs(Machine machine) throws IOException {
      Path dir;
      if(StringUtils.isNotBlank(machine.getProgSendDir())){
         createDirIsNotExists(machine.getProgSendDir());
         createDirIsNotExists(machineDirTranslator.trans(machine.getProgSendDir()));
      }
      if(StringUtils.isNotBlank(machine.getProgReceiveDir())){
         createDirIsNotExists(machine.getProgReceiveDir());
      if(StringUtils.isNotBlank(machineDirTranslator.trans(machine.getProgReceiveDir()))){
         createDirIsNotExists(machineDirTranslator.trans(machine.getProgReceiveDir()));
      }
      if(StringUtils.isNotBlank(machine.getProgTempDir())){
         createDirIsNotExists(machine.getProgTempDir());
      if(StringUtils.isNotBlank(machineDirTranslator.trans(machine.getProgTempDir()))){
         createDirIsNotExists(machineDirTranslator.trans(machine.getProgTempDir()));
      }
   }
@@ -93,13 +100,17 @@
         ProgramAnnotationService annoService = SpringUtil.getBean(ProgramAnnotationService.class);
         if(StringUtils.isNotBlank(machine.getProgSendDir())) {
            String sendDir = machineDirTranslator.trans(machine.getProgSendDir());
            WatchInfo watchInfoSend = new WatchInfo();
            watchInfoSend.setMachine(machine);
            watchInfoSend.setDirType(MachineFile.DIR_TYPE_SEND);
            watchInfoSend.setPath(machine.getProgSendDir());
            watchInfoSend.setPath(sendDir);
            if(!dynamicDirectoryWatcher.containsPath(Paths.get(machine.getProgSendDir()))) {
               dynamicDirectoryWatcher.addDirectory(Paths.get(machine.getProgSendDir()),
            Path path = Paths.get(sendDir);
            if(!dynamicDirectoryWatcher.containsPath(path)) {
               dynamicDirectoryWatcher.addDirectory(path,
                  new MachineFileChangeListener(machineFileService,
                     annoService,
                     watchInfoSend));
@@ -107,12 +118,16 @@
         }
         if(StringUtils.isNotBlank(machine.getProgReceiveDir())) {
            String recDir = machineDirTranslator.trans(machine.getProgReceiveDir());
            WatchInfo watchInfoRec = new WatchInfo();
            watchInfoRec.setMachine(machine);
            watchInfoRec.setDirType(MachineFile.DIR_TYPE_REC);
            watchInfoRec.setPath(machine.getProgReceiveDir());
            if(!dynamicDirectoryWatcher.containsPath(Paths.get(machine.getProgReceiveDir()))) {
               dynamicDirectoryWatcher.addDirectory(Paths.get(machine.getProgReceiveDir()),
            watchInfoRec.setPath(recDir);
            Path path = Paths.get(recDir);
            if(!dynamicDirectoryWatcher.containsPath(path)) {
               dynamicDirectoryWatcher.addDirectory(path,
                  new MachineFileChangeListener(machineFileService,
                     annoService,
                     watchInfoRec));
@@ -120,12 +135,14 @@
         }
         if(StringUtils.isNotBlank(machine.getProgTempDir())) {
            String tempDir = machineDirTranslator.trans(machine.getProgTempDir());
            WatchInfo watchInfoTemp = new WatchInfo();
            watchInfoTemp.setMachine(machine);
            watchInfoTemp.setDirType(MachineFile.DIR_TYPE_TEMP);
            watchInfoTemp.setPath(machine.getProgTempDir());
            if(!dynamicDirectoryWatcher.containsPath(Paths.get(machine.getProgTempDir()))) {
               dynamicDirectoryWatcher.addDirectory(Paths.get(machine.getProgTempDir()),
            watchInfoTemp.setPath(tempDir);
            Path path = Paths.get(machine.getProgTempDir());
            if(!dynamicDirectoryWatcher.containsPath(path)) {
               dynamicDirectoryWatcher.addDirectory(path,
                  new MachineFileChangeListener(machineFileService,
                     annoService,
                     watchInfoTemp));
@@ -169,6 +186,17 @@
   }
   /**
    * 根据 设备编号判断机床是否存在
    * @param equipmentCode 设备编号
    * @param excludeId 排除id
    * @return 是否存在
    */
   boolean existsByEquipmentCode(String equipmentCode,Long excludeId){
      return this.lambdaQuery().eq(Machine::getEquipmentCode, equipmentCode).ne(excludeId!=null,Machine::getId, excludeId).count()>0;
   }
   /**
    * 修改机床信息
    * @param vo
    * @return
@@ -179,7 +207,9 @@
      if(existsByCode(vo.getCode(),vo.getId())){
         throw new ServiceException("机床编码已存在:"+vo.getCode());
      }
      if(existsByEquipmentCode(vo.getEquipmentCode(),vo.getId())){
         throw new ServiceException("设备编号已存在:"+vo.getEquipmentCode());
      }
      Machine machine = this.getById(vo.getId());
      Machine machineBak = new Machine();
@@ -187,6 +217,7 @@
      machine.setMachineSpec(vo.getMachineSpec());
      machine.setCode(vo.getCode());
      machine.setEquipmentCode(vo.getEquipmentCode());
      machine.setName(vo.getName());
      machine.setMachineGroupCode(vo.getMachineGroupCode());
      machine.setManufacturer(vo.getManufacturer());
@@ -335,14 +366,33 @@
    * @param sendPathLine 下发路径注释文本
    */
    public Machine getMachineBySendPathAnnotation(String sendPathLine) {
      //去掉首位括号,排除发那科机床注释
      String sendPath = escapeSqlWildcard(StringUtils.trim(StringUtils.removeEnd(StringUtils.removeStart(sendPathLine,"("),")")));
      List<Machine> machines = lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).likeLeft(Machine::getProgSendDir,sendPath).list();
      if(machines.isEmpty()){
      //路径为空,不匹配任何机器
      if(StringUtils.isBlank(sendPathLine)){
         return null;
      }else{
         return machines.get(0);
      }
      //去掉末尾括号(发那科) ,末尾路径分隔符
      String oriPath = StringUtils.removeEnd(StringUtils.removeEnd(StringUtils.removeEnd(sendPathLine,")"),"/"),"\\");
      String tempPathRepl1 = StringUtils.replace(oriPath,"/","\\");//反斜杠版本的路径
      String tempPathRepl2 = StringUtils.replace(oriPath,"\\","/");//正斜杠版本的路径
      //去掉前2位可能的注释(*-)。
      String sendPath1 = escapeSqlWildcard(StringUtils.trim(StringUtils.substring(tempPathRepl1,2)));
      String sendPath2 = escapeSqlWildcard(StringUtils.trim(StringUtils.substring(tempPathRepl2,2)));
      Optional<Machine> machineOpt = lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).and(w -> {
         w.like(Machine::getProgSendDir,sendPath1).or().like(Machine::getProgSendDir,sendPath2);
      }).last("limit 1").oneOpt();
      return machineOpt.orElse(null);
    }
   /**
    * 根据设备编号查询机床
    * @param equipmentCode 设备编号
    * @return 机床对象
    */
   public Machine getByEquipmentCode(String equipmentCode) {
      return this.lambdaQuery().eq(Machine::getEquipmentCode, equipmentCode).one();
   }
}